Prevenire gli attacchi di forza bruta contro ssh?


49

Quale strumento o tecnica usi per prevenire attacchi di forza bruta contro la tua porta ssh. Ho notato nei miei registri di sicurezza che ho milioni di tentativi di accesso come vari utenti tramite ssh.

Questo è su una scatola di FreeBSD, ma immagino che sarebbe applicabile ovunque.

Risposte:


25

Ecco un buon post sull'argomento di Rainer Wichmann.

Spiega pro e contro su questi metodi per farlo:

  • Password complesse
  • Autenticazione RSA
  • Usando 'iptables' per bloccare l'attacco
  • Utilizzo del registro sshd per bloccare gli attacchi
  • Utilizzo di tcp_wrappers per bloccare gli attacchi
  • Bussare alla porta

39

Uso fail2ban che bloccherà un IP dopo diversi tentativi falliti per un periodo di tempo configurabile.

Combina questo con i test di sicurezza delle password (usando john (John the Ripper)) per garantire che gli attacchi di forza bruta non abbiano successo.


4
Fail2ban è eccellente. È stato semplice estenderlo a monitor / var / log / maillog e farlo in modo da impedire agli spammer persistenti di colpire il mio server di posta
Dave Cheney,

Fail2ban può essere combinato con una catena iptables che invia traffico tcp alla TARPITdestinazione, se ti senti sgradevole (da xtables-addons).
Tobu,



15

Uno dei modi più semplici per evitare questi attacchi è cambiare la porta su cui sshd è in ascolto


1
Se, ovviamente, il tuo sistema lo sopporta.
C. Ross,

13
Sicurezza attraverso l'oscurità, efficace ogni volta.
Chris Ballance,

1
Non mi dispiacerebbe cambiare così tanto la porta, ma ho imparato che la maggior parte dei firewall (diversi dai miei) tendono a bloccare tutte le porte diverse da quelle comuni (80,22, 443, ecc.). Se sono dietro quei firewall, non posso accedere al mio server di casa su quella porta non standard. Per me questo è un non andare.
addolorarsi

@grieve quindi cambia il nostro firewall per far uscire quella porta?
Rory,

@Roy Sto parlando di firewall diversi da quelli che possiedo. Ad esempio, se voglio accedere alla mia macchina domestica da Starbucks, il loro firewall blocca la porta in uscita. Non posso cambiarlo. (Ho appena usato Starbucks come esempio. Non ho idea di quali porte blocchino o meno).
addolorarsi il

12

Come sottolinea Chris, utilizzare le chiavi di crittografia anziché le password.

Aggiungi a quello:

  • utilizzare una whitelist ove possibile.

Quante persone o posizioni (con IP pubblici fluttuanti) hai davvero bisogno di accedere alle tue connessioni ssh pubbliche?

A seconda del numero di host SSH pubblici che stai gestendo e della possibilità di restringere i criteri di connessione generali, potrebbe essere una configurazione più semplice, ma non modificabile, per limitare l'accesso a pochi host esterni.

Se questo funziona per te, può davvero semplificare il sovraccarico amministrativo.


2
La whitelisting è estremamente importante se stai facendo qualsiasi tipo di lista nera a meno che tu non voglia essere bloccato.
Ryaner,

2
+1 per la whitelisting proattiva.
Chris Ballance,

3
+1 per avere la risposta migliore in assoluto. Queste due cose sono gli unici passi ragionevoli e sono davvero molto efficaci. O vale la pena da solo, ed entrambi insieme di più. Boo sulle altre risposte che sostengono la sicurezza attraverso l'oscurità!
dwc,

11

Oltre agli altri buoni suggerimenti, una cosa davvero semplice da fare è la connessione in entrata con limite di velocità. Limite a 3 connessioni al minuto per IP:

iptables -A INPUT -p tcp --dport 22 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m limit --limit 3/min --limit-burst 3 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP

Potrei fraintendere qualcosa, ma molti browser mainstream si collegano tra 4-6 connessioni alla volta - anche se lo standard HTTP lo imposta su 2.
Joshua Enfield

1
Sì, sarebbe un problema se si stesse tentando di limitare la porta 80. Non ci si connette a ssh con il proprio browser Web e le sessioni ssh sono sessioni di lunga durata che mantengono lo stato, non sessioni senza stato di breve durata come http. Parallelizzare sessioni di questo tipo non ha senso. Questo non vuol dire che non ci sia un uso di nicchia di ssh che ciò si rompa, ma è raro.
Sherbang,

