Come fermare / prevenire SSH bruteforce [chiuso]


22

Sono molto nuovo nell'amministrazione della rete, quindi ti preghiamo di considerare che non sono ancora così esperto.

Ho un server root Ubuntu con pannello Plesk.

Ieri i miei amici e ho notato che la qualità del discorso sul nostro TS3 è peggiorata. Ho inviato alcuni ping al server e si è verificata una perdita di pacchetti molto elevata. Dopo quello ho cercato su google e ho scoperto che esiste un auth.log. L'ho scaricato e fatto scorrere un po ', poi ho trovato questo:

May 13 10:01:27 rs204941 sshd[9351]: input_userauth_request: invalid user student [preauth]
May 13 10:01:27 rs204941 sshd[9351]: pam_unix(sshd:auth): check pass; user unknown
May 13 10:01:27 rs204941 sshd[9351]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=112.220.198.102 
May 13 10:01:29 rs204941 sshd[9351]: Failed password for invalid user student from 112.220.198.102 port 39806 ssh2
May 13 10:01:29 rs204941 sshd[9351]: Received disconnect from 112.220.198.102: 11: Bye Bye [preauth]
May 13 10:01:31 rs204941 sshd[9353]: Invalid user student from 112.220.198.102

Sembra che qualcuno abbia tentato di accedere più volte a SSH. Ho girato un po 'intorno e ho visto che questo qualcuno cerca di usare molti nomi utente diversi:student, tech, psi, news,...

Centinaia di questi accessi sono stati visualizzati nel file.

Ho cercato le statistiche del traffico sul sito Web del mio datacenter. Era solo a 17 MB all'ora. Ho una dorsale da 100Mbit, quindi il trasferimento dei dati non sembra essere il problema.

Al momento non riesco ad accedere al server in alcun modo.

La mia domanda è: come posso accedere di nuovo, come posso sopprimere questo attacco e prevenire i seguenti attacchi?


Sto ancora imparando la mia roba in questo dipartimento .... Ma non sarebbe un buon uso per i portieri?
mjrider,


Risposte:


37

Come ottenere l'accesso?

Non è chiaro il motivo per cui non puoi accedere al tuo account.

Se la macchina è sotto attacco o carico elevato, è necessario parlare con il proprio fornitore della limitazione dell'accesso (Restrizioni IP) o della disattivazione del server (disconnessione da Internet).

Potresti anche richiedere un accesso fuori banda che il tuo provider potrebbe essere in grado di aiutarti.

Se qualcuno ha compromesso il tuo server, potrebbe essere necessario ripristinare dai backup o utilizzare un'immagine di ripristino.

Come prevenire gli attacchi al tuo server, in particolare SSH

modo migliore per impedire accessi a forza bruta?

Non lasciare che arrivino alla tua macchina in primo luogo! Esistono molti modi per fermare i tentativi di forza bruta prima che arrivino al tuo host, o anche a livello di SSH.

Detto questo, proteggere il tuo sistema operativo con qualcosa come fail2ban è un'ottima idea. http://en.wikipedia.org/wiki/Fail2ban

Fail2ban è simile a DenyHosts ... ma a differenza di DenyHosts che si concentra su SSH, fail2ban può essere configurato per monitorare qualsiasi servizio che scrive i tentativi di accesso in un file di registro e invece di utilizzare /etc/hosts.deny solo per bloccare indirizzi IP / host , fail2ban può usare Netfilter / iptables e TCP Wrappers /etc/hosts.deny.

Esistono diverse importanti tecniche di sicurezza che dovresti prendere in considerazione per prevenire accessi a forza bruta:

SSH:

  • Non consentire l'accesso di root
  • Non consentire password ssh (utilizzare l'autenticazione con chiave privata)
  • Non ascoltare su ogni interfaccia
  • Crea un'interfaccia di rete per SSH (ad es. Eth1), che è diversa dall'interfaccia da cui servi le richieste (ad es. Eth0)
  • Non utilizzare nomi utente comuni
  • Utilizzare un elenco di consenti e consentire solo agli utenti che richiedono l'accesso SSH
  • Se è necessario l'accesso a Internet ... Limitare l'accesso a un set limitato di IP. Un IP statico è l'ideale, tuttavia bloccarlo su xx0.0 / 16 è migliore di 0.0.0.0/0
  • Se possibile, trovare un modo per connettersi senza accesso a Internet, in questo modo è possibile negare tutto il traffico Internet per SSH (ad es. Con AWS è possibile ottenere una connessione diretta che ignora Internet, si chiama Direct Connect)
  • Utilizzare software come fail2ban per catturare eventuali attacchi di forza bruta
  • Assicurati che il sistema operativo sia sempre aggiornato, in particolare i pacchetti di sicurezza e ssh

Applicazione:

  • Assicurati che la tua applicazione sia sempre aggiornata, in particolare i pacchetti di sicurezza
  • Blocca le pagine 'admin' dell'applicazione. Molti dei consigli di cui sopra si applicano anche all'area di amministrazione dell'applicazione.
  • Proteggi con password la tua area di amministrazione, qualcosa come htpasswd per console web proietterà eventuali vulnerabilità delle applicazioni sottostanti e creerà una barriera aggiuntiva all'ingresso
  • Blocca le autorizzazioni dei file. Le "cartelle di caricamento" sono note per essere punti di accesso a tutti i tipi di cose brutte.
  • Prendi in considerazione l'idea di mettere la tua applicazione dietro una rete privata e di esporre solo il bilanciamento del carico front-end e un jumpbox (questa è una configurazione tipica in AWS che utilizza VPC)

1
Ho installato Fail2ban tramite help.ubuntu.com/community/Fail2ban Sembra essere molto potente e facile da usare (notifiche di posta, ...)

Ho ricevuto un messaggio dal mio datacenter: c'è stato un attacco (che cos'è?) E questo ha reso la connessione molto brutta per molti server. In particolare, non è stato un attacco al mio server.


