在启动时加载手动创build的iptables脚本

目前我使用iptables-save生成的脚本在启动时加载。 这是/etc/iptables.rules的[部分]内容:

 # Generated by iptables-save v1.4.4 on Sat Mar 19 15:35:11 2011 *nat :PREROUTING ACCEPT [218073:19652132] :POSTROUTING ACCEPT [75792:5067692] :OUTPUT ACCEPT [68177:4555584] -A POSTROUTING -o eth2 -j MASQUERADE COMMIT # Completed on Sat Mar 19 15:35:11 2011 

而且我应该在防火墙etc/network/interfaces下的etc/network/interfaces有这一行:

pre-up iptables-restore < /etc/iptables.rules

这个系统对我来说是很乏味的,因为我必须经常改变规则,每当我改变规则时,我需要生成另外一个iptables.rules文件,然后进行系统启动,看看这些规则是否适用。 它可以像在每次service firewall restart完成时加载的conf文件一样完成。 而在主iptables conf文件中,可以链接另一个iptables规则文件,这些文件可以由具有较less特权的用户编辑。 我希望iptables规则直接写入一个文本文件,该文件在启动时或service firewall restart完成时加载。

我认为你是基于DEBIAN的系统,因为RH / Centos发行版包含了init脚本。

对于Ubuntu安装iptables-persistent

 apt-get install iptables-persistent 

应该够了。

对于Debian,您可以从以下位置获取脚本: http : //www.ubuntucy.org/wiki/index.php/A_persistent_iptables_startup_script_for_Debian_based_systems

要在引导时使用update-rc.d。 我假设你将脚本保存在/etc/init.d/iptables中,运行:

 update-rc.d iptables defaults 

你完成了。

问候

其实,我确实有一个问题, 为什么你必须一直改变你的iptables规则集。

但是,如果您只是想要testing一些新的规则,请执行以下操作:

  1. iptables-save > iptsave.sh (.sh是为了启用漂亮的vim高亮)

  2. vi iptsave.sh并做你的改变

  3. iptables-apply -t 600 iptsave.sh = 600秒的testing时间,之后iptables-apply自动恢复到之前的规则集。 或者,您可以按y ,新的规则集将变为永久的。 不要使用<那里! iptables-apply接受一个文件名作为参数 ,而不是STDIN。

  4. mv iptsave.sh /etc/iptables.rules


而在主iptables conf文件中,可以链接另一个iptables规则文件,这些文件可以由具有较less特权的用户编辑。

但为什么??

iptables规则集意味着一次,并且只是偶尔修改。 如果你不得不一直改变它,我认为你没有以最有效的方式实施iptables。


可定制和可更新的MAC规则

首先,确保MACtesting分支到不同的链。 我也build议'分裂'INPUT链(为了简洁,我放弃了iptables命令)

 -N MAC_admins -N MAC_users -N INPUT_2 -A INPUT -j MAC_admins -A INPUT -j MAC_users -A INPUT -j DROP ... rest of -A INPUT is put into -A INPUT_2 ... 

MAC_admins是为了pipe理员的MAC地址,所以它不会被弄坏(从而locking你):

 -A MAC_admins -m mac --mac-source 11:11:11:11:11:11 -g INPUT_2 -A MAC_admins -m mac --mac-source 22:22:22:22:22:22 -g INPUT_2 -A MAC_admins -m mac --mac-source 33:33:33:33:33:33 -g INPUT_2 

MAC不匹配的用户将返回到INPUT链,并忍受第二个MAC检查链。 现在,为了填充这个链,我们来创build一个脚本。 假设它是/etc/firewall/UpdateMAC.sh

 #!/bin/bash readonly CONFDIR="/etc/firewall/maclists" readonly IPT="/sbin/iptables" readonly WORKCHAIN="MAC_users" readonly NEXTCHAIN="INPUT_2" readonly MACPATTERN="^([a-f0-9]{2}:){5}[a-f0-9]{2}$" # Flush the chain (ie, remove all rules in the chain) $IPT -F $WORKCHAIN for f in $CONFDIR/* do while read mac; do [[ -z $mac ]] && continue # Skip empty lines [[ ${mac:0:1} == "#" ]] && continue # Skip comments (if any) # A regex check to ensure that $mac indeed contains a MAC address if [[ $mac =~ $MACPATTERN ]]; then $IPT -A $WORKCHAIN -m mac --mac-source $mac -g $NEXTCHAIN fi done < $f done exit 0 # Tested on bash v4 

现在用chmodchown来做一些魔法。 让你的子地址编辑/etc/firewall/maclists/下的一个(或多个)文件,并且只要他们编辑了他们的文件,就执行脚本。

我有一个类似的问题,但在这个话题上,所以我想我会分享我的两分钱,并要求…

首先,在服务器上,经常更改iptables规则集是非常可行的。 我不知道谁不会想。 如果您运行端口扫描检测软件或其他types的IPS(入侵防御软件),可以将这些程序configuration为将针对特定攻击主机的拒绝规则添加到您的iptablesconfiguration中。 如果是这样的话,当iptables停止或重新启动时,您可能会希望将这些拒绝规则提交给保存文件。

也就是说,不要因为想dynamic地更新iptables而痛惜他。 我在同一个地方钓鱼。

要回答这个问题,有一个名为iptables-persistent的软件包,可以通过“apt-get iptables-persistent”来安装。 它将提交当时加载的iptables规则并为它们创build文件,然后创build引导脚本以在引导时重新加载这些规则,或重新启动防火墙。

我知道有些消息来源说有一个iptables-persistent的configuration文件,允许它修改防火墙规则,但是我运行的是Ubuntu Server v13,而且我无法在任何地方find这个文件。 我想任何能够通过它的人都能回答我们的问题。 :p