使用iptables的应该都会用到ipset,这是一个强化iptables集合功能的必备工具,ipset唯一的瑕疵可能就是基于内存的,需要定期手动保存到本地,并且每次重启Linux后,还需要重新恢复ipset,如果iptables里使用了ipset合集的话,没有重新恢复ipset还会造成iptables运行失败,这对于服务器安全来说带来了很大的不变。
保存ipset规则
ipset save > /etc/iptables/ipset
创建Systemd服务文件
新建/etc/systemd/system/ipset-restore.service,内容如下:
[Unit]
Description=Restore IPSet Rules
After=network.target
[Service]
Type=oneshot
ExecStart=/usr/sbin/ipset restore -f /etc/iptables/ipset
[Install]
WantedBy=multi-user.target
确保服务在 After=network.target 之后启动
使用 Requires=network.target 确保网络就绪
启用服务
systemctl daemon-reload
systemctl enable ipset-restore.service
验证这个自启动服务状态:
systemctl status ipset-restore.service
结果应该显示 "active (exited)" 状态
说白了就是了自己创建一个自启动服务在每次重启Linux的时候自动恢复ipset,我们仅仅需要定期手动的存储ipset到指定位置文件即可。当然,也可以利用systemctl在关机重启时自动导出保存ipset到指定文件,配合启动自动恢复。
ipset-with-iptables.png
只需要创建 systemd 服务文件
vim /etc/systemd/system/save-ipset.service
内容如下:
[Unit]
Description=Save IPSet Rules on Shutdown
DefaultDependencies=no
Before=shutdown.target reboot.target halt.target
Requires=network.target
[Service]
Type=oneshot
ExecStart=/usr/sbin/ipset save > /etc/iptables/ipset
TimeoutStartSec=0
[Install]
WantedBy=halt.target reboot.target shutdown.target
保存,退出
启用服务
sudo systemctl daemon-reload
sudo systemctl enable save-ipset.service
小林博客





