Netsh.exe添加Windows防火墙规则是否覆盖同端口协议的异名规则?
关于Netsh添加防火墙规则的行为说明
直接给你结论:不会覆盖原有规则,会创建一条新的独立规则。
为什么会这样?
Netsh的advfirewall firewall add rule命令是通过规则名称来判断是否存在重复项的,而不是端口、协议这类参数。具体逻辑是:
- 如果你使用的
name参数和已有的某条规则完全一致,执行命令时会提示“指定的规则已存在”,不会创建新规则(也不会覆盖,除非额外指定override=yes参数,这个参数默认是关闭的); - 如果
name参数和已有规则都不同,哪怕端口、协议、方向这些参数完全一样,命令也会成功创建一条新规则,两条规则会同时存在于防火墙策略中并生效。
举个实际场景:假设你的防火墙里已经有一条名为"OldPort1234Rule"的规则,允许TCP 1234端口入站。当你执行你提供的命令:
Netsh.exe advfirewall firewall add rule name="NewPort1234Rule" protocol="TCP" localport=1234 dir=in enable=yes action=allow
之后,去防火墙高级设置里就能看到两条独立的规则,都针对1234端口的TCP入站请求,都会正常工作。
如果想要确保同端口只有一条规则怎么办?
如果你希望替换掉同端口同协议的原有规则,可以先删除旧规则再添加新的,比如:
# 先删除所有匹配TCP 1234入站的规则 netsh advfirewall firewall delete rule protocol=TCP localport=1234 dir=in # 再添加新规则 Netsh.exe advfirewall firewall add rule name="MyUniqueRule" protocol="TCP" localport=1234 dir=in enable=yes action=allow
或者使用set rule命令直接修改已有的规则(需要明确匹配条件,比如通过端口和协议定位):
netsh advfirewall firewall set rule protocol=TCP localport=1234 dir=in new name="MyUpdatedRule" enable=yes action=allow
内容的提问来源于stack exchange,提问作者maures
相关产品推荐
相关产品推荐

