Denyhosts e IPtables

Tengo bastante tiempo usando Denyhosts para proteger el servidor de mi trabajo contra intentos de intrusión por fuerza bruta, especialmente por el puerto 22 (servicio de ssh).

Denyhosts funciona perfecto y hace lo que promete; cada que un “hacker” [mejor escrito: script kiddie]  intenta acceder por SSH con un nombre de usuario o una contraseña incorrecta más de 3 veces, Denyhost bloquea su IP agregando una entrada al archivo /etc/hosts.deny
De esa manera, el IP ofensivo ya no puede establecer conexión al servidor por el puerto 22

Editando la configuración del script intenté que Denyhost bloqueara todos los puertos para el atacante y que así no tuviera acceso al servidor; ¡pero no lo conseguí!

Después de muchas horas, al final, hice un pequeño script en bash que lee la lista de IPs en /etc/hosts.deny (agregadas previamente por DenyHost) para agregarlas  a iptables; logrando así, bloquear totalmente al ofensor.

Para ejecutar el script, solo hay que darle permisos de ejecución y opcionalmente, agregarlo al crontab
Espero que a alguien más le sirva este script para bloquear con iptables los IPs registrados por Denyhosts.

#!/bin/bash

# I will be kind to the computers in my network segment
MY_NETWORK_SEGMENT=148.228.204.

# File to store IP address
MY_HOSTS_DENY=/root/.hosts_deny

# Die if /etc/hosts.deny file not found
[ ! -f "/etc/hosts.deny" ] && { echo "File /etc/hosts.deny not found."; exit 1; }

# Filter the /etc/hosts.deny to generate MY_HOSTS_DENY file
grep -vE "^#|^S" /etc/hosts.deny | awk {'print $2'} | grep -v $MY_NETWORK_SEGMENT | sort -n > $MY_HOSTS_DENY

while read -r IP
do
 # check if the IP isn't blank
 if [ -n "$IP" ]
  then
   CURRENT_IP=$(iptables-save | grep $IP)
   # if the current IP does not exists in iptables rules then...
   if [ -z "$CURRENT_IP" ]
    then
     # Die IP, Die!
     iptables -A INPUT -p all -s $IP -j DROP
     echo "IP: $IP banned in ALL ports"
   fi
 fi
done <"${MY_HOSTS_DENY}"

# Clean the mess
rm $MY_HOSTS_DENY

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s