将防火墙规则减少一半-TCP和UDP的一个iptables规则


12

我的防火墙上有许多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

Answers:


22

创建一个将接受任何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或所有协议之一,也可以是代表这些协议之一或不同协议的数字值。还允许/ etc / protocols中的协议名称。

你可能不会在除TCP,UDP和ICMP协议的任何听,现在,但谁知道将来会举行。不必要的做法是不必要地打开防火墙。

免责声明:iptables命令不在我的脑海;我无法访问要在其上测试ATM的盒子。


这是一个非常优雅的解决方案,不会不必要地使防火墙保持打开状态。
Big McLargeHuge 2013年

4
但是,如果通过目标端口号进行过滤,则这种创建新链的方法将失败。有人可以建议如何克服上述问题吗?
2014年

@Amor在此示例中,如果您-p all在链--dport上的所有规则中都使用过zone_lan_forward,则可能会达到您的期望。我当然假设由于该链,没有其他方法可以通过非TCP / UDP协议进入该ACCEPT_TCP_UDP链。显然,如果有多个人可以修改规则,并且有人随手来编辑您的规则而又不了解其细微之处,那么这是一种冒险的策略。
塞缪尔·哈默

哎呀 没注意到锁链的顺序。您也需要在此示例中切换链的顺序,以使我刚才说的能够正常工作。因此ACCEPT_TCP_UDP跳至zone_lan_forward,然后跳至ACCEPT
塞缪尔·哈默

2

如果您不太在意ICMP流量(无论如何您都可以使用规则在全局范围内进行阻止),则可以省略-p标志,它将覆盖所有协议。


我应该关心ICMP流量吗?我主要关心HTTP访问。
Big McLargeHuge 2013年

并不是的。如果需要,您可以阻止ICMP(ping),但是由于它仍在为HTTP通信提供服务,因此没有太大的意义。
内森·C

@NathanC,我认为当OP询问如何将其规则减半时,打开所有端口的建议可能会在现在或将来带来麻烦。
杰德·丹尼尔斯

@JedDaniels -p开关指定协议而不是端口。如果他们希望锁定除tcp和udp之外的任何内容,则下面的答案是替代方法。
内森·C

@NathanC是的,删除-p意味着“打开所有协议,而不仅仅是tcp或udp”,这是鲁re的,即使没有危险。
杰德·丹尼尔斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.