【记录】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
改为 in
,action
改为 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:禁止出站
netsh advfirewall set currentprofile state on
netsh advfirewall firewall add rule name="{文件名}_{完整路径}" dir=out program="{完整路径}" action=block
—— 对所选每个 exe 重复第 2 条netsh advfirewall firewall show rule name="{文件名}_{完整路径}"
—— 对所选每个 exe 重复第 3 条(用于立即回显结果)
功能 2:禁止入站
netsh advfirewall set currentprofile state on
netsh advfirewall firewall add rule name="{文件名}_{完整路径}" dir=in program="{完整路径}" action=block
—— 对所选每个 exe 重复第 2 条netsh advfirewall firewall show rule name="{文件名}_{完整路径}"
—— 对所选每个 exe 重复第 3 条
功能 3:允许出站
netsh advfirewall set currentprofile state on
netsh advfirewall firewall add rule name="{文件名}_{完整路径}" dir=out program="{完整路径}" action=allow
—— 对所选每个 exe 重复第 2 条netsh advfirewall firewall show rule name="{文件名}_{完整路径}"
—— 对所选每个 exe 重复第 3 条
功能 4:允许入站
netsh advfirewall set currentprofile state on
netsh advfirewall firewall add rule name="{文件名}_{完整路径}" dir=in program="{完整路径}" action=allow
—— 对所选每个 exe 重复第 2 条netsh advfirewall firewall show rule name="{文件名}_{完整路径}"
—— 对所选每个 exe 重复第 3 条
功能 5:打开高级防火墙设置
仅执行:
wf.msc
功能 6:打开防火墙控制面板
仅执行:
firewall.cpl
功能 7:启用系统防火墙
netsh advfirewall set currentprofile state on
firewall.cpl
功能 8:禁用系统防火墙
netsh advfirewall set currentprofile state off
firewall.cpl
功能 9:删除已添加的自定义规则
netsh advfirewall firewall delete rule name="{文件名}_{完整路径}"
—— 对所选每个 exe 重复第 1 条
功能 10:查询已添加的自定义规则
netsh advfirewall firewall show rule name="{文件名}_{完整路径}"
—— 对所选每个 exe 重复第 1 条
说明
- 占位符
{文件名}_{完整路径}
由脚本根据实际路径动态生成,确保规则名唯一。 - 功能 1–4 在添加规则前都会先执行
netsh advfirewall set currentprofile state on
,目的是确保防火墙处于启用状态,防止规则写入失败。
简要运行原理
脚本运行总览:从启动到收尾的全流程
1. 功能执行前:环境与输入准备
- 捕获输入
脚本首先调用sys:getSelectedFiles
或sys: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" ENABLE | netsh 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=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=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.exe | netsh advfirewall firewall delete rule name=规则名称 program="C:\MyApp\MyApp.exe" |
delete portopening protocol=UDP port=500 | netsh advfirewall firewall delete rule name=规则名称 protocol=udp localport=500 |
如需了解如何删除防火墙规则的更多信息,请运行:
netsh advfirewall firewall delete rule ?
命令示例 4:配置 ICMP 设置
旧命令 | 新命令 |
---|---|
netsh firewall set icmpsetting 8 | netsh 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=enable | netsh advfirewall firewall add rule name="All ICMP V4" protocol=icmpv4:any,any dir=in action=allow |
netsh firewall set icmpsetting 13 disable all | netsh 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 ENABLE | netsh 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 reset | netsh advfirewall reset |
如需更多信息,请运行:
netsh advfirewall reset ?
命令示例 8:启用特定服务
旧命令 | 新命令 |
---|---|
netsh firewall set service FileAndPrint | netsh advfirewall firewall set rule group="文件和打印机共享" new enable=Yes |
netsh firewall set service RemoteDesktop enable | netsh 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。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。