Translation(s): Español - Inglés - Italiano


Iptables permite filtración de paquetes, traducción de direcciones de red y modificación del encabezado de los paquetes.

Dos de los más comunes usos de iptables son dar soporte para cortafuegos y NAT.

Configurar iptables manualmente es un reto para los que están iniciando. Afortunadamente, existen algunas herramientas de configuración (asistentes) disponibles para ayudarse, por ejemplo, fwbuilder, bastille, ferm (wiki page), ufw (Uncomplicated Firewall, from Ubuntu).

Ver la configuración actual

Para ver qué reglas ya están configuradas, utilice este comando:

 iptables -L

La salida será similar a la siguiente:

 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

Esto permite a cualquiera el acceso de lo que sea a donde sea.

Almacenar las reglas en un archivo

Nota: Existe un paquete que le puede ayudar a hacer esto: iptables-persistent

Vamos hacer unas pruebas, el comportamiento será similar al que se detalla en la siguiente imagen:

http://www.nuevaeralatam.com/lib/exe/fetch.php?t=1329587581&w=400&h=463&media=flowroot4591.png

Para ello edite el archivo:

 vim /etc/iptables.test.rules

Vamos a ingresar algunas reglas básicas:

*filter

# Permitir todo el tráfico de loopback (lo0) y denegar todo el tráfico de 127/8 que no utiliza lo0
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT

# Aceptar todas la conexiones entrantes previamente establecidas
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Aceptar todo el tráfico saliente
# Puede modificar esto para aceptar cierto tráfico únicamente
-A OUTPUT -j ACCEPT

# Permitir HTTP y HTTPS desde cualquier lugar
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT

# Permitir las conexiones de SSH
# EL NUMERO -dport ES EL MISMO QUE CONFIGURÓ EN EL ARCHIVO SSHD_CONFIG
-A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT

# Por favor lea la documentación de iptables y considere si el acceso ssh
# para cualquiera es lo mejor. Por ejemplo puede permitir el acceso únicamente desde ciertas IPs

# Permitir ping
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT

# Registrar todas las llamadas denegadas por iptables (accesar vía el comando 'dmesg')
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7

# Rechazar todo el otro tráfico de entrada - de manera predetermianda a menos de que exista una política que lo permita:
-A INPUT -j REJECT
-A FORWARD -j REJECT

COMMIT

Esto parece un poco complicado, pero observe cada sección a la vez. Verá que simplemente deniega el tráfico en todos los puertos menos los que permitió, HTTP, HTTPS y SSH

Activar las nuevas reglas

 iptables-restore < /etc/iptables.test.rules

Vea la diferencia:

 iptables -L

Ahora la salida le mostrará únicamente los puertos abiertos definidos arriba. Todos los demás están cerrados.

Si está feliz con esta configuración, salve las reglas en un archivo "master" de iptables:

 iptables-save > /etc/iptables.up.rules

Para asegurarse de que estas reglas se iniciaran al reiniciar, debe crear otro archivo:

 vim /etc/network/if-pre-up.d/iptables

Agregue las siguientes líneas:

 #!/bin/bash
 /sbin/iptables-restore < /etc/iptables.up.rules

El archivo debe ser ejecutable, cambie los permisos:

 chmod +x /etc/network/if-pre-up.d/iptables

Nota: Este COMO es una traducción, y a su vez ha sido contribuída por el usuario Geejay en el wiki wiki.openvz.org como parte del COMO para instalar un contenidor.

Lea también


CategorySystemAdministration