第五篇
IPv4过滤条件
跟IP(IPv4)本身有关的过滤条件,都已经內建於iptables,所以,不必使用 -m选项,就可以使用IP过滤条件《图5》是IPv4封包的格式,几乎每个栏位都可以当成过滤条件,或是目标扩充模组的处理对象。《表36》說明IPv4过滤条件的选项。
《图6》是Type of Service(ToS)栏位(一组单位元标志的组合)的TOS部位的原本格式,以及目前的两种解释方式;这裡将三种版本都印出来,以便你在看到相关题材时参考。
《表 33》列出ToS栏位的Precedence部位的传统解释。在现代网路上,已经很少用到Precedenc,因为Explicit Congestion Notification和Differentiated Services已经重新演绎了Precedence与TOS对於这些位元的解释。
《表34》列出ToS栏位的预定值,沒列出来的其它值一律视为无效,因为RFC标準並未定义它们。
=============================
注意-1
RFC 1349的第四节(标题是《Specification of the TOS Field))只列了四个非保留位元的值,而排除了最低位元(lsb)所隐含的零。所以,RFC 1349所列的二进位值0001,其完整值其实是00010(十进位的2),也就是对应《(表34》裡的“2”。
注意-2
ToS栏位的TOS部位的解释.原本是定义於RFC 791和1122,但是这两项标準后来被RFC 1349取代了。这个5-bits栏位原本应该有32个可能值,其中只有五种组合被预先定义,但其它位元组合依然被视为合法。但是不再容许将它们当成单位元栏位来解释。
=============================
《图7》是Flags栏位的格式。
已正式註册的IP选项的完整列,可从線取得
(hnp://www.iana.org/assignments/ip-parameters).《表35》只列出其中最常用的选项。
副 本(copy)位元指出选项是否应该被复制到片段包(如果原包被分段传输的话)。类别(class)位元值00表示该选项是用于「网络控制」,10(十进 位的2)表示该选项是除错性质(01与11也有其意义,但是目前没用到)。其余的五个位元代表选项编号。(人们通常以完整的8-bits值来描述IP选 项,而不是分成1、2、5个位元来讲)。
《表36》列出IP过滤条件的选项
在 表示-s与-d的位址时,你可以使用旧式的dotted-quad记号法来表示mask(例如:192.168.1.0/255.255.255.0), 或是新式的CIDR记号法(象是192.168.1.0/24)。关于CIDR,请参阅RFC 1591(位于http://www.rfc-editor.org/rfc/rfc1519.txt)。《表37》彙整出一些常见的IP层协定。
iplimit过滤条件
当活动中的联机数量低于或等于指定的数量,则条件成立。
《表38》说明本过滤条件的选项。
举例来说,如果想要知道联机数过多或超低时的交通流量,可以使用下列命令设置两条规则,使它们分别在适当情形下累计byte/packer counter:
iptables -A INPUT -m iplimit ! iplimit-above 10
iptables -A INPUT -m iplimit - -iplimit-above 1000
或者,若希望每个C级规模的网络(24-bits网络位元,8-bits主机位)同时存在的HTTP联机数不得高于10,则可以使用下列规则丢弃掉超过限制的联机搭建包(SYN):
iptables -A INPUT - -p tcp - -syn - -dport 80 -m iplimit
-iplimit-above 10 - -iplimit-mask 24 -j REJECT
若要以「速率」为过滤条件,请参阅《limit过滤条件》。
Ipv4options过滤条件
本扩充模块让iptables可使用某些常见的IPv4选项为过滤条件.关于IPv4封包的标头结构,请参阅《图5》。《表39》明本过滤条件的选项。
举例来说,下列规则可丢弃所有具备任一选项的包:
iptables -A INPUT -m ipv4options - -any-opt -j DROP
《IPV4OPTSSTRIP目标》提供如何裁掉IPv4选项的方法。
IPV4OPTSSTRIP目标
本目标可裁掉包标头里的所有IPv4选项。关于IPv4包的标头结构,请参阅《图5》。IPV4OPTSSTRIP目标只能用于mangle表格。
例来说,下列规则裁掉所有入境封包的IPv4选项标头 :
iptables -t mangle -A PREROUTING -j IPV4OPTSSTRIP
关于如何挑出IPv4选项的「整体长度」过滤条件。请参阅《ipv4options过滤条件》。
===========================
诀窍
本过滤条件必在核心支持CONFIG_IP_NF_MATCH_LENGTH组态时才有效。
===========================
举例来说,若想丢掉过长的ICMP PING 包(通常是恶性的),使用下列命令:
iptables -A INPUT -p icmp - -icmp-type ping -m length
- -length 1000 -j DROP
limit过滤条件
持续测试包的进出速率,当超过速率限制时,则停止监测。
《表41》说明本过滤条件的选项。
=========================
诀窍
本过滤条件必须在核心支持CONFIG_IP_NF_MATCH_LIMIT组态时才有效。
=========================
举例来说,若要接受每秒十次之内的ICMP PING封包,规则如下:
iptables -A INPUT -p icmp - -icmp-type ping -m limit
- -limit l0/s -j ACCEPT
或者,换个角度思考,拒收速率超过10次/每秒的1CMP PING包:
iptables -A INPUT -p icmp - -icmp-type ping -m limit
! - -limit l0/s -j DROP
利用limit过滤条件搭配LOG表格,可以模拟出一个违规记录器。
如果要以联机数代替封包数为限制条件,请参考iplimit和connlimit过滤条件,如果想限制特定对象的整体交通量,请考虑使用quota过滤条件。
LOG目标
将符合条件的包的相关资料记录于系日志统(透过syslog《表42》说明本目标的选项。
============================
诀窍
本目标必须在核心支持CONFIG_IP_NF_TARGET_LOG组态时才有效。
============================
《表43》列出日志讯息的各种程度的名称与编号。在Linux系上,这些信息定义于标头档,如果你的系统上有完整的Linux核心原始程序,你应该可以找到这个档案。
===========================
诀窍
panic、error和warn这三个名称已经被淘汰了(虽然iptables在显示讯息时,仍会将err改成error)。
===========================
IPv4过滤条件
跟IP(IPv4)本身有关的过滤条件,都已经內建於iptables,所以,不必使用 -m选项,就可以使用IP过滤条件《图5》是IPv4封包的格式,几乎每个栏位都可以当成过滤条件,或是目标扩充模组的处理对象。《表36》說明IPv4过滤条件的选项。
《图6》是Type of Service(ToS)栏位(一组单位元标志的组合)的TOS部位的原本格式,以及目前的两种解释方式;这裡将三种版本都印出来,以便你在看到相关题材时参考。
《表 33》列出ToS栏位的Precedence部位的传统解释。在现代网路上,已经很少用到Precedenc,因为Explicit Congestion Notification和Differentiated Services已经重新演绎了Precedence与TOS对於这些位元的解释。



《表34》列出ToS栏位的预定值,沒列出来的其它值一律视为无效,因为RFC标準並未定义它们。
=============================
注意-1
RFC 1349的第四节(标题是《Specification of the TOS Field))只列了四个非保留位元的值,而排除了最低位元(lsb)所隐含的零。所以,RFC 1349所列的二进位值0001,其完整值其实是00010(十进位的2),也就是对应《(表34》裡的“2”。
注意-2
ToS栏位的TOS部位的解释.原本是定义於RFC 791和1122,但是这两项标準后来被RFC 1349取代了。这个5-bits栏位原本应该有32个可能值,其中只有五种组合被预先定义,但其它位元组合依然被视为合法。但是不再容许将它们当成单位元栏位来解释。
=============================

《图7》是Flags栏位的格式。

已正式註册的IP选项的完整列,可从線取得
(hnp://www.iana.org/assignments/ip-parameters).《表35》只列出其中最常用的选项。

副 本(copy)位元指出选项是否应该被复制到片段包(如果原包被分段传输的话)。类别(class)位元值00表示该选项是用于「网络控制」,10(十进 位的2)表示该选项是除错性质(01与11也有其意义,但是目前没用到)。其余的五个位元代表选项编号。(人们通常以完整的8-bits值来描述IP选 项,而不是分成1、2、5个位元来讲)。
《表36》列出IP过滤条件的选项

在 表示-s与-d的位址时,你可以使用旧式的dotted-quad记号法来表示mask(例如:192.168.1.0/255.255.255.0), 或是新式的CIDR记号法(象是192.168.1.0/24)。关于CIDR,请参阅RFC 1591(位于http://www.rfc-editor.org/rfc/rfc1519.txt)。《表37》彙整出一些常见的IP层协定。

iplimit过滤条件
当活动中的联机数量低于或等于指定的数量,则条件成立。
《表38》说明本过滤条件的选项。

举例来说,如果想要知道联机数过多或超低时的交通流量,可以使用下列命令设置两条规则,使它们分别在适当情形下累计byte/packer counter:
iptables -A INPUT -m iplimit ! iplimit-above 10
iptables -A INPUT -m iplimit - -iplimit-above 1000
或者,若希望每个C级规模的网络(24-bits网络位元,8-bits主机位)同时存在的HTTP联机数不得高于10,则可以使用下列规则丢弃掉超过限制的联机搭建包(SYN):
iptables -A INPUT - -p tcp - -syn - -dport 80 -m iplimit
-iplimit-above 10 - -iplimit-mask 24 -j REJECT
若要以「速率」为过滤条件,请参阅《limit过滤条件》。
Ipv4options过滤条件
本扩充模块让iptables可使用某些常见的IPv4选项为过滤条件.关于IPv4封包的标头结构,请参阅《图5》。《表39》明本过滤条件的选项。

举例来说,下列规则可丢弃所有具备任一选项的包:
iptables -A INPUT -m ipv4options - -any-opt -j DROP
《IPV4OPTSSTRIP目标》提供如何裁掉IPv4选项的方法。
IPV4OPTSSTRIP目标
本目标可裁掉包标头里的所有IPv4选项。关于IPv4包的标头结构,请参阅《图5》。IPV4OPTSSTRIP目标只能用于mangle表格。
例来说,下列规则裁掉所有入境封包的IPv4选项标头 :
iptables -t mangle -A PREROUTING -j IPV4OPTSSTRIP
关于如何挑出IPv4选项的「整体长度」过滤条件。请参阅《ipv4options过滤条件》。
===========================
诀窍
本过滤条件必在核心支持CONFIG_IP_NF_MATCH_LENGTH组态时才有效。
===========================

举例来说,若想丢掉过长的ICMP PING 包(通常是恶性的),使用下列命令:
iptables -A INPUT -p icmp - -icmp-type ping -m length
- -length 1000 -j DROP
limit过滤条件
持续测试包的进出速率,当超过速率限制时,则停止监测。
《表41》说明本过滤条件的选项。
=========================
诀窍
本过滤条件必须在核心支持CONFIG_IP_NF_MATCH_LIMIT组态时才有效。
=========================

举例来说,若要接受每秒十次之内的ICMP PING封包,规则如下:
iptables -A INPUT -p icmp - -icmp-type ping -m limit
- -limit l0/s -j ACCEPT
或者,换个角度思考,拒收速率超过10次/每秒的1CMP PING包:
iptables -A INPUT -p icmp - -icmp-type ping -m limit
! - -limit l0/s -j DROP
利用limit过滤条件搭配LOG表格,可以模拟出一个违规记录器。
如果要以联机数代替封包数为限制条件,请参考iplimit和connlimit过滤条件,如果想限制特定对象的整体交通量,请考虑使用quota过滤条件。
LOG目标
将符合条件的包的相关资料记录于系日志统(透过syslog《表42》说明本目标的选项。
============================
诀窍
本目标必须在核心支持CONFIG_IP_NF_TARGET_LOG组态时才有效。
============================

《表43》列出日志讯息的各种程度的名称与编号。在Linux系上,这些信息定义于标头档,如果你的系统上有完整的Linux核心原始程序,你应该可以找到这个档案。

===========================
诀窍
panic、error和warn这三个名称已经被淘汰了(虽然iptables在显示讯息时,仍会将err改成error)。
===========================