Artículos Guías Manuales Sistemas Linux Windows Redes MySql Binario 0 Binario Cero
Artículos Guías Manuales Sistemas Linux Windows Redes MySql Binario 0 Binario Cero

Guía Completa de Configuración de Seguridad en iptables: Reglas y Registro de Tráfico

Loading

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

  1. 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
  2. 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

  1. 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

  1. 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
  2. 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

  1. NULL packets y XMAS packets: Bloquea paquetes NULL (sin flags) y XMAS (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
  2. 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

  1. 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

  1. Permitir el tráfico en la interfaz lo: Permite todo el tráfico en la interfaz de loopback lo para la comunicación interna.

    -A INPUT -i lo -j ACCEPT
  2. 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
  3. 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

  1. 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
  2. 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
  3. 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

  1. 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
  2. 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

  1. 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

  1. 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

You may also like...