Come rispondere a un attacco di forza bruta SSH su un singolo VPS?

26

Ho effettuato l'accesso al mio VPS questa mattina per trovare milioni di tentativi di accesso non riusciti per l'utente root e altri utenti che non esistono nemmeno. Ho preso le misure seguenti per cercare di offuscare gli sforzi degli attaccanti che (sono andati avanti per mesi).

Question (s)

  1. Questa è una risposta appropriata?
  2. Che altro si può fare?
  3. C'è qualcosa di prezioso che posso fare con un elenco di questi IP?

Informazioni di sistema per Centos7 vps

uname -a
inux vm01 3.10.0-327.22.2.el7.x86_64 #1 SMP Thu Jun 23 17:05:11 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

passaggio 1

Creato uno script per catturare tutti gli indirizzi IP che non sono riusciti ad accedere dal registro sicuro. ( /var/log/secure )

# get_ips.sh
grep "Failed password for" /var/log/secure \
| grep -Po "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" \
| sort \
| uniq -c

passaggio 2

Scrivi uno script per creare regole firewall per bloccare l'indirizzo IP che vengono trovati dallo script nel passaggio 1. Questo script è ip_list_to_rules.sh

#!/bin/bash
# ip_list_to_rules.sh
# script to parse output of get_ips.sh and create firewall rules
# to block ssh requests

if [ -z $1 ]; then
  echo "arg1 must be path to a list of the form <COUNT> <IP>\n"
  exit
fi

LIST=$(readlink -f $1)
SSH_IP=$(echo $SSH_CLIENT | head -n1 | awk '{print $1;}')

echo "Reading IPs from ${LIST}"
echo "SSH Client IP will be ignored (${SSH_IP})"

while read COUNT IP; do

  echo "Creating rule for ${IP}"
  firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -m tcp --source $IP -p tcp --dport 22 -j REJECT
  firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -m tcp --source $IP/24 -p tcp --dport 22 -j REJECT

done<<<"$(cat ${LIST} | grep -v ${SSH_IP})"

passaggio 3

Esegui tutto e salva le regole.

./get_ips.sh > attack_ips.list
./ip_list_to_rules.sh attack_ips.list
firewall-cmd --reload

Aggiornamento

Di seguito sono riportate le misure che ho preso dalle risposte.

  1. Accesso root disabilitato
  2. Porta SSH modificata
  3. Installa & configurato fail2ban
  4. Disattiva autenticazione password e amp; abilita l'autenticazione della chiave pubblica

Non l'ho fatto 4 perché di solito mi collego tramite client di shell sicuro e chrome e AFAIK non c'è supporto per le chiavi pubbliche.

    
posta Aage Torleif 01.01.2017 - 02:34
fonte

8 risposte

54

Sì, questo è un approccio perfettamente ragionevole e comune. Tuttavia, hai reinventato fail2ban . Probabilmente vorrai passare a utilizzarlo, in modo da non dover eseguire il debug dei problemi con lo script e utilizzare i filtri esistenti per ssh, apache e altri servizi comuni.

Sfortunatamente, non c'è molto che tu possa fare con questi IP. Puoi provare a segnalare l'attività al contatto di abuso elencato per il blocco IP, ma non vale davvero il tuo tempo a meno che non faccia qualcosa di più serio.

Dovresti anche eseguire lo standard ssh hardening, come disabilitare gli accessi basati su password e root, a meno che tu non ne abbia assolutamente bisogno.

    
risposta data 01.01.2017 - 03:05
fonte
23

Il modo più efficace per proteggere il sistema SSH è effettuare il login usando solo la chiave privata ssh. È necessario disabilitare l'autenticazione della password e disabilitare l'accesso diretto alla root. Dopo di ciò, otterrete comunque molti tentativi di autenticazione falliti, ma non c'è alcuna possibilità che l'attacker brute force abbia successo.

Se si desidera mantenere i registri puliti dopo questo, è necessario spostare la porta SSH su un numero di porta diverso.

    
risposta data 01.01.2017 - 09:04
fonte
6

Potrebbe essere scoraggiante vedere un milione di tentativi di accesso falliti, ma onestamente la larghezza di banda e la potenza di elaborazione che questi tentativi stanno usando ... è banale.

Quindi la vera domanda diventa, il tuo sistema è sicuro:

  • Hai disabilitato il login di root?
  • Hai disabilitato l'autenticazione della password a favore della chiave pub?
  • Hai cambiato la porta predefinita del servizio sshd sul tuo VPS?

tutte queste modifiche possono essere fatte nel file / etc / ssh / sshd_config (assicurati di riavviare sshd dopo aver apportato le modifiche)

Potresti usare fail2ban, o qualche script personalizzato per bloccare questi IP sul firewall ma l'autenticazione sshd da sola è abbastanza sicura da sola ... aggiungere più complessità non è necessariamente più sicuro e molto probabilmente ti causerà bloccati per errore dai vps.

    
risposta data 01.01.2017 - 09:33
fonte
3

Come altri hanno menzionato. Fail2ban con regole piuttosto severe (ad esempio: 3 password errate o tentativo di accesso con utente inesistente) può essere molto efficace.

Suggerirei anche di spostare SSH su una porta non standard. Ovviamente questo non aiuta affatto contro alcun tipo di attacco intelligente, ma elimina gli scanner automatici di base di cui ce ne sono parecchi.

Se si combina questo con qualcosa che rileva la scansione delle porte e si collega a fail2ban, si può persino parare una grande porzione di scanner, botnet e altre schifezze.

    
risposta data 01.01.2017 - 06:07
fonte
3

Puoi impostare tabelle IP che non blocchino l'intero server, ma rallenta gli attacchi di forza bruta fino al punto in cui diventano inefficaci .

Limitare l'accesso SSH da parte degli indirizzi IP è il metodo più sicuro. Cambiare la porta SSH può sconfiggere le scansioni dei bot ma fa poco contro gli attacchi mirati.

Nel terminale, digita

/usr/sbin/iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --set
/usr/sbin/iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP

Ciò bloccherà il nuovo indirizzo IP se si connette più di 3 volte al minuto . Le connessioni stabilite determinano un'autenticazione corretta. Puoi anche registrare ciò che viene fatto qui impostando una regola di registro

/sbin/iptables -N LOGDROP
/sbin/iptables -A LOGDROP -j LOG
/sbin/iptables -A LOGDROP -j DROP
iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --set
iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j LOGDROP
    
risposta data 01.01.2017 - 21:28
fonte
1

Potresti provare a installare fail2ban, oppure puoi fare cose come disabilitare l'accesso diretto alla root o cambiare la porta ssh predefinita

    
risposta data 01.01.2017 - 05:34
fonte
1
  1. Disable password authentication & enable public key auth

I didn't actual do 4 because I usually connect through chrome secure shell client and AFAIK there isn't public key support.

Uso il client Chrome Secure Shell sul mio Chromebook e supporta l'autenticazione con chiave pubblica. Ho disabilitato l'autenticazione della password su tutti i miei sistemi e ho zero problemi ad accedervi dal Chromebook o dal mio telefono usando Juice.

    
risposta data 02.01.2017 - 04:22
fonte
-3

Imposta ssh per accedere attraverso una porta diversa.

    
risposta data 01.01.2017 - 15:32
fonte

Leggi altre domande sui tag