重複する Windows ファイアウォール ルールを削除する方法

重複する Windows ファイアウォール ルールを削除したい場合、この記事は参考になります。ファイアウォールは、Windows コンピューターにプログラムをインストールした後、更新後、構成後などにルールを再作成することがあります。ルールを手動で削除した後でも発生するため、非常に煩わしいものです。

Windows ファイアウォール ルールは、ネットワークへのアクセスを管理するネットワーク管理者にとって不可欠です。これらのルールを使用すると、ネットワークに出入りするものを制御できます。たとえば、特定のファイルがネットワークに入らないようにすることができます。したがって、ルールが重複したり、削除後に再作成されたりすると、問題が発生します。最善の解決策については、読み進めてください。

Windows ファイアウォールがルールを重複させる理由は?

PC にルールが重複する明確な理由はわかっていません。ただし、特定のファイアウォール設定を変更したか、最近インストールしたプログラムがファイアウォールの異常な動作を引き起こしている可能性があります。

Windows の更新後にバグが発生する可能性もあり、PC で多くの問題が発生する可能性があります。Windows のセキュリティ セクションに影響を与えるウイルスやマルウェアが発生している場合もあります。この問題を解決する方法を説明します。

重複する Windows ファイアウォール ルールを削除する方法

重複する Windows ファイアウォール ルールを削除するか、削除後に再作成された場合は、トラブルシューティングの専門家が次の解決策を推奨します。

  1. 予備的な手順を実行する
  2. ルールを手動で削除する
  3. スクリプトを使用してルールを削除する

これらの解決策を詳しく見てみましょう。

1] 予備的な手順を実行する

ルールを削除する前に、ファイアウォールがポリシーを再作成または複製しないようにするために、回避策を実行することを専門家はアドバイスしています。次の手順を実行します。

  • ファイアウォール設定を確認する。場合によっては、誤った変更を行ったことが原因で、Windows ファイアウォール ルールが重複する可能性があります。設定が適切に構成されていることを確認します。
  • サードパーティ製のウイルス対策ソフトウェアまたは最近インストールした他のソフトウェアを一時的に無効にすることができます。そうでない場合は、プログラムを有効にするか再インストールします。
  • システムをアップグレードまたは更新した後に問題が発生した場合は、以前のバージョンに戻して、ファイアウォールがルールを自動的に複製しなくなったかどうかを確認します。

その後、以下の方法でルールを削除する方法を検討できます。

2] ルールを手動で削除する

Windows ルールを手動で削除するには、次の手順に従います。

  • 検索バーを使用してWindows セキュリティアプリを検索し、開くをクリックします。
  • ファイアウォールとネットワーク保護を見つけて選択します。
  • ウィンドウの下部にある詳細設定をクリックします。ユーザー アカウント制御を使用するプロンプトが表示されます。続行するには、はいを選択します。これにより、Windows Defender ファイアウォール (詳細セキュリティ) という新しいウィンドウが開きます。
  • 左側で、受信ルール送信ルールという 2 つのオプションを 1 つずつ選択できます。
  • 次に、重複するルールを 1 つクリックし、CtrlまたはShiftボタンを使用して複数のルールを選択します。
  • 選択内容に満足したら、それらを右クリックして削除を選択します。
  • アクションを確認するプロンプトが表示されます。はいをクリックします。
  • 最後に、PC を再起動して、ルールが存在するかどうかを確認します。

それでも機能しない場合は、次の手順を試すことができます。

3] スクリプトを使用してルールを削除する

スクリプトを使用して重複する Windows ファイアウォール ルールを削除することもできます。まず、Windows のメモ帳にスクリプトを保存する必要があります。

メモ帳を開き、SuperUser から次のコードをコピーして貼り付けます。

