- Santiago's Newsletter
- Posts
- ¿Qué es IPTABLES? Guía de uso y comandos esenciales
¿Qué es IPTABLES? Guía de uso y comandos esenciales
IPTABLES es una herramienta esencial para tener el control total del tráfico de red en un sistema Linux.
Esta poderosa herramienta permite configurar políticas de filtrado de tráfico de red en el kernel, estableciendo reglas para aceptar, rechazar o redirigir paquetes en la red.
Usualmente se utiliza para la configuración de reglas de firewall, gestión de tráfico de red, y la aplicación de políticas de seguridad en servidores.
A continuación, se presentan los conceptos clave y los comandos esenciales de IPTABLES.
¿Cómo funciona IPTABLES?
IPTABLES funciona basándose en un conjunto de reglas que se aplican a los paquetes de red que entran y salen del sistema.
Cada regla define condiciones específicas, como la dirección IP de origen, el puerto de destino o el protocolo, y luego establece una acción a tomar cuando un paquete cumple con esas condiciones.
Estas reglas se organizan dentro de tablas, cada una con un propósito particular. Las tablas más comunes incluyen
filter: que es la tabla predeterminada para el filtrado de paquetes
nat: para la traducción de direcciones de red y redirección de puertos
mangle: para la modificación de encabezados de los paquetes
raw: usada principalmente para excepciones en el seguimiento de conexiones.
Dentro de cada tabla, las reglas se agrupan en cadenas, que especifican cuándo deben evaluarse las reglas según el trayecto del paquete (entrada, salida o reenvío).
Las reglas se evalúan en el orden en que fueron añadidas, y una vez que un paquete coincide con una regla, se toma la acción definida, por lo que el orden de las reglas y la elección de la tabla correcta son cruciales para el comportamiento adecuado de la red.
1. Comprobación de Reglas Actuales
Para visualizar las reglas actualmente configuradas en iptables
, podemos usar los siguientes comandos:
iptables -L
: Lista todas las reglas en las cadenas de la tablafilter
por defecto. Esta opción proporciona una visión general básica de las reglas aplicadas. Puedes listar todas las reglas de otra tabla coniptables -L <tabla>
.iptables -L -v -n
: Lista las reglas con más detalle (-v
para mostrar más información) y con direcciones IP en formato numérico (-n
), lo cual es útil para evitar la resolución DNS, agilizando la consulta.iptables -S
: Muestra las reglas de manera que puedan ser reutilizadas en scripts, útil si necesitas exportar o replicar la configuración.
2. Eliminar Reglas
Para limpiar o eliminar reglas en iptables
, podemos usar los comandos siguientes:
iptables -F
: Limpia todas las reglas en las cadenas de la tablafilter
.iptables -F <cadena>
: Limpia solo las reglas de una cadena específica, comoINPUT
oFORWARD
.
3. Definir Políticas por Defecto
Establecer las políticas por defecto en iptables
define cómo se comportará el sistema si no hay reglas específicas que coincidan con el tráfico entrante o saliente:
iptables -P INPUT ACCEPT
: Define la política predeterminada para la cadenaINPUT
como aceptar todo el tráfico entrante.iptables -P FORWARD ACCEPT
: Define la política por defecto para la cadenaFORWARD
, que controla el tráfico que pasa por el sistema (utilizado en el enrutamiento).iptables -P OUTPUT ACCEPT
: Establece que todo el tráfico saliente será permitido.
Las opciones -P
establecen la política predeterminada (policies) para cada cadena.
4. Creación y Trabajo con Cadenas
Podemos crear cadenas personalizadas en iptables
para agrupar reglas según nuestras necesidades:
iptables -N <nombre_cadena>
: Crea una nueva cadena de reglas personalizada.iptables -X <nombre_cadena>
: Elimina una cadena personalizada previamente creada (siempre y cuando no esté en uso por ninguna regla).iptables -A INPUT -j <nombre_cadena>
: Reenvía el tráfico de red a una cadena definida por el usuario desde la cadenaINPUT
.
5. Permitir o Denegar Tráfico con Condiciones
Podemos usar iptables
para permitir o denegar tráfico basado en varias condiciones:
Permitir tráfico de una IP específica a un puerto específico:
iptables -A INPUT -p tcp -s <IP> --dport <puerto> -j ACCEPT
Este comando permite el tráfico TCP entrante (-p tcp
) desde una IP específica (-s <IP>
) a un puerto determinado (--dport <puerto>
), y la acción -j ACCEPT
especifica que el tráfico debe ser aceptado.
Denegar tráfico de una IP específica a un puerto específico:
iptables -A INPUT -p tcp -s <IP> --dport <puerto> -j DROP
Similar al comando anterior, pero la acción -j DROP
indica que el tráfico debe ser descartado.
6. Eliminar Reglas Específicas
Si necesitamos eliminar reglas específicas, podemos hacerlo de la siguiente manera:
Eliminar una regla usando su número:
iptables -D INPUT <número_de_regla>
Aquí, <número_de_regla>
indica la posición de la regla en la cadena. Se puede ver el número de regla utilizando el comando iptables -L --line-numbers
.
7. Guardado, Restauración y Log de Reglas
Es esencial poder guardar y restaurar las reglas de iptables
para evitar que se pierdan tras un reinicio del sistema:
Guardar reglas:
iptables-save > /ruta/archivo
Guarda todas las reglas actuales en un archivo que puede restaurarse posteriormente.
Restaurar reglas:
iptables-restore < /ruta/archivo
Restaura las reglas desde el archivo guardado.
Registrar paquetes descartados:
iptables -A INPUT -p tcp --dport <puerto> -j LOG --log-prefix "IPTables-Dropped: " --log-level 4
Este comando registra los paquetes descartados para poder analizarlos más tarde en los archivos de log del sistema.
8. Redireccionamiento de NAT y Reenvío de Puertos
Para configurar el reenvío de puertos o redireccionamiento de NAT, iptables
ofrece poderosas herramientas:
Habilitar NAT en una interfaz:
iptables -t nat -A POSTROUTING -o <interfaz> -j MASQUERADE
Este comando habilita la traducción de direcciones en una interfaz de red específica.
Reenviar tráfico de un puerto a otro:
iptables -t nat -A PREROUTING -p tcp --dport <puerto_fuente> -j DNAT --to-destination <IP_destino>:<puerto_destino>
Aquí, redirigimos el tráfico entrante desde el puerto_fuente
hacia otro puerto y dirección IP, lo que es útil en configuraciones de servidores con múltiples servicios.
Ejemplo Práctico Completo:
Supongamos que queremos permitir el acceso SSH (puerto 22) solo desde una IP específica (por ejemplo, 192.168.1.100), denegar todo el acceso a dicho puerto para otras IPs, y registrar cualquier intento de acceso fallido.
Permitir acceso SSH desde la IP 192.168.1.100:
iptables -A INPUT -p tcp -s 192.168.1.100 --dport 22 -j ACCEPT
Denegar el acceso SSH desde otras IPs:
iptables -A INPUT -p tcp --dport 22 -j DROP
Registrar los intentos de acceso fallidos:
iptables -A INPUT -p tcp --dport 22 -j LOG --log-prefix "SSH-Denied: " --log-level 4
Con esta configuración, estamos protegiendo el servidor SSH permitiendo solo el acceso desde una IP de confianza, bloqueando otras conexiones y registrando cualquier intento no autorizado.
En resumen, iptables
es una herramienta robusta para gestionar la seguridad de la red en sistemas Linux.
Su flexibilidad y capacidad para crear reglas personalizadas nos permiten adaptarnos a las necesidades de cada escenario en una red.
