Descripción general de iptables
Guía práctica para la gestión del cortafuegos Linux con iptables.
iptables es la interfaz de línea de comandos estándar para gestionar el firewall netfilter integrado en el kernel de Linux. Todos los comandos de iptables requieren privilegios de root.
Obtén acceso root antes de ejecutar cualquiera de estos comandos:
sudo -ien sistemas basados en Debian, osuen los demás.
Visualización de reglas y estado
Muestra todas las reglas con salida detallada:
iptables -L -n -v
Muestra las reglas con números de línea:
iptables -n -L -v --line-numbers
Muestra solo la cadena INPUT o OUTPUT:
iptables -L INPUT -n -v
iptables -L OUTPUT -n -v --line-numbers
Flags:
-L— listar reglas-v— salida detallada (interfaz, opciones, sufijos K/M/G)-n— mostrar IPs y puertos como números, sin resolución DNS
Inicio y detención del firewall
Mediante el servicio del sistema:
service ufw stop
service ufw start
Vaciar todas las reglas manualmente:
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
Flags:
-F— vaciar (eliminar) todas las reglas-X— eliminar una cadena-t— seleccionar una tabla (nat, mangle)-P— establecer la política predeterminada
Adición y eliminación de reglas
Elimina una regla por número de línea:
iptables -L INPUT -n --line-numbers # localiza el número de línea
iptables -D INPUT 3 # elimina la línea 3
Elimina una regla por IP de origen:
iptables -D INPUT -s 202.54.1.1 -j DROP
Inserta una regla entre las líneas 1 y 2:
iptables -I INPUT 2 -s 202.54.1.2 -j DROP
Guardado y restauración de reglas
iptables-save > /etc/iptables.rules # guardar
iptables-restore < /etc/iptables.rules # restaurar
Políticas predeterminadas
Descartar todo el tráfico (denegar todo):
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
Bloquear el tráfico entrante no solicitado, permitir el saliente:
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -m state --state NEW,ESTABLISHED -j ACCEPT
Bloqueo de IPs y redes
Bloquea una IP específica:
iptables -A INPUT -s 1.2.3.4 -j DROP
Descarta rangos de red privados en una interfaz pública:
iptables -A INPUT -i eth1 -s 192.168.0.0/24 -j DROP
iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP
Rangos de direcciones privadas:
10.0.0.0/8(Clase A)172.16.0.0/12(Clase B)192.168.0.0/16(Clase C)224.0.0.0/4(Multicast D)240.0.0.0/5(Clase E)127.0.0.0/8(Loopback)
Bloqueo de puertos
Bloquea todas las conexiones entrantes en el puerto 80:
iptables -A INPUT -p tcp --dport 80 -j DROP
iptables -A INPUT -i eth1 -p tcp --dport 80 -j DROP
Bloquea el puerto 80 para una IP específica:
iptables -A INPUT -p tcp -s 1.2.3.4 --dport 80 -j DROP
Abre un rango de puertos:
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 7000:7010 -j ACCEPT
Bloqueo de conexiones salientes por dominio
Busca la IP y el CIDR:
host -t a facebook.com
whois 69.171.228.40 | grep CIDR
Bloquea el rango:
iptables -A OUTPUT -p tcp -d 69.171.224.0/19 -j DROP
Logging
Registra y descarta un paquete:
iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j LOG --log-prefix "IP_SPOOF A: "
iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP
Logging con limitación de tasa (máx. 7 entradas cada 5 minutos):
iptables -A INPUT -i eth1 -s 10.0.0.0/8 -m limit --limit 5/m --limit-burst 7 -j LOG --log-prefix "IP_SPOOF A: "
iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP
Consulta el log:
tail -f /var/log/messages
grep -i --color 'IP SPOOF' /var/log/messages
Filtrado por dirección MAC
iptables -A INPUT -m mac --mac-source 00:0F:EA:91:04:08 -j DROP
::: front-promo-main-services
:::
# Permite solo el puerto TCP 22 desde una MAC específica
iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source 00:0F:EA:91:04:07 -j ACCEPT
Gestión de ICMP (Ping)
Referencia de tipos de mensajes ICMP:
| Tipo | Descripción |
|---|---|
| 0 | Echo reply (respuesta al ping) |
| 3 | Destination unreachable |
| 4 | Source quench |
| 5 | Redirect |
| 8 | Echo request (ping) |
| 11 | Time-to-live exceeded |
| 12 | IP header bad |
Configuración recomendada — permite solo los tipos ICMP seguros:
iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 12 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 0 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 3 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 4 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 11 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 12 -j ACCEPT
Bloquea todas las solicitudes de ping:
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
Permite el ping solo desde la subred local:
iptables -A INPUT -s 192.168.1.0/24 -p icmp --icmp-type echo-request -j ACCEPT
Puertos comunes — abrir o cerrar
Sustituye ACCEPT por DROP para bloquear un puerto:
# SSH (puerto 22)
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
# HTTP / HTTPS
iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT
# SMTP (puerto 25)
iptables -A INPUT -m state --state NEW -p tcp --dport 25 -j ACCEPT
# DNS (puerto 53)
iptables -A INPUT -m state --state NEW -p udp --dport 53 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT
# POP3 (puerto 110)
iptables -A INPUT -m state --state NEW -p tcp --dport 110 -j ACCEPT
# IMAP (puerto 143)
iptables -A INPUT -m state --state NEW -p tcp --dport 143 -j ACCEPT
# MySQL (puerto 3306) — solo red local
iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
# Samba — solo red local
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 137 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 139 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 445 -j ACCEPT
# NTP (puerto 123)
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p udp --dport 123 -j ACCEPT
Límites de conexión
No más de 3 sesiones SSH por IP:
iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT
Limita HTTP a 20 conexiones simultáneas por subred /24:
iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 --connlimit-mask 24 -j DROP
Flags:
--connlimit-above N— aplica la regla cuando el número de conexiones supera N--connlimit-mask 24— aplica el límite por subred /24
Rangos de direcciones IP
Permite el acceso al puerto 80 desde un rango de IP específico:
iptables -A INPUT -p tcp --destination-port 80 -m iprange --src-range 192.168.1.100-192.168.1.200 -j ACCEPT
Ayuda
¿Tienes dudas o necesitas ayuda? Escríbenos a través del sistema de tickets — siempre estamos aquí para ayudarte!