Gibt es eine Möglichkeit, eine Gruppe zu einer Regel in der erweiterten Windows-Firewall zu erstellen oder zu einer vorhandenen Gruppe hinzuzufügen (vorzugsweise über eine Eingabeaufforderung oder ein WSH-Skript)?
Bearbeiten:
Gibt es eine Möglichkeit, eine Gruppe zu einer Regel in der erweiterten Windows-Firewall zu erstellen oder zu einer vorhandenen Gruppe hinzuzufügen (vorzugsweise über eine Eingabeaufforderung oder ein WSH-Skript)?
Bearbeiten:
Antworten:
Ich habe eine Lösung für diese alte Frage gefunden, die mich auch schon lange nervt!
Der TechNet-Artikel zu New-NetFirewallRule enthält folgende Informationen zu den -Group
Parametern des New-NetFirewallRule-Befehls:
[...] Dieser Parameter gibt die Quellzeichenfolge für den Parameter DisplayGroup an. [...] Regelgruppen können verwendet werden, um Regeln nach Einfluss zu organisieren, und ermöglichen Änderungen von Stapelregeln. Wenn bei Verwendung der Cmdlets Set-NetFirewallRule der Gruppenname für einen Satz von Regeln oder Sätzen angegeben wird, erhalten alle Regeln oder Sätze in dieser Gruppe denselben Satz von Änderungen. Es wird empfohlen, diesen Parameterwert mit einem universellen und weltweit einsatzbereiten indirekten @ FirewallAPI-Namen anzugeben.
Hinweis : Der Parameter DisplayGroup kann bei der Objekterstellung mit dem Cmdlet New-NetFirewallRule nicht angegeben werden, kann jedoch mithilfe der Punktnotation und des Cmdlets Set-NetFirewallRule geändert werden.
Das klingt nach einer Chance, oder? Bei dem Versuch, selbst herauszufinden, wie das geht, habe ich Folgendes ausgeführt:
Get-NetFirewallRule -DisplayName "Core Networking - IPv6 (IPv6-In)" | Get-Member
... und stellte fest, dass die DisplayGroup
Eigenschaft nur eine Get-Methode hat, die Group
Eigenschaft (mit ihrem RuleGroup
Alias) jedoch sowohl eine Get- als auch eine Set-Methode.
Die PowerShell-Lösung lautet wie folgt:
Dank @maoizm funktioniert diese Lösung jetzt, wenn eine oder mehrere Regeln mit demselben Anzeigenamen vorhanden sind:
$RuleName = "NameOfYourFirewallRuleGoesHere"
$RuleGroup = "YourGroupNameGoesHere"
Get-NetFirewallRule -DisplayName $RuleName | ForEach { $_.Group = '$RuleGroup'; Set-NetFirewallRule -InputObject $_ }
Dadurch wird tatsächlich ein neuer Gruppenname erstellt, der Ihrer Regel zugewiesen wird.
Hinweis : Der netsh
Befehl hat keinen add group
Befehl. Die Syntax für Netsh AdvFirewall Firewall-Befehle finden Sie hier.
Regeln in der Windows-Firewall können gebündelt und als Gruppe aktiviert oder deaktiviert werden.
Mit dem netsh advfirewall
Befehl können Sie der Firewall Regeln hinzufügen. Verwenden Sie den Switch group=
zum Verwalten der AdvFirewall-Gruppen.
Verwenden Sie so etwas:
netsh advfirewall firewall set rule profile=domain group="Remote Desktop" new enable=Yes
netsh advfirewall firewall set rule Group="SmarterTools Administrative Interfaces" new
und erhalte die Fehlermeldung 'Keine Regeln entsprechen den angegebenen Kriterien'
Während Sie ausdrücklich erwähnen
... über die Eingabeaufforderung
Ich gehe davon aus, dass Sie ein Skript verwenden wollen. Mit 2008 können Sie Powershell verwenden. Es ist ziemlich einfach:
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"
Weitere Informationen finden Sie in diesem Artikel ...
netsh
).
Die netsh
Kommandozeile hat hierfür kein Flag.
Als Alternative zu den oben genannten PowerShell-Lösungen ist der Gruppenname Teil der Registrierungsstruktur.
Tatsächlich ist der .wfw
Firewall-Export eine unformatierte regf
Registrierungsstruktur . Wenn Sie dies in den Registrierungseditor importieren, sehen Sie, dass es sich um eine Liste von durch REG_SZ
Pipe getrennten Werten handelt.
Benutzerdefinierte Werte finden Sie unter
HKLM\SYSTEM\CurrentControlSet\services\SharedAccess\Parameters\FirewallPolicy\FirewallRules
Hier ist eine Momentaufnahme eines Google Chrome-Firewall-Eintrags (Zeilenumbrüche zur besseren Lesbarkeit hinzugefügt)
{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|
Die "Gruppe" wird unter gespeichert EmbedCtxt
und ihr Wert ist Google Chrome
.
... also könnte man annehmen, dass Sie den Registrierungswert mit der gleichen Technik manipulieren können ...
Suchen Sie den Registrierungseintrag
reg query HKLM\SYSTEM\CurrentControlSet\services\SharedAccess\Parameters\FirewallPolicy\FirewallRules /f "Google Chrome"
...|EmbedCtx=My Custom Group|
|
wird der Wert ignoriert.
Get-NetFirewallRule -DisplayName 'GTA V' | ForEach { $_.Group = 'games'; Set-NetFirewallRule -InputObject $_ }