| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente |
| serveurs:installation:web-srv:nginx [2026/09/18 10:18] – [Lutte contre les IP agressives (Robots)] jpmilcent | serveurs:installation:web-srv:nginx [2026/09/18 14:14] (Version actuelle) – [Blocage de bloc d'IP] jpmilcent |
|---|
| * Penser à recharger Nginx : ''sudo service nginx reload'' | * Penser à recharger Nginx : ''sudo service nginx reload'' |
| |
| ===== Activer les prisons Fail2ban pour Nginx ===== | |
| * Penser à décommenter les prisons liés à Nginx présentes dans le fichier : '' vi /etc/fail2ban/jail.d/defaults-debian.conf '' | ===== Problèmes et erreurs ===== |
| * Relancer //Fail2ban// : ''systemctl restart fail2ban.service'' | ==== Éviter l'erreur "bind() to 172.18.5.1:9090 failed (99: Cannot assign requested address)" ==== |
| ===== Éviter l'erreur "bind() to 172.18.5.1:9090 failed (99: Cannot assign requested address)" ===== | |
| <note info>Au redémarrage de la machine, il arrive que Docker ne soit pas complètement lancé. Cela provoque l'erreur : ''bind() to 172.18.5.1:9090 failed (99: Cannot assign requested address)'' et cela empêche Nginx de démarrer. Il faut donc le lancer manuellement : ''systemctl start nginx''. L'erreur était due au fichier ///etc/nginx/conf.d/status.conf// qui contenait une ligne '' listen 172.18.5.1:9090; ''. Cette ligne n'est finalement pas utile car il suffit d'écouter sur le port 9090 avec la commande '' listen 9090; '' les paramètres ''allow <...> ;'' suffisent à limiter l'accès. Le port est bien accessible sur 127.0.0.1 comme sur 172.18.5.1 (pour un accès dans un container Docker).</note> | <note info>Au redémarrage de la machine, il arrive que Docker ne soit pas complètement lancé. Cela provoque l'erreur : ''bind() to 172.18.5.1:9090 failed (99: Cannot assign requested address)'' et cela empêche Nginx de démarrer. Il faut donc le lancer manuellement : ''systemctl start nginx''. L'erreur était due au fichier ///etc/nginx/conf.d/status.conf// qui contenait une ligne '' listen 172.18.5.1:9090; ''. Cette ligne n'est finalement pas utile car il suffit d'écouter sur le port 9090 avec la commande '' listen 9090; '' les paramètres ''allow <...> ;'' suffisent à limiter l'accès. Le port est bien accessible sur 127.0.0.1 comme sur 172.18.5.1 (pour un accès dans un container Docker).</note> |
| * Pour éviter ce problème, nous avons modifier le fichier ///etc/nginx/conf.d/status.conf// comme indiqué précédement. Deplus, nous avons modifié le script Systemd de Nginx : ///lib/systemd/system/nginx.service// | * Pour éviter ce problème, nous avons modifier le fichier ///etc/nginx/conf.d/status.conf// comme indiqué précédement. Deplus, nous avons modifié le script Systemd de Nginx : ///lib/systemd/system/nginx.service// |
| |
| ===== Lutte contre les IP agressives (Robots) ===== | ===== Lutte contre les IP agressives (Robots) ===== |
| | |
| | ==== Activer les prisons Fail2ban pour Nginx ==== |
| | * Penser à décommenter les prisons liés à Nginx présentes dans le fichier : '' vi /etc/fail2ban/jail.d/defaults-debian.conf '' |
| | * Relancer //Fail2ban// : ''systemctl restart fail2ban.service'' |
| | |
| | ==== Extraction des IPs créant des erreurs ==== |
| | * Pour afficher les IP créant des erreurs (302|403|404|500), utiliser la commande : ''%% SEUIL=50; awk '$9 ~ /^(302|403|404|500)$/ {print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | awk -v min=$SEUIL '$1 >= min {printf "%-15s : %d erreurs\n", $2, $1}' %%'' |
| | * Vous pouvez extraire uniquement les IP avec : ''%% SEUIL=50; awk '$9 ~ /^(302|403|404|500)$/ {print $1}' /var/log/nginx/access.log | sort | uniq -c | awk -v min=$SEUIL '$1 >= min {print $2}' > ip_a_bannir.txt %%'' |
| | |
| | ==== Blocage de bloc d'IP ==== |
| * Repérer les IP qui posent problème dans les logs de Nginx : ''%% tail -f /var/log/nginx/access.log %%'' | * Repérer les IP qui posent problème dans les logs de Nginx : ''%% tail -f /var/log/nginx/access.log %%'' |
| * Créer un fichier qui bloquera les IP au niveau global de la config de Nginx : ''%% vi /etc/nginx/conf.d/blockips.conf %%'' | * Créer un fichier qui bloquera les IP au niveau global de la config de Nginx : ''%% vi /etc/nginx/conf.d/blockips.conf %%'' |
| * Souvent nous avons à faire à un bloc d'IP, il faut alors bloquer le bloc complet avec une syntaxe d'IP du type ''xxx.xxx.0.0/15'' où l'on garde uniquement les 2 premiers nombre de l'IPv4. | * Souvent nous avons à faire à un bloc d'IP, il faut alors bloquer le bloc complet avec une syntaxe d'IP du type ''xxx.xxx.0.0/15'' où l'on garde uniquement les 2 premiers nombre de l'IPv4. |
| * Ajouter le contenu suivant :<code nginx> | * Ajouter le contenu suivant :<code nginx> |
| | # IP bloqués sur le serveur |
| # Bloqué le 2026-09-18 : | # Bloqué le 2026-09-18 : |
| deny xxx.xxx.0.0/15; | deny xxx.xxx.0.0/15; |
| </code> | </code> |
| * Nginx va bloquer ces IP en renvoyant une erreur 403. Si [[serveurs:installation:fail2ban#prison_nginx-errors| la prison Fail2ban nginx-errors]] est active, les IPs seront progressivement bannies automatiquement. | * Prendre en compte la nouvelle config : ''%% nginx-reload %%'' |
| | * Nginx va bloquer ces IP en renvoyant une erreur ''HTTP 403''. Si [[serveurs:installation:fail2ban#prison_nginx-errors| la prison Fail2ban nginx-errors]] est active, les IPs seront progressivement bannies automatiquement. |