iT邦幫忙

0

PowerShell查詢防火牆規則語法詢問

請教一下前輩們

我想要透過PS去撈取防火牆是否有阻擋特定IP,
若有就把該規則disable掉,
並寄mail給test@gmail.com 或是傳資訊 www .xxx. com/violation.php?hostname=OOO&ip=OOO 通知總管理者
(不知道哪個比較方便,感覺是第二種比較方便)

但在判斷有無阻擋特定IP時就一直出錯,不知道要怎麼下語法...
想請教前輩們要怎麼下比較好?

https://ithelp.ithome.com.tw/upload/images/20200923/20110337rCavXkW0AY.png

Get-NetFirewallRule -Action Block -Direction Inbound -Enabled True |
Get-NetFirewallAddressFilter | 
Where-Object -FilterScript { $_.RemoteAddress -Eq "123.123.123.123" } | 
 Set-NetFirewallRule  -Enabled False

然後出錯

Set-NetFirewallRule : 輸入物件無法繫結到該命令的任何參數,可能是因為該命令不接受管線輸入,或者此輸入及其屬性不符合任何接受管線輸入的參數。
位於 線路:4 字元:2
+  Set-NetFirewallRule  -Enabled False
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (MSFT_NetAddress...ystemName = ""):PSObject) [Set-NetFirewallRule],ParameterBindingException
    + FullyQualifiedErrorId : InputObjectNotBound,Set-NetFirewallRule
 

請問一下語法要怎麼下比較好?

以及後續的判斷動作要怎麼銜接?
if ( 上面一大串語法 == TRUE){...} ??


2020/09/26

感謝jeles51大大救援

目前暫定版本

$check=Get-NetFirewallRule -Action Block -Direction Inbound -Enabled True | Get-NetFirewallAddressFilter |  Where-Object -FilterScript { $_.RemoteAddress -Eq "123.123.123.123" }

$wc=new-object system.net.webclient
$myIP = (
    Get-NetIPConfiguration |
    Where-Object {
        $_.IPv4DefaultGateway -ne $null -and
        $_.NetAdapter.Status -ne "Disconnected"
    }
).IPv4Address.IPAddress


if ( $check ) {
    $check| Disable-NetFirewallRule ; 
    write-host 'somethiong block and disable it' 
    $wc.OpenReadAsync("http://localhost:8000/?block=1&hostname=" + $env:computername + "&ip=" + $myIP)
} 
else { 
    write-host 'no one block'
    $wc.OpenReadAsync("http://localhost:8000/?block=0&hostname=" + $env:computername + "&ip=" + $myIP)
}

然後接收端簡單驗證來源IP與url query上的IP相同且有效或是加上token應該就可以了

1 個回答

1
jeles51
iT邦研究生 3 級 ‧ 2020-09-24 10:49:25
最佳解答

PS.請先在測試機上測試.

在 write-host 'somethiong block' 這行,
可以換成你要執行的動作, 如寄信,執行其它指令等等..

執行流程:
當 (檢查輸入規則有 block 123.123.123.123 時) {停用該規則並輸出 something block}
若沒有檢查到, 則輸出 no one block

$check=Get-NetFirewallRule -Action Block -Direction Inbound -Enabled True | Get-NetFirewallAddressFilter |  Where-Object -FilterScript { $_.RemoteAddress -Eq "123.123.123.123" }
#以上為同一行
if   ( $check )
     { $check| Disable-NetFirewallRule ; write-host 'somethiong block' } 
else { write-host 'no one block' }

我要發表回答

立即登入回答