1 votes

Atténuation de la bombe 404 avec Nginx

Je suis frappé par des requêtes 404 et cela fait tomber ma machine. Presque toutes mes pages sont en cache http et j'ai une protection Dos de base avec

limit_conn_zone $http_x_forwarded_for zone=addr:10m;
limit_conn addr 8;

limit_req_zone $http_x_forwarded_for zone=one:10m rate=2r/s;
limit_req zone=one burst=50;

client_body_timeout 5s;
client_header_timeout 5s;
send_timeout 10s;

Que puis-je faire pour prévenir ces attaques 404 en plus de ce qui précède ?

0 votes

Utilisez fail2ban. J'utilise fail2ban avec CloudFlare Ainsi, une fois qu'une IP est enregistrée comme mauvaise, elle ne peut même pas contacter mon serveur.

0 votes

Est-ce qu'il y a un moyen d'associer de façon programmatique les IPs en défaut de nginx à fail2ban ?

0 votes

Je ne sais pas. En général, fail2ban surveille les journaux, et s'il voit des schémas de requêtes qui correspondent aux schémas que vous avez définis, il empêche l'établissement de connexions de cette IP vers votre serveur. Le lien que j'ai partagé va plus loin, et les arrête au niveau du CDN. Pour que cela fonctionne, vous devez accepter uniquement les connexions de votre CDN, ce que je fais avec les groupes de sécurité AWS.

4voto

Leo Points 1833

Après le réglage limit_reqlimit_conn sur nginx les avez-vous activés dans le serveur virtuel ? Comme dans :

server {
    # ...
    location / {
        limit_req zone=one;
        limit_conn addr 10;

    # ...
    }
}

De plus, fail2ban est un analyseur de journaux pour la création automatique de règles dynamiques dans le pare-feu (iptables). Vous pouvez créer un filtre et une action dans fail2ban qui filtre l'IP d'origine des 404 et les bloque après un certain nombre de tentatives, ou vous pouvez filtrer les journaux limit_req et limit_conn afin de bannir ces IP à la place (le blocage de l'IP des clients 404 peut entraîner des blocages indésirables).

vim /etc/fail2ban/jail.d/nginx.conf

Copie ça :

[nginx-req-limit]

enabled = true
filter = nginx-req-limit
action = iptables-multiport[name=ReqLimit, port="http,https", protocol=tcp]
logpath = /var/log/nginx/*error.log
findtime = 600
bantime = 7200
maxretry = 10
  • findtime est le temps en secondes pour les occurrences en maxretry Dans ce cas, il se déclencherait après 10 événements en 10 minutes (600 secondes).
  • bantime est le temps nécessaire pour mettre l'IP sur liste noire dans le pare-feu. Également en secondes. Dans ce cas, il bloquerait l'IP incriminée pendant 2 heures (7200 secondes).
  • logpath est le journal d'erreurs que vous avez configuré pour votre virtualhost dans nginx .

Assurez-vous que jail.conf comprend le jail.d/*.conf et redémarrez le service :

service fail2ban restart

Cela devrait vous aider à éviter les attaques DDoS.

Une autre option à considérer est l'utilisation d'un CDN, comme indiqué dans le commentaire ci-dessus. Cloudflare dispose d'une version gratuite qui peut être d'une grande aide. Elle comporte un pare-feu pour les applications Web qui bloque certains des mauvais robots et autres. Les versions pro/professionnelles offrent plus d'options, mais sont payantes.

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