Remotezugänge zu Clients und PCs sind ein beliebtes Angriffsziel.
Bei Linux nennt man diesen SSH und läuft standardmässig auf Port 22.
Wenn man Diesen nicht ändern möchte, fallen einem schnell mehrere fehlerhafte Logins von Bruteforce Angriffen ins Auge.
Ich entschied mich, den Server mit iptables abzusichern (Linux Firewall).
Folgende Rules sorgen dafür, das ein User maximal 3 Mal ein falsches Passwort eingeben kann und danach vor verschlossener Türe steht:
iptables -N SSH_WHITELIST
iptables -A INPUT -p tcp ––dport 22 -m state ––state NEW -m recent ––set ––name SSH
iptables -A INPUT -p tcp ––dport 22 -m state ––state NEW -j SSH_WHITELIST
iptables -A INPUT -p tcp ––dport 22 -m state ––state NEW -m recent ––update ––seconds 60 ––hitcount 4 ––rttl ––name SSH -j ULOG ––ulog-prefix SSH_brute_force
iptables -A INPUT -p tcp ––dport 22 -m state ––state NEW -m recent ––update ––seconds 60 ––hitcount 4 ––rttl ––name SSH -j DROP
Mit folgendem Befehl kann man eine IP / Host auf die Whitelist setzen:
iptables -A SSH_WHITELIST -s DEINEIP -m recent ––remove ––name SSH -j ACCEPT
Wer gleich die Attaker komplett sperren möchte, kann dies mit folgendem Script tun:
#!/bin/bash
iptables ––flushiptables -N SSH_WHITELIST
iptables -A SSH_WHITELIST -s DEINEIP -m recent ––remove ––name SSH -j ACCEPT
iptables -A INPUT -p tcp ––dport 22 -m state ––state NEW -m recent ––set ––name SSH
iptables -A INPUT -p tcp ––dport 22 -m state ––state NEW -j SSH_WHITELIST
iptables -A INPUT -p tcp ––dport 22 -m state ––state NEW -m recent ––update ––seconds 60 ––hitcount 4 ––rttl ––name SSH -j ULOG ––ulog-prefix SSH_brute_force
iptables -A INPUT -p tcp ––dport 22 -m state ––state NEW -m recent ––update ––seconds 60 ––hitcount 4 ––rttl ––name SSH -j DROPssh_line=/tmp/ssh_line
touch $ssh_line
all_ip=/tmp/blacklist
touch $all_ip
merge_ip=/tmp/blackmerge
touch $merge_ip
black_ip=/var/log/blacklist
touch $black_ip
grep SSH-Bruteforce /var/log/syslog > $ssh_line
cut -d = -f 5 $ssh_line | cut -d \ -f 1 | sort | uniq > $all_ip
echo -n „“ > $merge_ip
cat $all_ip | sort | uniq > $merge_ip
cat $black_ip | sort | uniq >> $merge_ip
cat $merge_ip | sort | uniq > $black_ip
file=`cat $black_ip`
for ip in $file; do
iptables -I INPUT $rules -s $ip -j DROP
echo “ $ip banned“
done
Download: sshcheck.sh
Dieses Script als Cronjob all Minute aufrufen und iptables freut sich über die Blocking rules.
Vieleicht liegts nur am Blog der was verschluckt, aber vor Parameter wie „dport“ gehören natürlich zwei „-“ damit das Ganze auch funktioniert :)
Liebe Grüße
Wanja
Stimmt, da gehörten noch viel mehr Doppelte Bindestriche hin…
Der Blog hat die verschluckt, ich zwinge es ihm nun auf, danke für die Info.