9 votes

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

J'ai initialement posté ceci sur webmasters.stackexchange.com mais on m'a dit que j'aurais une meilleure réception ici.


Ces derniers jours, j'ai été victime de ce qui semble être une attaque DDOS (vraisemblablement involontaire). Je reçois tellement de requêtes d'un agent identifié comme "Mozilla/4.0 (compatible ; ICS)" qu'Apache consomme toute la mémoire disponible.

Par conséquent, j'aimerais bloquer toutes les demandes accompagnées de cet agent utilisateur, et 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'utilisation de deny ici. Sans avoir à l'envelopper dans un location ou directory ce qui signifie 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 je reçois

  • Redémarrage du serveur web apache2
    Erreur de syntaxe sur la ligne 4 de /etc/apache2/httpd.conf : deny not allowed ici [fail]

9voto

user3061288 Points 86

On dirait que c'est une vieille question maintenant, mais j'ai voulu faire la même chose et j'ai trouvé la réponse du nerf ci-dessus. Ce n'est pas tout à fait correct tel quel - il me semble que cela devrait être <Location "/"> et le SetEnvIf nécessite une expression régulière, les parenthèses doivent donc être citées.

Cela m'a permis d'appliquer le contrôle d'accès à tous les serveurs virtuels :

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 des serveurs virtuels.

1 votes

(Pour l'équivalent dans Apache 2.4) Faites attention à l'utilisation de <Location> puisqu'elle prévaut sur toutes les autres restrictions d'autorisation dans <Directory> à moins que vous n'ajoutiez AuthMerging And . Voir l'avertissement de sécurité concernant Require dans les documents d'Apache : httpd.apache.org/docs/2.4/mod/mod_authz_core.html#require

1 votes

BrowserMatchNoCase fonctionne également, peut-être même mieux

4voto

fukawi2 Points 5257

Mod_rewrite peut être configuré au niveau du serveur, conformément à la documentation :

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

N'oubliez pas d'échapper l'expression rationnelle dans le champ RewriteCond

1 votes

Attention : le tiret n'est pas un vrai tiret lorsqu'il est copié. J'ai essayé d'éditer, mais SF se plaint que mon édition est trop petite. Merci quand même, ça marche très bien !

0 votes

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

1voto

nerve Points 176

Pour autant que la syntaxe des lignes SetEnv soit correcte, vous devriez être en mesure de l'inclure dans la conf comme suit :

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

Cela devrait permettre de faire fonctionner le système sur tous les hôtes virtuels. Je viens de le tester sur la version 2.2.24 et il a fonctionné à merveille.

0 votes

C'est mieux dans la mesure où il n'y a pas d'erreur, mais en usurpant mon agent utilisateur, je ne suis pas refusé. Une idée de la raison pour laquelle cela pourrait être le cas ?

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X