如何用脚本恢复防火墙配置?

wen 实用脚本 2

本文目录导读:

如何用脚本恢复防火墙配置?

  1. 场景一:Linux iptables/nftables(通用脚本方法)
  2. 场景二:Windows 防火墙(netsh 命令)
  3. 场景三:企业级防火墙(如 iptables + ipset 或 pfSense/OPNsense)
  4. 重要安全提示
  5. 如果需要更具体的脚本(例如针对特定硬件品牌或云平台),请补充以下信息:

从备份文件恢复从当前内存/运行状态恢复,具体方法取决于你使用的防火墙类型(Linux iptables/nftables、Windows 防火墙、还是企业级硬件防火墙)。

以下分场景提供脚本恢复方案:

Linux iptables/nftables(通用脚本方法)

假设你之前使用 iptables-savenft list ruleset 导出了备份文件,现在需要恢复。

使用 iptables-restore(适用于 iptables)

如果你备份的文件是 iptables-save 格式(/backup/iptables-20250101.rules)。

#!/bin/bash
# 脚本: restore_iptables.sh
BACKUP_FILE="/backup/iptables-20250101.rules"
# 检查备份文件是否存在
if [ ! -f "$BACKUP_FILE" ]; then
    echo "错误:备份文件 $BACKUP_FILE 不存在!"
    exit 1
fi
# 恢复前清空所有规则(可选,建议先执行)
iptables -F
iptables -X
iptables -t nat -F
iptables -t mangle -F
iptables -t raw -F
# 从备份文件恢复
echo "正在从 $BACKUP_FILE 恢复 iptables 配置..."
iptables-restore < "$BACKUP_FILE"
# 检查恢复是否成功
if [ $? -eq 0 ]; then
    echo "防火墙规则恢复成功!"
    iptables -L -n -v
else
    echo "恢复失败!请检查备份文件格式。"
    exit 1
fi

使用 nft (nftables) 恢复(适用于较新 Linux 发行版)

备份文件通常通过 nft list ruleset > backup.nft 生成。

#!/bin/bash
# 脚本: restore_nftables.sh
BACKUP_FILE="/backup/nftables-20250101.nft"
if [ ! -f "$BACKUP_FILE" ]; then
    echo "错误:备份文件不存在!"
    exit 1
fi
# 恢复前先清除现有规则集
echo "清除现有 nftables 规则..."
nft flush ruleset
# 恢复备份规则
echo "正在从 $BACKUP_FILE 恢复 nftables 配置..."
nft -f "$BACKUP_FILE"
if [ $? -eq 0 ]; then
    echo "nftables 规则恢复成功!"
    nft list ruleset
else
    echo "恢复失败!请检查文件语法。"
    exit 1
fi

Windows 防火墙(netsh 命令)

通常使用 netsh advfirewall export 导出备份(.wfw 文件),恢复使用 netsh advfirewall import

@echo off
rem 脚本: restore_windows_firewall.bat
set BACKUP_FILE=C:\backup\firewall_20250101.wfw
if not exist "%BACKUP_FILE%" (
    echo 错误:备份文件 "%BACKUP_FILE%" 不存在!
    exit /b 1
)
echo 正在从 "%BACKUP_FILE%" 恢复 Windows 防火墙配置...
netsh advfirewall import "%BACKUP_FILE%"
if %errorlevel% equ 0 (
    echo 防火墙配置恢复成功!
    netsh advfirewall show currentprofile
) else (
    echo 恢复失败!请检查文件权限或格式。
    exit /b 1
)

企业级防火墙(如 iptables + ipset 或 pfSense/OPNsense)

对于开启了 ipset 的 iptables 规则

如果你同时有 ipset 的备份(ipset save > ipset.backup),恢复顺序很重要:先恢复 ipset,再恢复 iptables

#!/bin/bash
# 脚本: restore_firewall_with_ipset.sh
IPSET_BACKUP="/backup/ipset_save.txt"
IPTABLES_BACKUP="/backup/iptables_save.txt"
echo "开始恢复防火墙配置..."
# 1. 恢复 ipset 集合
if [ -f "$IPSET_BACKUP" ]; then
    echo "恢复 ipset 集合..."
    ipset restore < "$IPSET_BACKUP"
else
    echo "警告:未找到 ipset 备份文件,跳过恢复。"
fi
# 2. 恢复 iptables 规则
if [ -f "$IPTABLES_BACKUP" ]; then
    echo "恢复 iptables 规则..."
    iptables-restore < "$IPTABLES_BACKUP"
else
    echo "警告:未找到 iptables 备份文件。"
    exit 1
fi
# 3. 保存到持久化文件(如果需要开机自启)
echo "正在保存规则到 /etc/iptables/rules.v4 ..."
iptables-save > /etc/iptables/rules.v4
echo "恢复完成!"

重要安全提示

  1. 不要盲目恢复:恢复前先查看备份文件内容(cat backup.file),确认它不是你预期之外的规则(例如曾经误删了 SSH 端口)。
  2. 避免远程锁定:如果你通过 SSH 远程操作,强烈建议先在本地测试,或者使用类似下面的延时自毁脚本:
    # 恢复后 5 分钟自动还原的“安全门”
    (sleep 300 && iptables-restore < /backup/emergency_safe_rules) &
  3. 备份文件验证:恢复前执行 iptables-restore --test < backup.file(仅测试语法,不实际加载)。
  4. 企业环境:对于 Cisco ASA、FortiGate、Palo Alto 等硬件防火墙,脚本恢复通常通过 API 调用CLI 批量命令(如 configure replace file),具体请参考设备官方文档。

如果需要更具体的脚本(例如针对特定硬件品牌或云平台),请补充以下信息:

  • 你使用的操作系统或防火墙品牌型号?
  • 备份文件的来源(自动备份工具名还是手动导出)?
  • 你希望脚本支持“一次性恢复”还是“定期自动恢复”?

抱歉,评论功能暂时关闭!