Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

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 [2023/08/03 13:47] – [Ajouter le support de GeoIp] jpmilcentserveurs:installation:web-srv:nginx [2026/09/18 14:14] (Version actuelle) – [Blocage de bloc d'IP] jpmilcent
Ligne 144: Ligne 144:
     * 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//
Ligne 169: Ligne 168:
   * Redémarrer la machine, attendre son redémarrage, s'y reconnecter et s'assurer que Nginx est bien démarré : '' systemctl status nginx ''   * Redémarrer la machine, attendre son redémarrage, s'y reconnecter et s'assurer que Nginx est bien démarré : '' systemctl status nginx ''
  
-===== Création d'un certificat SSL avec Certbot =====+===== Certbot ===== 
 +==== Création d'un certificat SSL avec Certbot ====
 D'une manière générale la démarche à suivre pour créer un certificat SSL chez Letsencrypt à l'aide de Certbot : D'une manière générale la démarche à suivre pour créer un certificat SSL chez Letsencrypt à l'aide de Certbot :
   * Installer un certificat SSL via Certbot (Letsencrypt) : ''<nowiki> certbot --nginx -d <domaine-principal> -d <alias-du-domaine-principal> </nowiki>''   * Installer un certificat SSL via Certbot (Letsencrypt) : ''<nowiki> certbot --nginx -d <domaine-principal> -d <alias-du-domaine-principal> </nowiki>''
Ligne 229: Ligne 229:
 </code> </code>
  
-===== Suppression d'un certificat SSL avec Certbot ===== +==== Suppression d'un certificat SSL avec Certbot ==== 
-Si vous souhaitez supprimer une certificat SSL créé par l'intermédiaire de Certbot, utiliser la commande : ''<nowiki> sudo certbot delete --cert-name <domaine>.<ext> </nowiki>''+Si vous souhaitez supprimer une certificat SSL créé par l'intermédiaire de Certbot, utiliser la commande : ''%% sudo certbot delete --cert-name <domaine>.<ext> %%''
  
 +===== 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 %%''
 +  * 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.
 +    * Ajouter le contenu suivant :<code nginx>
 +# IP bloqués sur le serveur
 +# Bloqué le 2026-09-18 :
 +deny xxx.xxx.0.0/15;
 +</code>
 +  * 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.
  • serveurs/installation/web-srv/nginx.1691070427.txt.gz
  • Dernière modification : 2023/08/03 13:47
  • de jpmilcent