IPTABLES no tiene acceso a Internet desde LAN con la regla FORWARD predeterminada establecida en DROP

IPTABLES no tiene acceso a Internet desde LAN con la regla FORWARD predeterminada establecida en DROP

Estoy intentando configurar el servidor ubuntu 22.04 (virtualizado) como un enrutador con una interfaz wan (ens18) y varias interfaces lan ens19:ens23 y ens1.

Esto es lo que estoy tratando de lograr:

  • permitir ens19:ens21 acceso a internet
  • permitir el acceso de ens23 a internet
  • permitir el acceso a Internet de ens22, pero solo durante el horario laboral de lunes a viernes
  • denegar el acceso a Internet de ens1.
  • permitir que todas las interfaces LAN, incluido el acceso ens1 a ens19
  • bloquear el acceso entre LAN que no sean el acceso a ens19

Este es el problema al que me enfrento. Por alguna razón, cuando tengo la regla de reenvío predeterminada configurada en DROP, las redes del cliente no tienen ningún acceso a Internet ni a ens19. Intenté configurar la regla de reenvío predeterminada para aceptar y luego tengo acceso completo a Internet desde todas las redes.

Supongo que me faltan algunas reglas en la cadena de avance o estoy usando reglas incorrectas. Cualquier aportación constructiva aquí es muy apreciada.

Estos son los comandos que he usado para configurar iptables:

#flush existing config
sudo iptables -F
sudo iptables -X

#temporary rules for configuration purposes
sudo iptables -A INPUT -i ens18 -p tcp --dport 22 -j ACCEPT
sudo iptables -A FORWARD -i ens18 -o ens19 -p tcp --dport 3306 -j ACCEPT
sudo iptables -A FORWARD -i ens18 -o ens19 -p tcp --dport 33060 -j ACCEPT
sudo iptables -A FORWARD -i ens18 -o ens19 -p tcp --dport 80 -j ACCEPT

##set default policies
sudo iptables -P OUTPUT ACCEPT
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP

#allow loopback
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT

#allowe established and related incoming traffic
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

#Allow access to WAN
sudo iptables -A FORWARD -i ens19 -o ens18 -j ACCEPT
sudo iptables -A FORWARD -i ens20:ens21 -o ens18 -j ACCEPT
sudo iptables -A FORWARD -i ens22 -o ens18 -m time --timestart $(date -u -d @$(date "+%s" -d "07:00") +%H:%M) --timestop $(date -u -d @$(date "+%s" -d "20:00") +%H:%M) --weekdays Mon,Tue,Wed,Thu,Fri -j ACCEPT
sudo iptables -A FORWARD -i ens23 -o ens18 -j ACCEPT

#Allow Access from LAN to DMZ
sudo iptables -A FORWARD -i ens20:ens23 -o ens19 -j ACCEPT
sudo iptables -A FORWARD -i ens1 -o ens19 -j ACCEPT
#deny access to WAN from the lan connected to ens1
sudo iptables -A FORWARD -i ens1 -o ens18 -j DROP

#deny communication between interfaces ens20:ens23, ens1
sudo iptables -A FORWARD -i ens20 -o ens21 -j DROP
sudo iptables -A FORWARD -i ens20 -o ens22 -j DROP
sudo iptables -A FORWARD -i ens20 -o ens23 -j DROP
sudo iptables -A FORWARD -i ens21 -o ens20 -j DROP
sudo iptables -A FORWARD -i ens21 -o ens22 -j DROP
sudo iptables -A FORWARD -i ens21 -o ens23 -j DROP
sudo iptables -A FORWARD -i ens22 -o ens20 -j DROP
sudo iptables -A FORWARD -i ens22 -o ens21 -j DROP
sudo iptables -A FORWARD -i ens22 -o ens23 -j DROP
sudo iptables -A FORWARD -i ens23 -o ens20 -j DROP
sudo iptables -A FORWARD -i ens23 -o ens21 -j DROP
sudo iptables -A FORWARD -i ens23 -o ens22 -j DROP
sudo iptables -A FORWARD -i ens1 -o ens20 -j DROP
sudo iptables -A FORWARD -i ens1 -o ens21 -j DROP
sudo iptables -A FORWARD -i ens1 -o ens22 -j DROP
sudo iptables -A FORWARD -i ens1 -o ens23 -j DROP

#enable masquerading on port ens18
sudo iptables -t nat -A POSTROUTING -o ens18 -j MASQUERADE

##save and reload
sudo netfilter-persistent save
sudo netfilter-persistent reload

Aquí está el resultado de iptables -nvL:

