fwbuilder 似乎总是希望将防火墙规则直接写入将运行它们的设备,但是我想将它们写入规则文件,然后我可以通过配置管理(ansible)维护和更新设备。
澄清:希望以适合 iptables-restore 使用的格式写出规则。
这可能吗?
答案1
fwbuilder 不会生成开箱即用的“直接” iptables-restore 兼容脚本,但可以进行一些修改。它分为两部分:
首先,在防火墙设置对话框中的“脚本”选项卡中,勾选“使用 iptables-restore 激活策略”复选框。在同一选项卡中关闭生成的脚本的所有其他功能。
规则采用 iptables-restore 格式,但由于默认生成的脚本想要将它们发送到 iptables-restore 的标准输入,因此它们生成如下:
(
echo '*filter'
# ================ Table 'filter', automatic rules
echo :INPUT DROP [0:0]
echo :FORWARD DROP [0:0]
echo :OUTPUT DROP [0:0]
# accept established sessions
echo "-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT "
echo "-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT "
echo "-A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT "
# ================ Table 'filter', rule set Policy
#
# Rule 0 (global)
echo ":Cid5468X36359.0 - [0:0]"
. . . . . . . .
echo "-A POSTROUTING -o eth1 -s 10.0.18.0/24 -j SNAT --to-source 74.123.224.162 "
echo "-A POSTROUTING -o eth1 -s 10.0.22.0/24 -j SNAT --to-source 74.123.224.162 "
#
echo COMMIT
) | $IPTABLES_RESTORE; IPTABLES_RESTORE_RES=$?
您可以用自己的实用程序替换真正的 iptables-restore,该实用程序将从 stdin 中获取这些规则并将它们存储在文件中,该文件将采用正确的 iptables-restore 格式(这是您想要的)。该实用程序可以是简单的,例如“tee 文件”。要接管 iptables-restore,请打开防火墙属性中的“主机操作系统设置”对话框,转到“路径”选项卡并更改 iptables-restore 的路径,将其替换为路径和实用程序或脚本的名称。
由于您没有使用 fwbuilder 期望的默认脚本格式,因此其内置的策略安装程序无论如何都无法工作。因此您需要做的是运行生成的脚本来生成正确的 iptables-restore 文件,然后将其安装在它所属的位置。后面的部分如何做取决于您。
您还可以更改生成脚本的格式以删除不需要的部分。生成的脚本是使用您可以修改的模板构建的。请参阅用户指南第 13 章“Configlets”。这个想法是“简化”生成的脚本以仅保留应该已经采用 iptables-restore 格式的 iptables 规则并删除其他所有内容。我认为规则仍将采用“echo -A INPUT ...”的形式,因此您需要实际运行生成的脚本以获取所需格式的规则。