IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Apache Discussion :

Intégration dynamique d'un fichier de configuration


Sujet :

Apache

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 52
    Points : 57
    Points
    57
    Par défaut Intégration dynamique d'un fichier de configuration
    Bonjour,

    comme indiqué dans un précédent message, je maintiens sur mon serveur une liste de proxies anonymes rafraichie plusieurs fois par semaine. J'aimerais que mes utilisateurs puissent avoir le choix où non d'utiliser cette liste afin de bloquer l'accès à leur site web aux internautes utilisant ces proxies.

    J'ai beau me creuser les méninges, je n'arrive pas à trouver de solution simple pour que cette liste soit prise en compte dynamiquement (je n'ai pas envie de mettre les mains dans les Vhosts tous les quatre matins en fonction de l'humeur des webmasters).

    - J'ai pensé à un Include via .htaccess, mais ça ne semble pas marcher.
    - J'utilise suPHP et j'ai vu que le php.ini est pris en compte à chaque appel de PHP. Peut-être y-t-il quelque-chose à creuser de ce côté... mais quoi ?

    Je ne peux pas utiliser la solution d'un include(); en PHP car certains sites sont entièrement en html statique.

    Si vous avez des idées, je suis preneur de n'importe quelle piste.

    Merci d'avance !

  2. #2
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Pourquoi tu ne fais pas un Include hors VH dans ton httpd.conf et en mettant un RewriteOptions inherit dans tes VH ? En faisant ainsi, je pense que toutes les RewriteRule que tu définiras de manière globale grâce à ton include hors VH seront pris en compte dans tes VH

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 52
    Points : 57
    Points
    57
    Par défaut
    Salut,

    merci de ton aide Je ne connais pas cette méthode. Je n'ai jamais utilisé le "inherit".

    D'après toi, si je je créé un include "parent" dans le httpd.conf puis que je fais un inherit dans mes VH, alors mes utilisateurs pourront accepter ou non l'include de ce fichier via .htaccess ? Et la mise à jour des fichiers sera prise en compte sans avoir besoin de redémarrer apache ?

    Je vais voir dans la doc d'apache2 ce que donne ce "RewriteOptions inherit"

  4. #4
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    OK, autant pour moi : avec ma méthode, tous les VH tiendront compte des RewriteRule donc tout le monde refusera les proxies.

    Doit y avoir plutôt une méthode en utilisant les variables d'environnement. Je teste et je te dis.

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 52
    Points : 57
    Points
    57
    Par défaut
    Je te remercie. J'avoue mon ignorance de cette partie de la configuration d'apache.

  6. #6
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Visiblement, il y a visiblement un problème de scope pour les variables d'environnement et ça ne se propage pas comme je l'espérais.

    Ceci dit, je suis arrivé à qqch qui marche sur mon Wamp :
    • Les document roots de mes VH sont tous dans un même répertoire : C:\wamp\www\vh1 et C:\wamp\www\vh2
    • Dans C:\wamp\www, je crée un fichier .htaccess contenant mes règles de réécriture en mettant à chaque fois une condition sur une variable d'environnement :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      RewriteCond %{ENV:proxies_disallow} ^true$ [NC]
      RewriteRule ...
       
      RewriteCond %{ENV:proxies_disallow} ^true$ [NC]
      RewriteRule ...
      Il faut bien faire attention à répéter le RewriteCond à chaque fois (c'est le côté "chiant" du truc).
    • Pour activer la protection, dans le .htaccess à la racine de mon VH (C:\wamp\www\vh1 par exemple) je mets ceci :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      SetEnvIf Request_URI . proxies_disallow=true
      RewriteEngine on
      RewriteOptions inherit
      Je suis obligé de passer par un SetEnvIf car un simple SetEnv ne marche pas. Le RewriteOptions inherit est également obligatoire. C'est le côté sympa de la chose (mais à tester de manière extensive).

    A TESTER FORTEMENT.

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 52
    Points : 57
    Points
    57
    Par défaut
    Salut,

    bon, j'ai enfin un peu de temps à consacrer à mon problème (ouf !).

    Je me suis penché sur ta solution mais je ne vois pas bien où je dois placer mes adresses ip à rejeter (ou ma liste externe à inclure).

    La doc Apache ne m'a pas vraiment aidé sur ce coup-là

  8. #8
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Je ne me souviens plus trop mais il me semble que de la lecture d'un autre de tes fils de discussion, tu récupères un fichier .htaccess avec plein de règles RewriteXxx pour exclure des IP. Si c'est bien le cas, il faut que rajoute au début de chaque bloque RewriteRule un RewriteCond %{ENV:proxies_disallow} ^true$ [NC].

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 52
    Points : 57
    Points
    57
    Par défaut
    Ah ok, je comprends mieux

    Je vais essayer de réécrire le script de récupération des ip pour qu'il compile toutes les listes en un seul fichier .htaccess et qu'il insère la variable. Sinon, j'ai essayé avec ma propre ip et, effectivement, j'obtiens un 403.

    Par contre, petit imprévu : sur mes trois listes, ne contient que des hosts et non des ip, et une autre, des hosts/ip mélangés. Du coup, impossible de bannir ces proxies puisque le HostnameLookups est à off (et je ne veux pas surcharger le serveur en requêtes dns). Y'a du taff !

  10. #10
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Pour être sûr que c'est faisable, tu peux donner un extrait d'un de tes fichiers ?

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 52
    Points : 57
    Points
    57
    Par défaut
    voici des extraits pour chacun des trois fichiers (*.txt) contenus dans /var/www/proxies-listes (le /var/www n'est accessible à personne, seuls les vhosts /var/www/vh1 /var/www/vh2 etc. le sont) :

    proxies-liste01.txt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ...
    kolo-toure.info
    apple-nike.com
    vd2.info
    nb4.info
    proxyhits.org
    stripimage.com
    ...
    Mon script ajoute "deny from" devant chaque entrée. Mais je vais le remplacer par la variable.

    proxies-liste02.txt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ...
    61.142.169.98
    ns.proserv.co.jp
    ns.tcj-t.co.jp
    www.nisshin-syouji.co.jp
    202.9.136.40
    210.254.8.52
    www.qdh.or.jp
    ...
    proxies-liste03.txt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    RewriteEngine on 
    RewriteCond %{REMOTE_ADDR} ^116\.14\.182\.40$ [OR] 
    RewriteCond %{REMOTE_ADDR} ^116\.16\.89\.230$ [OR] 
    ...
    RewriteCond %{REMOTE_ADDR} ^99\.246\.245\.33$ 
    RewriteRule ^.* - [F]
    Il s'agit de la tor_blacklist du site proxy.org. Elle est livrée telle quelle pour être intégrée à un .htaccess. Du coup, j'hésite entre l'intégrer au .htaccess "master" ou la retraiter entièrement. Cela dit, j'hésite encore à l'intégrer car certaines personnes pourraient en avoir besoin. D'un autre côté, aucun site que j'héberge n'est politique ou "sensible", donc pas potentiellement censurable.

  12. #12
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Pour les listes 1 et 2, je n'ai pas essayé mais il faut essayer d'utiliser la syntaxe utiliser env=... :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    deny from kolo-toure.info env=proxies_disallow
    Pour le 3ème fichier, vu qu'il n'y a qu'un seul RewriteRule, ajoute simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteCond %{ENV:proxies_disallow} ^true$ [NC]
    en haut du fichier après le RewriteEngine on.

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 52
    Points : 57
    Points
    57
    Par défaut
    Bonsoir,

    désolé pour le délai de réponse mais j'ai des semaines très chargées et le temps est devenu une denrée rare.

    Je pense avoir trouvé une solution qui fonctionne.

    Dans les fichiers /var/www/vhostx/.htaccess, mes utilisateurs placent ce code s'ils veulent utiliser ma liste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    RewriteOptions inherit
    <filesmatch "\.(html?|jpe?g|php|gif|png|pl)$">
    order deny,allow
    deny from env=proxies_disallow
    </filesmatch>
    Je précise les types de fichier car j'ai eu quelques fois la surprise de pouvoir afficher le .htaccess dans le navigateur !

    Dans le fichier /var/www/.htaccess "master", je place ma liste (basée sur trois fichiers concaténées) sous cette forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    ...
    SetEnvIf Remote_Addr ^ip-36-018.guate.net.gt$ proxies_disallow
    SetEnvIf Remote_Addr ^200.13.199.35$ proxies_disallow
    SetEnvIf Remote_Addr ^200.135.246.2$ proxies_disallow
    SetEnvIf Remote_Addr ^ntserver1.comnt.com.br$ proxies_disallow
    ...
    RewriteEngine on 
    RewriteCond %{REMOTE_ADDR} ^116\.14\.182\.40$ [OR] 
    ...
    RewriteCond %{REMOTE_ADDR} ^99\.246\.245\.33$ 
    RewriteRule ^.* - [F]
    ...

    EDIT :

    Un seul problème persiste : pas moyen de bloquer les "hosts" tels que ntserver1.comnt.com.br car apache tourne avec la directive HostnameLookups off . D'où ma question :

    Apache peut-il bloquer un Host sans faire de résolution DNS ? Y-a-t-il un autre moyen ?

    Merci

  14. #14
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    HostnameLookups n'a d'impact que pour les logs, donc pas sur deny ou allow.

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 52
    Points : 57
    Points
    57
    Par défaut
    Ah ok, je pensais que c'était valable pour tout ce qui n'était pas une adresse IP. Je vais tester plus à fond alors.

    Merci bien

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 52
    Points : 57
    Points
    57
    Par défaut
    Re-bonjour,

    bon, visiblement, la méthode pour les hosts ne fonctionne pas avec le SetEnvIf Remote_Host malgré de multiples manipulations. Du coup, je me demande si un simple "deny from [host]" ne serait pas plus simple. D'ailleurs, ça marche lorsque je place un deny from proxad.net dans /var/www/vhost01/test/.htaccess (je suis chez Free).

    Problème : cette méthode ne fonctionne pas si je place le deny from dans le .htaccess master. Le .htaccess enfant ne semble pas hériter de la règle.

    Y-a-t-il une méthode d'héritage similaire à RewriteOptions inherit pour le deny from ?

    Merci d'avance

  17. #17
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Logiquement, il y a héritage. Si ça ne passe pas, c'est parce qu'il y a un allow from all défini à un niveau supérieur.

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 52
    Points : 57
    Points
    57
    Par défaut
    Bonjour,

    j'ai vérifié mon apache2.conf et mon httpd.conf mais je n'ai trouvé aucun "allow from all".

    Par contre, dans le fichier /var/www/vhost01/test/.htaccess j'ai effectué les tests suivant pour vérifier le bon fonctionnement (je suis chez Free avec l'hôte aaa00-0-82-245-01-01.fbx.proxad.net et l'ip 82.245.01.01)

    -1Résultat : j'obtiens une erreur 403 Forbidden. Ça fonctionne bien.

    -2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SetEnvIf Remote_Addr 82\.245\.01\.01 proxies_disallow
    <filesmatch "\.(html?|jpe?g|php|gif|png|pl)$">
    order deny,allow
    deny from env=proxies_disallow
    </filesmatch>
    Résultat : j'obtiens une erreur 403 Forbidden. Ça fonctionne bien.

    -3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SetEnvIf Remote_Host proxad\.net proxies_disallow
    <filesmatch "\.(html?|jpe?g|php|gif|png|pl)$">
    order deny,allow
    deny from env=proxies_disallow
    </filesmatch>
    Résultat : j'obtiens un code 200. Je peux accéder à la page malgré l'interdiction.

    Le résultat n°3 survient même lorsque je remplace Remote_Hot par Host, SetEnvIf par SetEnvIfNoCase, ou que je modifie proxad\.net par ^(.*)?proxad\.net$ (ou diverses manipulations de ce genre).

    Chose curieuse : la directive SetEnvIf Remote_Host ne semble pas du tout trouver le host du client alors que deny from [host] fonctionne parfaitement.
    D'ailleurs, en PHP, $_SERVER['REMOTE_HOST'] ne retourne rien, je dois utiliser gethostbyaddr($ip);


    Là, j'avoue que, malgré une lecture attentive de la doc, je commence à caler sérieusement

  19. #19
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Effectivement, dans la doc SetEnvIf, y a marqué :
    Citation Envoyé par Doc Apache
    Remote_Host - the hostname (if available) of the client making the request
    Et on ne dit pas quand "if available" est vérifié...
    Et j'avais mal lu la doc de HostnameLookups :
    Citation Envoyé par Doc Apache
    This directive enables DNS lookups so that host names can be logged (and passed to CGIs/SSIs in REMOTE_HOST).

    Donc, à moins de mettre HostnameLookups on, effectivement tu ne pourras pas utiliser SetEnvIf avec des noms d'hôtes mais seulement des IP. Désolé de cette mauvaise lecture de la doc.

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  20. #20
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 52
    Points : 57
    Points
    57
    Par défaut
    Ne te flagelle pas trop, on a tous les deux mal lu la doc

    Bon, dans ce cas, je vais juste proposer l'intégration des listes Tor et proxies IP. En ce qui concerne la résolution d'hôte, je vais tester le HostnameLookups on. Mais j'ai peur de la consommation inutile de bande passante. Je ne suis pas sûr que cette solution soit utilisable en production.

    Merci de ton aide en tout cas !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 12/10/2009, 11h28
  2. Réponses: 12
    Dernier message: 04/03/2008, 17h31
  3. Fichier de configuration dynamique
    Par Malo dans le forum Struts 1
    Réponses: 1
    Dernier message: 15/03/2007, 15h16
  4. [langage] Lire un fichier de configuration
    Par bobinoo dans le forum Langage
    Réponses: 3
    Dernier message: 04/08/2004, 15h53
  5. Les fichiers de configuration de comptes avec Samba
    Par tomnie dans le forum Réseau
    Réponses: 4
    Dernier message: 18/03/2004, 08h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo