![允许来自除一个接口之外的多个接口的 INPUT 的最简洁的单个 iptables 规则是什么?](https://linux22.com/image/1605505/%E5%85%81%E8%AE%B8%E6%9D%A5%E8%87%AA%E9%99%A4%E4%B8%80%E4%B8%AA%E6%8E%A5%E5%8F%A3%E4%B9%8B%E5%A4%96%E7%9A%84%E5%A4%9A%E4%B8%AA%E6%8E%A5%E5%8F%A3%E7%9A%84%20INPUT%20%E7%9A%84%E6%9C%80%E7%AE%80%E6%B4%81%E7%9A%84%E5%8D%95%E4%B8%AA%20iptables%20%E8%A7%84%E5%88%99%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F.png)
我在网络边缘设置了运行 Ubuntu x64 的组合防火墙 (iptables)、路由器、DHCP 和 DNS 设备。一切工作正常,但我希望将防火墙规则的数量保持在最低限度,因为边缘设备的配置文件会随着时间的推移而发生变化,例如当向其中添加其他 VLAN(在本例中为 VLAN=专用 NIC)或服务时。
假设以下情况:
wan0
= 广域网/互联网接入
ens123
= 局域网/VLAN235
ens456
= 服务器/VLAN245
ens789
= 实验室/VLAN335
目前,它使用类似于以下的 INPUT 规则来允许内部机器访问其服务:
# allow DNS from lan
-A INPUT -i ens123 -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -i ens123 -p udp -m udp --dport 53 -j ACCEPT
# allow DNS from servers
-A INPUT -i ens456 -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -i ens456 -p udp -m udp --dport 53 -j ACCEPT
# allow dns from lab
-A INPUT -i ens789 -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -i ens789 -p udp -m udp --dport 53 -j ACCEPT
从网上的 iptables 文档和示例来看,使用 bang ( !
) 似乎有帮助,因为它只将 WAN NIC 列入黑名单,从而允许一切别的从各个 VLAN 内部连接到边缘。
但是,当我改用以下规则时,多个 VLAN 内的机器将无法再访问边缘设备上运行的 DNS 服务:
# allow DNS from not-wan
-A INPUT -i !wan0 -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -i !wan0 -p udp -m udp --dport 53 -j ACCEPT
- 我是否忽略了新规则中的一些小问题?
- 如果没有,您认为使用 iptables 来管理此类设置的简单方法是什么?
由于这种性质,简单的线路 + 更少的线路 = 更好。让我限定一下:如果突然将多个 VLAN 添加到网络/边缘,我真的更希望根本不需要接触防火墙;或者,如果将另一个服务添加到边缘,则只需为端口添加一两个规则。
答案1
您应该在 前面加上“感叹号”(!
)-i
,因为接口名称可以由 组成!
。