Las reglas de iptables que debes conocer

Las reglas de iptables que debes conocer.

En este articulo veremos las reglas de iptables más utilizadas, por tanto son las que debes conocer.

Si eres, o quieres ser un administrador de sistemas (sysadmin) harás uso de ellas continuamente.

Las vemos.

Las reglas de iptables que debes conocer 1

 

Las reglas de iptables que debes conocer

En todos los ejemplos propuestos usamos la interfaz de red «eth0«.

Puedes comprobar tu interfaz con el comando:

ifconfig

Las vemos:

Borrar todas las reglas:

iptables -F
o
iptables --flush

 

Modificar la política de las reglas predeterminada:

Por defecto las reglas de iptables aceptan la conexión, podemos modificar este comportamiento ejecutando lo siguiente (depende de tus necesidades).

iptables -P INPUT DROP

iptables -P FORWARD DROP

iptables -P OUTPUT DROP

 

Bloquear una dirección ip específica:

Donde «BLOCK_THIS_IP» debes insertar la IP a bloquear.

iptables -A INPUT -i eth0 -s "$BLOCK_THIS_IP" -j DROP
iptables -A INPUT -i eth0 -p tcp -s "$BLOCK_THIS_IP" -j DROP

 

Permitir todo el trafico entrante por SSH:

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

 

Permitir trafico entrante por SSH desde una red especifica, o una IP definida:

Modifica «192.168.100.X» por tu rango, o por una IP especifica.

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

 

Permitir todo el trafico entrante HTTP y HTTPS:

HTTP por el 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

HTTPS por el 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

 

Combinar reglas con «multiport«:

Permite combinar reglas incluso a varios puertos.

En el ejemplo aceptamos todo el tráfico entrante por SSH, HTTP y HTTPS.

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

 

Permitir la salida por SSH:

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

 

Permitir salida de trafico por SSH desde una red especifica, o una IP definida:

Modifica «192.168.100.X» por tu rango, o por una IP especifica.

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

 

Permitir la salida de trafico por HTTP y HTTPS:

HTTP por el puerto 80.

iptables -A OUTPUT -o eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

HTTP por el puerto 443.

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

 

Equilibrar la carga del trafico web entrante:

Para está interesante función usaremos la extensión «iptables nth«.

En el ejemplo balancearemos el tráfico HTTPS sobre tres direcciones IP (tres servidores). Por cada 3º paquete, carga el siguiente servidor (con el contador 0). Los servidores tienen las siguientes ip:

192.168.1.117:443
192.168.1.118:443
192.168.1.119:443

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.117: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.118: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.119:443

 

Permitir que nos hagan ping desde el exterior:

iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

 

Hacer ping desde el servidor (al exterior):

iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT

 

Permitir el acceso «Loopback«:

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

 

Permitir que la red interna acceda a la externa:

Damos por supuesto que el servidor cuenta con dos tarjetas de red, en este caso «eth0» y «eth1«. En el ejemplo, eth1 conecta con la externa (internet), y eth0 a la red interna (por ejemplo: 192.168.100.x).

iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT

 

Permitir 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

 

Permitir conexiones NIS (Network Information System):

Para conocer los puertos ypbind

rpcinfo -p | grep ypbind

Ahora permitimos la conexión entrante al puerto 111 y los puertos que usa ypbind (en este caso 863 y 865).
iptables -A INPUT -p tcp --dport 111 -j ACCEPT
iptables -A INPUT -p udp --dport 111 -j ACCEPT
iptables -A INPUT -p tcp --dport 863 -j ACCEPT
iptables -A INPUT -p udp --dport 863 -j ACCEPT
iptables -A INPUT -p tcp --dport 865 -j ACCEPT
iptables -A INPUT -p udp --dport 865 -j ACCEPT

 

Permitir el trafico de «Rsync» desde una red o ip especifica:

Donde «192.168.100/24», coloca tu red o ip.

iptables -A INPUT -i eth0 -p tcp -s 192.168.100.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

 

Permitir la conexión MySQL desde una red específica (exclusivamente):

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

 

Permitir el trafico de Sendmail o Postfix (puerto 25):

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

 

Permitir el tráfico de IMAP / IMAPS:

IMAP

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

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

 

Permitir el trafico de POP3 / POP3S:

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

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

 

Bloquear ataques Dos:

Explicación y ejemplo:

  • -m limit: Usa la extensión limite de iptables.
  • –limit 25/minute: Limita a un máximo de 25 conexiones por minuto. Modifica este valor según tus necesidades.
  • –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 límite de ráfaga.

iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT

En un anterior articulo tienes un desarrollo más extenso.

 

Port Forwarding (enrutar el trafico de un puerto a otro):

En el ejemplo enrutamos todo el tráfico que accede al puerto 450, al puerto 22 (ssh).

iptables -t nat -A PREROUTING -p tcp -d 192.168.100.117 --dport 450 -j DNAT --to 192.168.100.117:22

Recuerda que entonces también debes abrir el puerto 450.
iptables -A INPUT -i eth0 -p tcp --dport 450 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 450 -m state --state ESTABLISHED -j ACCEPT

 

Registrar los dropped packets:

Primero creamos la cadena LOGGING.

iptables -N LOGGING

Nos aseguramos que todas las conexiones entrantes restantes salten a la cadena LOGGING.
iptables -A INPUT -j LOGGING

Registramos los paquetes con un prefijo personalizado, esta practica es para identificarlos correctamente.
iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables Packet Dropped: " --log-level 7

Y por ultimo…
iptables -A LOGGING -j DROP

 

Aquí concluye este manual, si te gusto compártelo.

 

Agregar comentario