Guía de uso de iptables: Opciones y Ejemplos

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

iptables es una herramienta poderosa de administración de firewall en Linux que permite configurar reglas para el filtrado y manipulación de paquetes de red. Está diseñada para controlar el tráfico de entrada, salida y reenvío entre redes. Se puede utilizar para definir reglas que determinen cómo deben manejarse los paquetes de red según diversos criterios, como direcciones IP, puertos y protocolos.

Estructura básica de iptables

La estructura general de un comando iptables es la siguiente:

iptables [opciones] [cadena] [criterios de coincidencia] [objetivo]
  • [opciones]: Controlan aspectos del comportamiento del comando.
  • [cadena]: Define la tabla y la cadena donde se aplicarán las reglas (por ejemplo, INPUT, OUTPUT, FORWARD).
  • [criterios de coincidencia]: Especifica las condiciones que deben cumplir los paquetes para que la regla se aplique.
  • [objetivo]: Define la acción a realizar (ACCEPT, DROP, REJECT, etc.).

Tablas y Cadenas

iptables trabaja con varias tablas que contienen diferentes cadenas, cada una con una función específica:

  1. Tablas principales:
    • filter: Es la tabla por defecto, utilizada para filtrar el tráfico de red.
    • nat: Maneja la traducción de direcciones de red (NAT).
    • mangle: Modifica los encabezados de los paquetes.
    • raw: Desactiva el seguimiento de conexiones para ciertos paquetes.
  2. Cadenas comunes:
    • INPUT: Regula el tráfico entrante dirigido al propio sistema.
    • OUTPUT: Controla el tráfico que sale desde el sistema.
    • FORWARD: Gestiona el tráfico que pasa a través del sistema (por ejemplo, en un router).
    • PREROUTING: Modifica los paquetes antes de ser enrutados.
    • POSTROUTING: Modifica los paquetes después de ser enrutados.

Opciones más utilizadas de iptables

  • -A: Añade una nueva regla al final de una cadena.
  • -D: Elimina una regla de una cadena.
  • -L: Lista las reglas actuales de una cadena.
  • -F: Limpia todas las reglas de una cadena o tabla.
  • -P: Establece la política por defecto para una cadena.
  • -t: Especifica la tabla que se utilizará (por defecto es "filter").
  • -i: Especifica la interfaz de red de entrada.
  • -o: Define la interfaz de red de salida.
  • -s: Establece la dirección IP de origen.
  • -d: Define la dirección IP de destino.
  • -p: Especifica el protocolo (TCP, UDP, ICMP).
  • --sport: Define el puerto de origen.
  • --dport: Define el puerto de destino.
  • -j: Especifica el objetivo o acción (ACCEPT, DROP, REJECT, LOG).

Ejemplos de uso de iptables

1. Permitir tráfico SSH (puerto 22)

Para permitir el tráfico SSH entrante en un servidor, puedes usar:

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

Esta regla permite conexiones TCP en el puerto 22 (el puerto por defecto para SSH) desde cualquier dirección IP.

2. Bloquear todo el tráfico entrante

Si quieres bloquear todo el tráfico entrante excepto las conexiones que ya han sido establecidas:

iptables -P INPUT DROP
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Aquí, la primera línea establece la política por defecto para la cadena INPUT en "DROP", mientras que la segunda permite las conexiones establecidas y relacionadas.

3. Permitir tráfico HTTP y HTTPS

Para permitir tráfico web en los puertos 80 (HTTP) y 443 (HTTPS):

iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

Esto permitirá el tráfico hacia un servidor web en los puertos típicos de HTTP y HTTPS.

4. Redireccionar tráfico en un servidor NAT

Si tu servidor actúa como un router y quieres redirigir todo el tráfico de una red local a través del servidor, usa la siguiente regla de NAT:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Esta regla aplica el enmascaramiento de direcciones IP en la interfaz "eth0", permitiendo que el tráfico de la red interna sea redirigido a Internet.

5. Bloquear una dirección IP específica

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

