Firewalld ipset 使用

Posted by Sunday on 2022-06-18

一.firewalld中ipset的用途:

1.用途:
ipset是ip地址的集合,firewalld使用ipset可以在一条规则中处理多个ip地址,执行效果更高,对ip地址集合的管理也更方便

注意与iptables所用的ipset命令的不同,不要混合使用firewall-cmd的ipset参数与linux平台上的ipset命令,避免引起冲突,firewalld的ipset会记录到/etc/firewalld/ipsets/目录下

二. firewalld中ipset使用:

1.查看ipset类型

1
2
3
[root@sunday ~]# firewall-cmd --get-ipset-types
hash:ip hash:ip,mark hash:ip,port hash:ip,port,ip hash:ip,port,net hash:mac
hash:net hash:net,iface hash:net,net hash:net,port hash:net,port,net

2.新建ipset
#–new-ipset=ngx_ip_block 指定新ipset的名字为:ngx_ip_block
#–type=hash:ip 指定类型为 hash:ip,这种形式不允许重复而且只有一个ip
#–option=family=inet 指定ipv4
#–option=maxelem=ipset 默认可以存储65536个元素,使用maxelem指定数量

1
2
3
[root@sunday ~]# firewall-cmd --permanent --new-ipset=ngx_ip_block --type=hash:ip

firewall-cmd --permanent --new-ipset=ngx_ip_block --type=hash:net --option=family=inet --option=hashsize=4096 --option=maxelem=100000

3.在ipset中添加ip

1
[root@sunday ~]# firewall-cmd --permanent --ipset=ngx_ip_block --add-entry=171.8.173.138

4.从ipset中删除ip

1
[root@sunday ~]# firewall-cmd --permanent --ipset=ngx_ip_block --remove-entry=171.8.173.138

5.Firewalld引用ipset规则

方法1. 添加到drop区域

1
2
[root@sunday ~]#firewall-cmd --permanent --zone=drop --add-source=ipset:ngx_ip_block
[root@sunday ~]# firewall-cmd --reload

方法2.使用rich-rule

1
2
[root@sunday ~]# firewall-cmd --permanent --zone=public --add-rich-rule 'rule family="ipv4" source ipset="ngx_ip_block" drop'
[root@sunday ~]# firewall-cmd --reload

6.列出一个set下的所有entry

1
2
[root@sunday ~]# firewall-cmd --permanent --ipset=ngx_ip_block --get-entries
171.8.173.138

7.删除一个ipset

1
[root@sunday ~]# firewall-cmd --permanent --delete-ipset=ngx_ip_block

8.打印一个set的内容:

1
2
3
4
5
[root@sunday ~]# firewall-cmd --permanent --info-ipset=ngx_ip_block
ngx_ip_block
type: hash:ip
options:
entries: 171.8.173.138

9.判断一个ip是否存在于set中?

1
2
3
4
5
[root@sunday ~]# firewall-cmd --permanent --ipset=ngx_ip_block --query-entry=1.1.1.1
no

[root@sunday ~]# firewall-cmd --permanent --ipset=ngx_ip_block --query-entry=171.8.173.138
yes

10.列出所有的ipsets

1
2
[root@sunday ~]# firewall-cmd --permanent --get-ipsets
ngx_ip_block

11.打印一个set的文件路径:

1
2
[root@sunday ~]# firewall-cmd --permanent --path-ipset=ngx_ip_block
/etc/firewalld/ipsets/ngx_ip_block.xml

因为使用了hash类型,当ip重复时firewall-cmd会提示重复:

1
2
3
4
[root@sunday ~]# firewall-cmd --permanent --new-ipset=ngx_ip_block --type=hash:ip
[root@sunday ~]# firewall-cmd --permanent --ipset=ngx_ip_block --add-entry=171.8.173.138
[root@sunday ~]# firewall-cmd --permanent --ipset=ngx_ip_block --add-entry=171.8.173.138
Warning: ALREADY_ENABLED: 171.8.173.138

三. 添加IP白名单

将信任ip加入到trusted区域,防止自己被挡在门外

1
2
[root@sunday zones]# firewall-cmd --permanent --zone=trusted --add-source=171.8.173.138
[root@sunday zones]# firewall-cmd --reload