<< Back to shouce.jb51.net

7.3. 常用 iptables 过滤

把远程攻击者拒之“LAN”外是保护网络安全的一个重要方面,甚至可以说是重要的一个方面。LAN 的完好性应该通过使用严格的防火墙规则来抵御蓄意不良的远程用户而被保护。但是,如果默认政策被设置为阻塞所有进入、输出、和转发的分组,防火墙/网关和内部 LAN 用户之间的通信就无法进行。要允许用户执行与网络相关的功能以及使用联网应用程序,管理员必须打开某些端口进行通信。

例如:要允许到防火墙上的端口80的通信,添加以下规则:

iptables -A INPUT -p tcp -m tcp --sport 80 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT 

这会允许用户浏览通过端口80通信的网站。要允许到安全网站(如 https://www.example.com/)的访问,你还必须打开端口443。

iptables -A INPUT -p tcp -m tcp --sport 443 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --dport 443 -j ACCEPT 

重要重要
 

在创建 iptables 规则集合时,记住规则的顺序至关重要。例如:如果某个链指定了来自本地子网 192.168.100.0/24 的任何分组都应放弃,然后一个允许来自 192.168.100.13(在前面要放弃分组的子网范围内)的分组的链被补在这个规则后面(-A),那么这个后补的规则就会被忽略。你必须首先设置允许 192.168.100.13 的规则,然后再设置放弃规则。

要在现存规则链的任意处插入一条规则,使用 -I,随后是你想插入规则的链的名称,然后是你想放置规则的位置号码(1,2,3,...,n)。例如:

iptables -I INPUT 1 -i lo -p all -j ACCEPT

这条规则被插入为 INPUT 链的第一条规则,它允许本地环回设备上的交通。

有时候,你可能会需要从 LAN 之外远程地进入 LAN。SSH 之类的安全服务可以用于到 LAN 服务的加密远程连接。对于拥有基于 PPP 资源(如调制解调器池或批量 ISP 帐号)的管理员来说,拨号进入可以被用来安全地避开防火墙,因为调制解调器连接是直接连接,通常位于防火墙/网关之后。然而,对于有宽带连接的远程用户来说,你就需要制定些特殊规定。你可以配置 iptables 接受来自远程 SSH 客户的连接。例如,要允许远程 SSH 访问,你可以使用以下规则:

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p udp --sport 22 -j ACCEPT

你可能还想为其它服务定义规则。关于 iptables 及其各类选项的完整信息,请参阅《红帽企业 Linux 参考指南》

这些规则允许个体系统的出入交通,如单个 PC 直接连接到互联网或防火墙/网关;然而,它们并不允许防火墙/网关之后的机器使用这些服务。要允许 LAN 使用这些服务,你可以使用带有 iptables 过滤规则的 NAT。