
Estou tentando configurar o servidor Ubuntu 22.04 (virtualizado) como um roteador com uma interface wan (ens18) e várias interfaces lan ens19:ens23 e ens1.
Aqui está o que estou tentando alcançar:
- permitir ens19:ens21 acesso à internet
- permitir acesso do ens23 à internet
- permitir o acesso do ens22 à internet, mas apenas durante o horário comercial durante a semana
- negar acesso ao ens1 à internet.
- permitir todas as interfaces LAN, incluindo acesso ens1 a ens19
- bloquear o acesso entre lans que não sejam o acesso ao ens19
Aqui está o problema que estou enfrentando. Por alguma razão, quando tenho a regra de encaminhamento padrão definida como DROP, as redes clientes não têm nenhum acesso à Internet, nem têm acesso ao ens19. Tentei definir a regra de encaminhamento padrão para aceitar e tive acesso total à Internet em todas as redes.
Presumo que estejam faltando algumas regras na cadeia direta ou que estejam usando regras incorretas. Qualquer contribuição construtiva aqui é muito apreciada.
Aqui estão os comandos que usei para configurar o 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
Aqui está a saída 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
Responder1
OK, acho que encontrei a solução.
Para esclarecer, minha configuração consiste em alguns servidores Ubuntu rodando como Qemu/KVM no Proxmox VE, além de alguns desktop vms para emular diferentes clientes de rede.
Essas máquinas usam pontes de rede configuradas no proxmox para conectar cada cliente e “server1” a “server0router”. o problema aqui é que quando uma interface de rede é adicionada a uma VM no proxmox, a função de firewall no hipervisor é habilitada por padrão para permitir a criação de regras de firewall para uma VM na interface web.
Depois de desmarcar a caixa de seleção "Firewall" nas interfaces de rede do server0router vm no proxmox, tudo parece funcionar conforme especificado nas regras definidas dentro da VM.
EDIT: também tive que mudar para regras individuais por porta em vez de usar ens20:ens23, pois o intervalo parecia não funcionar, embora nenhum erro tenha sido dado ao inserir o comando.