Introducción
Cuando iniciamos sesión en un servidor con una IP de red externa, a menudo vemos que el servidor ha sido registrado maliciosamente muchas veces por el puerto de otra persona que se está escaneando.
There were 56 failed login attempts since the last successful login.
¿No es molesto? Aunque la contraseña es complicada y hay un firewall, es difícil garantizar que algunas personas lo intenten maliciosamente. Por lo tanto, la prueba más simple es escribir un script y recopilar un lote de listas negras de IP con regularidad. La operación es la siguiente
cat /usr/local/sbin/secure_ssh.sh
#! /bin/bash
#从secure文件中提取反复登录失败的IP名单作为黑名单列表并统计次数
#格式大概是这样 36.37.122.47=22 IP=次数
cat /var/log/secure|awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $2"="$1;}' > /usr/local/sbin/blackList.txt
#一旦当前IP超过20次尝试,就关小黑屋
for i in `cat /usr/local/sbin/blackList.txt`
do
IP=`echo $i |awk -F= '{print $1}'`
NUM=`echo $i|awk -F= '{print $2}'`
if [ $NUM -gt 20 ];then
grep $IP /etc/hosts.deny > /dev/null
if [ $? -gt 0 ];then
echo "sshd:$IP:deny" >> /etc/hosts.deny
echo "新增异常IP: $IP" >> /usr/local/sbin/secure_ssh.log
fi
fi
done
Ocasionalmente ejecutar una vez definitivamente no es sofocante, escriba un crontab para ejecutarlo regularmente
#Representa la ejecución cada cinco minutos
echo "*/5 * * * * root bash /usr/local/sbin/secure_ssh.sh" >> /etc/crontab
Finalmente, puede verificar el efecto en el archivo /etc/hosts.deny.
para resumir
Por supuesto, es mejor cambiar las contraseñas o los certificados con regularidad, los firewalls restringen puertos, restringen fuentes, etc.,
es una medida de una vez por todas.