Poco tempo fa stavo stavo dando un occhiata ai miei log e mi sono subito accorto di un attacco brute force sulla porta ssh.
#tail /var/log/authlog
Dec 26 19:22:31 maxbsd sshd[12620]: Failed password for root from 218.23.105.25 port 45219 ssh2 Dec 26 19:22:31 maxbsd sshd[13293]: Received disconnect from 218.23.105.25: 11: Bye Bye Dec 26 19:22:35 maxbsd sshd[6301]: reverse mapping checking getaddrinfo for 25.105.23.218.broad.static.hf.ah.cndata.com [218.23.105.25] failed - POSSIBLE BREAK-IN ATTEMPT! Dec 26 19:22:35 maxbsd sshd[6301]: Failed password for root from 218.23.105.25 port 45474 ssh2 Dec 26 19:22:35 maxbsd sshd[2351]: Received disconnect from 218.23.105.25: 11: Bye Bye Dec 26 19:22:39 maxbsd sshd[3801]: reverse mapping checking getaddrinfo for 25.105.23.218.bro
Per eliminare questo genere di attacchi possiamo:
- Abilitare ssh in modo che dopo 3 tentativi sbagliati cada la connessione
- Inserire una regola in pf in modo che non accetti più di 3 connessioni contemporaneamente dallo stesso Ip, per poi bannarlo in una blacklist
- Creare uno script in modo che legga l’ip dell’attaccante dai log e lo inserisca nella blacklist.
Per risolvere il primo punto è sufficiente modificare il file di configurazione di ssh, sshd_config, decommentando l’opzione:
# nano /etc/ssh/sshd_config
MaxAuthTries 3Per il secondo punto è necessario definire una tabella che contenga gli ip bloccati (la nostra blacklist). Dunque editiamo il file di configurazione di pf che si trova in /etc/pf.conf:
#nano /etc/pf.conf
table persist file "/etc/spammers"Ora invece scriviamo la regola in modo che non accetti più di 3 connessioni contemporaneamente dallo stesso Ip e lo inserisca nella blacklist:
int="fxp0" ssh_limit="(max-src-conn-rate 3/30, overload flush global)" pass in log quick on $int inet proto tcp from any to $int port ssh flags S/SA keep state $ssh_limit
Infine per il terzo punto è sufficiente creare uno script, ssh_block_attack, come il seguente, in modo che legga il file di log e metta in blacklist l’indirizzo ip che ha sbagliato la password o l’username:
# nano /root/ssh_block_attack
#!/bin/sh while read mm dd hms localhostname sshd word1 word2 word3 word4 host1 host2 rest; do if [ "$word1 $word2 $word4" = "Invalid user from" ]; then data=`date` pfctl -t spammers -T add $host1 echo "Aggiunto $host1 a spammers il $data" >> /root/ssh_log elif [ "$word1 $word2 $word3 $host1" = "Failed password for from" ]; then pfctl -t spammers -T add $host2 echo "Aggiunto $host2 a spammers il $data" >> /root/ssh_log fi done
Per lanciarlo avvio dandogli in pasto il log da monitorare aggiungiamo questa riga in /etc/rc.local .
tail -f /var/log/authlog | sh ssh_block_attack &
Infine se vogliamo vedere la tabella degli ip bloccati è necessario utilizzare questo comando
pfctl -t spammers -T show
Ovviamente per non saturare la nostra macchina ogni tanto andrebbe svuotata:
pfctl -t spammers -T delete indirizzo_ip













Mai pensato all’uso di sshguard?
Funziona senza problemi ed è molto versatile. (solo una nota, sotto OBSD si deve metter il suid all’eseguibile)
…uhm sentito dire ma mai provato!
Ti ringrazio per la segnalazione.. gli darò sicuramente un’occhiata!
Ciao!
interessante, thanks :)
Nope!
Buongiorno,
interessante il discorso ssh..grazie..!!
Mi permetto di porre una domanda:
Mi collego tramite putty ad un server ubunto con openssh-server
Chiedevo se vi era la possibilità di essere autenticati tramite una chiava dal pc-client windows
Saluti
Grazie
Il Santo
Intendi senza inserire password?.. se così ti consiglio di leggere questo http://linux.html.it/articoli/leggi/1705/come-autenticarsi-in-linux-senza-password-con-le-chiavi-ssh/.
Byz
..perdonate gli errori ortografici..
sorry :d