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)
- Questa è una risposta appropriata?
- Che altro si può fare?
- 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.
- Accesso root disabilitato
- Porta SSH modificata
- Installa & configurato fail2ban
- 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.