当前位置: 首页 > news >正文

【记录】Windows|Windows配置防火墙使某个应用禁止联网

文章目录

    • 前言
    • 具体原理
      • 功能及效果
      • 功能及完整指令
      • 简要运行原理
    • 微软官方文档的翻译
      • 使用 netsh advfirewall firewall 而非 netsh firewall 来控制 Windows 防火墙行为
      • 摘要
      • 命令示例 1:允许程序通过防火墙
      • 命令示例 2:开放端口
      • 命令示例 3:删除已允许的程序或端口
      • 命令示例 4:配置 ICMP 设置
      • 命令示例 5:设置日志
      • 命令示例 6:启用 Windows 防火墙
      • 命令示例 7:还原默认策略
      • 命令示例 8:启用特定服务

前言

配置禁止某个程序联网的需求是非常常见的,比如担心某个软件泄密,或者嫌某个软件广告太多。

这里我直接用了Quicker写好的程序去完成我的目的:防火墙规则修改 - by Suuc_Air - 动作信息 - Quicker。

使用方式很简单,选择某个exe(如果什么都不选就会默认选择前台的程序),然后选择某个操作,然后就可以了。支持的操作列表如下:

在这里插入图片描述

例如我什么都不选,点击禁止出站,就会默认把我前台的EV录屏给禁止出战:
在这里插入图片描述

为了探索其背后的原理,保证这个脚本本身没有问题,考虑到脚本制作者本人没有写,只是简单地留了一个参考链接Use netsh advfirewall firewall context - Windows Server | Microsoft Learn,我这里写一个简单的博客。

具体原理

由于脚本比较长,长文本处理Kimi会好很多,deepseek容易截断,所以以下具体原理采用Kimi生成。

脚本名称:防火墙规则修改器

功能及效果

1. 添加“禁止出站”规则
输入:用户手动选择若干可执行文件(.exe 或快捷方式 .lnk)。
运行指令:netsh advfirewall firewall add rule name="文件名_完整路径" dir=out program="完整路径" action=block
效果:阻止指定程序主动向外网发起任何连接。

2. 添加“禁止入站”规则
输入:同上。
运行指令:与“禁止出站”相同,仅将 dir 参数改为 in
效果:阻止外网主机主动连接到本机指定程序监听的端口。

3. 添加“允许出站”规则
输入:同上。
运行指令:把 action 改为 allow,其余与功能 1 一致。
效果:显式放行指定程序的所有出站连接,优先级高于默认规则。

4. 添加“允许入站”规则
输入:同上。
运行指令:把 dir 改为 inaction 改为 allow
效果:显式放行指定程序的所有入站连接,常用于服务器场景。

5. 打开“高级防火墙”图形界面
输入:无。
运行指令:wf.msc
效果:直接弹出 Windows 高级安全防火墙管理控制台,供高级用户手工调整规则。

6. 打开“防火墙控制面板”
输入:无。
运行指令:firewall.cpl
效果:调出系统防火墙主面板,便于查看总体状态和常规开关。

7. 一键启用系统防火墙
输入:无。
运行指令:netsh advfirewall set currentprofile state on
效果:立即为当前网络配置文件(域/专用/公用)启用防火墙,并随后打开防火墙控制面板确认状态。

8. 一键禁用系统防火墙(慎用)
输入:无。
运行指令:netsh advfirewall set currentprofile state off
效果:彻底关闭当前配置文件的防火墙;脚本会再次打开控制面板供用户二次确认。

9. 删除已添加的自定义规则
输入:用户再次选中先前处理过的可执行文件。
运行指令:netsh advfirewall firewall delete rule name="文件名_完整路径"
效果:仅移除由本脚本创建、且规则名称严格匹配“文件名_完整路径”的条目,不影响其他规则。

10. 查询已添加的自定义规则
输入:用户选中任意可执行文件。
运行指令:netsh advfirewall firewall show rule name="文件名_完整路径"
效果:在命令行窗口列出匹配名称的详细规则信息,便于核对设置是否正确。

功能及完整指令

十个功能对应的完整指令清单
(按功能编号列出,顺序固定;每行即脚本实际写入临时批处理并一次性执行的命令)


功能 1:禁止出站

  1. netsh advfirewall set currentprofile state on
  2. netsh advfirewall firewall add rule name="{文件名}_{完整路径}" dir=out program="{完整路径}" action=block
    —— 对所选每个 exe 重复第 2 条
  3. netsh advfirewall firewall show rule name="{文件名}_{完整路径}"
    —— 对所选每个 exe 重复第 3 条(用于立即回显结果)

