iptables进阶用法-扩展模块

  • 1、string扩展模块
  • 2、time扩展模块
  • 3、connlimit扩展模块
  • 4、limit扩展模块
  • 5、tcp-flags模块
  • 6、state


1、string扩展模块

使用string扩展模块,可以指定要匹配的字符串,如果报文中包含对应的字符串,则符合匹配条件。

用法:
-m string:表示使用string扩展模块
–algo:用于指定匹配算法,可选的算法有bm与kmp,此选项为必须选项,必须指定一个。
–string:用于指定需要匹配的字符串。

举例如下:

[root@li ~]# iptables -t filter -I INPUT -m string --algo kmp --string "bik" -j REJECT
[root@li ~]# iptables -nvL
Chain INPUT (policy ACCEPT 9 packets, 552 bytes)
 pkts bytes target     prot opt in     out     source               destination                                           
    0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0                                                      
STRING match "bik" ALGO name kmp TO 65535 reject-with icmp-port-unreachable

2、time扩展模块

根据时间段区匹配报文,如果报文到达的时间在指定的时间范围以内,则符合匹配条件。

用法:
-m time:表示使用time扩展模块
–timestart:选项用于指定起始时间,00:00:00格式时分秒。
–timestop:选项用于指定结束时间。
–weekdays:用于用数字指定星期几,还能用缩写表示,例如:Mon, Tue, Wed,Thu, Fri, Sat, Sun
–monthdays,–datestart,–datestop:指定日期范围

举例如下:

[root@li ~]# iptables -t filter -I OUTPUT -p tcp --dport 80 -m time --timestart 8:50:00 --timestop 17:00:00 -j REJECT
[root@li ~]# iptables -t filter -I OUTPUT -p tcp --dport 80 -m time --weekdays 1,2,3,4,5 -j REJECT 
[root@li ~]# iptables -nvL
Chain OUTPUT (policy ACCEPT 3 packets, 312 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 REJECT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:80 TIME on Mon,Tue,Wed,Thu,Fri reject-with icmp-port-unreachable
    0     0 REJECT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:80 TIME from 08:50:00 to 17:00:00 reject-with icmp-port-unreachable

3、connlimit扩展模块

限制每个IP地址同时链接到server端的链接数量,不用指定IP,默认就是针对"每个客户端IP",一般和协议、端口配合使用

用法:
–connlimit-above:限制连接上限
–connlimit-mask:按照网段限制连接上限

举例如下:

[root@li ~]# iptables -t filter -I OUTPUT -p tcp --dport 22 -m connlimit --connlimit-above 2 --connlimit-mask 24 -j REJECT
[root@li ~]# iptables -nvL
Chain OUTPUT (policy ACCEPT 6 packets, 592 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 REJECT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0         
tcp dpt:22 #conn/24 > 2 reject-wit  hicmp-port-unreachable

4、limit扩展模块

对"报文到达速率"进行限制,可以秒、分钟、小时、天作为单位进行限制。(主要用来限制单位时间内可以流入的数据包的数量)

用法: 使用"–limit"选项时,可以选择的时间单位有多种,如/second /minute /hour /day

举例如下:

[root@li ~]# iptables -t filter -I INPUT -m limit --limit 10/min  -j REJECT
 每六秒钟。有一个包不能流入,并且默认开始可以容纳五个包不能流入。

[root@li~]# iptables -nvL
Chain INPUT (policy ACCEPT 32 packets, 1857 bytes)
 pkts bytes target     prot opt in     out     source               destination
   17  1160 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            limit: avg 10/min burst 5
  335 32564 REJECT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
   
[root@liyu ~]# ping 192.168.126.128         #用另一台机器ping
PING 192.168.126.128 (192.168.126.128) 56(84) bytes of data.
From 192.168.126.128 icmp_seq=1 Destination Port Unreachable
From 192.168.126.128 icmp_seq=2 Destination Port Unreachable
From 192.168.126.128 icmp_seq=3 Destination Port Unreachable
From 192.168.126.128 icmp_seq=4 Destination Port Unreachable
From 192.168.126.128 icmp_seq=5 Destination Port Unreachable
64 bytes from 192.168.126.128: icmp_seq=6 ttl=64 time=0.378 ms
From 192.168.126.128 icmp_seq=7 Destination Port Unreachable
64 bytes from 192.168.126.128: icmp_seq=8 ttl=64 time=0.390 ms
64 bytes from 192.168.126.128: icmp_seq=9 ttl=64 time=0.373 ms
64 bytes from 192.168.126.128: icmp_seq=10 ttl=64 time=0.311 ms
^C
--- 192.168.126.128 ping statistics ---

5、tcp-flags模块

–tcp-flags指的就是tcp头中的标志位,讲了三次握手,四次挥手以及TCP的包头,这里主要指tcp包头中的标志位置,SYN,ACK,FIN,RST,URG,PSH。

用法:
分为第一部分和第二部分,第一部分报头标志位全写,第二部分谁置1,就写谁

举例如下:

[root@li ~]# iptables -t filter -I INPUT -p tcp  --dport 22 --tcp-flags all SYN -j REJECT    匹配第一次握手
[root@li ~]# iptables -nvL
Chain INPUT (policy ACCEPT 2 packets, 128 bytes)
 pkts bytes target     prot opt in     out     source               destination          
    0     0 REJECT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0                 
  tcp dpt:22 flags:0x3F/0x02 reject-with icmp-port-unreachable

6、state

state是一个非常重要的扩展,可以基于连接追踪功能去查看每一报文当前所处的状态。

  • 不论什么协议,客户端第一次访问时,服务器会去内核内存中的追踪表查看他之前是否来过,查不到就证明是第一次来,记入追踪表,如果查到以前来过就不检查规则,直接允许访问,这称为连接追踪机制。
  • 报文状态有五种
    NEW: 第一次连接时;
    ESTABLISHED:已建立的连接;
    INVALID:无法识别的连接;
    RELATED:相关联的连接,当前连接是一个新请求,但附属于某个已存在的连接 ;
    UNTRACKED:row表上关闭连接追踪功能

举例如下:

[root@li ~]# iptables -t filter -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
[root@li ~]# iptables -t filter -A INPUT -j REJECT
[root@li ~]# iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
   24  1536 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
    0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-port-unreachable
    
原有连接不受影响
新建连接被拒绝