LINUX

Cómo usar iptables de Linux para bloquear diferentes ataques

Iptables de Linux para bloquear diferentes ataques

Iptables es un cortafuegos de filtro de paquetes basado en el kernel de Linux. Los módulos de iptables están presentes en el núcleo mismo, no hay un demonio separado para él. Esto hace que el cortafuegos sea muy rápido y eficaz. Las reglas de Iptables controlan el tráfico entrante y saliente en un dispositivo de red.

En este tutorial, discutiremos algunos de los ataques de red comunes y cómo podemos bloquearlos usando iptables. Algunos de los ataques de red más comunes son el ataque de inundación SYN, el ataque smurf, el ataque terrestre, los ataques por mal funcionamiento de paquetes ICMP y algunas otras formas de ataque DOS. Antes de entrar en los detalles de estos ataques, veamos una descripción general de iptables y cómo usar este comando.

Iptables

Las iptables tienen 3 puntos de filtrado para la tabla predeterminada: INPUT, OUTPUT y FORWARD. Estos se denominan ‘cadenas’ en iptables. Como su nombre indica, especifican si un paquete está destinado al sistema (INPUT), se origina en él (OUTPUT) o se enruta a otro nodo de la red (FORWARD).
Las reglas en iptables se almacenan en forma de registros en una tabla. Para enumerar las reglas, ejecute «iptables -L» de la siguiente manera:

root@raghu-Inspiron-1440:~# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Aquí, no existen reglas para ninguna cadena. Estas reglas se leen de arriba a abajo y, si se produce una coincidencia, no se verifican más reglas. Entonces, si una regla sobrescribe cualquier regla anterior, entonces debe haber estado por debajo de esa regla. Entonces, agregaremos las reglas existentes que ocurran más adelante. Pero, si su requisito es insertar explícitamente, también puede insertarlos.

Para insertar una regla (por encima de todas las demás reglas o en un número específico), -i, y para agregar, se usa la opción -A. Necesitamos especificar la cadena, para la cual deseamos escribir la regla. La opción -j especifica el objetivo, es decir, qué queremos hacer con el paquete si una regla coincide. Algunos de los valores son ACEPTAR, DROP (o RECHAZAR), RETURN, etc. El objetivo puede ser alguna otra cadena existente o definida por el usuario. Pero, a los efectos de este artículo, nos limitaremos a las cadenas existentes únicamente y no entraremos en más detalles.

La sintaxis general de iptables es:

iptables CHAIN RULE_SPECIFICATION

Ahora, creemos una regla simple usando las opciones explicadas anteriormente.

# iptables -A INPUT -j ACCEPT

Esto aceptará todos los paquetes entrantes y la regla se puede verificar ahora usando «iptables -L»:

# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Iptables proporciona muchas opciones como módulos para que podamos usar estas opciones cuando incluimos el módulo correspondiente. Uno de esos módulos que usaremos en nuestra discusión es el módulo de límite. Los detalles de este módulo se darán más adelante, pero por ahora, solo quiero que sepa que para incluir un módulo, se usa la opción -m. Entonces, para incluir el ‘módulo de límite’, usaremos ‘-m límite’ en la regla. Ahora que sabemos acerca de iptables, hablemos de los ataques comunes y cómo podemos bloquearlos usando IPtables.

Tipos de ataques y su protección

1) Ataque terrestre

LAND son las siglas de Local Area Network Denial (Denegación de red de área local). En este ataque, un paquete se falsifica con la dirección de origen como la dirección del objetivo en sí, es decir, las direcciones de origen y destino son las mismas. La máquina de destino termina respondiéndose a sí misma continuamente. Aunque Linux y algunos otros sistemas modernos no son vulnerables a este ataque, es posible que desee estar seguro.

Para bloquear todos los paquetes de su propia IP (asumiendo 47.156.66.17 como IP de la máquina), haga lo siguiente:

# iptables -A INPUT -s 47.156.66.17/32 -j DROP

Con la opción -s en el comando anterior, se especifica la dirección IP de origen. Además, para bloquear cualquier paquete de la red local (auto IP):

# iptables -A INPUT -s 127.0.0.0/8 -j DROP

2) Paquete XMAS

Un paquete de árbol de Navidad es un paquete en el que se establecen todas las banderas de cualquier protocolo. Se establecen los bits FIN, URG y PSH en el encabezado TCP de este tipo de paquete. Este paquete se llama paquete de árbol de Navidad porque todos los campos del encabezado están «iluminados» como un árbol de Navidad. Este tipo de paquete requiere mucho más procesamiento que los paquetes habituales, por lo que el servidor asigna una gran cantidad de recursos para este paquete. Por lo tanto, esto se puede utilizar para realizar un ataque DOS en el servidor. Este tipo de paquetes se pueden bloquear con:

# iptables -A INPUT -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP

Aquí, la opción -p especifica el protocolo para el que se aplica la regla. –Tcp-flags se usa para especificar las banderas del encabezado TCP. Requiere dos opciones, la primera opción es ‘máscara’, en la que especificamos qué banderas deben examinarse (TODAS), y la segunda opción es ‘comp’, es decir, las banderas que deben establecerse. Así que aquí queremos examinar TODOS los indicadores de los que se deben establecer FIN, PSH y URG.

3) Ataque pitufo