功能 2:禁止入站

  1. netsh advfirewall set currentprofile state on
  2. netsh advfirewall firewall add rule name="{文件名}_{完整路径}" dir=in program="{完整路径}" action=block
    —— 对所选每个 exe 重复第 2 条
  3. netsh advfirewall firewall show rule name="{文件名}_{完整路径}"
    —— 对所选每个 exe 重复第 3 条

功能 3:允许出站

  1. netsh advfirewall set currentprofile state on
  2. netsh advfirewall firewall add rule name="{文件名}_{完整路径}" dir=out program="{完整路径}" action=allow
    —— 对所选每个 exe 重复第 2 条
  3. netsh advfirewall firewall show rule name="{文件名}_{完整路径}"
    —— 对所选每个 exe 重复第 3 条

功能 4:允许入站

  1. netsh advfirewall set currentprofile state on
  2. netsh advfirewall firewall add rule name="{文件名}_{完整路径}" dir=in program="{完整路径}" action=allow
    —— 对所选每个 exe 重复第 2 条
  3. netsh advfirewall firewall show rule name="{文件名}_{完整路径}"
    —— 对所选每个 exe 重复第 3 条

功能 5:打开高级防火墙设置
仅执行:

  • wf.msc

功能 6:打开防火墙控制面板
仅执行:

  • firewall.cpl

功能 7:启用系统防火墙

  1. netsh advfirewall set currentprofile state on
  2. firewall.cpl

功能 8:禁用系统防火墙

  1. netsh advfirewall set currentprofile state off
  2. firewall.cpl

功能 9:删除已添加的自定义规则

  1. netsh advfirewall firewall delete rule name="{文件名}_{完整路径}"
    —— 对所选每个 exe 重复第 1 条

功能 10:查询已添加的自定义规则

  1. netsh advfirewall firewall show rule name="{文件名}_{完整路径}"
    —— 对所选每个 exe 重复第 1 条

说明

  • 占位符 {文件名}_{完整路径} 由脚本根据实际路径动态生成,确保规则名唯一。
  • 功能 1–4 在添加规则前都会先执行 netsh advfirewall set currentprofile state on,目的是确保防火墙处于启用状态,防止规则写入失败。

简要运行原理

脚本运行总览:从启动到收尾的全流程

1. 功能执行前:环境与输入准备

  • 捕获输入
    脚本首先调用 sys:getSelectedFilessys:getActiveProcessInfo,把用户选中的文件路径或当前前台进程的可执行文件路径写入变量 files_paths_list
  • 文件过滤与解析
    通过正则把 .exe.lnk 分离;若存在 .lnk,则用 VBScript 读取快捷方式指向的真实路径,再与 .exe 合并、去重,最终得到 exe_files_paths_list
  • 用户确认
    弹窗让用户从 10 个功能里单选;若功能编号 ≤ 3 或 8、9,还会再弹一次确认框,展示要处理的程序清单,确保“先知情后操作”。

2. 功能执行中:指令生成与下发

  • 生成命令列表
    子程序“生成命令列表”遍历 exe_files_paths_list,为每个文件构造一条 netsh advfirewall firewall 命令,参数 name 固定为“文件名_完整路径”,确保后续可精准定位。
  • 写入临时批处理
    子程序“执行命令列表”把生成的命令写入一个随机命名的 *.bat,并在末尾加 pause,随后以管理员身份 (runas=1) 启动该批处理。
  • 结果回显
    批处理执行后,窗口保持打开,用户可立即查看 netsh 返回的“成功/失败”提示;脚本通过 sys:notify 再给出统一弹窗反馈。

3. 功能执行后:收尾与扩展入口

  • 成功分支
    若返回码为 0,脚本弹出“命令成功执行”提示;紧接着提供一个二次选择菜单,允许用户:
    ① 打开 wf.msc 再次人工核查;
    ② 打开 firewall.cpl 查看总体状态;
    ③ 列出本次被忽略的非 .exe 文件;
    ④ 直接删除刚刚添加的规则(反向回滚)。
  • 失败分支
    若批处理因权限或语法问题报错,脚本立即弹出“可能缺少管理员权限”警告,并用 forcestop 终止自身,避免留下不完整或错误的规则。
  • 现场清理
    临时批处理文件在退出时由系统默认删除,不残留任何中间文件;所有变量恢复初始状态,等待下一次调用。

微软官方文档的翻译

官方文档:Use netsh advfirewall firewall context - Windows Server | Microsoft Learn
如果不准翻译可联系我删除。
Kimi直接翻译的。表格由于Markdown自动识别有不准确,所以有部分错位的现象,我懒得调整了。

