Come fornire il ritardo di accesso in ssh


11

Volevo fornire un ritardo di accesso durante l'accesso tramite ssh. Ho provato un paio di modi per fare lo stesso ma non sono riuscito a trovare il risultato desiderato.

Ho provato i passaggi forniti da un determinato link.

http://hostingfu.com/article/ssh-dictionary-attack-prevention-with-iptables

iptables -N SSH_CHECK
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j SSH_CHECK
iptables -A SSH_CHECK -m recent --set --name SSH
iptables -A SSH_CHECK -m recent --update --seconds 60 --hitcount 4 --name SSH -j DROP

Non ho un modulo pam installato sul mio computer, quindi non posso effettuare alcuna modifica relativa ai file pam

Quindi, qualsiasi corpo mi permetta di suggerire un altro modo di fare lo stesso?

Ho il kernel Linux nudo in esecuzione su piattaforma integrata.


Perché vuoi introdurre un ritardo? Qual è il tuo obiettivo finale?
un CVn il

Volevo prevenire la possibilità di attacchi di forza bruta.
Ram

3
La semplice introduzione di un ritardo su nuove connessioni non impedisce un attacco di forza bruta. È necessario esaminare gli strumenti progettati per risolvere il problema reale. Suggerirei di iniziare a guardare fail2ban, che è specificamente progettato per reagire a voci di registro ripetute eseguendo determinati comandi e viene spesso utilizzato specificamente per prevenire tentativi di forza bruta per ottenere accesso non autorizzato.
un CVn il

Va bene Michael, ma devo farlo con l'infrastruttura esistente che ho con me, come posso introdurre un ritardo ogni volta che mi connetto tramite SSH.
Ram

2
Amico, fail2banusa l'infrastruttura esatta che hai già - registri ssh e regole iptables.
Shadur,

Risposte:


11

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' Matchoperatore in sshd_config:

Match User root,foo,bar
    PasswordAuthentication no
Match User user1,user2
    PasswordAuthentication yes

Metodo n. 2 - iptables

È inoltre possibile utilizzare iptablesper 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 sshdfile 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 sshdfile 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


Grazie @slm ma ancora non riesco a installare il modulo pam e la mia autenticazione sshd non proviene da pam. Ti piacerebbe suggerire un altro modo per aggirarlo
Ram

@AmitSinghTomar - mi dispiace di aver ampliato la mia risposta. Stavo tentando di creare una risposta canonica alla tua domanda che riguardasse tutti i metodi, non solo il tuo.
slm

Grazie ancora @slm per la risposta ai dettagli, sono interessato a seguire il secondo metodo che hai suggerito. Proverai e ti farò sapere il risultato, inoltre mi farà ritardare con il primo tentativo di accesso tramite ssh?
Ram

@AmitSinghTomar - no, dovrebbe ritardare solo dopo 4 tentativi. Quando --hitcount 4viene superato, la regola buca in nero l'indirizzo IP offensivo per 60 secondi.
slm

Un punto che volevo sapere da te, per far funzionare il tuo terzo metodo (PAM), richiede che l'autenticazione ssh dovrebbe avvenire tramite pam?
Ram

3

Disabilita le password. Nessuna password, nessun attacco di forza bruta.

Puoi usare ssh-keys per accedere - che dovrebbe essere molto più sicuro e molto più difficile da hackerare.


0

Su un'installazione pulita di Ubuntu 16.04 con openssh-server, c'è già un ritardo per un tentativo di password errata di più di zero caratteri. Il ritardo sembra essere superiore a 1 secondo .

Per un tentativo di password errato di zero caratteri non c'è alcun ritardo, quindi l'attaccante determinerà immediatamente che la tua password non è la stringa vuota se non è effettivamente la stringa vuota. Poiché probabilmente la stringa vuota non è consentita come password, lo sanno già, quindi non proveranno la stringa vuota.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.