¿Cómo configurar IPTables en Linux?

0
1313

IPTables es una utilidad de línea de comandos que es la interfaz estándar para administrar el firewall en Linux.

Claves para trabajar con cadenas:
-A: agregar una nueva regla.
-D: elimina la regla.
-F: elimina todas las reglas.
-R:  reemplaza la regla.
-L: enumera todas las reglas.

INPUT – tráfico entrante.
OUTPUT – tráfico saliente.
FORWARD – tráfico reenviado (tránsito).

Opciones:
-p:  protocolo, puede ser todo, icmp, tcp, udp.
-s:  dirección IP de origen / host.
-d:  dirección IP de destino / host.
-i:  interfaz a la que llegó el paquete.
-o:  la interfaz desde la que sale el paquete.
–sport:  puerto de origen.
–port:  puerto de destino.

Acciones:
ACCEPT:  permitir paquetes.
REJECT: bloquea los paquetes con un mensaje de error.
DROP: bloques de paquetes (menos carga de CPU para solicitudes masivas, una opción de mayor prioridad que REJECT). Aqui el paquete sera descartado.
RETURN: deje de verificar la cadena actual y continúe con el padre.
MARK y CONNMARK: etiquetado de paquetes.
LOG: registro de paquetes en syslog.

Ejemplos de visualización de las reglas:

iptables -nvL
iptables -nvL | grep 192.168.0
iptables -n -L -v –line-numbers
iptables -L INPUT -n -v
iptables -L OUTPUT -n -v –line-numbers
iptables -L OUTPUT -n –line-numbers | less
iptables -L OUTPUT -n –line-numbers | grep 192.168.2.14
iptables -L INPUT –line-numbers
 
ip6tables -nvL
ip6tables -t filter -nvL

Ver NAT y reglas de manipulación:

iptables -L -t nat
iptables -L -t mangle

Ejemplos de eliminación de reglas:

iptables -D INPUT 3
iptables -D INPUT -s 192.168.2.14 -j DROP

Aquí hay un ejemplo de una regla NAT simple (donde 10.0.0.0/24 es una red de área local y 10.50.50.1 la salida hacia Internet):

iptables -t nat -I POSTROUTING -s 10.0.0.0/24 -j SNAT –to-source 10.50.50.1 –persistent

Un ejemplo de eliminación y adición de reglas NAT:

iptables -t nat -D POSTROUTING -s 172.16.2.0/16 -o eth1 -j SNAT –to-source 192.168.1.251-192.168.1.254 –persistent
iptables -t nat -A POSTROUTING -s 172.16.2.0/17 -o eth1 -j SNAT –to-source 192.168.1.218-192.168.1.222 –persistent

Si NAT está configurado y necesita reenviar el puerto a la IP local (donde 192.168.0.18 es la IP local y 10.50.50.2 busca eth0 en Internet):

iptables -t nat -A PREROUTING -d 10.50.50.2/32 -i eth0 -p tcp -m tcp –dport 81 -j DNAT –to-destination 192.168.0.18:81

Suponga que NAT para la red 192.168.0.0/24 se configura a través de 10.50.50.1, y 192.168.0.18 debe iniciarse a través de 10.50.50.2:

iptables -t nat -A POSTROUTING -s 192.168.0.18/32 -o eth0 -j SNAT –to-source 10.50.50.2

Reglas de reinicio completo (cuidado con esta regla):

iptables -F

Gestión De Servicios:

service iptables stop/start/restart/save

Ejemplo de permitir reglas para pop3, pop3s:

iptables -A INPUT -p tcp –dport 110 -j ACCEPT
iptables -A INPUT -p tcp –dport 995 -j ACCEPT

Ejemplo de imap, imaps:

iptables -A INPUT -p tcp –dport 143 -j ACCEPT
iptables -A INPUT -p tcp –dport 993 -j ACCEPT


Configurar las políticas INPUT y FORWARD predeterminadas para que se eliminen (cuidado con estas reglas):

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

Para permitir ping:

iptables -A INPUT -p icmp -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT

Ejemplos de bloqueo y desbloqueo de una dirección IP o red:

iptables -A INPUT -s xx.xx.xx.xx -j DROP
iptables -A INPUT -s xx.xx.xx.xx/24 -j DROP
iptables -A INPUT -s xx.xx.xx.xx/24 -j REJECT –reject-with icmp-port-unreachable
iptables -D INPUT -s xx.xx.xx.xx -j DROP

Al agregar una regla, es recomendable agregar un comentario, por ejemplo:

iptables -A INPUT -s xx.xx.xx.xx -m comment –comment “text” -j DROP

Limite el número de conexiones a 200 por puerto específico, por ejemplo, 443 y 80 (tenga en cuenta que el límite con un tráfico muy alto puede cargar mucho el procesador):

iptables -A INPUT -p tcp -m tcp –dport 443 -m connlimit –connlimit-above 200 –connlimit-mask 32 -j DROP
iptables -A INPUT -p tcp -m tcp –dport 443 –tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT
 
iptables -A INPUT -s 172.16.0.0/12 -p tcp –dport 80 -m connlimit –connlimit-above 200 -j DROP
iptables -A INPUT -s 172.16.0.0/12 -p tcp –dport 80 -j ACCEPT

Apertura del puerto 80 con límites de conexión:

iptables -A INPUT -p tcp –dport 80 -m limit –limit 50/second -j ACCEPT

Si necesita especificar varios puertos en la regla, debe agregar multipuerto, por ejemplo:

-m multiport –dports 80,8080

Un ejemplo de etiquetado de paquetes:

iptables -t mangle -A PREROUTING -s 192.168.5.0/24 -j MARK –set-mark 38

Opción para prohibir el escaneo de puertos (la IP se bloquea durante 300 segundos, de los cuales los paquetes provienen además de los puertos permitidos):

iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -p all -i eth0 -j ACCEPT
iptables -A OUTPUT -p all -o eth0 -j ACCEPT
iptables -A INPUT -m recent –rcheck –seconds 300 –name STOPSCAN -j DROP
iptables -A INPUT -p tcp -m multiport ! –dports 80,443 -m recent –set –name STOPSCAN -j DROP
iptables -A INPUT -p tcp –syn –dport 80 -j ACCEPT
iptables -A INPUT -p tcp –syn –dport 443 -j ACCEPT
iptables -A INPUT -p all -m state –state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p all -m state –state NEW,ESTABLISHED,RELATED -j ACCEPT

Puede hacer una copia de seguridad de las reglas en un archivo y también restaurarlas con los comandos:

iptables-save > iptables.dump
iptables-restore < iptables.dump
 
ip6tables-save > ip6tables.dump
ip6tables-restore < ip6tables.dump

Puede buscar el texto de acuerdo con las reglas de la siguiente manera:
iptables-save|grep 172.16.2.0/24

Dado que puede haber vulnerabilidades a través de RPC, es mejor cerrar el puerto 111 (e incluso mejor abrir solo los puertos necesarios y hacer el INPUT DROP predeterminado):
rpcinfo -p localhost

/sbin/iptables -A INPUT -p tcp –dport 111 -j DROP
/sbin/iptables -A INPUT -p udp –dport 111 -j DROP

LEAVE A REPLY

Please enter your comment!
Please enter your name here