Firewalld ipset 使用

Firewall Ipset

Posted by BlueFat on Saturday, June 18, 2022

一.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类型

[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指定数量

[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

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

4.从ipset中删除ip

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

5.Firewalld引用ipset规则

方法1. 添加到drop区域

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

方法2.使用rich-rule

[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

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

7.删除一个ipset

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

8.打印一个set的内容:

[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中?

[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

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

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

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

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

[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区域,防止自己被挡在门外

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