Questa soluzione non è così buona se, come me, stai servendo Subversion tramite ssh. Una singola query SVN può creare un gran numero di connessioni in rapida successione. Se si fornisce quel servizio, è possibile utilizzare un secondo servizio sshd su un'altra porta o autorizzare IP noti. Sto pensando di usare fail2ban o sshdfilter per catturare attacchi evidenti la prima volta, senza punire i miei utenti legittimi.
paddy

bello sapere anche questa opzione ...
ZEE

6

Utilizzare l'opzione "AllowUsers" in sshd_config per assicurarsi che solo un numero limitato di utenti possa accedere. Tutti gli altri verranno rifiutati, anche se il loro nome utente e password sono corretti.

Puoi anche limitare gli utenti agli accessi da un determinato host.

per esempio,

AllowUsers user1 user2@host.example.com

Ciò ridurrà lo spazio di ricerca ed eviterà quei vecchi utenti che sono stati accidentalmente lasciati in giro o abilitati (anche se questi ovviamente dovrebbero essere disabilitati comunque, questo è un modo semplice per impedire che vengano utilizzati per una voce basata su SSH).

Questo non ferma completamente gli attacchi di forza bruta, ma aiuta a ridurre il rischio.


3

Usa qualcosa del genere con PF:

tabella <ssh-brute>
blocco persistente nel registro rapido dall'etichetta ssh_brute
passa su $ ext_if proto tcp a ($ ext_if) porta ssh modulate state \
(max-src-conn-rate 3/10, overload flush globale)


2

Il port knocking è un modo abbastanza solido per tenere fuori questo genere di cose. Leggermente complicato, a volte fastidioso, ma sicuramente risolve il problema.


Ho provato questo e gli utenti lo trovano fastidioso. Se sono solo una o due persone, questa potrebbe essere una buona opzione e quasi eliminerebbe gli attacchi di forza bruta
Brent

2

Il contesto è importante, ma consiglierei qualcosa del genere:

  • Dato che stai usando FreeBSD, considera di eseguire il firewall PF e di utilizzare le sue solide funzionalità di limitazione della velocità di connessione. Ciò ti consentirà di inviare i bruti forzati a una lista nera se si collegano su base frequente
  • Se è necessario accedere a questa casella dal mondo esterno, prendere in considerazione l'utilizzo di una regola rdr PF per non consentire il traffico alla porta 22, ma per reindirizzare una porta oscura ad essa. Significa che devi connetterti alla porta 9122 invece che a 22. È oscuro, ma tiene lontani i knocker
  • considerare di passare solo all'autenticazione basata su chiave, rendendo inutili gli attacchi ai dizionari

2

Oltre al suggerimento di limitazione della frequenza di Sherbang , la durata del ritardo è importante. Aumentando il ritardo tra gruppi di 3 tentativi di accesso da 2 minuti a 20 minuti, il numero di diversi indirizzi IP che hanno effettuato più di tre tentativi di accesso è diminuito, confrontando due periodi di una settimana su una mia macchina, da 44 tentativi a 3 Nessuno di questi tre indirizzi ha continuato a provare per più di 11 ore.

Molto aneddotico, ma auth.log è diventato molto più leggibile per me ...


1

Non me ne importa niente. Lasciali allacciare al porto, non hanno intenzione di forzare la forza di una chiave.


-1 Hai mai sentito parlare di attacchi DoS?
Chris Ballance,

8
Sì, perché SSH è l'unico servizio suscettibile agli attacchi di forza bruta. Se hai una porta aperta su Internet, può essere utilizzata per mandare all'oblio la tua macchina. Probabilmente hai anche messo il tuo server HTTP su porte strane, e dietro il port knocking, per "evitare attacchi DoS" ...
womble

1

installa OSSEC. non solo monitora accessi ripetuti, ma inserirà un blocco temporaneo con iptables per l'IP offensivo. E alla fine ti invierà un rapporto con i dettagli. registra tutto, il che è carino. Somone una volta ha provato oltre 8000 nomi di login con cui effettuare l'accesso. ho analizzato i log e ho ottenuto un bel elenco di utenti fuori affare;)

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.