Tout d'abord, ne réinventez pas la roue. C'est précisément à cela que denyhosts
sert:
DenyHosts is a python program that automatically blocks ssh attacks by
adding entries to /etc/hosts.deny. DenyHosts will also inform Linux
administrators about offending hosts, attacked users and suspicious
logins.
Pour autant que je sache, denyhosts
c'est uniquement pour les ssh
connexions mais il y a aussi
fail2ban
qui traite à peu près n'importe quoi:
Fail2Ban consists of a client, server and configuration files to limit
brute force authentication attempts.
The server program fail2ban-server is responsible for monitoring log
files and issuing ban/unban commands. It gets configured through a
simple protocol by fail2ban-client, which can also read configuration
files and issue corresponding configuration commands to the server.
Les deux sont disponibles dans les référentiels:
sudo apt-get install denyhosts fail2ban
Vous pouvez également l'écrire si vous le souhaitez. Quelque chose comme:
#!/usr/bin/env sh
netstat -an |
awk -vmax=100 '/tcp/{split($5,a,":"); if(a[1] > 0 && a[1]!="0.0.0.0"){c[a[1]]++}}
END{for(ip in c){if(c[ip]>max){print ip}}}' |
while read ip; do iptables -I INPUT 1 -s "$ip" -j DROP; done
Le awk
va extraire les adresses IP et les compter et imprimer uniquement celles qui apparaissent plusieurs max
fois (ici -vmax=100
, modifiez-les en conséquence). Les adresses IP sont ensuite introduites dans une boucle while qui exécute la iptables
règle appropriée .
Pour exécuter ce 24/7, je ferais un cronjob qui exécute la commande ci-dessus toutes les minutes environ. Ajoutez cette ligne à/etc/crontab
* * * * * root /path/to/script.sh