# Here we use `netsh advfirewall firewall show` to get all firewall rules, since it's way faster than Get-NetFirewallRule!!!!!!!
$output = (netsh advfirewall firewall show rule name=all verbose | Out-String).Trim() -split '\r?\n\s*\r?\n'
$propertyNames = [System.Collections.Generic.List[string]]::new()
$objects = @( $(foreach($section in $output ) {
$obj = @{}
foreach( $line in ($section -split '\r?\n') ) {
if( $line -match '^\-+$' ) { continue }
$name, $value = $line -split ':\s*', 2
$name = $name -replace " ", ""
$obj.$name = $value
if($propertyNames -notcontains $name) {
$propertyNames.Add( $name )
}
}
$obj
}) | % {
foreach( $prop in $propertyNames ) {
if( $_.Keys -notcontains $prop ) {
$_.$prop = $null
}
}
[PSCustomObject]$_
})
$r = $objects | Group-Object -Property RuleName, Program, Action, Profiles, RemoteIP, RemotePort, LocalIP, LocalPort, Enabled, Protocol, Direction
# If you want to take a look
# $r | ?{$_.Count -gt 1} | Select-Object -ExpandProperty group | Out-GridView
$r | ?{$_.Count -gt 1} | %{
$name = $_ | Select-Object -ExpandProperty group | Select-Object -ExpandProperty RuleName -First 1
# Here we have to use this cmdlet, since `netsh advfirewall firewall delete` can't differentiate rules with the same names and will delte them all!
Get-NetFirewallRule -DisplayName $name | Select-Object -Skip 1 | Remove-NetFirewallRule
}

ファイルをfirewall.ps1として保存します。

次に、Windows PowerShellを管理者として開き、firewall.ps1 ファイルのフォルダー パスをコマンド プロンプトとして貼り付けます。これは cd C:\Users\\Documents のようなものです。

最後に、スクリプトのタイトル (firewall.ps1) を入力してEnterを押します。

スクリプトが実行され始め、重複する Windows ファイアウォール ルールがすべて削除されます。

注意:Reddit には別のスクリプトもあります。

# firewall.ps1
# Get-NetFirewallRule >>x.txt to see what the empty paths are referencing.
ForEach($rule In Get-NetFirewallRule | Get-NetFirewallApplicationFilter) {
If(-not $rule.AppPath) { # UWP apps have no paths.
If($rule.CreationClassName.Substring(0, 22) -ne 'MSFT|FW|FirewallRule|{') { # Crude check for Windows 10 apps.
Write-Host 'REMOVING ID: ' $rule.InstanceID
Get-NetFirewallRule $rule.InstanceID | Remove-NetFirewallRule
#} else {
#Write-Host $rule.CreationClassName
#Get-NetFirewallRule $rule.InstanceID | Format-List Platform
}
} else { # Firewall rule contains a path.
If(-not (Test-Path $rule.AppPath) -and $rule.AppPath -ne 'System') { # Crude check for Windows 10 itself.
Write-Host 'REMOVING APP:' $rule.AppPath
Get-NetFirewallRule $rule.InstanceID | Remove-NetFirewallRule
}
}
}

一部のルールを削除すると、ネットワークと関連する構成に影響を与える可能性があります。これらの手順は慎重に実行してください。同じように見えるルールもあれば、わずかに異なるルールもあります。何をしているのかわかっている場合にのみ削除してください。

この記事が参考になれば幸いです。

Windows でファイアウォール ルールを作成する方法

Windows でファイアウォール ルールを作成するには、Windows セキュリティ アプリで [詳細セキュリティを備えた Windows ファイアウォール] オプションを開き、受信ルールまたは送信ルールを選択します。操作をクリックし、新しいルールを選択します。ルールの種類セクションで、カスタムを選択し、次へをクリックします。画面上の指示に従って、ルールを希望どおりにカスタマイズします。

Windows ファイアウォール ルールを無効にする方法

Windows ファイアウォール ルールを無効にするには、Windows セキュリティアプリに移動し、ファイアウォールとネットワーク保護を選択します。下部にある詳細設定をクリックして、詳細セキュリティを備えた Windows Defender ファイアウォールを開きます。ここで、受信ルールまたは送信ルールを選択します。長いルールのリストが表示されます。無効にするルールを検索し、クリックして、左側のペインでルールの無効化を選択します。場合によっては、ルールを無効にする方が削除するよりも良い選択肢となる可能性があります。