henrik@server0router:~$ sudo iptables -nvL
Chain INPUT (policy DROP 3 packets, 939 bytes)
 pkts bytes target     prot opt in     out     source               destination
  104  7488 ACCEPT     tcp  --  ens18  *       0.0.0.0/0            0.0.0.0/0            tcp dpt:22
    0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
    0     0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED

Chain FORWARD (policy DROP 58 packets, 4640 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     tcp  --  ens18  ens19   0.0.0.0/0            0.0.0.0/0            tcp dpt:3306
    0     0 ACCEPT     tcp  --  ens18  ens19   0.0.0.0/0            0.0.0.0/0            tcp dpt:33060
    0     0 ACCEPT     tcp  --  ens18  ens19   0.0.0.0/0            0.0.0.0/0            tcp dpt:80
    0     0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
    0     0 ACCEPT     all  --  ens19  ens18   0.0.0.0/0            0.0.0.0/0
    0     0 ACCEPT     all  --  ens20:ens21 ens18   0.0.0.0/0            0.0.0.0/0
    0     0 ACCEPT     all  --  ens22  ens18   0.0.0.0/0            0.0.0.0/0            TIME from 05:00:00 to 18:00:00 on Mon,Tue,Wed,Thu,Fri UTC
    0     0 ACCEPT     all  --  ens23  ens18   0.0.0.0/0            0.0.0.0/0
    0     0 ACCEPT     all  --  ens20:ens23 ens19   0.0.0.0/0            0.0.0.0/0
    0     0 ACCEPT     all  --  ens1   ens19   0.0.0.0/0            0.0.0.0/0
    6   450 DROP       all  --  ens1   ens18   0.0.0.0/0            0.0.0.0/0
    0     0 DROP       all  --  ens20  ens21   0.0.0.0/0            0.0.0.0/0
    0     0 DROP       all  --  ens20  ens22   0.0.0.0/0            0.0.0.0/0
    0     0 DROP       all  --  ens20  ens23   0.0.0.0/0            0.0.0.0/0
    0     0 DROP       all  --  ens21  ens20   0.0.0.0/0            0.0.0.0/0
    0     0 DROP       all  --  ens21  ens22   0.0.0.0/0            0.0.0.0/0
    0     0 DROP       all  --  ens21  ens23   0.0.0.0/0            0.0.0.0/0
    0     0 DROP       all  --  ens22  ens20   0.0.0.0/0            0.0.0.0/0
    0     0 DROP       all  --  ens22  ens21   0.0.0.0/0            0.0.0.0/0
    0     0 DROP       all  --  ens22  ens23   0.0.0.0/0            0.0.0.0/0
    0     0 DROP       all  --  ens23  ens20   0.0.0.0/0            0.0.0.0/0
    0     0 DROP       all  --  ens23  ens21   0.0.0.0/0            0.0.0.0/0
    0     0 DROP       all  --  ens23  ens22   0.0.0.0/0            0.0.0.0/0
    0     0 DROP       all  --  ens1   ens20   0.0.0.0/0            0.0.0.0/0
    0     0 DROP       all  --  ens1   ens21   0.0.0.0/0            0.0.0.0/0
    0     0 DROP       all  --  ens1   ens22   0.0.0.0/0            0.0.0.0/0
    0     0 DROP       all  --  ens1   ens23   0.0.0.0/0            0.0.0.0/0

Chain OUTPUT (policy ACCEPT 3 packets, 984 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     all  --  *      lo      0.0.0.0/0            0.0.0.0/0
   54  5744 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            ctstate ESTABLISHED
henrik@server0router:~$ ^C

Respuesta1

Bien, creo que encontré la solución.

Para aclarar, mi configuración es un par de servidores Ubuntu que se ejecutan como Qemu/KVM en Proxmox VE además de algunas máquinas virtuales de escritorio para emular diferentes clientes de red.

Estas máquinas utilizan puentes de red configurados en proxmox para conectar cada cliente y el "servidor1" al "servidor0router". El problema aquí es que cuando se agrega una interfaz de red a una VM en proxmox, la función de firewall en el hipervisor está habilitada de forma predeterminada para permitir la creación de reglas de firewall para una VM en la interfaz web.

Después de desmarcar la casilla de verificación "Firewall" en las interfaces de red para la máquina virtual server0router en proxmox, todo parece funcionar según lo especificado en las reglas establecidas dentro de la máquina virtual.

EDITAR: también tuve que cambiar a reglas individuales por puerto en lugar de usar ens20:ens23, ya que el rango no parecía funcionar aunque no se dio ningún error al ingresar el comando.

información relacionada