ipset配置持久化关键在于导出后绑定系统启动流程:先用ipset save导出至/etc/ipset.conf,再通过systemd服务在network启动后自动执行ipset restore和iptables规则插入,确保黑名单秒级复位。

直接用 ipset save 导出配置,再配合系统服务或启动脚本自动恢复,就能让防火墙重启后黑名单秒级复位——关键不在“导出”,而在“何时导、怎么载、如何绑定iptables”。
导出黑名单集合:用 ipset save 生成可重载文件
执行以下命令,将当前所有 ipset 集合(含黑名单)保存为标准 restore 格式:
-
ipset save > /etc/ipset.conf—— 全量导出,推荐用于备份或迁移 -
ipset save blacklist > /etc/ipset-blacklist.conf—— 仅导出名为 blacklist 的集合,更轻量、更安全,适合日常维护
注意:ipset save 输出的是纯文本指令(create/add),天然兼容 ipset restore,无需格式转换。文件里每行都是有效命令,不能手动删空行或加注释,否则 restore 会失败。
确保重启后自动加载:三步绑定到系统启动流程
Linux 不会自动加载 ipset 配置,必须显式集成。推荐 systemd 方式(适用于 CentOS 7+/Ubuntu 16.04+):
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
- 先创建恢复脚本:
/usr/local/bin/load-ipset.sh,内容为:
ipset restore /dev/null || true
iptables -I INPUT -m set --match-set blacklist src -j DROP
- 给脚本加执行权限:
chmod +x /usr/local/bin/load-ipset.sh - 新建 systemd 服务
/etc/systemd/system/ipset-load.service:
After=network.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/load-ipset.sh
[Install]
WantedBy=multi-user.target
- 启用服务:
systemctl daemon-reload && systemctl enable ipset-load.service
下次 reboot 或 systemctl restart network 后,黑名单集合和 iptables 规则都会自动就位。
避免常见失效陷阱:四个必须检查点
即使文件存在、服务启用,黑名单仍可能不生效。排查时盯紧这几点:
- iptables 规则位置是否靠前:-m set 规则必须插在 INPUT/FORWARD 链头部,若写在 -j ACCEPT 之后,包早被放行了
-
集合名是否拼写一致:restore 文件里的集合名(如
blacklist)、iptables 中的--match-set blacklist、以及脚本里调用的名称,三处必须完全相同 -
ipset 模块是否已加载:运行
lsmod | grep ip_set,缺失则执行modprobe ip_set ip_set_hash_ip,并加入/etc/modules永久加载 -
restore 前集合是否已被引用:若黑名单正在被 iptables 使用,
ipset restore会报错“set is in use”。解决办法是先删规则:iptables -D INPUT -m set --match-set blacklist src -j DROP,再 restore,最后重新插入规则
进阶建议:结合持久化与热更新
生产环境建议分层管理:
- 每日定时执行
ipset save blacklist > /var/lib/ipset/blacklist-$(date +%F).conf,保留 7 天快照 - 主配置文件
/etc/ipset-blacklist.conf仅用于开机加载,由运维人员手动更新或通过 swap 流程热切换 - 若需紧急清空黑名单又不中断服务,用
ipset flush blacklist,它不影响集合结构和 iptables 引用,比 destroy + recreate 更安全










