Ingresé a mi VPS esta mañana para encontrar millones de intentos de inicio de sesión fallidos para el usuario root
y otros usuarios que ni siquiera existen. Tomé las siguientes medidas para intentar ofuscar los esfuerzos de los atacantes que (han estado ocurriendo durante meses).
Preguntas (s)
- ¿Es esta una respuesta apropiada?
- ¿Qué más se puede hacer?
- ¿Hay algo valioso que pueda hacer con una lista de estas IPs?
Información del sistema para un 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
paso 1
Creó un script para capturar todas las direcciones IP que no pudieron iniciar sesión desde el registro seguro. ( /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
paso 2
Escriba un script para crear reglas de firewall para bloquear la dirección IP que se encuentra en el script en el paso 1. Este script es 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})"
paso 3
Ejecutalo todo y guarda las reglas.
./get_ips.sh > attack_ips.list
./ip_list_to_rules.sh attack_ips.list
firewall-cmd --reload
Actualizar
A continuación se muestran las medidas que tomé de las respuestas.
- inicios de sesión de raíz deshabilitados
- puerto SSH modificado
- instalar & configurado fail2ban
- Deshabilitar la autenticación de contraseña & habilitar la clave pública de autenticación
No realicé 4 porque no me conecto a través de cliente de shell seguro / a> y AFAIK no hay soporte de clave pública.