![实现 iptables 规则的技术](https://linux22.com/image/627275/%E5%AE%9E%E7%8E%B0%20iptables%20%E8%A7%84%E5%88%99%E7%9A%84%E6%8A%80%E6%9C%AF.png)
通常在服务器上配置有限数量的服务,并且大多数不需要的服务都会被关闭,我想知道使用 iptables 进行防火墙的最佳方法是什么。
通过拒绝来自特定接口或网络的特定服务并保持未使用的端口打开来进行过滤是否更好,还是将链策略设置为删除然后开始打开所需的端口更好?
答案1
对于系统级防火墙,存在着许多学派。
常见的一种保守方法是使用连接跟踪来匹配并明确接受传入的 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
上述 iptables-save 代码片段显示了默认丢弃入站和转发数据包并默认接受出站数据包的设置。明确接受来自 localhost 的入站流量,以及 RELATED 和 ESTABLISHED 数据包(例如对 http 请求的响应)以及到端口 22(SSH)的所有流量。