实现iptables规则的技巧

Fab*_*oni 5 firewall iptables

通常在服务器上配置有限数量的服务,并且大多数不需要的服务都被关闭,我想知道使用 iptables 进行防火墙设置的最佳方法是什么。

通过拒绝来自特定接口或网络的特定服务并让未使用的端口保持打开状态来进行过滤是否更好,还是将链策略设置为丢弃然后开始开放所需的内容更好?

Mar*_*ill 10

谈到系统级防火墙,有很多流派。

一种常见的保守方法是使用连接跟踪来匹配并明确接受传入的 RELATED 或 ESTABLISHED 流量。默认情况下会丢弃所有其他传入流量。根据需要为各种服务添加显式规则以接受不匹配的传入流量。

大多数情况下不会过滤出站流量。

例子:

:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth1 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i eth1 -m conntrack --ctstate INVALID -j DROP
-A INPUT -i eth1 -p tcp -m tcp --dport 22 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

上面的 iptables-save 片段显示了一个设置,默认情况下丢弃入站和转发数据包,并在默认情况下接受传出数据包。来自本地主机的入站流量被明确接受,RELATED 和 ESTABLISHED 数据包(例如对 http 请求的响应)以及到端口 22 (SSH) 的所有流量也是如此。

  • 有些人会说这不够保守,您应该丢弃传出数据包,除了您知道应该连接到的目的地:DNS 服务器、邮件服务器(如果它应该发送邮件)、您使用的 Web 服务、升级存储库、等等。 (3认同)