En este artículo se describe una configuración detallada de iptables para una política de seguridad en redes. La configuración tiene como objetivo controlar el tráfico de entrada, salida y reenvío de datos, registrando (logueando) las conexiones no deseadas y garantizando que solo pasen los paquetes que cumplan con las reglas establecidas. A continuación, se analizan las reglas establecidas y su propósito.
# Por defecto, bloquear todo en las cadenas INPUT y FORWARD
-P INPUT DROP
-P FORWARD DROP
# Permitir todo el tráfico saliente
-P OUTPUT ACCEPT
# Bloquear conexiones TCP nuevas que no comiencen con SYN
-A INPUT -i eth0 -p tcp ! --syn -m state --state NEW -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "TCP RST,ACK,FIN"
-A INPUT -i eth0 -p tcp ! --syn -m state --state NEW -j DROP
# Bloquear fragmentos entrantes
-A INPUT -i eth0 -f -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "Fragment Packets"
-A INPUT -i eth0 -f -j DROP
# Bloquear paquetes malformados
-A INPUT -i eth0 -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
-A INPUT -i eth0 -p tcp --tcp-flags ALL ALL -j DROP
-A INPUT -i eth0 -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
# Bloquear NULL packets
-A INPUT -i eth0 -p tcp --tcp-flags ALL NONE -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "NULL Packets"
-A INPUT -i eth0 -p tcp --tcp-flags ALL NONE -j DROP
# Bloquear paquetes "Christmas tree" malformados
-A INPUT -i eth0 -p tcp --tcp-flags SYN,FIN SYN,FIN -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "XMAS Packets"
-A INPUT -i eth0 -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
# Bloquear ataques Fin Scan
-A INPUT -i eth0 -p tcp --tcp-flags FIN,ACK FIN -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "Fin Packets Scan"
-A INPUT -i eth0 -p tcp --tcp-flags FIN,ACK FIN -j DROP
# Validar flags TCP
-A INPUT -i eth0 -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
# Bloquear paquetes inválidos
-A INPUT -m conntrack --ctstate INVALID -j DROP
# Permitir todo en la interfaz loopback
-A INPUT -i lo -j ACCEPT
# Permitir paquetes de conexiones establecidas
-A INPUT -p all -m state --state RELATED,ESTABLISHED -j ACCEPT
# Permitir ping
-A INPUT -p icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
# Anexo
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate INVALID -j DROP
# Permitir conexiones hacia el puerto 22 (SSH)
-A INPUT -p tcp -d 0.0.0.0/0 --sport 1024:65535 --dport 22 -m state --state NEW -j ACCEPT
# Permitimos la consulta a DNS
-A INPUT -s 0.0.0.0/0 -p udp -m udp --sport 53 -j ACCEPT
-A OUTPUT -d 0.0.0.0/0 -p udp -m udp --dport 53 -j ACCEPT
# Permitir conexiones hacia el puerto 80 y 443 (HTTP y HTTPS)
-A INPUT -p tcp -d 0.0.0.0/0 --sport 1024:65535 --dport 80 -m state --state NEW -j ACCEPT
-A INPUT -p tcp -d 0.0.0.0/0 --sport 1024:65535 --dport 443 -m state --state NEW -j ACCEPT
# Reglas de red
-A INPUT -s 192.168.1.0/24 -d 192.168.20.0/27 -j ACCEPT
-A INPUT -s 192.168.1.0/24 -d 192.168.30.0/27 -j ACCEPT
-A FORWARD -i eth0 -o eth1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A FORWARD -i eth1 -o eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A FORWARD -i eth0 -o eth2 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A FORWARD -i eth2 -o eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# Loguear y rechazar el resto
-A INPUT -j LOG
-A FORWARD -j LOG
-A INPUT -j DROP
Política predeterminada
- INPUT y FORWARD en DROP: Bloquea todas las conexiones entrantes (
INPUT
) y de reenvío (FORWARD
) por defecto, lo que significa que solo se permitirá el tráfico que cumpla con las reglas específicas.-P INPUT DROP -P FORWARD DROP
- OUTPUT en ACCEPT: Permite todo el tráfico saliente (
OUTPUT
), lo que permite que la máquina pueda realizar conexiones hacia el exterior sin restricciones.-P OUTPUT ACCEPT
Control de paquetes TCP
- Bloqueo de conexiones TCP sin SYN: Rechaza nuevas conexiones TCP que no inicien con el flag
SYN
. Esto evita ataques de paquetes malintencionados que intenten establecer conexiones ilegítimas. Los paquetes son registrados antes de ser descartados.-A INPUT -i eth0 -p tcp ! --syn -m state --state NEW -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "TCP RST,ACK,FIN"
-A INPUT -i eth0 -p tcp ! --syn -m state --state NEW -j DROP
Control de fragmentos y paquetes malformados
- Bloqueo de fragmentos: Bloquea todos los fragmentos de paquetes entrantes que pueden ser utilizados para ataques de fragmentación.
-A INPUT -i eth0 -f -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "Fragment Packets"
-A INPUT -i eth0 -f -j DROP
- Paquetes TCP malformados y flags inválidos: Rechaza paquetes con combinaciones de flags inusuales o malintencionadas, protegiendo contra ataques de escaneo de puertos.
-A INPUT -i eth0 -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
-A INPUT -i eth0 -p tcp --tcp-flags ALL ALL -j DROP
-A INPUT -i eth0 -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
Protección contra escaneos de puertos
- NULL packets y XMAS packets: Bloquea paquetes
NULL
(sin flags) yXMAS
(con múltiples flags), que se utilizan en escaneos de puertos. Estos paquetes se registran y luego se bloquean.-A INPUT -i eth0 -p tcp --tcp-flags ALL NONE -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "NULL Packets"
-A INPUT -i eth0 -p tcp --tcp-flags ALL NONE -j DROP
-A INPUT -i eth0 -p tcp --tcp-flags SYN,FIN SYN,FIN -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "XMAS Packets"
-A INPUT -i eth0 -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
- Bloqueo de ataques Fin Scan: Rechaza paquetes con el flag
FIN
activado, característicos de ataques de escaneo de puertos.-A INPUT -i eth0 -p tcp --tcp-flags FIN,ACK FIN -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "Fin Packets Scan"
-A INPUT -i eth0 -p tcp --tcp-flags FIN,ACK FIN -j DROP
Bloqueo de paquetes inválidos
- Paquetes inválidos: Bloquea paquetes que no pertenezcan a ninguna conexión válida o estén mal formados.
-A INPUT -m conntrack --ctstate INVALID -j DROP
Reglas de aceptación específicas
- Permitir el tráfico en la interfaz
lo
: Permite todo el tráfico en la interfaz de loopbacklo
para la comunicación interna.-A INPUT -i lo -j ACCEPT
- Conexiones establecidas y relacionadas: Permite tráfico que pertenezca a conexiones ya establecidas o relacionadas, permitiendo así la continuidad de conexiones activas.
-A INPUT -p all -m state --state RELATED,ESTABLISHED -j ACCEPT
- Permitir ping: Permite solicitudes de ping (
ICMP
tipo 8), lo que facilita la prueba de conectividad.-A INPUT -p icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
Acceso a servicios y puertos específicos
- SSH (Puerto 22): Permite conexiones SSH desde puertos de origen altos (1024-65535) para acceso de administración remota.
-A INPUT -p tcp -d 0.0.0.0/0 --sport 1024:65535 --dport 22 -m state --state NEW -j ACCEPT
- DNS: Permite consultas DNS entrantes y salientes (puerto UDP 53) para la resolución de nombres de dominio.
-A INPUT -s 0.0.0.0/0 -p udp -m udp --sport 53 -j ACCEPT -A OUTPUT -d 0.0.0.0/0 -p udp -m udp --dport 53 -j ACCEPT
- HTTP y HTTPS (Puertos 80 y 443): Permite tráfico HTTP y HTTPS, habilitando la navegación web y conexiones a servidores web.
-A INPUT -p tcp -d 0.0.0.0/0 --sport 1024:65535 --dport 80 -m state --state NEW -j ACCEPT
-A INPUT -p tcp -d 0.0.0.0/0 --sport 1024:65535 --dport 443 -m state --state NEW -j ACCEPT
Reglas de red y reenvío
- Subredes autorizadas: Permite comunicación entre subredes específicas dentro de la red.
-A INPUT -s 192.168.1.0/24 -d 192.168.20.0/27 -j ACCEPT
-A INPUT -s 192.168.1.0/24 -d 192.168.30.0/27 -j ACCEPT
- Reenvío entre interfaces: Permite tráfico de reenvío entre interfaces de red, siempre que esté relacionado o sea parte de una conexión establecida.
-A FORWARD -i eth0 -o eth1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT -A FORWARD -i eth1 -o eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT -A FORWARD -i eth0 -o eth2 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT -A FORWARD -i eth2 -o eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Registro de tráfico
- Registro (
LOG
): Utiliza--log-level 4
y--log-prefix
para registrar el tráfico no permitido antes de bloquearlo.-A INPUT -j LOG -A FORWARD -j LOG
Bloqueo final
- Bloqueo por defecto: Descarta todo el tráfico que no cumpla con las reglas especificadas.
-A INPUT -j DROP
Archivo completo de configuración
-P INPUT DROP
-P FORWARD DROP
-P OUTPUT ACCEPT
-A INPUT -i eth0 -p tcp ! --syn -m state --state NEW -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "TCP RST,ACK,FIN"
-A INPUT -i eth0 -p tcp ! --syn -m state --state NEW -j DROP
-A INPUT -i eth0 -f -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "Fragment Packets"
-A INPUT -i eth0 -f -j DROP
-A INPUT -i eth0 -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
-A INPUT -i eth0 -p tcp --tcp-flags ALL ALL -j DROP
-A INPUT -i eth0 -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
-A INPUT -i eth0 -p tcp --tcp-flags ALL NONE -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "NULL Packets"
-A INPUT -i eth0 -p tcp --tcp-flags ALL NONE -j DROP
-A INPUT -i eth0 -p tcp --tcp-flags SYN,FIN SYN,FIN -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "XMAS Packets"
-A INPUT -i eth0 -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
-A INPUT -i eth0 -p tcp --tcp-flags FIN,ACK FIN -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "Fin Packets Scan"
-A INPUT -i eth0 -p tcp --tcp-flags FIN,ACK FIN -j DROP
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -i lo -j ACCEPT
-A INPUT -p all -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
-A INPUT -p tcp -d 0.0.0.0/0 --sport 1024:65535 --dport 22 -m state --state NEW -j ACCEPT
-A INPUT -s 0.0.0.0/0 -p udp -m udp --sport 53 -j ACCEPT
-A OUTPUT -d 0.0.0.0/0 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -p tcp -d 0.0.0.0/0 --sport 1024:65535 --dport 80 -m state --state NEW -j ACCEPT
-A INPUT -p tcp -d 0.0.0.0/0 --sport 1024:65535 --dport 443 -m state --state NEW -j ACCEPT
-A INPUT -s 192.168.1.0/24 -d 192.168.20.0/27 -j ACCEPT
-A INPUT -s 192.168.1.0/24 -d 192.168.30.0/27 -j ACCEPT
-A FORWARD -i eth0 -o eth1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A FORWARD -i eth1 -o eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A FORWARD -i eth0 -o eth2 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A FORWARD -i eth2 -o eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A INPUT -j LOG
-A FORWARD -j LOG
-A INPUT -j DROP