iptables -A INPUT -s 192.168.1.100 -j DROP

Esto evitará que cualquier tráfico de esa dirección IP llegue al servidor.

6. Registrar intentos de acceso a un puerto bloqueado

Si deseas registrar intentos de acceso no autorizado en un puerto específico (por ejemplo, puerto 22):

iptables -A INPUT -p tcp --dport 22 -j LOG --log-prefix "SSH attempt: "
iptables -A INPUT -p tcp --dport 22 -j DROP

La primera línea registra los intentos de conexión al puerto SSH en el archivo de registro del sistema, mientras que la segunda línea bloquea esos intentos.

Guardar y restaurar configuraciones de iptables

Las reglas de iptables no son persistentes por defecto, por lo que se deben guardar manualmente para que se mantengan después de un reinicio del sistema. Aquí es donde entran en juego herramientas como iptables-save, iptables-restore y métodos para hacer copias de seguridad de las reglas.

Uso de iptables-save y iptables-restore

Guardar las reglas actuales con iptables-save

El comando iptables-save exporta las reglas actuales de iptables a un formato legible, que puede ser almacenado en un archivo para su posterior restauración.

Para guardar todas las reglas en un archivo, ejecuta:

iptables-save > /ruta/al/archivo/iptables.rules

Por ejemplo:

iptables-save > /etc/iptables.rules

Esto guardará las reglas actuales en el archivo /etc/iptables.rules.

Restaurar las reglas con iptables-restore

Para restaurar las reglas desde un archivo previamente guardado con iptables-save, utiliza iptables-restore:

iptables-restore < /ruta/al/archivo/iptables.rules

Por ejemplo:

iptables-restore < /etc/iptables.rules

Este comando cargará las reglas desde el archivo y reemplazará las reglas actuales de iptables.

Automatizar la restauración de reglas al inicio del sistema

Para asegurarte de que las reglas de iptables se restauren automáticamente al reiniciar el sistema, puedes agregar el comando iptables-restore a un script de inicio o al archivo /etc/rc.local (si está disponible en tu distribución).

Por ejemplo, puedes agregar la siguiente línea al archivo /etc/rc.local:

iptables-restore < /etc/iptables.rules

Asegúrate de que el archivo de reglas (/etc/iptables.rules) sea accesible y legible por el sistema durante el inicio.

Copias de seguridad de las reglas de iptables con iptables-backup

Aunque no existe un comando específico llamado iptables-backup, puedes realizar copias de seguridad de las reglas de iptables utilizando iptables-save. Este método es esencialmente una forma de respaldar tus reglas actuales.

Crear una copia de seguridad

Para crear una copia de seguridad con marca de tiempo, puedes utilizar:

iptables-save > /ruta/de/respaldo/iptables-backup-$(date +%F).rules

Por ejemplo:

iptables-save > /backups/iptables-backup-$(date +%F).rules

Esto creará un archivo de respaldo con la fecha actual, facilitando el seguimiento de diferentes versiones de tus reglas de firewall.

Restaurar desde una copia de seguridad

Para restaurar las reglas desde una copia de seguridad específica, utiliza iptables-restore de la misma manera:

iptables-restore < /ruta/de/respaldo/iptables-backup-YYYY-MM-DD.rules

Reemplaza YYYY-MM-DD con la fecha correspondiente al archivo de respaldo que deseas restaurar.

Conclusión

iptables es una herramienta robusta que permite el control total sobre el tráfico de red en un sistema Linux. Además de configurar reglas personalizadas para mantener la seguridad y gestionar el tráfico de tu red, es crucial entender cómo guardar, restaurar y respaldar estas reglas para asegurar que tu configuración se mantenga consistente y se pueda recuperar en caso de cambios no deseados o fallas del sistema.

Utilizando iptables-save y iptables-restore, puedes gestionar eficientemente tus reglas de firewall, asegurando que se apliquen automáticamente al iniciar el sistema y que puedas restaurarlas fácilmente desde copias de seguridad en caso necesario.