具有自定义GUID的Windows防火墙的Chef Guard

时间:2014-06-16 20:18:14

标签: chef chef-recipe

我可以使用Chef和Powershell创建自定义Windows防火墙规则。我遇到了not_if。

的问题

我从这里使用了注册表键方法: http://docs.opscode.com/resource_registry_key.html

自定义防火墙规则使用随机GUID创建注册表项。我无法使用这些方法因为我不知道密钥名称。键值在每个节点上都是相同的,但不是键名。

以下作品。但是自定义键具有键名称的GUID

execute "enableMSDTCFirewall" do
        command "netsh advfirewall firewall set rule group=\"Distributed Transaction Coordinator\" new enable=yes"
        action :run
        not_if { registry_data_exists?("HKLM\\SYSTEM\\CurrentControlSet\\Services\\SharedAccess\\Parameters\\FirewallPolicy\\FirewallRules", {:name => 'MSDTC-In-TCP', :type => :string, :data => "v2.20|Action=Allow|Active=TRUE|Dir=In|Protocol=6|App=%SystemRoot%\\system32\\msdtc.exe|Name=@FirewallAPI.dll,-33503|Desc=@FirewallAPI.dll,-33506|EmbedCtxt=@FirewallAPI.dll,-33502|"})}
end

除了标志之外,我无法找出另一种方法来检查规则是否存在,并且在每次客户端运行期间都没有执行脚本。有任何想法吗?

结束这项工作

execute "enableFirewallRuleNameOutbound" do
    command "powershell.exe New-NetFirewallRule -DisplayName \"RuleName\" -Direction Outbound -LocalPort 20000 -Protocol TCP -Action Allow"
    action :run
    not_if 'netsh advfirewall firewall show rule name=\"RuleName\" > nul'

1 个答案:

答案 0 :(得分:4)

我猜这个规则有一个你没有使用的名称,或者可以用来帮助。以下内容应该有效。

添加规则时,请为其命名:

netsh advfirewall firewall add rule name=enableMSDTCFirewall ...

检查not_if中的规则:

not_if 'netsh advfirewall firewall show rule name=enableMSDTCFirewall > nul'

如果规则已存在,show命令应返回ERRORLEVEL 0。