必须通过组策略锁定防火墙管理权限、限制注册表关键路径写入权限,并可选隐藏防火墙设置入口:用gpedit.msc配置规则并设为只读;在注册表FirewallPolicy项拒绝Users和LOCAL SERVICE的写入与删除权限;还可启用组策略隐藏防火墙界面。

要让本地普通用户无法修改 Windows 防火墙规则,必须绕过控制面板和设置应用的表层入口,直接在系统权限底层锁定配置能力。普通用户点击“允许应用通过防火墙”只会看到灰色按钮,而管理员需通过高级安全控制台统一部署、不可覆盖的策略。
用组策略配置全局防火墙规则
以管理员身份运行 gpedit.msc → 计算机配置 → Windows 设置 → 安全设置 → Windows 防火墙 → 配置所有入站/出站规则、网络配置文件状态(域/专用/公用)→ 保存后,普通用户在控制面板中将完全无法编辑任何开关或规则。
这一步是核心防线:组策略设定的内容仅允许查看,不能被非管理员账户绕过或覆盖;若用 wf.msc 图形界面单独配置,普通用户仍可能通过 PowerShell 或注册表篡改,而 gpedit.msc 下的设置会强制覆盖所有其他来源的变更。
注意:该路径仅适用于 Windows Pro/Enterprise/Education 版本;家庭版无 gpedit.msc,需改用 PowerShell 或注册表权限控制。
用高级安全控制台(wf.msc)创建精准规则
按 Win + R 输入 wf.msc 回车 → 左侧选“入站规则” → 右侧点“新建规则” → 规则类型选“端口” → 协议选 TCP/UDP → 输入目标端口号(如 3389)→ 动作选“阻止连接” → 配置文件全选 → 命名规则(如 Block-RDP-In)→ 完成。
同样操作进入“出站规则”,重复创建同端口的出站阻止规则。若需批量封禁多个端口,在端口输入框填 135,137,139,445 即可一次性生效。
【关键前提】 必须先禁用“默认入站允许”类宽松策略,否则自定义阻止规则可能因优先级问题被跳过;Windows 防火墙默认策略是“阻止入站、允许出站”,但第三方软件安装时可能悄悄添加“允许全部”的宽泛规则,务必在“入站规则”列表顶部检查并禁用它们。
用 PowerShell 批量部署IP段与端口组合策略
方法一:封禁整个恶意 IP 段(CIDR 格式)
New-NetFirewallRule -DisplayName "Block-CN-IPRange" -Direction Inbound -RemoteAddress 202.96.0.0/16 -Action Block -Profile Any
方法二:禁止某 IP 访问指定端口(双向精准拦截)
New-NetFirewallRule -DisplayName "Block-192.168.1.100-SSH" -Direction Inbound -RemoteAddress 192.168.1.100 -Protocol TCP -LocalPort 22 -Action Block -Profile Private
方法三:一次性创建多条规则(适合服务器初始化加固)
$ports = 135,137,139,445,3389; foreach ($p in $ports) { New-NetFirewallRule -DisplayName "Block-Port-$p-In" -Direction Inbound -Protocol TCP -LocalPort $p -Action Block -Profile Any }
PowerShell 命令执行后立即生效,无需重启;但若规则名称重复,系统会报错并跳过,建议先用 Get-NetFirewallRule -DisplayName "Block-*" 检查是否存在同名规则。
限制注册表关键路径写入权限
第一步:运行 regedit → 定位到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy
第二步:右键 FirewallPolicy → “权限” → “高级” → 点击“禁用继承” → 选择“将继承的权限转换为此对象的显式权限”
第三步:点击“添加” → 输入 Users → 点击“确定” → 在下方勾选“拒绝”列中的“设置值”“删除”“修改子项”三项 → 同样为 LOCAL SERVICE 账户执行相同拒绝操作
第四步:确认全部更改 → 重启电脑使注册表权限生效
【不可逆操作提醒】 若误删了 Administrators 组的“完全控制”权限,可能导致管理员也无法修改防火墙,恢复需进入安全模式或使用离线注册表编辑器。











