Tout d'abord, ne réinventez pas la roue. C'est précisément ce que denyhosts
est destiné à :
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
ne concerne que les ssh
mais il y a aussi fail2ban
qui traite d'à peu près tout :
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 dépôts :
sudo apt-get install denyhosts fail2ban
Vous pouvez également script ceci, 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
En awk
extraira les adresses IP, les comptera et n'imprimera que celles qui apparaissent plus d'une fois. max
fois (ici, -vmax=100
le modifier en conséquence). Les adresses IP sont ensuite introduites dans une boucle "while" qui exécute la fonction iptables
règle.
Pour faire fonctionner ce système 24 heures sur 24 et 7 jours sur 7, je créerais un cronjob qui exécuterait la commande ci-dessus toutes les minutes environ. Ajoutez cette ligne à /etc/crontab
* * * * * root /path/to/script.sh