Netfilter 匹配方式和处理方法

1 MAC 地址匹配
由xt_mac.ko模块提供的功能
iptables -A INPUT -p tcp --dport 3306 -m mac --mac-source 00:02:03:04:1F:13 -j ACCEPT

2 Multiport的匹配
(1)介绍:Multiport 功能由xt_multiport.ko 模块提供的功能 由于匹配的是端口所以需要和-p结合使用
(2)提供的匹配参数:
    * --dports            匹配目的
   * --sports              匹配源地址
   * --ports                匹配目的和源
(3)示例:
iptables -A INPUT -p tcp --syn -m state --state NEW -m multiport --dports 21,22,443,80 -j ACCEPT

3数据包MARK值匹配
(1)由xt_MARK.ko提供
(2)参数:
 * --mark       匹配标记

(3)示例:

iptables -t mangle -A PREROUTING -p tcp --dport 80 -j MARK --set-mark 80

iptables -A FORWARD -p all -m mark --mark 80 -j DROP

4Owner匹配
(1) Owner的匹配方式由ipt_owner.ko模块提供,只适合OUTPUT 与POSTROUTING
(2) 参数:
* --uid-owner userid|username 匹配数据包由那个使用者产生的
* --gid-owner groupid|groupname 匹配数据包由那个用户组产生的
(3) 实例:
Iptables -A OUTPUT -p tcp -m owner --uid-owner jack --dport 80 -j ACCEPT


5 地址范围匹配

(1) 由ipt_iprange.ko提供
(2) 参数:
* --src-range          匹配来源地址范围
* --dst-range          匹配目的地址范围
(3) 实例:
iptables -A INPUT -m iprange --src-range 192.168.110.1-192.168.110.20 -j DROP

6 TTL 值匹配
(1)由ipt_ttl.ko 模块提供
(2)参数:
* --ttl-eq number 匹配ttl值等于number
* --ttl-lt number 小于
* --ttl-gt number 大于
(3)实例:
Iptables -A INPUT -m ttl --ttl-eq 64 -j REJECT

7 数据包状态匹配
(1) 由xt_state.ko 模块提供state 匹配 链接状态有4种:ESTABLISHED、NEW、RELATED、及INVALID 四种
INVALID:不属于前三种的数据包状态。
(2) 参数:
--state NEW|ESTABLEISHED|RELATED|INVALID
(3) 实例:
Iptables -A INPUT -p all -m state --state NEW,ESTABLEISHED,RELATED -j ACCEPT

8 AH及ESP 协议的SPI 值匹配
(1) 由ipt_ah.ko 和xt_esp.ko 模块提供
(2) 参数:
--ahspi       AH 包头内的spi 值
--espspi     ESP 包头的spi值
(3) 实例:
Iptables -A FORWARD -p ah -m ah --ahspi 300 -j ACCEPT


9 pkttype 匹配

(1) tcp/ip 网络环境中数据包传输有三种:Unicast 数据包发送对象特定 Broadcast 数据包传送的对象为广播地址 Multicast 数据包传送对象为多播地址。该匹配方式由xt_pkttype.ko提供
(2) 参数:
--pkt-type unicast|broadcast|multicast
(3) 实例:

Iptables -A FORWARD -i eth0 -p icmp -m pkttype --pkt-type broadcast -j DROP


10 MTU 值匹配
(1) MTU=IP包头 +ICMP/TCP 包头+DATA,MSS=ICMP/TCP 包头+DATA
(2) 参数:
* [!]--length number 匹配MTU 值为number byte 数据包
* [!]--length :number 小于number byte数据包
* [!]--length number1:number2 两者之间的数据包
(3) 实例:
iptables -A FORWARD -p icmp -m length --length 92 -j ACCEPT

11 limit 特定数据包重复率匹配
(1)由xt_limit.ko 提供
(2)参数:
--limit packets/m(minutes)|s(second)|h(hour)|d 限制单位时间包个数 包速率
--limit-burst number 单位时间内包的数量 默认为5
(3) 实例:
Iptables -A INPUT -p icmp --icmp-type 8 -m limit --limit 6/m --limit-burst 10 -j ACCEPT

如果每分钟进入的ICMP包的数量小于等于10是被允许的 如果进入的数据包数量大于10就限制每分钟只能进来6个


12 recent 特定数据包重复率

(1) recent提供一个先取证后处理的特殊机制可以设计出多样化的匹配方式,像同一用户在某段时间内对服务器只能发起多少次ssh服务请求,以及防止各种端口扫描,recent的匹配方式由xt_recent.ko提供

(2) 参数:

 

(3) 实例:

iptables -A INPUT -p icmp --icmp-type 8 -m recent --name icmp_db --rcheck --second 60 --hitcount 6 -j DROP

Iptables -A INPUT -p icmp --icmp-type 8 -m recent --set --name icmp_db

Icmp_db 数据库会存放在/proc/net/xt_recent/ 目录中, 上述规则含义是 数据库中如果在60秒中含有6条以上的记录数据包就会被丢弃 否则就会将信息记录到icmp_db数据库中