使用 netsh advfirewall firewall 而非 netsh firewall 来控制 Windows 防火墙行为

本文介绍如何改用 netsh advfirewall firewall 上下文,而不再使用 netsh firewall 上下文来控制 Windows 防火墙行为。

_原始 KB 编号:_947709

摘要

netsh advfirewall firewall 命令行上下文在 Windows Server 2012 R2 中已提供。该上下文不仅具备 netsh firewall 防火墙上下文所提供的全部 Windows 防火墙控制功能,还能更精细地管理防火墙规则,支持按以下配置文件分别设置:

  • 域 (Domain)
  • 专用 (Private)
  • 公用 (Public)

netsh firewall 命令行上下文可能在未来版本的 Windows 操作系统中被弃用。建议改用 netsh advfirewall firewall 上下文来控制防火墙行为。

重要提示
如果你的帐户属于 Administrators 组,且计算机已启用用户帐户控制 (UAC),请使用提升权限的命令提示符运行命令。方法:找到用于启动命令提示符的图标或“开始”菜单项,右键单击并选择 以管理员身份运行

以下表格提供了常用命令示例,可帮助你从旧的 netsh firewall 上下文迁移到新的 netsh advfirewall firewall 上下文。
此外,还列出了可用于获取详细联机帮助的 netsh advfirewall 命令。

命令示例 1:允许程序通过防火墙

旧命令新命令
netsh firewall add allowedprogram C:\MyApp\MyApp.exe "My Application" ENABLEnetsh advfirewall firewall add rule name="My Application" dir=in action=allow program="C:\MyApp\MyApp.exe" enable=yes
netsh firewall add allowedprogram program=C:\MyApp\MyApp.exe name="My Application" mode=ENABLE scope=CUSTOM addresses=157.60.0.1,172.16.0.0/16,LocalSubnet profile=Domainnetsh advfirewall firewall add rule name="My Application" dir=in action=allow program="C:\MyApp\MyApp.exe" enable=yes remoteip=157.60.0.1,172.16.0.0/16,LocalSubnet profile=domain
netsh firewall add allowedprogram program=C:\MyApp\MyApp.exe name="My Application" mode=ENABLE scope=CUSTOM addresses=157.60.0.1,172.16.0.0/16,LocalSubnet profile=ALL依次执行以下命令:
netsh advfirewall firewall add rule name="My Application" dir=in action=allow program="C:\MyApp\MyApp.exe" enable=yes remoteip=157.60.0.1,172.16.0.0/16,LocalSubnet profile=domain
netsh advfirewall firewall add rule name="My Application" dir=in action=allow program="C:\MyApp\MyApp.exe" enable=yes remoteip=157.60.0.1,172.16.0.0/16,LocalSubnet profile=private

如需了解如何添加防火墙规则的更多信息,请运行:

netsh advfirewall firewall add rule ?

命令示例 2:开放端口

旧命令新命令
netsh firewall add portopening TCP 80 "Open Port 80"netsh advfirewall firewall add rule name="Open Port 80" dir=in action=allow protocol=TCP localport=80

如需了解如何添加防火墙规则的更多信息,请运行:

netsh advfirewall firewall add rule ?

命令示例 3:删除已允许的程序或端口

旧命令新命令
netsh firewall delete allowedprogram C:\MyApp\MyApp.exenetsh advfirewall firewall delete rule name=规则名称 program="C:\MyApp\MyApp.exe"
delete portopening protocol=UDP port=500netsh advfirewall firewall delete rule name=规则名称 protocol=udp localport=500

如需了解如何删除防火墙规则的更多信息,请运行:

netsh advfirewall firewall delete rule ?

命令示例 4:配置 ICMP 设置

旧命令新命令
netsh firewall set icmpsetting 8netsh advfirewall firewall add rule name="ICMP Allow incoming V4 echo request" protocol=icmpv4:8,any dir=in action=allow
netsh firewall set icmpsetting type=ALL mode=enablenetsh advfirewall firewall add rule name="All ICMP V4" protocol=icmpv4:any,any dir=in action=allow
netsh firewall set icmpsetting 13 disable allnetsh advfirewall firewall add rule name="Block Type 13 ICMP V4" protocol=icmpv4:13,any dir=in action=block

如需了解如何配置 ICMP 设置的更多信息,请运行:

netsh advfirewall firewall add rule ?

命令示例 5:设置日志

