一. iptables使用ipset介绍

     
 ipset的产生就是为了方便iptables的,ipset可以减少iptables规则的冗余,尤其对于比较复杂的网络过滤时。iptables使用ipset需要通过
-m set指定,通过选项达到不同的效果。

二. iptables使用ipset的方法

 [ ! ] --match-set setname flag [,flag] ...

        flag可以通过指定为src或dst,flag最多数量为6个,中间使用逗号隔开。

举例:
# 创建名称为test的ipset ipset create test hash:ip,port ipset add test
192.168.1.105,tcp:80 # 丢弃来自源IP192.168.1.105,源端口80的包 iptables -A INPUT -m set
--match-set test src,src -j DROP # 丢弃来自源IP192.168.1.105,目的端口80的包 iptables -A
INPUT -m set --match-set test src,dst -j DROP # 丢弃访问目的IP192.168.1.105,目的端口80的包
iptables -A INPUT -m set --match-set test dst,dst -j DROP # 创建名称为test1的ipset
ipset create test1 hash:ip,mac ipset add test1 192.168.1.105,3C:7C:3F:D7:94:AF
# 丢弃来自源IP192.168.1.105,源MAC 3C:7C:3F:D7:94:AF的包 iptables -A INPUT -m set
--match-set test1 src,src -j DROP 其他情况同test一样
 --return-nomatch

        匹配被设置了nomatch标志的条目。

举例:
# 创建类型为hash:net的test3 ipset ipset create test3 hash:net # 添加nomatch, 匹配时跳过此条目
ipset add test3 192.168.1.0/24 nomatch #
iptables匹配test3中,设置为nomatch的条目的网络段的icmp包丢弃 iptables -I INPUT -m set --match-set
test3 src --return-nomatch -p icmp -j DROP
[!] --packets-eq value

        如果包匹配了ipset中的一个条目,并且包的数量等于(!不等于)设置的value值时,iptables的动作将作用于此条目。

--packets-lt value

        用法同--packets-eq value,但是是当包的数量小于value

--packets-gt value

        用法同--packets-eq value,但是是当包的数量大于value

[!] -bytes-eq value; --bytes-lt value; --bytes-gt value

        用法同--packets-eq,--packets-lte,--packets-gt。只是匹配的是字节数。

举例:
# 创建test ipset,记得要指定counters选项 ipset create test hash:ip counters #
添加192.168.1.105到test ipset ipset add test 192.168.1.105 #
匹配到小于3个icmp包的ipset条目丢弃 iptables -I INPUT -m set --match-set test src
--packets-lt 3 -p icmp -j DROP # ipse list命令可看到当前包的数量统计和字节统计 [root@192 ~]#
ipset list Name: test Type: hash:ip Revision: 4 Header: family inet hashsize
1024 maxelem 65536 counters Size in memory: 248 References: 1 Number of
entries: 1 Members: 192.168.1.105 packets 4 bytes 240 # windows
ping的效果,前两个包没ping通,第三个包开始通 C:\Users\admin>ping 192.168.1.40 Pinging
192.168.1.40 with 32 bytes of data: Request timed out. Request timed out. Reply
from 192.168.1.40: bytes=32 time<1ms TTL=64 Reply from 192.168.1.40: bytes=32
time<1ms TTL=64 Ping statistics for 192.168.1.40: Packets: Sent = 4, Received =
2, Lost = 2 (50% loss), Approximate round trip times in milli-seconds: Minimum
= 0ms, Maximum = 0ms, Average = 0ms
! --update-counters

        如果ipset命令指定了counters选项创建一个IP set时,匹配的条目的包和字节的数量会增加,如下所示。
[root@192 ~]# ipset list Name: test Type: hash:ip Revision: 4 Header: family
inet hashsize 1024 maxelem 65536 counters Size in memory: 248 References: 1
Number of entries: 1 Members: 192.168.1.105 packets 4 bytes 240 [root@192 ~]#
ipset list Name: test Type: hash:ip Revision: 4 Header: family inet hashsize
1024 maxelem 65536 counters Size in memory: 248 References: 1 Number of
entries: 1 Members: 192.168.1.105 packets 6 bytes 360
如果指定!--update-counters,IP set条目后的packets和bytes匹配到了包,数量不会增加。

三. 总结

        1. iptables如果使用ipset,需要指定"-m set"。

        2. iptables可以用"--nomatch"选项,专门匹配ipset中带nomatch的条目。

        3. iptables要根据IP set中条目包数量动作时,需要ipset创建IP set时,要指定counters选项。

技术
下载桌面版
GitHub
Gitee
SourceForge
百度网盘(提取码:draw)
云服务器优惠
华为云优惠券
腾讯云优惠券
阿里云优惠券
Vultr优惠券
站点信息
问题反馈
邮箱:[email protected]
吐槽一下
QQ群:766591547
关注微信