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.