13 使用String 模块匹配数据包内所承载的数据内容

(1) string 是由xt_string.ko 模块提供的匹配功能,string 可以在网络层的位置直接匹配数据包所承载的数据内容,只匹配单个数据包

(2) 参数:

 

(3) 实例:

Iptables -A FORWARD -i eth0 -o eth1 -p tcp -d 124.76.54.1 --dport 80 -m string --algo bm --string “system32” -j DROP

 

14 使用connlimit模块限制连接的最大数量

(1) connlimit 机制由xt_connlimit.ko 模块提供,以/proc/net/nf_conntract文件中的数据为依据来限制IP/网段 同时对目标主机或服务所能建立的最大连接数(考虑NAT使用问题)

(2) 参数:

 

(3) 实例:

Iptables -A FORWARD -i eth0 -o eth1 -p tcp --syn -d 123.54.11.1 --dport 80 -m connlimit --connlimit-above 30 --connlimit-mask 32 -j DROP

 

15 使用connbytes模块限制每个连接所能传输的数据量

(1)connbytes机制由xt_connbytes.ko 模块提供用来限制单一连接中所能传输的数据量上限

(2)参数:

 

实例:

限制使用者通过http协议下载20M以上的数据

Iptables -A FORWARD -p tcp -d 123.123.11.34 --dport 80 -m connbytes --connbytes-dir reply --connbytes-mode bytes --connbytes 20971520: -j DROP

 

16 使用qutoa 模块限制数据传输量的上限

(1) 使用qutoa 模块可以限制使用者每个小时或者每天所能传输的数据总量

(2) 参数

(3) 实例:限制每一个IP使用http 通信协议只能下载500MB的数据量

Iptables -A FORWARD -i eth0 -o eth1 -p tcp --sport 80 -m quota --quota 524288000 -j ACCEPT 

Iptables -A FORWARD -i eth0 -o eth1 -p tcp --sport 80 -j ACCEPT

注意 限制的IP地址 一旦积累到设置的量之后 这笔记录会永久保存到防火墙规则中 直到被清除为止,所以我们要定期刷新防火墙规则

 

17 使用time模块设置规则生效时间

(1) time 机制由xt_time.ko 提供用来设置规则的生效时间

(2) 参数:

 

实例:限制公司内服务器群 可以被访问的时间是周一 至周五早上九点到晚上九点

Iptables -A FORWARD -o eth1 -d 145.123.11.65 -m time --weekdays Mon,Tue,Wed,Thu,Fri --timestart 09:00 --timestop 21:00 -j ACCEPT

Iptables -A FORWARD -o eth1 -d 145.123.11.65 -j DROP

 

18 使用connmark 模块来匹配mark 

(1) connmark机制由xt_connmark.ko 模块提供 需与CONNMARK处理方法结合使用CONNMARK 处理方法就是为您不MARK的不足CONNMARK 是对一整条连接来设置mark 值 也就是说 只要连接中的某个数据包被标记mark,那么气候该链接双向的所有数据包都会自动设置这个mark

(2) 参数

(3) 实例:

Iptables -A INPUT -m connmark --mark 1 -j DROP


19使用conntract 模块匹配数据包状态

(1)conntrack 模块可以视为state模块的加强版 使用方法与state模块如出一辙

(2)参数:


(3)实例:

只允许192.168.1.0/24 网段的访问FTP服务

Modprobe nf_conntrack_ftp

Iptables -A INPUT -m conntrack --cstate ESTABLISHED,RELATED -j ACCEPT

Iptables -A INPUT -m conntrack --ctproto tcp --ctorigsrc 192.168.1.0/24 --ctorigdstport 21 --ctstate NEW -j ACCEPT 

Iptables -A INPUT -p tcp --dprot 21 -j DROP

 

20 使用statistic 模块进行比率匹配

(1) statistic 机制由xt_statistic.ko模块提供其功能是在必要的时候以随机或者规律的方式丢弃掉部分数据包

(2) 参数:


(3) 实例:

随机丢弃50%送到本机的icmp

Iptables -A INPUT -p icmp -m statistic --mode random --probability 0.5 -j DROP

 

21使用hashlimit 模块进行重复率匹配

(1) hashlimit 的功能与limit 模块功能雷同但功能更强大 某些方面可以视为recent的初级版,主要功能是限制特定行为的重复率

(2)参数:


(3)实例:


 

 

 

22多功能匹配模块u32

(1) netfilter 新增的扩展模块 u32 允许我们检查数据包内各包头的任意数据

(2) 参数

(3) 实例:

使用u32匹配数据包是否为TCP(我们可以在/etc/protocol 中找到传输协议对应的ID,tcp:6 udp:7)

 

Iptables -A INPUT -m u32 --u32 ‘6&0xFF=6’ -j DROP



猜你喜欢

转载自blog.csdn.net/luguifang2011/article/details/78405454