Nginx ConnWatch
Script de surveillance Linux pour détecter une montée anormale des connexions sur 443 (ESTABLISHED, top IP, seuils), avec logs et alertes e-mail optionnelles.
- Mesure toutes les
Xsecondes : total TCP sur443,ESTABLISHED,SYN-RECV,TIME-WAIT. - Calcule le Top IP (IP qui maintiennent le plus de connexions).
- Écrit un log structuré (timestamp + métriques).
- Déclenche des alertes sur seuils (anti-spam : cooldown).
- Optionnel : envoi e-mail via
mailousendmail.
- Linux (Ubuntu/Debian recommandé)
iproute2(commandess)- Accès root (lecture socket + écriture logs)
- Optionnel :
screenousystemd - Optionnel :
mailutilspour alertes e-mail
Chemins par défaut (recommandés) :
/usr/local/bin/nginx_connwatch.sh/var/log/nginx-connwatch.log/var/lib/nginx-connwatch/Installation simple : copier le script, rendre exécutable, créer le dossier state.
cd /tmp
curl -L -O https://www.ideo-lab.com/static/toolbox/nginx_connwatch.shsudo mv /tmp/nginx_connwatch.sh /usr/local/bin/nginx_connwatch.sh
sudo chmod +x /usr/local/bin/nginx_connwatch.sh
sudo mkdir -p /var/lib/nginx-connwatchls -l /usr/local/bin/nginx_connwatch.sh doit afficher le bit exécutable.Idéal pour tester et valider les seuils sur une courte période.
sudo /usr/local/bin/nginx_connwatch.shsudo tail -f /var/log/nginx-connwatch.logLancement automatique au boot + redémarrage auto en cas de crash.
[Unit]
Description=Nginx connection watcher
After=network.target
[Service]
Type=simple
Environment=MAIL_TO=
ExecStart=/usr/local/bin/nginx_connwatch.sh
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.targetsudo systemctl daemon-reload
sudo systemctl enable --now nginx-connwatch.service
sudo systemctl status nginx-connwatch.service --no-pagersudo journalctl -u nginx-connwatch.service -f/var/log/nginx-connwatch.log. Le journal systemd sert au diagnostic du service.Deux options : mail (mailutils) ou sendmail. L’alerte s’envoie uniquement si MAIL_TO est défini.
sudo apt-get update
sudo apt-get install -y mailutilsMéthode propre : surcharger uniquement la variable MAIL_TO via un override systemd.
sudo systemctl edit nginx-connwatch.service[Service]
Environment=MAIL_TO=ton.email@domaine.tldsudo systemctl daemon-reload
sudo systemctl restart nginx-connwatch.serviceLes seuils sont définis en haut du script. Vous pouvez ajuster selon votre trafic réel.
INTERVAL: fréquence de mesure (ex. 30 secondes)THRESH_TOTAL: alerte si connexions total > seuilTHRESH_ESTAB: alerte siESTABLISHED> seuilTHRESH_TOPIP: alerte si une IP conserve > seuil connexionsLOG: chemin du log (par défaut/var/log/nginx-connwatch.log)STATE: dossier de cooldown anti-spam (par défaut/var/lib/nginx-connwatch)
sudo nano /usr/local/bin/nginx_connwatch.shsudo systemctl restart nginx-connwatch.servicePoints fréquents : permissions, commandes absentes, logs Nginx non lisibles, e-mail non configuré.
- Vérifier le droit exécutable :
ls -l /usr/local/bin/nginx_connwatch.sh - Vérifier
ss:ss -h(sinon installeriproute2) - Vérifier systemd :
sudo systemctl status nginx-connwatch.service
- Vérifier :
sudo touch /var/log/nginx-connwatch.log - Relancer en root :
sudo /usr/local/bin/nginx_connwatch.sh
- Tester :
echo test | mail -s "test" ton.email@domaine.tld - Vérifier que
MAIL_TOest défini dans le service systemd - Configurer Postfix/SMTP si nécessaire (selon votre politique infra)
