7.2. 使用 IPTables

使用 IPTables 的第一步是启动 IPTables 服务。这可以使用以下命令进行:

service iptables start

警告警告
 

你应该使用以下命令关闭 IP6Tables 服务才能使用 IPTables 服务:

service ip6tables stop
chkconfig ip6tables off

要使 IPTables 在系统引导时默认启动,你必须使用 chkconfig 来改变服务的运行级别状态。

chkconfig --level 345 iptables on

IPTables 的语法被分成几个层次。主要层次为“链”(chain)。“链”指定处理分组的状态。其用法为:

iptables -A chain -j target

-A 在现存的规则集合内后补一条规则。chain 是规则所在“链”的名称。IPTables 中有三个内建的链(即影响每一个在网络中经过的分组的链):INPUT、OUTPUT、和 FORWARD。这些链是永久性的,不能被删除。

重要重要
 

在创建 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 链的第一条规则,它允许本地环回设备上的交通。

7.2.1. 基本防火墙策略

在一开始就建立的某些基本策略为建构更详细的用户定义的规则奠定了基础。IPTables 使用策略(policy, -P)来创建默认规则。对安全敏感的管理员通常想采取放弃所有分组、只逐一允许指定分组的策略。以下规则阻塞网络上所有的出入分组。

iptables -P INPUT DROP
iptables -P OUTPUT DROP

此外,还推荐你拒绝所有转发分组(forwarded packets) — 要从防火墙被选路发送到它的目标节点的网络交通 — 以便限制内部客户对互联网的无心暴露。要达到这个目的,使用以下规则:

iptables -P FORWARD DROP 

注记注记
 

在处理添加的规则时,REJECT(拒绝)目标和 DROP(放弃)目标这两种行动有所不同。REJECT 会拒绝目标分组的进入,并给企图连接服务的用户返回一个 connection refused 的错误消息。DROP 会放弃分组,而对 telnet 用户不发出任何警告;不过,为了避免导致用户由于迷惑不解而不停试图连接的情况的发生,推荐你使用 REJECT 目标。

设置了策略链后,为你的特定网络和安全需要创建新规则。以下各节概述了一些你在建构 IPTables 防火墙时可能要实现的规则。

7.2.2. 保存和恢复 IPTables 规则

防火墙规则只在计算机处于开启状态时才有效。如果系统被重新引导,这些规则就会自动被清除并重设。要保存规则以便今后载入,请使用以下命令:

/sbin/service iptables save

保存在 /etc/sysconfig/iptables 文件中的规则会在服务启动或重新启动时(包括机器被重新引导时)被应用。