我刚刚读到iptables-持久性我完全迷失了设计。我是不是唯一的一个,谁不明白它是怎么运作的,但实际上它似乎远远超出了我的想象。
我想象过类似的事情crontab -e:您编辑一组规则,当编辑器关闭时,它们会被保留并应用。它们被存储某处而我作为用户不知道在哪里。别告诉我;这样就完美了。
有这样的工具吗?为什么要iptables-persistent
以这种难以遵循的方式工作?
答案1
一般来说,您可以使用文本编辑器编辑 IPv4 的活动 iptables 规则,方法是使用命令iptables-save
将规则写入文件,然后iptables-restore
在完成后使用命令重新加载新规则,例如:
user@host:~$ iptables-save > rules.v4
user@host:~$ vim rules.v4
user@host:~$ iptables-restore rules.v4
对于 IPv6,您可以使用类似的命令ip6tables-save
和ip6tables-restore
,即:
user@host:~$ ip6tables-save > rules.v6
user@host:~$ vim rules.v6
user@host:~$ ip6tables-restore rules.v6
该iptables-persistent
服务在以下位置进行检查:
/etc/iptables/rules.v4
/etc/iptables/rules.v6
因此,要应用您的规则并让它们持续存在,您将遵循与上述相同的步骤,但要编辑文件iptables-persistent
,例如:
user@host:~$ iptables-save > /etc/iptables/rules.v4
user@host:~$ vim /etc/iptables/rules.v4
user@host:~$ iptables-restore /etc/iptables/rules.v4
我不知道有什么交互式命令可以像您所描述的那样编辑 iptables 规则,但创建您自己的规则应该很容易。这是一个简单的例子:
#!/usr/bin/env bash
# iptables-e.sh
# Create a temporary file to store the new rules
TEMPFILE=$(mktemp)
# Save the current rules to a file
iptables-save > "${TEMPFILE}"
# Edit the rules interactively with a text editor
"${EDITOR}" "${TEMPFILE}"
# Try to load the rules and update the persistent rules if no errors occur
iptables-restore "${TEMPFILE}" && cat "${TEMPFILE}" > /etc/iptables/rules.v4
这实际上与工作方式没有太大区别crontab -e
,工作方式只是自动将活动的 crontab 保存到/var/spool/cron/crontabs
目录中的文件中,这就是导致 crontab 持久存在的原因。有关此主题的进一步讨论,请参阅以下帖子:
您可能还对以下脚本感兴趣:
但我不能保证这一点。我从来没有用过它。这是我通过搜索交互式 iptables 编辑找到的唯一东西。
答案2
为什么不直接制作一个这样的脚本:
#!/bin/bash
...
${YOUR_IPTABLES_RULES}
...
然后每次重新启动机器时启动脚本:
# vim /etc/crontab
@reboot root /bin/bash /root/bin/myiptablesrules.sh
这样你也会有持久的规则:)
答案3
您是否尝试过使用 iptables-save 命令?
iptables-save > /path/to/file
ip6tables-save > /path/to/file
iptables-restore < /path/to/file
ip6tables-restore < /path/to/file
您可以手动保存到文件并添加恢复命令以在启动或登录时运行。生成的文件易于人类阅读,并且包含每个条目的等效 iptables 命令。您还可以在重新加载生成的文件之前对其进行编辑。至少我就是这么做的。不确定这是否是最好的方法,但它绝对有效。