旧命令新命令
netsh firewall set logging %systemroot%\system32\LogFiles\Firewall\pfirewall.log 4096 ENABLE ENABLE依次执行以下命令:
netsh advfirewall set currentprofile logging filename %systemroot%\system32\LogFiles\Firewall\pfirewall.log
netsh advfirewall set currentprofile logging maxfilesize 4096
netsh advfirewall set currentprofile logging droppedconnections enable
netsh advfirewall set currentprofile logging allowedconnections enable

如需更多信息,请运行:

netsh advfirewall set currentprofile ?

若要为特定配置文件设置日志,请将 currentprofile 替换为以下任一选项:

  • domainprofile
  • privateprofile
  • publicprofile

命令示例 6:启用 Windows 防火墙

旧命令新命令
netsh firewall set opmode ENABLEnetsh advfirewall set currentprofile state on
netsh firewall set opmode mode=ENABLE exceptions=enable依次执行以下命令:
netsh advfirewall set currentprofile state on
netsh advfirewall set currentprofile firewallpolicy blockinboundalways,allowoutbound
netsh firewall set opmode mode=enable exceptions=disable profile=domain依次执行以下命令:
netsh advfirewall set domainprofile state on
netsh advfirewall set domainprofile firewallpolicy blockinbound,allowoutbound
netsh firewall set opmode mode=enable profile=ALL依次执行以下命令:
netsh advfirewall set domainprofile state on
netsh advfirewall set privateprofile state on

如需更多信息,请运行:

netsh advfirewall set currentprofile ?

若要为特定配置文件设置防火墙状态,请将 currentprofile 替换为以下任一选项:

  • domainprofile
  • privateprofile
  • publicprofile

命令示例 7:还原默认策略

旧命令新命令
netsh firewall resetnetsh advfirewall reset

如需更多信息,请运行:

netsh advfirewall reset ?

命令示例 8:启用特定服务

旧命令新命令
netsh firewall set service FileAndPrintnetsh advfirewall firewall set rule group="文件和打印机共享" new enable=Yes
netsh firewall set service RemoteDesktop enablenetsh advfirewall firewall set rule group="远程桌面" new enable=Yes
netsh firewall set service RemoteDesktop enable profile=ALL依次执行以下命令:
netsh advfirewall firewall set rule group="remote desktop" new enable=Yes profile=domain
netsh advfirewall firewall set rule group="remote desktop" new enable=Yes profile=private

本账号所有文章均为原创,欢迎转载,请注明文章出处:https://shandianchengzi.blog.csdn.net/article/details/150769578。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。

http://www.dtcms.com/a/350725.html

相关文章:

  • ffmpeg测试rtsp地址
  • Ansible自动化运维:原理以及安装教程
  • 毕业项目推荐:04-基于yolov8/yolov5/yolo11的鸟类检测识别系统(Python+卷积神经网络)
  • 【数据可视化-99】2025 年各地区夏粮产量可视化分析:Python + pyecharts打造炫酷暗黑主题大屏
  • 磁盘损坏导致无法开机怎么办?
  • 2. 并发解决架构图
  • kanass V1.1.6版本发布,支持OpenApi便于与外部系统更好的集成
  • 【Linux】timerfd定时器
  • MCP技术详解:探秘模型上下文协议的工作机制与应用
  • 并行多核体系结构基础——概述(笔记)
  • 管理型交换机与非管理型交换机的优缺点对比
  • Coze用户账号设置修改用户昵称-前端源码
  • JavaScript数据表格方案AG Grid主题定制新升级:Figma 设计系统全面打通设计与开发
  • 舰船摇摆下的坐标变换技术
  • coze工作流200+源码,涵盖AI文案生成、图像处理、视频生成、自动化脚本等多个领域
  • Metabase 部署与实践:从测试环境到生产环境的完整指南
  • celery prefetch-multiplier
  • 【人工智能】人工智能在企业中的应用
  • 理解Vuex的辅助函数,分析mapState、mapGetters、mapMutations和mapActions各个应用场景
  • [信号与系统个人笔记]第二章 连续时间信号与系统的时域分析
  • 【MySQL】MySQL介绍及安装
  • 查看mariadb服务是否启动
  • 2025 BrunnerCTF remobile 部分wp
  • 编译型语言(C/C++):从源码到.exe 的完整链路
  • 语音识别:概念与接口
  • LeetCode 面试经典 150_双指针_验证回文串(25_125_C++_简单)(双指针)
  • 【JVM内存结构系列】六、“特殊区域”:直接内存、栈上分配与TLAB
  • JavaScript 对象 Array对象 Math对象
  • Spring Boot 结合 Jasypt 实现敏感信息加密(含 Nacos 配置关联思路)
  • 计算机网络:HTTP、抓包、TCP和UDP报文及重要概念