6.4.3.6. State match
状态匹配扩展要有内核里的连接跟踪代码的协助,因为他是从连接跟踪机制中得到包的状态的。这样我们就能够了解连接所处的状态。他几乎适用于任何的协议,包括那些无状态的协议,如ICMP和UDP。针对每个连接都有一个缺省的超时值,假如连接的时间超过了这个值,那么这个连接的记录就被会从连接跟踪的记录数据库中删除,也就是说连接就不再存在了。这个match必须有-m state作为前提才能使用。状态机制的周详内容在章节状态机制 中。
Table 6-13. State matches
| Match | --state |
| Example | iptables -A INPUT -m state --state RELATED,ESTABLISHED |
| Explanation | 指定要匹配包的的状态,当前有4种状态可用:INVALID,ESTABLISHED,NEW和RELATED。 INVALID意味着这个包没有已知的流或连接和之关联,也可能是他包含的数据或包头有问题。ESTABLISHED意思是包是完全有效的,而且属于一个已建立的连接,这个连接的两端都已有数据发送。NEW表示包将要或已开始建立一个新的连接,或是这个包和一个还没有在两端都有数据发送的连接有关。RELATED说明包正在建立一个新的连接,这个连接是和一个已建立的连接相关的。比如,FTP data transfer,ICMP error 和一个TCP或UDP连接相关。注意NEW状态并不在试图建立新连接的TCP包里寻找SYN标记,因此他不应该不加修改地用在只有一个防火墙或在不同的防火墙之间没有启用负载平衡的地方。具体如何使用,您就再看看章节状态机制吧:) |
6.4.3.7. TOS match
根据TOS字段匹配包,必须使用-m tos才能装入。TOS是IP头的一部分,其含义是Type Of Service,由8个二进制位组成,包括一个3 bit的优先权子字段(现在已被忽略),4 bit的TOS子字段和1 bit未用位(必须置0)。他一般用来把当前流的优先权和需要的服务(比如,最小延时、最大吞吐量等)通知路由器。但路由器和管理员对这个值的处理相差很大,有的根本就不理会,而有的就会尽量满足需要。
Table 6-14. TOS matches
| Match | --tos |
| Example | iptables -A INPUT -p tcp -m tos --tos 0x16 |
| Explanation | 根据TOS字段匹配包。这个match常被用来mark包,以便后用,除此之外,他还常和iproute2或高级路由功能一起使用。他的参数能够是16进制数,也能够是十进制数,还能够是相应的名字(用 iptables -m tos -h能查到)。到写这篇文章时,有以下参数可用: Minimize-Delay 16 (0x10),需要找一条路径使延时最小,一些标准服务如telnet、SSH、FTP-control 就需要这个选项。 Maximize-Throughput 8 (0x08),需要找一条路径能使吞吐量最大,标准服务FTP-data能用到这个。 Maximize-Reliability 4 (0x04),需要找一条路径能使可靠性最高,使用他的有BOOTP和TFTP。 Minimize-Cost 2 (0x02),需要找一条路径能使费用最低,一般情况下使用这个选项的是一些视频音频流协议,如RTSP(Real Time Stream Control Protocol)。 Normal-Service 0 (0x00),一般服务,没有什么特别需要。 |
6.4.3.8. TTL match
根据IP头里的TTL (Time To Live,即生存期)字段来匹配包,此必须由-m ttl装入。TTL field是个字节(8个二进制位),一旦经过一个处理他的路由器,他的值就减去1他的值。当该字段的值减为0时,报文就被认为是不可转发的,数据报就被丢弃,并发送ICMP报文通知源主机,不可转发的报文被丢弃。这也有两种情况,一是传输期间生存时间为0,使用类型为11代码是0的ICMP报文;二是在数据报重组期间生存时间为0,使用类型为11代码是1的ICMP报文。这个match只是根据TTL匹配包,而对其不做任何更改,所以在他之后可使用任何类型的match。
Table 6-15. TTL matches