1
Interessante. Quindi sembra che il mio datacenter sia stato il bersaglio dell'attacco. Ma sapere che sono stato rinforzato oltre a questo, è anche molto buono. E Fail2ban è davvero un buon strumento. Leggerò di Iptables e SSH Config nei prossimi giorni e cercherò di renderlo molto più sicuro.

3
Configura openssh per ascoltare una porta diversa da 22 e configura iptables in modo che rilasci qualsiasi cosa arrivi alla porta 22. Se non ti aspetti di entrare in un altro paese diverso dalla tua patria, crea un elenco di blocchi su countryipblocks.net/country_selection. php e usalo con iptables.
TorioBR

4

come posso sopprimere questo attacco e prevenire i seguenti attacchi

Di solito cambio la porta ssh predefinita da 22 a un'altra come 1122. Questo impedisce molti attacchi automatici dal bot, ma una semplice scansione della porta può rilevarlo. Comunque:

vi /etc/ssh/sshd_config

e modifica dalla porta 22 alla porta 1122 , ma ciò non è sufficiente.

Regole automatiche IPTables su bruteforce

io uso log2iptables https://github.com/theMiddleBlue/log2iptables invece Fail2ban, perché è un semplice script Bash che analizza qualsiasi file di registro con un'espressione regolare ed esegue iptables. Ad esempio, quando si verificano 5 corrispondenze, log2iptables rilascia l'indirizzo IP specifico. È bello perché usa l'API di Telegram e può inviarmi un messaggio sul mio telefono quando trova un problema :)

spero che questo possa aiutare!


8
Sto immaginando dalla correlazione tra l'URL del progetto e il tuo handle SF, che sei coinvolto in questo progetto. Si prega di consultare le nostre linee guida su come fare riferimento ai propri prodotti, in particolare rilevando il requisito che " è necessario rivelare la propria affiliazione nelle risposte ".
MadHatter supporta Monica il

1

L'ho appena messo insieme, eseguito ogni 15 minuti come cronjob ecc:

for z in `grep Invalid /var/log/auth.log | awk '{ print $NF }' | sort | uniq`
do
  count1=`grep $z /etc/hosts.deny | wc -l`
  count2=`grep Invalid /var/log/auth.log | grep $z | wc -l`
  if [ $count1 -eq 0 -a $count2 -gt 10 ] ; then
    current=`egrep "^ssh" /etc/hosts.deny | sed 's/sshd[ :,]*//'`
    sudo cp /etc/hosts.deny.bak /etc/hosts.deny
    sudo chmod 666 /etc/hosts.deny
    if [ $current ] ; then
      echo "sshd : $current , $z" >> /etc/hosts.deny
    else
      echo "sshd : $z" >> /etc/hosts.deny
    fi
    sudo chmod 644 /etc/hosts.deny
  fi
done

0

Questa è la mia soluzione alternativa per gli attacchi SSH. L'idea è di continuare a chiudere il demone SSH se non lo si usa. Nessuna porta aperta nessun attacco. Puoi provarlo. È open source https://github.com/indy99/nnet_port_guard


1
Benvenuti in Server Fault! La tua risposta suggerisce che una soluzione praticabile alla domanda è disponibile tramite un altro sito Web. La famiglia di siti Web di domande e risposte di Stack Exchange aggrotta generalmente questo tipo di risposta perché altri siti Web possono spostarsi, essere eliminati o modificati. Si prega di leggere Come posso scrivere una buona risposta? e valuta la possibilità di rivedere la tua risposta per includere i passaggi necessari per risolvere il problema. E non dimenticare di fare il tour del sito .
Paul,

0

Soluzione automatizzata per Centos / RHEL per bloccare i cattivi attori

Ecco uno script per Centos per controllare gli accessi ssh non riusciti sia per account utente non validi che per password errate per account validi. Se l'IP di origine ci ha colpito più di 3 volte e non è già presente nell'elenco di negazione, viene aggiunto all'elenco di negazione. Lo eseguo ogni 15 minuti dal crontab di root. Ho anche vietato gli accessi root tramite ssh, quindi la combinazione mantiene le cose abbastanza tranquille.

     #/bin/bash
     # Save a copy of the existing hosts.deny file for safety
     cp /etc/hosts.deny /etc/hosts.deny.bak
     # Get a list of the offending IP addresses and process them
     for z in `grep "Invalid\|Failed" /var/log/secure | awk '{ print $NF }' | sort | uniq`
     do
     # Get the number of times this IP hit us
     hits=`grep "Invalid\|Failed" /var/log/secure* | grep $z | wc -l`
     # Check whether this IP is already blocked
     blocked=`grep $z /etc/hosts.deny | wc -l`
     # If they hit us more than 3 times and are not already on the deny list
     # add them to the deny list
     if [ $hits -gt 3 -a $blocked -eq 0 ]
     then
          echo "sshd : $z" >> /etc/hosts.deny
     fi
     done

1
Guarda un fail2banche fa la stessa cosa ed è testato in battaglia.
Patrick Mevzek,
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.