A primera vista, las reglas de IPTables pueden parecer crípticas.
En este artículo, proporcioné 25 reglas prácticas de IPTables que puede copiar/pegar y usar según sus necesidades.
Estos ejemplos actuarán como plantillas básicas para que modifique estas reglas para satisfacer sus requisitos específicos.
Para una fácil referencia, todas estas 25 reglas de iptables están en formato de script de shell:iptables-rules
1. Eliminar reglas existentes
Antes de comenzar a crear un nuevo conjunto de reglas, es posible que desee limpiar todas las reglas predeterminadas y las reglas existentes. Use el comando iptables flush como se muestra a continuación para hacer esto.
iptables -F (or) iptables --flush
2. Establecer políticas de cadena predeterminadas
La política de cadena predeterminada es ACEPTAR. Cambie esto a DROP para todas las cadenas INPUT, FORWARD y OUTPUT como se muestra a continuación.
iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT DROP
Cuando establece la política predeterminada de la cadena de ENTRADA y SALIDA como DROP, para cada requisito de regla de firewall que tenga, debe definir dos reglas. es decir, uno para entrantes y otro para salientes.
En todos nuestros ejemplos a continuación, tenemos dos reglas para cada escenario, ya que hemos establecido DROP como política predeterminada para la cadena de ENTRADA y SALIDA.
Si confía en sus usuarios internos, puede omitir la última línea anterior. es decir, no DROP todos los paquetes salientes de forma predeterminada. En ese caso, para cada requisito de regla de firewall que tenga, solo tiene que definir una sola regla. es decir, defina la regla solo para los paquetes entrantes, ya que los salientes son ACEPTAR para todos los paquetes.
3. Bloquear una dirección IP específica
Antes de continuar con otros ejemplos, si desea bloquear una dirección IP específica, debe hacerlo primero como se muestra a continuación. Cambie "x.x.x.x" en el siguiente ejemplo a la dirección IP específica que desea bloquear.
BLOCK_THIS_IP="x.x.x.x" iptables -A INPUT -s "$BLOCK_THIS_IP" -j DROP
Esto es útil cuando encuentra algunas actividades extrañas de una dirección IP específica en sus archivos de registro y desea bloquear temporalmente esa dirección IP mientras investiga más.
También puede usar una de las siguientes variaciones, que bloquea solo el tráfico TCP en la conexión eth0 para esta dirección IP.
iptables -A INPUT -i eth0 -s "$BLOCK_THIS_IP" -j DROP iptables -A INPUT -i eth0 -p tcp -s "$BLOCK_THIS_IP" -j DROP
4. Permitir TODO SSH entrante
Las siguientes reglas permiten TODAS las conexiones ssh entrantes en la interfaz eth0.
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
Nota :Si quieres entender exactamente qué significan todos y cada uno de los argumentos, deberías leer Cómo agregar reglas de firewall de IPTables
5. Permitir SSH entrante solo desde una red específica
Las siguientes reglas permiten conexiones ssh entrantes solo desde la red 192.168.100.X.
iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
En el ejemplo anterior, en lugar de /24, también puede usar la máscara de subred completa. es decir, "192.168.100.0/255.255.255.0".
6. Permitir HTTP y HTTPS entrantes
Las siguientes reglas permiten todo el tráfico web entrante. es decir, tráfico HTTP al puerto 80.
iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
Las siguientes reglas permiten todo el tráfico web seguro entrante. es decir, tráfico HTTPS al puerto 443.
iptables -A INPUT -i eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT
7. Combine varias reglas juntas usando MultiPorts
Cuando permite conexiones entrantes desde el mundo exterior a múltiples puertos, en lugar de escribir reglas individuales para cada puerto, puede combinarlas usando la extensión multipuerto como se muestra a continuación.
El siguiente ejemplo permite todo el tráfico SSH, HTTP y HTTPS entrante.
iptables -A INPUT -i eth0 -p tcp -m multiport --dports 22,80,443 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp -m multiport --sports 22,80,443 -m state --state ESTABLISHED -j ACCEPT
8. Permitir SSH saliente
Las siguientes reglas permiten la conexión ssh saliente. es decir, cuando hace ssh desde adentro a un servidor externo.
iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
Tenga en cuenta que esto es ligeramente diferente a la regla entrante. es decir, permitimos el estado NUEVO y ESTABLECIDO en la cadena de SALIDA, y solo el estado ESTABLECIDO en la cadena de ENTRADA. Para la regla entrante, es viceversa.
9. Permitir SSH saliente solo a una red específica
Las siguientes reglas permiten la conexión ssh saliente solo a una red específica. es decir, solo tiene un ssh para la red 192.168.100.0/24 desde el interior.
iptables -A OUTPUT -o eth0 -p tcp -d 192.168.100.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
10. Permitir HTTPS salientes
Las siguientes reglas permiten el tráfico web seguro saliente. Esto es útil cuando desea permitir el tráfico de Internet para sus usuarios. En los servidores, estas reglas también son útiles cuando desea usar wget para descargar algunos archivos desde el exterior.
iptables -A OUTPUT -o eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A INPUT -i eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT
Nota:Para el tráfico web HTTP saliente, agregue dos reglas adicionales como las anteriores y cambie 443 a 80.
11. Equilibrar la carga del tráfico web entrante
También puede equilibrar la carga de su tráfico web entrante utilizando las reglas de firewall de iptables.
Esto usa la n-ésima extensión de iptables. El siguiente ejemplo equilibra la carga del tráfico HTTPS a tres direcciones IP diferentes. Por cada tercer paquete, se equilibra la carga al servidor apropiado (usando el contador 0).
iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.101:443 iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 1 -j DNAT --to-destination 192.168.1.102:443 iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 2 -j DNAT --to-destination 192.168.1.103:443
12. Permitir ping desde el exterior hacia el interior
Las siguientes reglas permiten que los usuarios externos puedan hacer ping a sus servidores.
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
13. Permitir ping desde adentro hacia afuera
Las siguientes reglas le permiten hacer ping desde adentro a cualquiera de los servidores externos.
iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
14. Permitir acceso de bucle invertido
Debe permitir el acceso de bucle invertido completo en sus servidores. es decir, acceda usando 127.0.0.1
iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT
15. Permitir red interna a red externa.
En el servidor de firewall donde una tarjeta ethernet está conectada a la externa y otra tarjeta ethernet conectada a los servidores internos, use las siguientes reglas para permitir que la red interna se comunique con la red externa.
En este ejemplo, eth1 está conectado a una red externa (internet) y eth0 está conectado a una red interna (por ejemplo:192.168.1.x).
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
16. Permitir DNS saliente
Las siguientes reglas permiten conexiones DNS salientes.
iptables -A OUTPUT -p udp -o eth0 --dport 53 -j ACCEPT iptables -A INPUT -p udp -i eth0 --sport 53 -j ACCEPT
17. Permitir conexiones NIS
Si está ejecutando NIS para administrar sus cuentas de usuario, debe permitir las conexiones NIS. Incluso cuando se permite la conexión SSH, si no permite las conexiones ypbind relacionadas con NIS, los usuarios no podrán iniciar sesión.
Los puertos NIS son dinámicos. es decir, cuando se inicia ypbind, asigna los puertos.
Primero haga un rpcinfo -p como se muestra a continuación y obtenga los números de puerto. En este ejemplo, estaba usando los puertos 853 y 850.
rpcinfo -p | grep ypbind
Ahora permita la conexión entrante al puerto 111 y los puertos que utilizó ypbind.
iptables -A INPUT -p tcp --dport 111 -j ACCEPT iptables -A INPUT -p udp --dport 111 -j ACCEPT iptables -A INPUT -p tcp --dport 853 -j ACCEPT iptables -A INPUT -p udp --dport 853 -j ACCEPT iptables -A INPUT -p tcp --dport 850 -j ACCEPT iptables -A INPUT -p udp --dport 850 -j ACCEPT
Lo anterior no funcionará cuando reinicie ypbind, ya que tendrá números de puerto diferentes en ese momento.
Hay dos soluciones para esto:1) Use una dirección IP estática para su NIS, o 2) Use algunas técnicas inteligentes de secuencias de comandos de shell para obtener automáticamente el número de puerto dinámico de la salida del comando "rpcinfo -p", y use las de arriba reglas de iptables.
18. Permitir Rsync desde una red específica
Las siguientes reglas permiten rsync solo desde una red específica.
iptables -A INPUT -i eth0 -p tcp -s 192.168.101.0/24 --dport 873 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 873 -m state --state ESTABLISHED -j ACCEPT
19. Permitir la conexión MySQL solo desde una red específica
Si está ejecutando MySQL, normalmente no desea permitir la conexión directa desde el exterior. En la mayoría de los casos, es posible que tenga un servidor web ejecutándose en el mismo servidor donde se ejecuta la base de datos MySQL.
Sin embargo, es posible que los DBA y los desarrolladores deban iniciar sesión directamente en MySQL desde su computadora portátil y de escritorio utilizando el cliente MySQL. En ese caso, es posible que desee permitir que su red interna se comunique con MySQL directamente como se muestra a continuación.
iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT
20. Permitir el tráfico de Sendmail o Postfix
Las siguientes reglas permiten el tráfico de correo. Puede ser sendmail o postfix.
iptables -A INPUT -i eth0 -p tcp --dport 25 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 25 -m state --state ESTABLISHED -j ACCEPT
21. Permitir IMAP e IMAPS
Las siguientes reglas permiten el tráfico IMAP/IMAP2.
iptables -A INPUT -i eth0 -p tcp --dport 143 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 143 -m state --state ESTABLISHED -j ACCEPT
Las siguientes reglas permiten el tráfico IMAPS.
iptables -A INPUT -i eth0 -p tcp --dport 993 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 993 -m state --state ESTABLISHED -j ACCEPT
22. Permitir POP3 y POP3S
Las siguientes reglas permiten el acceso a POP3.
iptables -A INPUT -i eth0 -p tcp --dport 110 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 110 -m state --state ESTABLISHED -j ACCEPT
Las siguientes reglas permiten el acceso a POP3S.
iptables -A INPUT -i eth0 -p tcp --dport 995 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 995 -m state --state ESTABLISHED -j ACCEPT
23. Prevenir ataques DoS
La siguiente regla de iptables lo ayudará a prevenir el ataque de denegación de servicio (DoS) en su servidor web.
iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
En el ejemplo anterior:
- -m limit:Esto usa la extensión limit iptables
- –límite 25/minuto:Esto limita solo un máximo de 25 conexiones por minuto. Cambie este valor según sus requisitos específicos
- –limit-burst 100:este valor indica que el límite/minuto se aplicará solo después de que el número total de conexiones haya alcanzado el nivel de límite de ráfaga.
24. Reenvío de puertos
El siguiente ejemplo enruta todo el tráfico que llega al puerto 442 al 22. Esto significa que la conexión ssh entrante puede provenir tanto del puerto 22 como del 422.
iptables -t nat -A PREROUTING -p tcp -d 192.168.102.37 --dport 422 -j DNAT --to 192.168.102.37:22
Si hace lo anterior, también debe permitir explícitamente la conexión entrante en el puerto 422.
iptables -A INPUT -i eth0 -p tcp --dport 422 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 422 -m state --state ESTABLISHED -j ACCEPT
25. Registrar paquetes descartados
También es posible que desee registrar todos los paquetes descartados. Estas reglas deben estar en la parte inferior.
Primero, cree una nueva cadena llamada REGISTRO.
iptables -N LOGGING
Luego, asegúrese de que todas las conexiones entrantes restantes salten a la cadena de REGISTRO como se muestra a continuación.
iptables -A INPUT -j LOGGING
A continuación, registre estos paquetes especificando un "prefijo de registro" personalizado.
iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables Packet Dropped: " --log-level 7
Finalmente, suelta estos paquetes.
iptables -A LOGGING -j DROP
Todas las 25 reglas de iptables anteriores están en formato de script de shell:iptables-rules
Artículos anteriores de la serie iptables:
- Tutorial de cortafuegos de Linux:tablas IPTables, cadenas, fundamentos de reglas
- IPTables Flush:eliminar/eliminar todas las reglas en RedHat y CentOS Linux
- IPTables de Linux:cómo agregar reglas de firewall (con el ejemplo Permitir SSH)
- IPTables de Linux:ejemplos de reglas entrantes y salientes (SSH y HTTP)