Comment puis-je bloquer un agent utilisateur de tous les sites de mon serveur?


9

À l'origine, j'ai publié cet article sur webmasters.stackexchange.com , mais on m'a dit que j'aurais une meilleure réception ici.


Depuis quelques jours, je souffre de ce qui semble être une attaque DDOS (probablement par inadvertance). J'ai reçu tellement de demandes d'un agent s'identifiant comme "Mozilla / 4.0 (compatible; ICS)" qu'apache mange à travers toute la mémoire disponible.

Par conséquent, je voudrais bloquer toutes les demandes accompagnées de cet agent utilisateur, j'ai donc essayé de le faire dans httpd.conf:

SetEnvIfNoCase User-Agent "Mozilla/4.0 (compatible; ICS)" bad_user
Deny from env=bad_user

Mais quand je redémarre apache, il se plaint de l'utiliser denyici. Sans avoir à l'envelopper dans un bloc locationou directory, ce qui signifierait que je devrais ajouter un nouveau bloc pour chaque site, existe-t-il un moyen de refuser l'accès à l'ensemble du serveur?


MISE À JOUR: L'erreur que j'obtiens

  • Redémarrage du serveur Web apache2
    Erreur de syntaxe sur la ligne 4 de /etc/apache2/httpd.conf: refus non autorisé ici [échec]

Réponses:


7

Cela ressemble à une vieille question maintenant, mais je voulais faire de même et j'ai trouvé la réponse de nerf ci-dessus. Ce n'est pas tout à fait vrai comme ça - il me semble que cela devrait être le cas <Location "/">, et il SetEnvIffaut une expression régulière, donc les parenthèses doivent être citées.

Cela a fonctionné pour moi d'appliquer le contrôle d'accès à tous les vhosts:

SetEnvIfNoCase User-Agent "^Mozilla/4.0 \(compatible; Synapse\)" bad_ua
<Location "/">
    Deny from env=bad_ua
</Location>

Il suffit de l'inclure avant les définitions de vhost.


(Pour l'équivalent dans Apache 2.4) Soyez prudent en l'utilisant <Location>car il remplace toutes les autres restrictions d'autorisation dans <Directory>, sauf si vous ajoutez AuthMerging And. Voir l'avertissement de sécurité sur Requiredans les documents apache: httpd.apache.org/docs/2.4/mod/mod_authz_core.html#require
Cedric Knight

4

mod_rewrite peut être configuré au niveau du serveur selon les documents:

RewriteCond %{HTTP_USER_AGENT} "Mozilla/4\.0 \(compatible; ICS\)" [nocase]
RewriteRule ^.*$ - [forbidden,last]

N'oubliez pas d'échapper aux regex dans le RewriteCond


1
Attention: le tiret n'est pas un vrai tiret une fois copié. J'ai essayé le montage, mais SF se plaindra que mon montage est trop petit. Merci quand même, ça fait plaisir!
Thibaut Barrère

@ ThibautBarrère si vous en avez vraiment besoin, vous pouvez contourner la petite limite d'édition en ajoutant un invisible <!-- -->à l'édition
hanshenrik

1

Pourvu que la syntaxe sur les lignes SetEnv soit correcte, vous devriez être capable de jeter cela dans la conf comme ceci:

<Location *>
SetEnvIfNoCase User-Agent "Mozilla/4.0 (compatible; ICS)" bad_user
Deny from env=bad_user
</Location>

Devrait permettre que cela fonctionne sur tous les hôtes virtuels - vient d'être testé sur 2.2.24, a fonctionné comme un charme.


C'est mieux car il n'y a pas d'erreurs, mais en usurpant mon agent utilisateur, je ne suis pas refusé. Une idée pourquoi cela pourrait être?
Tom Wright
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.