Ubuntu 12.04 LTS-iptables v1.4.12
总结:
调用时 iptables 的规则集保存在哪里iptables-save <ruleset-name>
?
解释:
根据这个答案保存 iptables 规则的基本方法是调用
iptables-save > /etc/iptables/rules.v4
ip6tables-save > /etc/iptables/rules.v6
然后以/etc/network/interfaces
如下方式加载/恢复这些规则:
iface eth0 inet static
....
pre-up iptables-restore < /etc/iptables/rules.v4
pre-up ip6tables-restore < /etc/iptables/rules.v6
...或者将这些放入 shell 脚本中/etc/network/if-pre-up.d
。
这可以通过安装iptables-persistent
包来简化。
sudo apt-get install iptables-persistent
inovoke-rc.d iptables-persistent save
update-rc.d iptables-persistent defaults
按照一些教程,我尝试调用(对于12.04 预装的版本/包的service iptables status
不存在/未知的命令)并发现了这个有趣的输出:iptables
Aborting iptables initd: unknown command(s): "status".
...
save <ruleset>
save the current ruleset
load <ruleset>
load a ruleset
...
Saved rulesets:
active, inactive
...
似乎有两套规则我可以加载(active
和inactive
)...
.. 但这些存储在哪里?
我找不到他们的位置,因为活跃/不活跃是相当糟糕的搜索条件,而且dpkg-query -L iptables
也没有任何帮助。
当我用puppet
/配置我的服务器时chef
,如果能知道是否有地方可以放置我的规则集并添加一个简单的 shell 脚本来/etc/networking/if-pre-up
加载这些规则集就好了。
然后我可以省略iptables-persistent
不太灵活的包,因为它不允许加载不同的规则集。
感谢您的帮助。
答案1
iptables 将规则存储在内存中,但规则集iptables-save ruleset-name
可以在文件中找到创建者
/var/lib/iptables/规则集名称
可以通过调用 来恢复这些iptables-restore <ruleset-name>
。
我只能针对 Ubuntu 12.04.03 LTS 确认这一点 - 也许这个位置在 iptables-package 的后续版本中已经发生了变化。
我认为类似的东西/etc/iptables/rulesets.d
会是存储这些东西更合理的地方。
保存路径配置在/etc/init.d/iptables
第二十七然后使用initd_save()
它来调用initd_counters()
。
libdir=/var/lib/iptables
# ...
initd_counters () {
if test "${enable_save_counters:-false}" = true; then
echo -n " with counters"
$iptables_save -c > "$ruleset"
else
$iptables_save | sed '/^:/s@\[[0-9]\{1,\}:[0-9]\{1,\}\]@[0:0]@g' > "$ruleset"
fi
}
initd_save () {
rm -f $autosave
ruleset="${libdir}/$@"
echo -n "Saving iptables ruleset: save \"$@\""
initd_counters
echo "."
}