WindowsFirewallで指定のIPを含む拒否ルールを無効にするPowerShellスクリプトを作成してみました。
1.環境
Windows10
2.スクリプト
firewallrule_disable.ps1
$siteiIP = "*11.22.33.44*"
# ログの出力先
$LogPath = ".\"
# ログファイル名
$LogName = "firewall_delete_ExecuteLog"
$LogFile = $LogName + ".log"
# ログファイル名
$LogFileName = Join-Path $LogPath $LogFile
function PrintMsg(
$LogString
){
$Now = Get-Date
# Log 出力文字列に時刻を付加(YYYY/MM/DD HH:MM:SS.MMM $LogString)
$Log = $Now.ToString("yyyy/MM/dd HH:mm:ss.fff") + " "
$Log += $LogString
# ログファイル名が設定されていなかったらデフォルトのログファイル名をつける
if( $LogName -eq $null ){
$LogName = "LOG"
}
# ログファイル名(XXXX_YYYY-MM-DD.log)
# $LogFile = $LogName + "_" +$Now.ToString("yyyy-MM-dd") + ".log"
# ログフォルダーがなかったら作成
if( -not (Test-Path $LogPath) ) {
New-Item $LogPath -Type Directory
}
# ログ出力
Write-Output $Log | Out-File -FilePath $LogFileName -Encoding Default -append
# echo させるために出力したログを戻す
Return $Log
}
PrintMsg ("Firewall規則無効化処理開始")
try {
#送信拒否ルールのName一覧取得
$RuleNameList = Get-NetFirewallRule -Action Block -Direction Outbound | Select-Object -Property Name
foreach ($item in $RuleNameList) {
$RemoteIP = Get-NetFirewallRule -Name $item.Name | Get-NetFirewallAddressFilter | Select-Object -Property RemoteAddress
if ( $RemoteIP -like $siteiIP ) {
#DisplayNameの表示
$RuleName = Get-NetFirewallRule -Name $item.Name | Select-Object -Property DisplayName
$naiyou1 = "指定サーバ宛て送信拒否規則を含むFirewallルール名は" + $RuleName + "です。"
$naiyou2 = "リモートアドレスは" + $RemoteIP + "です。"
$naiyou3 = "このルールを無効化ます。"
$naiyou4 = "このルールの無効化に成功しました。"
Write-Output $naiyou1 | Out-File -FilePath $LogFileName -Encoding Default -append
Write-Output $naiyou1
Write-Output $naiyou2 | Out-File -FilePath $LogFileName -Encoding Default -append
Write-Output $naiyou2
Write-Output $naiyou3 | Out-File -FilePath $LogFileName -Encoding Default -append
Write-Output $naiyou3
#ルールの無効化
Set-NetFirewallRule -Name $item.Name -Enabled False
Write-Output $naiyou4 | Out-File -FilePath $LogFileName -Encoding Default -append
Write-Output $naiyou4
}else{
$naiyou10 = "指定のIPは含まれていませんでした。ルール名は" + $item.Name
Write-Output $naiyou10 | Out-File -FilePath $LogFileName -Encoding Default -append
Write-Output $naiyou10
}
}
} catch {
PrintMsg ("Firewall規則無効化処理に失敗しました")
PrintMsg ($error[0])
}
PrintMsg ("Firewall規則無効化処理終了")
3.スクリプトの実行
firewallrule_disable.ps1
指定のIPを含む拒否ルールが無効化され、実行ログ(firewall_delete_ExecuteLog.log)が出力されます。