Uso del Comando iptables para Comprobar, Añadir y Eliminar Reglas

Artículos Guías Manuales Sistemas Linux Windows Binario 0

iptables es una herramienta de firewall en sistemas Linux que permite a los administradores de sistemas gestionar y controlar el tráfico de red mediante el uso de reglas. Estas reglas permiten definir cómo el tráfico de red entrante, saliente y reenviado debe ser tratado por el sistema.

En este artículo, cubriremos cómo comprobar, añadir y eliminar reglas usando el comando iptables.

1. Comprobar reglas actuales en iptables

Antes de añadir o eliminar reglas, es útil revisar qué reglas están configuradas actualmente en iptables. Para listar las reglas existentes en tu firewall, puedes usar el comando:

iptables -L

Este comando muestra todas las reglas de la tabla filter (la tabla predeterminada) y en las cadenas principales (INPUT, OUTPUT, y FORWARD). El resultado incluirá información sobre cada regla, como el protocolo, las direcciones IP de origen y destino, los puertos, y las acciones asociadas (ACCEPT, DROP, etc.).

Mostrar reglas con más detalle

Para obtener una salida más detallada, que incluya contadores de bytes y paquetes:

iptables -L -v

Este comando te dará información adicional sobre cuántos paquetes y cuántos bytes han coincidido con cada regla, lo que es útil para diagnosticar el tráfico.

Mostrar reglas de una tabla específica

Si deseas ver las reglas de una tabla diferente a la predeterminada (por ejemplo, la tabla nat), puedes especificar la tabla con la opción -t:

iptables -t nat -L

2. Añadir reglas a iptables

El comando iptables permite añadir nuevas reglas de firewall a las diferentes cadenas. El formato básico para añadir una regla es:

iptables -A [CADENA] [OPCIONES] -j [ACCIÓN]
  • -A: Significa que estás añadiendo la regla al final de la cadena especificada.
  • [CADENA]: Puede ser INPUT, OUTPUT, FORWARD o cualquier otra cadena personalizada.
  • [OPCIONES]: Son las condiciones para que un paquete coincida con la regla (pueden incluir dirección IP, puerto, protocolo, etc.).
  • -j [ACCIÓN]: Define la acción que se tomará (ACCEPT, DROP, REJECT, LOG, etc.).

Ejemplo: Permitir conexiones SSH (puerto 22)

Para añadir una regla que permita el tráfico entrante en el puerto 22 (usado por SSH), puedes ejecutar:

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

Este comando añade una regla a la cadena INPUT, permitiendo conexiones TCP entrantes en el puerto 22.

Ejemplo: Bloquear una IP específica

Para bloquear el tráfico entrante desde una dirección IP específica, por ejemplo, 192.168.1.100:

iptables -A INPUT -s 192.168.1.100 -j DROP

Esto bloqueará todas las conexiones entrantes desde esa IP.

Ejemplo: Limitar el tráfico entrante en el puerto 80 (HTTP)

Si quieres limitar la cantidad de conexiones entrantes en el puerto 80 a 10 conexiones por minuto por IP, puedes usar el módulo limit:

iptables -A INPUT -p tcp --dport 80 -m limit --limit 10/minute -j ACCEPT

Esto permitirá un máximo de 10 conexiones por minuto desde cualquier IP al puerto 80.

3. Eliminar reglas de iptables

Eliminar reglas en iptables puede hacerse de varias formas, ya sea especificando la regla exacta, usando el número de regla o directamente eliminando todas las reglas.

Eliminar una regla específica

Para eliminar una regla en iptables, puedes usar la opción -D seguida de los mismos parámetros que usaste para crearla. Por ejemplo, si deseas eliminar la regla que permite las conexiones SSH (puerto 22):

iptables -D INPUT -p tcp --dport 22 -j ACCEPT

Esto eliminará la regla específica que permite conexiones en el puerto 22.

Eliminar una regla por número de regla

Cada regla en una cadena tiene un número asignado. Puedes listar las reglas con sus números utilizando el siguiente comando:

iptables -L --line-numbers

La salida incluirá un número de línea para cada regla. Para eliminar una regla basada en su número, puedes usar:

iptables -D INPUT [número_de_regla]

Por ejemplo, si la regla SSH es la tercera en la lista, puedes eliminarla con:

iptables -D INPUT 3

Eliminar todas las reglas de una cadena

Si deseas eliminar todas las reglas de una cadena (por ejemplo, para empezar de nuevo), puedes usar el siguiente comando:

iptables -F [CADENA]

Por ejemplo, para eliminar todas las reglas de la cadena INPUT:

iptables -F INPUT

Si quieres vaciar todas las cadenas de todas las tablas, simplemente ejecuta:

iptables -F

Restablecer todas las reglas

Si quieres restablecer completamente iptables a su estado predeterminado, incluyendo la política por defecto de todas las cadenas (generalmente "ACCEPT"), puedes usar:

iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
  • -F: Limpia todas las reglas de las cadenas.
  • -X: Elimina todas las cadenas personalizadas.

4. Verificar las políticas por defecto

Cada cadena tiene una política por defecto que se aplica cuando ningún paquete coincide con las reglas definidas. Para ver las políticas actuales, puedes ejecutar:

iptables -L

Por ejemplo, si quieres cambiar la política por defecto de la cadena INPUT para que todos los paquetes que no coincidan con ninguna regla sean bloqueados, puedes usar:

iptables -P INPUT DROP

Esto hará que cualquier tráfico entrante que no coincida con ninguna regla específica sea bloqueado por defecto.

Conclusión

iptables es una herramienta flexible y poderosa para gestionar el tráfico de red en un sistema Linux. Saber cómo comprobar, añadir y eliminar reglas es esencial para mantener un firewall eficaz y seguro. Usar iptables correctamente te permitirá controlar qué tráfico está permitido o bloqueado en tu sistema, asegurando que tu red esté protegida frente a amenazas externas y configurada para tus necesidades específicas.