Windows防火墙规则导出工具:让安全配置可备份、可迁移、可审计

Windows 防火墙规则导出工具:让安全配置可备份、可迁移、可审计

一、痛点:Windows 防火墙规则管理的三大难题

作为安全工程师和系统管理员,日常面对 Windows 防火墙规则时,往往会遇到这几个头疼的问题:

1. 导出格式不可读

Windows 自带的防火墙导出功能(通过「高级安全 Windows Defender 防火墙」界面或 netsh advfirewall export 命令),导出来的是 .wfw 格式的二进制文件。直接打开是这样的乱码:

复制代码
████░░░░░░░░░░░  ← 不可读

运维人员根本无法肉眼核对规则内容,无法做 diff 对比,也无法在代码仓库中管理这些配置。

2. 导入会覆盖已有规则

用 Windows 自带的导入功能,会直接覆盖现有的防火墙策略。在生产环境操作时,这意味着:一旦导入出问题,所有现有规则全部丢失,风险极高。

3. 规则迁移困难

换机器、换环境、克隆系统时,好不容易配好的防火墙策略无法方便地迁移。手动一条条复制?几百条规则根本不可能。


二、解决方案:export_firewall_rules

这个开源工具用 Python 写,专门解决上述三个痛点:

GitHub 地址: https://github.com/hyang0/export_firewall_rules

核心功能

  • 将 Windows 防火墙规则导出为 可读的 netsh 脚本格式
  • 导出的脚本直接可用,复制到新机器执行即可恢复规则
  • 支持导出后学习 netsh 语法,提升对防火墙规则的理解

支持导出的规则类型

类型 说明
出站 / 入站规则 dir=in / dir=out
TCP / UDP / ICMP 协议 protocol=tcp/udp/icmpv4
应用程序路径规则 program= 参数
IP 段规则 remoteip= 支持 CIDR 和范围
指定端口规则 localport= / remoteport=

三、使用方法

第一步:安装 Python 环境

工具基于 Python,需要 Python 3.x。macOS / Linux 可以直接执行,Windows 上建议使用 Python 3。

bash 复制代码
git clone https://github.com/hyang0/export_firewall_rules.git
cd export_firewall_rules
pip install -r requirements.txt

第二步:查看当前防火墙规则

在导出之前,可以先查看系统当前的防火墙规则:

bash 复制代码
# 查看所有入站规则(Windows PowerShell)
Get-NetFirewallRule -Direction Inbound | Get-NetFirewallPortFilter | Select-Object -First 20

# 查看出站规则
Get-NetFirewallRule -Direction Outbound | Select-Object -First 10

第三步:使用工具导出规则

bash 复制代码
python export_rules.py

工具会连接到 Windows 防火墙 API,读取所有规则,然后输出为 netsh 格式的脚本文件。

第四步:备份导出的脚本

导出的内容示例:

bash 复制代码
# ============================================
# Windows 防火墙规则导出
# 导出时间: 2026-04-19
# 规则总数: 若干
# ============================================

# 规则示例1:允许特定程序
netsh advfirewall firewall add rule \
    name="360ceupdate.exe" \
    dir=in \
    action=allow \
    enable=yes \
    profile=public \
    protocol=tcp \
    program="C:\Users\Administrator\AppData\Local\360ChromeX\Chrome\Application\22.3.3087.64\installer\360ceupdate.exe" \
    remoteip=192.168.1.1-192.168.1.20

# 规则示例2:允许内网网段
netsh advfirewall firewall add rule \
    name="inner" \
    dir=out \
    action=allow \
    enable=yes \
    remoteip=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16

# 规则示例3:允许 ICMP Ping
netsh advfirewall firewall add rule \
    name="ping" \
    dir=in \
    action=allow \
    enable=yes \
    protocol=icmpv4

第五步:导入到新机器

将导出的脚本复制到目标机器,直接运行即可批量导入规则:

powershell 复制代码
# 方法1:直接执行脚本中的命令
netsh advfirewall import "backup.wfw"   # 先导入标准格式备份

# 方法2:手动执行导出的netsh命令
# (直接复制工具导出的脚本内容到 PowerShell 执行)

💡 建议: 先在测试环境执行,确认无误后再到生产环境操作。


四、进阶用法

4.1 定时备份防火墙规则(结合计划任务)

将导出操作写成脚本,加入 Windows 任务计划程序,实现自动化备份:

powershell 复制代码
# backup_firewall.ps1
$date = Get-Date -Format "yyyyMMdd"
$backupDir = "C:\FirewallBackups"
if (!(Test-Path $backupDir)) { New-Item -ItemType Directory -Path $backupDir }
python C:\Tools\export_firewall_rules\export_rules.py > "$backupDir\fw_rules_$date.txt"

注册计划任务:

powershell 复制代码
# 每天凌晨 2:00 自动备份
schtasks /create /tn "FirewallBackup" /tr "powershell.exe -File C:\backup_firewall.ps1" /sc daily /st 02:00

4.2 与 Git 版本控制结合

将导出的规则脚本纳入代码仓库管理,好处显而易见:

  • 📋 历史可追溯:每次修改都有 commit 记录

  • 🔄 变更可对比 :通过 git diff 清晰看到规则增减

  • 🔄 回滚容易:出问题时一键恢复到上一版本

  • 👥 团队协作:多人维护时规则变更可 review

    firewall-config/
    ├── rules/
    │ ├── base.txt # 基础规则(服务器必开端口)
    │ ├── dev.txt # 开发环境规则
    │ ├── prod.txt # 生产环境规则
    │ └── .gitignore
    └── backup_firewall.ps1 # 备份脚本

