如何通过脚本或自动化关闭 Windows 7 防火墙?

如何通过脚本或自动化关闭 Windows 7 防火墙?

这是关于在将机器加入域之前对其进行操作,尽管我很想依赖 GPO,但目前这不是一个选择。

在我工作的环境中,防火墙策略是使用 Total Endpoint Solution 中的第三方防火墙应用,因此我必须禁用默认的 Windows 防火墙以防止冲突。我使用在映像过程结束时运行的脚本执行此操作,或者在未重新映像的系统上手动执行此操作。有一段时间,我能够使用以下方法管理此操作:

netsh advfirewall set allprofiles state off

然而,由于某种原因,它停止工作了。因此,我发现我需要清除本地安全策略(手动):

Local Security Policy MSC > Windows Firewall with Advanced Security
Right-Click Windows Firewall with Advanced Security - Local Group Policy Object
Clear Policy

这是我用来避免手动执行此操作的脚本:

secedit /configure /db reset /cfg securityprofile

这两个步骤的组合持续了大约一个月,然后,不知为何,它停止了工作。

我开始测试注册表破解以实现我所需要的功能,但它给我带来了好坏参半的结果。我有两组需要更改的配置文件的键;对于本地配置文件:

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\WindowsFirewall]
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\WindowsFirewall\DomainProfile]
"EnableFirewall"=dword:00000000
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\WindowsFirewall\PrivateProfile]
"EnableFirewall"=dword:00000000
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\WindowsFirewall\PublicProfile]
"EnableFirewall"=dword:00000000

对于域配置文件:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SharedAccess\Parameters\FirewallPolicy]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SharedAccess\Parameters\FirewallPolicy\DomainProfile]
"EnableFirewall"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SharedAccess\Parameters\FirewallPolicy\PublicProfile]
"EnableFirewall"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SharedAccess\Parameters\FirewallPolicy\StandardProfile]
"EnableFirewall"=dword:00000000

我遇到的问题是,在防火墙开启的情况下,本地配置文件不断重新生成原始设置。我尝试过:

  • a) 同时应用两个注册表技巧
  • b) 重启
  • 新镜像机器上的结果)没有运气
  • 在旧机器上测试的结果)很好

  • a) 应用本地策略注册表黑客

  • b) 重启
  • 新镜像机器上的结果)没有运气
  • 在旧机器上测试的结果)很好

  • a)使用 secedit 清除本地安全策略

  • b) 应用两个注册表技巧
  • c) 重启
  • 新镜像机器上的结果)没有运气
  • 在旧机器上测试的结果)很好

  • a)使用 secedit 清除本地安全策略

  • b) 应用本地策略注册表黑客
  • c) 重启
  • 新镜像机器上的结果)没有运气
  • 在旧机器上测试的结果)很好

我的目标是通过脚本/自动化禁用 Windows 防火墙。有什么想法吗?

注意:这是在将机器加入域之前。如果我手动从 MSC 清除本地安全策略,则注册表黑客将起作用。 netsh仍然不起作用,我不想手动清除每台映像机器的策略。

答案1

首先我想说的是,我强烈建议那些禁用 Windows 防火墙的人花点时间了解它的工作原理以及如何通过 GPO 来操作它,而不是直接关闭它。没有理由关闭基于主机的防火墙。微软提供了出色的工具来管理防火墙规则,你应该使用它们。


这篇 TechNet 文章概述了禁用 Windows 防火墙的正确方法。不要像其他人告诉你的那样关闭该服务,因为这会使你的服务器处于不受支持的配置中,并导致各种难以排除故障的情况。

从 TechNet 文章来看,netsh 语法是

netsh advfirewall 设置 个人资料 状态关闭

其中有效值为个人资料是:AllProfiles、CurrentProfile、DomainProfile、PrivateProfile 或 PublicProfile。

看来您已经尝试过这个命令,但它不起作用。您还推送了此命令操作的注册表项。基于它以前可以工作但现在不起作用的事实,以及这些计算机在您执行此操作时未加入域,只有一个结论:

您的图像中存在某些东西覆盖了这一点。故事结束了。由于我们没有您的图像可供查看,因此我们无法为您提供具体的修复,只能说“您做得对,如果它不起作用,则说明您的图像中存在某些配置错误”

老实说,如果您必须secedit /configure /db reset /cfg securityprofile在图像上运行所有这些其他内容,那么您最好按照自己想要的方式制作一个包含所有内容的新图像。

答案2

呃,整理您的 GPO,然后在那里禁用它。或者,至少在堆栈顶部创建一个新的 GPO(优先级最高)并禁用防火墙。然后稍后返回并整理您的其他 GPO。本地安全策略被 GPO 覆盖,并且您正在写入的注册表的第一个区域专门用于 GPO 处理。

简短回答...组策略。详细回答...组策略。(抱歉!)

答案3

找到问题了。安装我的映像后,MDT 在其任务序列末尾应用了本地组策略,这禁用了对本地安全策略的任何更改的访问,即使是管理员(通过命令提示符命令、注册表等)。这很奇怪,因为它是 MDT 附带的默认策略。无论如何,删除此任务序列允许我使用 netseh 关闭防火墙:

netsh advfirewall set allprofiles state off

值得注意的是;我同意大家的观点,你不应该禁用防火墙服务,也不应该关闭防火墙。

相关内容