Есть ли способ создать группу или добавить в существующую группу к правилу в расширенном брандмауэре Windows (предпочтительно через командную строку или сценарий WSH).
Редактировать:
Правила в брандмауэре Windows можно объединить и активировать или деактивировать как группу.
С участием netsh advfirewall
вы можете добавить правила в брандмауэр. Используйте переключатель group=
для управления группами AdvFirewall.
Используйте что-то вроде этого:
netsh advfirewall firewall set rule profile=domain group="Remote Desktop" new enable=Yes
Нашел решение этого старого вопроса, который тоже давно меня беспокоит!
В New-NetFirewallRule В статье TechNet говорится об этом -Group
параметр командлета New-NetFirewallRule:
[...] Этот параметр указывает исходную строку для параметра DisplayGroup. [...] Группы правил могут использоваться для организации правил по влиянию и позволяют изменять правила пакетным образом. С помощью командлетов Set-NetFirewallRule, если имя группы указано для набора правил или наборов, все правила или наборы в этой группе получают один и тот же набор изменений. Рекомендуется указывать значение этого параметра с универсальным и всемирно признанным косвенным именем @FirewallAPI.
Заметка: Параметр DisplayGroup нельзя указать при создании объекта с помощью командлета New-NetFirewallRule, но его можно изменить с помощью точечной нотации и командлета Set-NetFirewallRule.
Похоже, есть шанс, правда? Пытаясь узнать, как это сделать сам, я выполнил следующее:
Get-NetFirewallRule -DisplayName "Core Networking - IPv6 (IPv6-In)" | Get-Member
... и отметил, что DisplayGroup
свойство имеет только метод Get, но свойство Group
собственность (с ее RuleGroup
alias) имеет как Get, так и Set.
Решение PowerShell выглядит следующим образом:
Благодаря @maoizm это решение теперь работает, когда существует 1 или несколько правил с одинаковым DisplayName:
$RuleName = "NameOfYourFirewallRuleGoesHere"
$RuleGroup = "YourGroupNameGoesHere"
Get-NetFirewallRule -DisplayName $RuleName | ForEach { $_.Group = '$RuleGroup'; Set-NetFirewallRule -InputObject $_ }
И это фактически создаст новое имя группы, которое будет присвоено вашему правилу.
Заметка: The netsh
команда не имеет add group
команда. См. Синтаксис для Команды межсетевого экрана Netsh AdvFirewall Вот.
Хотя вы конкретно упоминаете
... через командную строку
Я предполагаю, что вы имеете в виду использование сценария. С 2008 года вы можете использовать powershell. Это довольно просто:
function Add-FirewallRule {
param(
$name,
$tcpPorts,
$appName = $null,
$serviceName = $null
)
$fw = New-Object -ComObject hnetcfg.fwpolicy2
$rule = New-Object -ComObject HNetCfg.FWRule
$rule.Name = $name
if ($appName -ne $null) { $rule.ApplicationName = $appName }
if ($serviceName -ne $null) { $rule.serviceName = $serviceName }
$rule.Protocol = 6 #NET_FW_IP_PROTOCOL_TCP
$rule.LocalPorts = $tcpPorts
$rule.Enabled = $true
$rule.Grouping = "@firewallapi.dll,-23255"
$rule.Profiles = 7 # all
$rule.Action = 1 # NET_FW_ACTION_ALLOW
$rule.EdgeTraversal = $false
$fw.Rules.Add($rule)
}
# Sample Usage
Add-FirewallRule "Test port 1234" "1234" $null $null
Add-FirewallRule "Test port 5555-6666" "5555-6666" $null $null
Add-FirewallRule "Test port 2222 Calc" 2222 "c:\windows\system32\calc.exe" $null
Add-FirewallRule "Test port 3333 W3SVC" 3333 $null "W3SVC"
Видеть Эта статья подробнее ...
В netsh
в командной строке нет флага для этого.
В качестве альтернативы решениям PowerShell, описанным выше, имя группы является частью куста реестра.
Фактически, .wfw
Экспорт брандмауэра на самом деле сырой regf
куст реестра. Если вы импортируете это в редактор реестра, вы увидите, что это список REG_SZ
значения, разделенные вертикальной чертой.
Пользовательские значения расположены по адресу
HKLM\SYSTEM\CurrentControlSet\services\SharedAccess\Parameters\FirewallPolicy\FirewallRules
Вот снимок записи брандмауэра Google Chrome (новые строки добавлены для удобства чтения)
{7E29D2BA-3EBF-4AFD-BF6E-BA6486C74660}
v2.10|
Action=Allow|
Active=TRUE|
Dir=In|
Protocol=17|
LPort=5353|
App=C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe|
Name=Google Chrome (mDNS-In)|
Desc=Inbound rule for Google Chrome to allow mDNS traffic.|
EmbedCtxt=Google Chrome|
«Группа» хранится под EmbedCtxt
и его ценность Google Chrome
.
... так что можно предположить, что вы можете манипулировать значением реестра, используя ту же технику ...
Найдите запись в реестре
reg query HKLM\SYSTEM\CurrentControlSet\services\SharedAccess\Parameters\FirewallPolicy\FirewallRules /f "Google Chrome"
...|EmbedCtx=My Custom Group|
|
, значение будет проигнорировано.