Erfinden Sie das Rad zunächst nicht neu. Genau dafür denyhosts
ist gedacht:
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.
Soweit ich weiß, denyhosts
ist nur für ssh
Verbindungen, aber es gibt auch so
fail2ban
ziemlich alles:
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.
Beide sind in den Repositories verfügbar:
sudo apt-get install denyhosts fail2ban
Sie können dies auch skripten, wenn Sie möchten. Etwas wie:
#!/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
Das awk
extrahiert die IPs und zählt sie und druckt nur diejenigen, die öfter erscheinen als max
hier (hier -vmax=100
ändern Sie sie entsprechend). Die IPs werden dann einer while-Schleife zugeführt, in der die entsprechende iptables
Regel ausgeführt wird.
Um dies rund um die Uhr auszuführen, würde ich einen Cronjob ausführen, der den Befehl über jede Minute oder so ausführt. Fügen Sie diese Zeile hinzu/etc/crontab
* * * * * root /path/to/script.sh