iptables y prevención de hackers

iptables y prevención de hackers

¡Hola compañeros Ubuntuers!

Aquí hay un ejemplo de mi archivo iptables.rules:

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:f2b-sshd - [0:0]
:f2b-sshd-ddos - [0:0]
-A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd-ddos
-A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd
-A INPUT -s 202.215.160.75/32 -j DROP
-A INPUT -s 66.210.251.136/32 -j DROP
-A INPUT -s 61.40.0.0/16 -j DROP
-A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd-ddos
-A INPUT -i tap0 -j ACCEPT
-A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd
-A INPUT -i br0 -j ACCEPT
-A FORWARD -i br0 -j ACCEPT
-A f2b-sshd -j RETURN
-A f2b-sshd-ddos -j RETURN
COMMIT

tenga en cuenta que esta es una versión condensada de mi archivo. Probablemente tengo alrededor de 100 IP/dominios que estoy eliminando.

Mi problema es que cuando coloco una nueva IP como xxxx, la agrega de la siguiente manera:

-A INPUT -i br0 -j ACCEPT
-A INPUT -s x.x.x.x/32 -j DROP
-A FORWARD -i br0 -j ACCEPT

De alguna manera, esto en realidad no elimina la dirección IP como quiero. Tengo un script de shell que uso para eliminar usuarios/dominios:

./soltar-usuario

sudo iptables -A INPUT -s $1 -j DROP
sudo sh -c "iptables-save > /etc/iptables.rules" 

./drop-dominio

 sudo iptables -A INPUT -s $1/16 -j DROP
 sudo sh -c "iptables-save > /etc/iptables.rules"

Para combatir este problema, estoy editando manualmente los archivos /etc/iptables.rules para mover la ip xxxx encima de esta línea:

 -A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd-ddos

y luego llamando:

sudo iptables-restore < /etc/iptables.rules

¿Qué hay de malo en mi proceso, en todo caso? ¿Existe una mejor manera? Cada día pasé unos 10 minutos lidiando con hacks y la mayor parte de ese tiempo lo dediqué a editar mis archivos iptables.rules y luego restaurarlos a través de iptables-restore. Me gustaría poder simplemente llamar a ./drop-user o ./drop-domain y terminar con esto, pero siento que no entiendo lo suficiente sobre iptables.

¿Debería ejecutar los siguientes comandos antes de iptables-restore?

 sudo iptables -F
 sudo iptables -Z

¡Gracias de antemano!

Respuesta1

Le recomiendo encarecidamente que automatice el proceso de prohibición con fail2ban, que funciona perfectamente en una configuración predeterminada y se puede personalizar aún más si desea que supervise más servicios.

Cuando se combina con iptables-persistent, conservará las reglas durante los reinicios, lo cual resulta útil.

Aquí hay una descripción básica de lo que hago con cualquier servidor Ubuntu:

Instalar y configurar fail2ban

sudo aptitude install fail2ban && sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local && sudo nano /etc/fail2ban/jail.local

Esto lo instala y copia el archivo de configuración en un archivo nuevo para sus personalizaciones. Esta es una buena práctica porque evita que las ediciones se sobrescriban si se actualiza el paquete.

Mi preferencia personal es extender eltiempo de prohibiciónyencontrar el tiempode los valores predeterminados. El tiempo de prohibición es el tiempo que un atacante está prohibido, y el tiempo de búsqueda es la ventana de tiempo en la que se cuentan sus intentos, en caso de que califiquen ataques de límite. Busque y edite bantime = 21600(aumentado a seis horas, el valor del tiempo está en segundos) y también findtime = 3600(máximo 3 intentos de ataque por hora).

Elimine las reglas de Iptables existentes y establezca nuevos valores predeterminados

Este es un resumen que está destinado a usarse en un servidor web típico con puertos entrantes escuchando en el puerto 22 (SSH), el puerto 80 (HTTP) y el puerto 443 (HTTPS) únicamente.Este tutorial de DigitalOceanes una buena referencia sobre cómo construir el tuyo propio o personalizar el mío.Tenga cuidado con Iptables y con el establecimiento de reglas DROP, si realiza el pedido mal, ¡se bloqueará permanentemente!Dicho esto, esta frase es lo que uso y es segura, está probada y funciona perfectamente:

sudo iptables -P INPUT ACCEPT && sudo iptables -F && sudo iptables -A INPUT -i lo -j ACCEPT && sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT && sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT && sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT && sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT && sudo iptables -A INPUT -j LOG && sudo iptables -A FORWARD -j LOG && sudo ip6tables -A INPUT -j LOG && sudo ip6tables -A FORWARD -j LOG && sudo iptables -A INPUT -j DROP

Hacer que los cambios sean persistentes durante los reinicios

El último paso es instalar y configurar el iptables-persistentpaquete, que automatizará el guardado y la restauración de reglas durante los reinicios.

sudo aptitude install iptables-persistent && sudo service iptables-persistent start

Le pedirá confirmación para las reglas IPV4 e IPV6, y deberá usar la tecla de tabulación para seleccionar "sí" para cada una y guardar. Se iniciará automáticamente al reiniciar, por lo que no tendrá que preocuparse por configurarlo más.

Una cosa a tener en cuenta acerca de hacer que las reglas sean persistentes es que debe informar manualmente al proceso sobre cualquier regla nueva que agregue o edite (como si agregó o eliminó HTTPS en el puerto 443, por ejemplo). Para hacer esto, ejecute sudo service iptables-persistent saveel cual actualizará el conjunto actual de reglas vigentes. Creo que el comando se cambió a "netfilter-persistent" en versiones posteriores a la 14.04, así que utilícelo sudo service netfilter-persistent savesi el primero no funciona.

Resumen

Ahora fail2ban monitoreará los ataques a SSH y agregará y restará direcciones IP automáticamente de acuerdo con los parámetros que establezca. Iptables ignorará todo el tráfico entrante de los puertos que no haya abierto y estas reglas persistirán durante los reinicios, por lo que no hay mucho más que deba hacer. ¡Disfruta del tiempo libre extra, supongo!

Invierta todos los pasos anteriores si desea deshacer todos los cambios

Si por algún motivo no deseas seguir usando este método, puedes deshacer todo rápidamente. Esto no se recomienda, pero es su máquina, así que aquí le explicamos cómo:

  1. Elimine todas las reglas de Iptables y acepte todo el tráfico en todos los puertos sudo iptables -P INPUT ACCEPT && sudo iptables -F(debe hacer esto para eliminar la regla DROP al final o quedará bloqueado)
  2. Elimine los paquetes previamente instalados y sus configuraciones sudo aptitude purge fail2ban iptables-persistent(o tal vez netfilter-persistent, dependiendo de su versión del servidor Ubuntu). Después de reiniciar, debería volver a ser como estaba antes, menos cualquier configuración personalizada de Iptables que deberá volver a agregar manualmente como lo está haciendo actualmente.

información relacionada