El atacante en este ataque envía una gran cantidad de paquetes de difusión de eco ICMP, con la dirección IP de origen falsificada a la dirección IP del objetivo. Todas las máquinas de la red reciben este mensaje de difusión y responden al objetivo con un paquete de respuesta de eco. Una forma de bloquear este ataque es bloquear todos los paquetes ICMP, pero si eso no se puede hacer, se puede aplicar un límite a los paquetes icmp permitidos.

Para limitar la cantidad de paquetes icmp:

# iptables -A INPUT -p icmp -m limit --limit 2/second --limit-burst 2 -j ACCEPT

Para bloquear todos los paquetes ICMP:

# iptables -A INPUT -p icmp -j DROP

Antes de continuar, hablemos del módulo de límite. El módulo de límite se puede utilizar para poner un límite a las conexiones entrantes. Utiliza un filtro de cubeta de tokens. Este módulo se puede incluir con ‘-m limit’. Las opciones disponibles con este módulo son –limit y –limit-burst.

Según la página del manual de iptables:

– tasa límite[/second|/minute|/hour|/day]

Tasa de coincidencia promedio máxima: especificada como un número, con un sufijo opcional `/ segundo ‘,` / minuto’, `/ hora ‘o` / día’; el valor predeterminado es 3 / hora.

-limit-burst

Número máximo inicial de paquetes para igualar: este número se recarga en uno cada vez que no se alcanza el límite especificado anteriormente, hasta este número; el valor predeterminado es 5.

No se preocupe si suena confuso. Permítanme ofrecer una analogía para comprender estas dos opciones. Supongamos que hay un depósito de tokens que contiene algunos tokens. El límite indica la velocidad a la que los tokens llegan al depósito. El valor predeterminado es 3 / hora, por lo que cada 20 minutos, llega un token al depósito, pero el depósito tiene una capacidad máxima. Esa capacidad se proporciona con la opción –limit-burst. El valor predeterminado es 5. Un paquete solo puede pasar a través de este depósito si tiene un token. Entonces, inicialmente el cubo está lleno. Entonces, si tomamos los valores predeterminados, al principio, 5 paquetes pasarán por esta regla. No pasarán más paquetes, porque no hay tokens disponibles. Ahora, de acuerdo con la velocidad de ráfaga, el siguiente token llegará después de 20 minutos. Por lo tanto, el sexto paquete se aprobará solo después de que hayan pasado 20 minutos. Si no llegan paquetes en el intervalo de 20 minutos, los tokens comenzarán a acumularse. Y después de 100 minutos (20 * 5), el balde estará lleno. No se acumularán más tokens en los próximos 20 minutos.

(Tenga en cuenta que el límite en el comando anterior es solo a modo de ejemplo. El límite real dependerá de los recursos disponibles en el servidor).
El bloqueo de los paquetes icmp evitará que el sistema también realice un ataque de ping de la muerte (aunque los sistemas actuales no son vulnerables a él)

4) SYN Flood

SYN flood es un tipo de ataque DOS (Denial Of Service). Para comprender la inundación SYN, echemos un vistazo al protocolo de enlace TCP de tres vías.

TCP es un protocolo orientado a la conexión confiable. Antes de que se intercambie información entre un cliente y el servidor mediante el protocolo TCP, se forma una conexión mediante el protocolo de enlace TCP. Este apretón de manos es un proceso de tres pasos:

1. El cliente solicita al servidor que desea establecer una conexión, enviando una solicitud SYN.
2. El servidor recibe la solicitud del cliente y responde con ‘SYN / ACK’, reconociendo que ha recibido la solicitud del cliente. El servidor asigna los recursos y espera que el cliente los reconozca.
3. El cliente reconoce enviando ACK de vuelta al servidor.

El atacante puede crear una gran cantidad de solicitudes SYN falsificadas que tengan sus direcciones IP de origen falsificadas y enviarlas al objetivo. El objetivo responde con SYN / ACK y asigna sus recursos para la conexión, pero nunca recibe una respuesta ACK. Los recursos de la máquina de destino se agotan y deja de atender más solicitudes de cualquier máquina legítima.

Este ataque y alguna otra forma de ataques DOS / DDOS se pueden bloquear limitando los paquetes de solicitud de conexión TCP entrantes. Un punto que debe tenerse en cuenta aquí es que no debemos poner un límite a las solicitudes de conexiones establecidas. Para evitar este tipo de ataque, solo es necesario controlar las nuevas solicitudes de conexión. Además, la cantidad de solicitudes que puede manejar un servidor depende de los recursos disponibles del servidor. Entonces, en el siguiente ejemplo, el límite de la conexión TCP debe cambiarse de acuerdo con la capacidad del servidor:

# iptables -A INPUT -p tcp -m state --state NEW -m limit --limit 2/second --limit-burst 2 -j ACCEPT

En este comando, se incluye un nuevo ‘estado’ de módulo para especificar el estado del paquete. No olvide descartar todos los demás paquetes que no coincidan con la regla anterior; de lo contrario, se permitirán de forma predeterminada. Entonces, después de haber dado el comando anterior, emita también el siguiente comando:

# iptables -A INPUT –p tcp –m state --state NEW –j DROP

Si tiene alguna pregunta o idea que compartir sobre este tema, utilice la sección de comentarios a continuación.

Leer también:

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba
Cerrar