IPTABLES 没有从局域网访问互联网,默认 FORWARD 规则设置为 DROP

IPTABLES 没有从局域网访问互联网,默认 FORWARD 规则设置为 DROP

我正在尝试将 ubuntu server 22.04(虚拟化)设置为具有一个 wan 接口(ens18)和多个 lan 接口 ens19:ens23 和 ens1 的路由器。

以下是我想要实现的目标:

  • 允许 ens19:ens21 访问互联网
  • 允许 ens23 访问互联网
  • 允许 ens22 访问互联网,但仅限于工作日的工作时间
  • 拒绝 ens1 访问互联网。
  • 允许所有 lan 接口,包括 ens1 访问 ens19
  • 阻止除 ens19 访问之外的局域网之间的访问

这是我面临的问题。出于某种原因,当我将默认转发规则设置为 DROP 时,客户端网络根本无法访问互联网,也无法访问 ens19。我尝试将默认转发规则设置为接受,然后我就可以从每个网络完全访问互联网。

我认为我在前向链中遗漏了一些规则,或者使用了不正确的规则。任何建设性的意见都非常感谢。

以下是我用于设置 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

以下是 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

答案1

好的,我想我找到了解决方案。

需要澄清的是,我的设置是几个在 Proxmox VE 上作为 Qemu/KVM 运行的 ubuntu 服务器,另外还有几个桌面虚拟机来模拟不同的网络客户端。

这些机器使用在 proxmox 中设置的网络桥接器将每个客户端和“server1”连接到“server0router”。这里的问题是,当在 proxmox 中向 VM 添加网络接口时,默认情况下会启用虚拟机管理程序中的防火墙功能,以允许在 Web 界面中为 VM 创建防火墙规则。

在 proxmox 中 server0router vm 的网络接口中取消选中“防火墙”复选框后,一切似乎都按照 VM 内设置的规则进行工作。

编辑:还必须切换到每个端口的单独规则,而不是使用 ens20:ens23,因为即使输入命令时没有出现错误,范围似乎也不起作用。

相关内容