iptables y prevención de hackers

0

¡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 descartando.

Mi problema es que cuando dejo caer 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

Esto de alguna manera no deja caer la dirección IP como quiero que lo haga. Tengo un script de shell que utilizo para descartar usuarios / dominios:

./drop-user

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

./drop-domain

 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 por 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? ¿Hay una mejor manera? Cada día pasé unos 10 minutos lidiando con hacks y la mayor parte de ese tiempo es editar mis archivos iptables.rules y luego restaurarlos a través de iptables-restore. Me gustaría poder llamar a ./drop-user o ./drop-domain y terminar con esto, pero siento que no tengo suficiente conocimiento de iptables.

¿Debo estar haciendo los siguientes comandos antes de iptables-restore?

 sudo iptables -F
 sudo iptables -Z

¡Gracias por adelantado!

Peter S
fuente

Respuestas:

2

Le recomiendo encarecidamente que automatice el proceso de prohibición fail2ban, que funciona perfectamente bien 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 en los reinicios, lo que es ú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 nuevo archivo para sus personalizaciones. Esta es una práctica recomendada porque evita que se sobrescriban sus ediciones si se actualiza el paquete.

Mi preferencia personal es extender el tiempo de prohibición y encontrar el tiempo de los valores predeterminados. El tiempo de prohibición es durante cuánto tiempo está prohibido un atacante, y encontrar el tiempo es la ventana de tiempo en que se cuentan sus intentos, en caso de que califiquen los ataques con límite. Buscar y editar bantime = 21600(aumentado a seis horas, el valor del tiempo es en segundos) y también findtime = 3600(máximo 3 intentos de ataque por hora).

Limpie las reglas existentes de Iptables y establezca nuevos valores predeterminados

Este es un trazador de líneas que debe usarse en un servidor web típico con puertos entrantes que escuchan en el puerto 22 (SSH), el puerto 80 (HTTP) y el puerto 443 (HTTPS) solamente. Este tutorial de DigitalOcean es una buena referencia sobre cómo construir el suyo propio o personalizar el mío. ¡Tenga cuidado con Iptables y establezca las reglas DROP, si recibe el pedido incorrectamente, se bloqueará permanentemente! Dicho esto, este one-liner es lo que uso y es seguro, probado 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 cambios persistentes entre reinicios

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

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

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

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

Resumen

Ahora fail2ban monitoreará los ataques en 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!

Revertir todos los pasos anteriores si desea deshacer todos los cambios

Si por alguna razón no desea continuar usando este método, puede deshacer todo rápidamente. Esto no se recomienda, pero es su máquina, así que así es como:

  1. Vacíe 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 instalados previamente 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 un reinicio, debería volver a la forma en que estaba antes, menos cualquier configuración personalizada de Iptables que deberá volver a agregar manualmente como lo está haciendo actualmente.
Tom Brossman
fuente
Tom, si examinas detenidamente mi archivo iptables.rules, verás que ya estoy usando fail2ban. :) '-A f2b-sshd -j RETURN -A f2b-sshd-ddos -j RETURN'. Además de f2b, quiero bloquear permanentemente los hacks ips.
Peter S
@PeterS Sí, veo las :f2b...entradas pero tengo curiosidad acerca de su configuración. En mi instalación predeterminada, las entradas leídas fail2ban-ssh.... ¿Has hecho muchas personalizaciones desde la configuración predeterminada? Está perfectamente bien hacer esto, por supuesto, pero dificulta el diagnóstico a medida que te alejas de los valores predeterminados del sistema. También debe considerar usar ipset para prohibir permanentemente muchas direcciones, ya que será más eficiente (aunque esa es una pregunta mucho más complicada y diferente).
Tom Brossman
Estos son los cambios que hice en jail.conf: # "bantime" es el número de segundos que un host está prohibido. bantime = 600 # Un host está prohibido si ha generado "maxretry" durante los últimos "segundos de findtime" # segundos. findtime = 600 # "maxretry" es el número de fallas antes de que se bloquee un host. maxretry = 5
Peter S
Creo que la configuración de los nombres de f2b en iptables está aquí: /etc/fail2ban/action.d/iptables.conf, pero no cambié este archivo ni ningún otro excepto jail.conf
Peter S
@PeterS Con fail2ban, copia el jail.conf y lo personaliza, lo que tiene prioridad sobre los valores predeterminados. Los tutoriales de DO son bastante completos, por lo que, para ayudarlo a volver a la normalidad, consulte aquí para obtener información básica sobre SSH o aquí, por ejemplo, cómo crear uno personalizado para WordPress . No desea editar los archivos incorrectos y desea automatizar todo para no tener que rastrear las IP para agregarlas manualmente.
Tom Brossman