Metodo n. 1: disabilitare gli accessi con password
Se non è necessario consentire l'accesso con password, semplicemente non consentirli si otterrà l'effetto desiderato. Aggiungi semplicemente questa riga a /etc/ssh/sshd_config
:
PasswordAuthentication no
Inoltre, puoi limitare l'uso della password a determinati utenti utilizzando l' Match
operatore in sshd_config
:
Match User root,foo,bar
PasswordAuthentication no
Match User user1,user2
PasswordAuthentication yes
Metodo n. 2 - iptables
È inoltre possibile utilizzare iptables
per tenere traccia dei tentativi di accesso non riusciti e rilasciarli dopo una determinata soglia. Questo è simile al tuo esempio di hostingfu ma è più facile da capire.
$ sudo iptables -I INPUT -p tcp --dport <YOUR PORT HERE> -i eth0 -m state --state NEW -m recent --set
$ sudo iptables -I INPUT -p tcp --dport <YOUR PORT HERE> -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP
NOTA: la prima riga crea fondamentalmente una regola che si applica solo ai pacchetti utilizzati per i nuovi tentativi di connessione sulla porta ssh. La seconda riga dice che se ci sono più di 4 tentativi da un IP entro 60 secondi, allora tutto il traffico proveniente da quell'IP dovrebbe essere oscurato. Questa soluzione non importa se i tentativi su diversi account utente.
Metodo n. 3: utilizzare PAM
Mi rendo conto che hai detto che non hai PAM disponibile, ma se lo hai fatto, è così che potresti ritardare i tentativi di accesso falliti. Se la tua intenzione è semplicemente quella di ritardare gli errori di accesso a ssh, puoi utilizzare il modulo PAM pam_faildelay
. Questo modulo PAM è generalmente incluso con il mix predefinito.
Sul mio sistema Fedora 19 fa parte dell'installazione predefinita.
Esempio
Cerca i file relativi a pam_faildelay
.
$ locate pam|grep -i delay
/usr/lib/security/pam_faildelay.so
/usr/lib64/security/pam_faildelay.so
/usr/share/doc/pam-1.1.6/html/sag-pam_faildelay.html
/usr/share/doc/pam-1.1.6/txts/README.pam_faildelay
/usr/share/man/man8/pam_faildelay.8.gz
Guarda quali RPM sono forniti da:
$ rpm -qf /usr/share/man/man8/pam_faildelay.8.gz
pam-1.1.6-12.fc19.x86_64
pam-1.1.6-12.fc19.i686
uso
Per creare un ritardo in caso di errore, aggiungi semplicemente una riga come questa al tuo sshd
file di configurazione pam. Anche in questo caso il / CentOS / RHEL sistemi Fedora questo file si trova qui: /etc/pam.d/sshd
.
Per creare un ritardo di 10 secondi:
auth optional pam_faildelay.so delay=10000000
Un ritardo di 60 secondi:
auth optional pam_faildelay.so delay=60000000
Esempio
Con un ritardo di 20 secondi utilizzando il metodo sopra, ho modificato il mio sshd
file di configurazione PAM in questo modo:
#%PAM-1.0
auth required pam_sepermit.so
auth substack password-auth
auth include postlogin
auth optional pam_faildelay.so delay=20000000
account required pam_nologin.so
account include password-auth
password include password-auth
# pam_selinux.so close should be the first session rule
session required pam_selinux.so close
session required pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session required pam_selinux.so open env_params
session optional pam_keyinit.so force revoke
session include password-auth
session include postlogin
Ora quando accedo:
$ date
Tue Dec 17 09:16:30 EST 2013
$ ssh blah@localhost
blah@localhost's password:
Permission denied, please try again.
blah@localhost's password:
...Control + C....
$ date
Tue Dec 17 09:16:50 EST 2013
Riferimenti