ipset的学习与使用

济南小老虎 / 2023-05-03 / 原文

ipset的学习与使用


场景说明

虽然可以通过:
firewall-cmd  --zone=trusted --add-source=$1 --permanent && firewall-cmd --reload
或者是
firewall-cmd --zone=public --add-port=$1/tcp --permanent && firewall-cmd --reload
为ip地址和端口开放里面, 但是每次还需要进行一下reload.  如果条目数过多之后
防火墙的reload和性能都不是特别好. 
最近在看博客, 突然发现有一个ipset的方式. 更加简单. 
也更利于实现单独的ip设置, 动态增删等. 

ChatGPT怎么说

ipset 是一个基于内核的数据结构,它可以用于管理 iptables 规则。
ipset 可以通过自定义集合来代替直接写入 iptables 规则。
这些集合可以包括 ip 地址、端口号、mac 地址等成员,并且可以在多个规则中重复使用,
从而简化了管理和维护的工作。
使用 ipset 命令创建、修改和删除集合,还可以将集合成员添加到集合中或从集合中移除成员。
在 iptables 规则中使用集合时,只需要引用集合的名称即可,而不必列出集合中的每个成员。

总之,ipset 是一个强大的工具,可以帮助用户管理 iptables 规则并加快网络流量过滤的速度。

安装

好像 centos 系列都会默认安装 ipset
ubuntu的机器可以使用 apt-get install ipset -y 的方式进行安装
centos的机器可以使用
yum install ipset -y 方式进行安装.
方式比较简单. 可以直接进进行使用. 

简介

帮助部分:
create SETNAME TYPENAME [type-specific-options]
        Create a new set
add SETNAME ENTRY
        Add entry to the named set
del SETNAME ENTRY
        Delete entry from the named set
test SETNAME ENTRY
        Test entry in the named set
destroy [SETNAME]
        Destroy a named set or all sets
list [SETNAME]
        List the entries of a named set or all sets
save [SETNAME]
        Save the named set or all sets to stdout
restore 
        Restore a saved state
flush [SETNAME]
        Flush a named set or all sets
rename FROM-SETNAME TO-SETNAME
        Rename two sets
swap FROM-SETNAME TO-SETNAME
        Swap the contect of two existing sets
help [TYPENAME]
        Print help, and settype specific help
version 
        Print version information
quit 
        Quit interactive mode

部分命令的使用

ipset create whitelist hash:ip
ipset create blacklist hash:ip
# 创建一个空的白名单. 
iptables -I INPUT -m set --match-set whitelist src -j ACCEPT
# 白名单设置为接收
iptables -I INPUT -m set --match-set blacklist src -j DROP
# 黑名单设置为拒绝. 

firewall-cmd 设置 ipset 的方式

firewall-cmd --get-ipset-types
获取支持的 ipset类型列表
firewall-cmd --get-ipsets
获取当前所有的ipset
firewall-cmd  --zone=trusted  --permanent --add-source=ipset:ipsetname
将某ipset 增加到特定区域中
firewall-cmd --add-rich-rule='rule source ipset=blacklist drop'
设置黑名单 drop
firewall-cmd --zone=public --add-rich-rule='rule source ipset=whitelist accept'
设置白名单 接收
firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source ipset=whitelist port port=22 protocol=tcp reject'
将特定IP地址设置为不进行 22 端口的访问.

ipset命令详解

ipset add whitelist 10.110.80.0/21
将部分内网段添加到白名单
ipset list 
查看ipset的列表
ipset whitelist list 
查看白名单的信息
ipset flush whitelist
清空列表里面的信息
ipset destroy 
销毁所有的列表, 如果加上列表名称就是清理对应的列表. 
ip save whitelist -f zhaobsh.txt 
将白名单保存到具体文件
ipset restore -f zhaobsh.txt