請教一下前輩們
我想要透過PS去撈取防火牆是否有阻擋特定IP,
若有就把該規則disable掉,
並寄mail給test@gmail.com 或是傳資訊 www .xxx. com/violation.php?hostname=OOO&ip=OOO 通知總管理者
(不知道哪個比較方便,感覺是第二種比較方便)
但在判斷有無阻擋特定IP時就一直出錯,不知道要怎麼下語法...
想請教前輩們要怎麼下比較好?
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){...} ??
感謝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應該就可以了
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' }