我的防火墙上有许多 iptables 规则,如下所示:
iptables -A zone_lan_forward -p tcp -d 1.2.3.0/24 -j ACCEPT
iptables -A zone_lan_forward -p udp -d 1.2.3.0/24 -j ACCEPT
有没有一种快捷方式可以为每个地址设置两个规则 - 一个用于 tcp,一个用于 udp?我的意思是我可以这样做吗:
iptables -A zone_lan_forward -p tcp,udp -d 1.2.3.0/24 -j ACCEPT
答案1
创建一个可以接受任何 TCP 和 UDP 数据包的新链,并从各个 IP/端口允许规则跳转到该链:
iptables -N ACCEPT_TCP_UDP
iptables -A ACCEPT_TCP_UDP -p tcp -j ACCEPT
iptables -A ACCEPT_TCP_UDP -p udp -j ACCEPT
iptables -A zone_lan_forward -d 1.2.3.0/24 -j ACCEPT_TCP_UDP
这会增加几行额外的开销,但会使 TCP / UDP 规则的数量减半。
我会不是省略参数-p
,因为您不仅为 ICMP 打开防火墙,还为任何其他协议打开防火墙。摘自 iptables 手册页-p
:
指定的协议可以是 tcp、udp、icmp 或 all,也可以是数值,表示这些协议之一或其他协议。也可以使用 /etc/protocols 中的协议名称。
您可能没有监听除 TCP、UDP 和 ICMP 之外的任何协议现在,但谁知道未来会怎样。不必要地打开防火墙是一种不好的做法。
免责声明:iptables 命令是我凭空想出来的;目前我没有可以测试它们的设备。
答案2
如果您并不真正关心 ICMP 流量(无论如何您都可以使用规则全局阻止它),那么您可以省略 -p 标志,它将涵盖所有协议。