[PowerShell]將特定 IP 放到防火牆的封鎖清單

每次遇到攻擊都要開防火牆的設定實在是太辛苦了 , 整理一下調整防火牆的設定指令 , 搭配排程就可以做個自動化機制了

有些時候放在 Internet 的 VM 實在很容易被攻擊 , 但每每都要自己去手動調整實在太辛苦了 , 因此整理一下自己常用的 PowerShell 指令 , 將這樣的處理自動化

一般我會先在 Firewall 的輸入原則內先建立一筆要封鎖的規則,這條規則會用來限制特定的 IP 是不允許連線的

因此有這樣的規則之後,我們就可以在領域的部分設定要封鎖的 IP

只是如果要每次自己手動去新增或者是修改這些 IP , 雖然可以但總是麻煩了一點 , 因此就整理了一下更改防火牆規則的指令

# 將特定 IP 加入到防火牆的規則內
function Add-IpAddressToFirewallRule{
    param (
        [ValidateNotNullOrEmpty()]
        [string]$RuleName,
        [ValidateNotNullOrEmpty()]
        [string]$Ip
    )

$all_ips = [string[]](Get-NetFirewallRule -DisplayName $RuleName | Get-NetFirewallAddressFilter).RemoteAddress

if (!$all_ips.Contains($ip)){
    $all_ips += $ip
    Set-NetFirewallRule -DisplayName $RuleName -Direction Inbound -Action Block -RemoteAddress $all_ips
    }

}


# 將特定 IP 從防火牆的規則內移出
function Remove-IpAddressToFirewallRule{
    param (
        [ValidateNotNullOrEmpty()]
        [string]$RuleName,
        [ValidateNotNullOrEmpty()]
        [string]$Ip
    )

$all_ips = [string[]](Get-NetFirewallRule -DisplayName $RuleName | Get-NetFirewallAddressFilter).RemoteAddress

if ($all_ips.Contains($ip)){
    $all_ips = $all_ips | ? {$_ -ne $ip} 
    Set-NetFirewallRule -DisplayName $RuleName -Direction Inbound -Action Block -RemoteAddress $all_ips
    }

}

#Add-IpAddressToFirewallRule -RuleName "Hacker" -Ip "139.205.71.104"

#Remove-IpAddressToFirewallRule -RuleName "Hacer" -Ip "161.162.163.164"

當有了上述腳本之後,就可以利用 SQL Server 的 SQL Agent , 或者是 Windows 的 Task Scheduler (工作排程器) ,定時將偵測到的異常 IP 給加入到黑名單內,這樣管理起來就輕鬆多了。