En primer lugar, no reinventes la rueda. Eso es precisamente para lo que denyhosts
sirve:
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.
Hasta donde yo sé, denyhosts
es solo para ssh
conexiones, pero también hay
fail2ban
que lidiar con casi cualquier cosa:
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.
Ambos están disponibles en los repositorios:
sudo apt-get install denyhosts fail2ban
También puedes escribir esto, si quieres. Algo como:
#!/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
El awk
extraerá las IPs y contarlos y sólo imprimir los que aparecen más max
veces (en este caso, -vmax=100
, cambie en consecuencia). Las IP se alimentan a un ciclo while que ejecuta la iptables
regla relevante .
Para ejecutar esto las 24 horas del día, los 7 días de la semana, haría un trabajo cron que ejecuta el comando anterior cada minuto más o menos. Agregue esta línea a/etc/crontab
* * * * * root /path/to/script.sh