当前位置: 首页 > 工具软件 > ipset > 使用案例 >

iptables和ipset配合使用

吕宇定
2023-12-01

一. 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选项。

 类似资料: