Prevent SSH Attacks
Ciao a tutti!
Pubblico questo articolo che ho trovato navigando sul Flocca’s blog, che potrebbe interessare molti amministratori di sistema e della sicurezza. Non si tratta di un tutorial completo per essere al sicuro da attacchi informatici, bensì di alcune dritte che credo siano da tener presenti per la messa in sicurezza di un sistema informatico realizzato con Linux.
Technorati Tags: ssh, tutorial, sicurezza, linux, attacco, attacks, flocca, blog, space, space4tutorial
Livello: medio
Per chi ha una macchina linux (o unix) raggiungibile tramite IP pubblico, non è raro trovare ogni giorno nei log centinaia di linee simili a queste:
May 14 22:23:58 mail sshd[13482]: Illegal user test1 from ::ffff:222.122.142.x
May 14 22:24:01 mail sshd[13484]: Illegal user test1 from ::ffff:222.122.142.x
May 14 22:24:04 mail sshd[13486]: Illegal user test1 from ::ffff:222.122.142.x
May 14 22:24:08 mail sshd[13488]: Illegal user test1 from ::ffff:222.122.142.x
May 14 22:24:10 mail sshd[13490]: Illegal user test1 from ::ffff:222.122.142.x
May 14 22:24:14 mail sshd[13492]: Illegal user test1 from ::ffff:222.122.142.x
Questo è evidentemente un segnale che è in corso un attacco automatizzato tramite il metodo “forza bruta” o a dizionario al quale sshd, se aggiornato, configurato correttamente e se le password degli utenti che hanno accesso al sistema sono sicure, di norma reagisce bene. I messaggi nei log però rimangono e li rendono meno leggibili e più pesanti.
In questo post, presenterò alcune soluzioni che possono aiutare a rendere sshd più sicuro e ad evitare che i log si riempiano di questa robaccia.
Cambiare la porta di default
La porta standard su cui sshd si mette normalmente in ascolto, è la 22 (TCP). Appare perciò ovvio che cambiando questa porta, sostituendola con una > 1024, sarà più difficile per un malintenzionato capire se un server è accessibile tramite ssh (buona parte degli script kiddies in questo modo saranno tagliati fuori).
Per cambiare questa porta, è sufficiente modificare l’opzione…
Port 22
…nel file di configurazione /etc/ssh/sshd_config e riavviare sshd.
Limitazione degli utenti che possono accedere
Un’altra buona pratica, è quella di limitare l’accesso via ssh esclusivamente agli utenti per cui è strettamente necessario. Intanto disabilitiamo l’accesso tramite root con questa opzione:
PermitRootLogin no
Da ora in poi chi vorrà eseguire i comandi con i privilegi di root, dovrà utilizzare su o sudo. A questo punto possiamo specificare quali utenti possono accedere:
AllowUsers pippo gino
Volendo si può abilitare all’accesso un intero gruppo di utenti tramite l’opzione…
AllowGroups staff
In questo caso vanno aggiunti gli utenti al gruppo staff modificando /etc/group in questo modo:
staff:x:50:pippo,gino
Sfruttare il modulo limit di iptables
Un altro metodo molto semplice per limitare i tentativi di accesso tramite ssh, infine, è quello di sfruttare il modulo limit di iptables. Questa è la soluzione che utilizzo di solito io assieme alle limitazioni sugli utenti di cui vi ho appena parlato. Non mi addentrerò nella configurazione completa di iptables, ma vi farò solo un esempio di come utilizzarlo:
/sbin/iptables -A INPUT -p tcp --dport 22 -m limit --limit 1/min --limit-burst 3 -j ACCEPT
Con la policy di default impostata a DROP (tramite /sbin/iptables -P INPUT DROP), questa regola limiterà gli accessi ad uno per minuto dopo averne accettati 3 nel primo. Questo di solito e sufficiente per mandare in timeout gli script dei malintenzionati.
Altre soluzioni
Di sicuro questo non vuole essere un post esaustivo di tutte le possibili soluzioni… diciamo che queste sono le più utilizzate e le più rapide da implementare. Ho omesso volutamente la questione dell’accesso tramite chiave pubblica perché ho intenzione di dedicargli un post intero prossimamente… e magari vi parlerò anche del Port Knocking. Stay tuned!
Fonte: Il Flocca’s blog – link http://blog.flocca.com/?p=14











ottobre 6th, 2007 at 23:01
Spero che nessuno applichi quella regola perche’ non e’ esatta
ottobre 6th, 2007 at 23:44
Ciao, Leonardo, potresti dire perché non è esatta?
SPACE 4 TUTORIAL è un blog finalizzato al miglioramento continuo delle nostre conoscenze e se in queste pagine viene scritto qualcosa di non esatto, ogni suggerimento e/o correzione è ben accolto/a
ottobre 7th, 2007 at 12:35
ATTENZIONE: Leonardo mi ha fatto notare un’inesattezza dell’articolo, che più che un errore, consiste in una mancata precisazione.
I pacchetti relativi alle connessioni già stabilite dovrebbero essere preliminarmente consentiti, con la regola seguente:
# iptables -A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT
gennaio 12th, 2009 at 20:41
anche l’ultimo comando contiene un’imprecisione… quello giusto, testato su ubuntu 8.04 è:
$ sudo iptables -A INPUT -m state –state RELATED, ESTABLISHED -j ACCEPT
(in pratica mancava il secondo – prima di -state)
agosto 23rd, 2009 at 09:07
Вообще, на мой взгляд, самое лучшее в личном блоге, так это самопознание.