表 2. 通用匹配说明
通用匹配 | 说明 | -p 或 --protocol | 该通用协议匹配用于检查某些特定协议。协议示例有 TCP、UDP、ICMP、用逗号分隔的任何这三种协议的组合列表以及 ALL(用于所有协议)。ALL 是默认匹配。可以使用 ! 符号表示不与该项匹配 | -s 或 --source | 该源匹配用于根据信息包的源 IP 地址来与它们匹配。该匹配还允许对某一范围内的 IP 地址进行匹配,可以使用 ! 符号,表示不与该项匹配。默认源匹配与所有 IP 地址匹配 | -d 或 --destination | 该目的地匹配用于根据信息包的目的地 IP 地址来与它们匹配。该匹配还允许对某一范围内 IP 地址进行匹配,可以使用 ! 符号表示不与该项匹配 | --sport | 指定匹配规则的源端口或端口范围 | --dport | 指定匹配规则的目的端口或端口范围 | -i | 匹配单独的网络接口或某种类型的接口设置过滤规则 | 目标(target) 前面已经讲过,目标是由规则指定的操作,对与那些规则匹配的信息包执行这些操作。除了允许用户定义的目标之外,还有许多可用的目标选项。下面是常用的一些目标及其示例和说明,如表 3 所示。 表 3. 目标项说明
目标项 | 说 明 | ACCEPT | 当信息包与具有 ACCEPT 目标的规则完全匹配时,会被接受(允许它前往目的地) | DROP | 当信息包与具有 DROP 目标的规则完全匹配时,会阻塞该信息包,并且不对它做进一步处理。该目标被指定为 -j DROP | REJECT | 该目标的工作方式与 DROP 目标相同,但它比 DROP 好。和 DROP 不同,REJECT 不会在服务器和客户机上留下死套接字。另外,REJECT 将错误消息发回给信息包的发送方。该目标被指定为 -j REJECT | RETURN | 在规则中设置的 RETURN 目标让与该规则匹配的信息包停止遍历包含该规则的链。如果链是如 INPUT 之类的主链,则使用该链的默认策略处理信息包。它被指定为 -jump RETURN | LOG | 表示将包的有关信息记录入日志 | TOS | 表示改写数据包的 TOS 值 | 使用 IPTables 编写规则的简单实战应用 编写规则示例一:基本规则 下面将给出运用上述框架理论形成规则的一些简单示例,以供读者在实际的应用过程中进行模仿和使用: (1)接受来自指定 IP 地址的所有流入的数据包: #iptables -A INPUT -s 203.159.0.10 -j ACCEPT | (2)只接受来自指定端口(服务)的数据包: #iptables -D INPUT --dport 80 -j DROP | (3)允许转发所有到本地(198.168.10.13)smtp 服务器的数据包: #iptables -A FORWARD -p tcp -d 198.168.10.13 --dport smtp -i eth0 -j ACCEPT | (4)允许转发所有到本地的 udp 数据包(诸如即时通信等软件产生的数据包): #iptables -A FORWARD -p udp -d 198.168.80.0/24 -i eth0 -j ACCEPT | (5)拒绝发往 WWW 服务器的客户端的请求数据包: #iptables -A FORWARD -p tcp -d 198.168.80.11 --dport www -i eth0 -j REJECT | (6)允许目的为指定端口的 tcp 数据包进入: #iptables – A INPUT – p tcp – m multiport - – destination-port 21,53,80,25,110 ACCEPT | (7)允许来源为指定端口的 tcp 数据包进入: #iptables – A INPUT – p tcp – m multiport - – source-port 21,53,80,25,110 ACCEPT | (8)丢掉 SYN 和 ACK 标志位置位的数据包: #iptables -A INPUT-p tcp – -tcp-flags ALL SYN,ACK DROP | 编写规则示例二:进行碎片检测及流量控制
(1)检查 IP 碎片:在 TCP/IP 网络中,链路层具有最大传输单元 MTU 这个特性,它限制了数据帧的最大长度,不同的网络类型都有一个上限值。以太网的 MTU 是 1500。如果 IP 层有数据包要传,而且数据包的长度超过了 MTU,那么 IP 层就要对数据包进行分片(fragmentation)操作,使每一片的长度都小于或等于 MTU,这些被分段的片段就成为 IP 碎片。那么,如果在防火墙处不对 IP 碎片进行特别处理的话,那么有可能部分 IP 碎片会被防火墙拦截,从而影响到接受端对这些碎片的还原,并最终影响到信息的完整性和可用性问题,所以,下面的例子给出防火墙允许 IP 碎片通过的规则: #iptables – A FORWARD – p tcp – f – s 172.168.96.0/24 – d 172.168.97.18 – j ACCEPT | 需要特别留意上述规则中的 -f 选项,它指定了第二个以及以后的 IP 碎片将由防火墙来处理通过,否则的话,考虑下面的规则,防火墙有可能对其第二个及其以后的 IP 碎片进行拦截,从而影响正常的信息流通: #iptables – A FORWARD – p tcp – s 172.168.96.0/24 – d 172.168.97.18 – j ACCEPT | (2)速率限制:iptables 提供了非常健全的速率控制机制,主要用来限制由外向内的单位时间内通过的数据包个数,这样做的一个直接的好处就是尽可能地抑制前面多次提到的拒绝服务攻击或者是分布式拒绝服务攻击,因为这两种攻击的一个非常典型的表现就是单位时间内有很多数据包涌向目的地。所以,我们可以使用下面的规则来限制单位时间内允许通过防火墙,从而进入被保护网络的数据包个数: #iptables – A INPUT – m limit - – limit 200/second #iptables – A INPUT – m limit - – limit 10000/minute | 上述两条规则分别限制 1 秒内和 1 分钟内通过的数据包个数不能超过 200 和 10000 个。当然,在实际应用中,也可以通过 /second、/minute、、/hour、/day 这样的时间间隔来进行设定,并且,其中诸如 200 和 10000 这些具体数值的设定需要用户根据具体情况和经验来进行设定,没有规定的数值可循。 另外,在设定速率限制后,还可以设定超过该限制所触发的一些处理事件,比如说直接丢弃。下面的规则表示当速率超过 200 限制后,将直接对后续数据包进行丢弃: #iptables – A INPUT – m limit - – limit-burst 200 | 编写规则示例三:保障网络服务安全 在上一小节我们根据 IPTables 的规则编写原则介绍了一些简单的使用其进行数据包过滤的例子,由于 IPTables 在实际生活中得到了非常广泛的使用,本节将介绍一个使用其保障网络服务安全的例子,以使用户能够在实际使用中举一反三。 在这个应用中,我们将需要使用 IPTables 防火墙保护企业网络提供的对外的公共 Internet 服务,这些服务包括 WWW 服务、FTP 服务、SMTP 服务以及 DNS 服务(具体的网络拓扑请参见图 4)。因此,这些服务起都具有有效的 Internet 地址。 为了将内部网段 210.10.18.0/24 与 Internet 隔离,在内部网络和 Internet 之间使用了包过滤防火墙。具体的 IP 地址设置如下: - 防火墙的内网接口是 eth0(IP 地址为:210.10.18.88),防火墙对外的 Internet 接口是 eth1(IP 地址为:210.10.19.188);
- WWW 服务器:IP 地址为 210.10.18.89;
- FTP 服务器:IP 地址为 210.10.18.90;
- DNS 服务器:IP 地址为 210.10.18.91;
- SMTP 服务器:IP 地址为 210.10.18.92。
|