启动时加载手动创建的 iptables 脚本

启动时加载手动创建的 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我在应该设置防火墙的接口下有以下一行:

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

对于我来说,这个系统变得很繁琐,因为我必须频繁更改规则,而且每当我更改规则时,我都需要生成另一个iptables.rules文件并启动系统以查看规则是否得到应用。是否可以像 conf 文件那样在完成时加载。并且在主 iptables conf 文件中可以链接另一个 iptables 规则文件,该文件可以由权限较低的用户编辑。我希望将 iptables 规则直接写入文本文件中,该文件在启动时或完成service firewall restart时加载。service firewall restart

答案1

我假设您使用的是基于 DEBIAN 的系统,因为 RH/Centos 发行版附带了初始化脚本。

对于 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

您已经完成。

问候

答案2

事实上,我确实有疑问为什么您必须经常更改您的 iptables 规则集。

但是,如果您只是想测试一些新规则,请按以下步骤操作:

  1. 执行iptables-save > iptsave.sh(.sh 是为了启用美观的 vim 高亮功能)

  2. vi iptsave.sh并进行更改

  3. iptables-apply -t 600 iptsave.sh= 600 秒的测试时间,之后iptables-apply将自动恢复到之前的规则集。或者,您可以按y,新规则集将永久生效。请勿<在那里使用!! iptables-apply接受文件名作为争论,而不是作为 STDIN。

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


并且在主 iptables conf 文件中可以链接另一个 iptables 规则文件,该文件可由权限较低的用户编辑。

但为什么??

iptables 规则集只需制定一次,并且只能偶尔修改。如果您必须一直更改它,我认为您没有以最高效/有效的方式实施 iptables。


可定制和可更新的 MAC 规则

首先,确保 MAC 测试分支到不同的链。我建议也“拆分”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是用于管理员的 MAC 地址,因此它不会被攻击(从而将你锁定):

-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 检查链。现在,为了填充此链,让我们编写一个脚本。假设它是/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 (i.e., 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

现在用chmod和来做一些神奇的事情chown。让您的子管理员编辑 下的一个(或多个)文件/etc/firewall/maclists/,并且每当他们编辑他们的文件时,您只需执行脚本。

答案3

我有一个类似的问题,但它是关于这个话题的,所以我想我会分享我的意见并询问......

首先,在服务器上,拥有一个经常更改的 iptables 规则集是完全可行的。我不知道谁会认为不是。如果您运行端口扫描检测软件或其他类型的 IPS(入侵防御软件),则可以配置这些程序以将特定攻击主机的拒绝规则添加到您的 iptables 配置中。如果是这种情况,您可能希望在 iptables 停止或重新启动时将这些拒绝规则提交到保存文件中。

话虽如此,不要因为他想要一种动态更新 iptables 的方法而谴责他。我也在寻找同样的东西。

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

我知道有些消息来源说 iptables-persistent 有一个配置文件,允许它提交对防火墙规则的更改,但我正在运行 Ubuntu Server v13,而且似乎在任何地方都找不到该文件。我想,无论谁能发布它的路径,都可以回答我们两个问题。:p

相关内容