4.3 导出规则学习 netsh 语法

工具还有一个隐藏价值:学习 Windows 防火墙规则语法

很多安全工程师会用图形界面配置防火墙,但不知道怎么用命令行写规则。有了这个工具:

  1. 在图形界面手工创建一条规则 ✅
  2. 用工具导出为 netsh 格式 ✅
  3. 读懂语法结构,理解每行参数含义 ✅
  4. 以后直接写命令,不用开图形界面 ✅

五、安全加固建议

5.1 常用安全规则示例

powershell 复制代码
# 禁止所有入站连接(默认阻止策略)
netsh advfirewall set allprofiles firewallpolicy inboundblock,outboundallow

# 仅允许指定 IP 访问 RDP(3389)
netsh advfirewall firewall add rule \
    name="RDP-from-Office" \
    dir=in \
    action=allow \
    enable=yes \
    protocol=tcp \
    localport=3389 \
    remoteip=203.0.113.0/24   # 仅允许办公室 IP 段

# 禁止特定程序联网
netsh advfirewall firewall add rule \
    name="Block-P2P" \
    dir=out \
    action=block \
    enable=yes \
    program="C:\Tools\p2p.exe"

# 限制 SSH 仅对运维网段开放
netsh advfirewall firewall add rule \
    name="SSH-from-Admin" \
    dir=in \
    action=allow \
    enable=yes \
    protocol=tcp \
    localport=22 \
    remoteip=10.10.0.0/16

# 允许 Ping(ICMP)
netsh advfirewall firewall add rule \
    name="Allow-Ping" \
    dir=in \
    action=allow \
    enable=yes \
    protocol=icmpv4

5.2 导出前检查清单

导出规则前,建议先做以下检查:

复制代码
✅ 检查是否有重复规则(同名规则会冲突)
✅ 检查规则方向是否正确(in=入站,out=出站)
✅ 检查 IP 范围是否过宽(如 0.0.0.0/0 表示允许全网)
✅ 检查是否有过于宽松的 any/any 规则
✅ 确认 profile 设置(domain/private/public)

5.3 查看当前宽松规则

powershell 复制代码
# 查找允许所有流量的规则(高危)
Get-NetFirewallRule | Where-Object {
    $_.Action -eq 'Allow' -and
    ($_.Enabled -eq $true)
} | Get-NetFirewallPortFilter | Where-Object {
    $_.LocalPort -eq 'Any' -or $_.RemotePort -eq 'Any'
} | Select-Object -First 20

六、常见问题

Q1:导出的规则在新机器上执行报错?

A: 部分规则含绝对路径(如用户目录 C:\Users\xxx\),换了机器路径不匹配时该规则会失败。建议用 %USERPROFILE% 环境变量替代绝对路径:

powershell 复制代码
# 修改前
program="C:\Users\Administrator\...\app.exe"

# 修改后
program="%USERPROFILE%\...\app.exe"

Q2:导入时会不会覆盖现有规则?

A: 导出的 netsh 脚本不会覆盖 现有规则,它只是用 add rule 追加规则。如果需要全新导入,先清空现有规则:

powershell 复制代码
# 清空所有自定义规则(慎用!)
netsh advfirewall reset

Q3:macOS/Linux 能用吗?

A: 该工具依赖 Windows 防火墙 API,只能在 Windows 上运行。macOS 请使用 pfctl / ipfw,Linux 请使用 iptables / nftables


七、总结

痛点 解决方案
导出格式不可读 ✅ 导出为可读的 netsh 脚本
导入会覆盖规则 ✅ 使用 add rule 追加,安全
规则迁移困难 ✅ 脚本复制即可在新机器执行
无法版本管理 ✅ 纳入 Git 仓库管理
不懂 netsh 语法 ✅ 通过导出结果学习命令写法

这个工具虽然小,但解决的都是真实痛点。对于安全工程师、运维人员来说,将防火墙规则纳入版本控制、做到可备份可迁移,是安全运营的基本功。

工具地址: https://github.com/hyang0/export_firewall_rules
适用系统: Windows 10/11, Windows Server 2016+
依赖环境: Python 3.x
开源协议: MIT License

相关推荐
SPC的存折3 小时前
10、Docker容器故障排查
linux·运维·数据库·docker·容器
liuyunshengsir3 小时前
linux 下新增用户后无法使用TAB补全功能的最佳解决方法
linux·运维·服务器
x***r1513 小时前
Postman-win64-7.3.5-Setup安装步骤详解(附接口测试入门教程)
windows
无名咸鱼3 小时前
cursor节省token工具-RTK (windows安装)
windows
dLYG DUMS4 小时前
SQLMAP的下载安装和使用(Windows)
windows
志栋智能4 小时前
超自动化巡检:驱动运维团队从操作走向优化
运维·服务器·自动化
乌托邦的逃亡者4 小时前
Dockerfile的配置和使用
linux·运维·docker·容器
小此方4 小时前
Re:Linux系统篇(三)指令篇 · 二:十二个高频指令精讲+重定向操作+“一切皆文件“深入理解
linux·运维·服务器
十五年专注C++开发5 小时前
MobaXterm:Windows 远程工作全能工具箱
linux·windows·mobaxterm