如何在 Windows Firewall 批量添加 IP

2023-11-28 10:46:44 +08:00
 AliceFizzy
由于最近服务器老被 RDP 爆破,虽然装了个 wail2ban ,但是总觉得不如直接把国外 IP 给 ban 了来的实在,然后我看富强一堆国内 IP 的表,想着用这个表做一个白名单,结果自带防火墙导入也忒麻烦了……
请问有啥办法可以快速批量导入 IP ?
1129 次点击
所在节点    Windows
4 条回复
sky96111
2023-11-28 11:13:37 +08:00
PowerShell 脚本 New-NetFirewallRule
yuchenr
2023-11-28 11:20:45 +08:00
Set-NetFirewallAddressFilter 和 Set-NetFirewallAddressFilter
yuchenr
2023-11-28 11:21:54 +08:00
$startTime = Get-Date
$startTimeStr = $startTime.AddMinutes(-5).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.FFFZ")
$failedAttemptsThreshold = 3

$Query = [xml]@"
<QueryList>
<Query Id="0" Path="Security">
<Select Path="Security">*[System[(EventID=4625) and TimeCreated[@SystemTime&gt;='$startTimeStr']]]</Select>
</Query>
</QueryList>
"@

function Get-IPAddresses {
param (
[xml]$query,
[int]$maxEvents
)

$events = Get-WinEvent -FilterXml $query -MaxEvents $maxEvents
if (-not $events) {
Write-Host "未获取到任何日志。脚本将退出。"
return
}

$events | ForEach-Object {
$_.Properties[19].Value
}
}

$failedIPs = Get-IPAddresses -query $Query -maxEvents 100 | Group-Object | Where-Object {
$_.Count -gt $failedAttemptsThreshold
} | Select-Object -ExpandProperty Name -Unique
$uniqueIPs = Get-IPAddresses -query $Query -maxEvents 100 | Select-Object -Unique

$filteredFailedIPs = $failedIPs | Where-Object {
$_ -notmatch '^192\.168\.' -and $_ -notmatch '^10\.' -and $_ -notmatch '^172\.(1[6-9]|2[0-9]|3[0-1])\.'
}

# 定义要过滤的特定 IP 地址列表
$specificIPs = @("192.168.1.100", "10.0.0.5")

# 过滤掉特定 IP 地址
$filteredFailedIPs = $filteredFailedIPs | Where-Object {
$_ -notin $specificIPs
}

$ruleName = "BlockIPs"
$filteredFailedIPs = $filteredFailedIPs | Sort-Object

# 获取现有的防火墙规则
$existingRule = Get-NetFirewallRule -DisplayName $ruleName

if ($existingRule) {
# 获取现有的远程地址过滤器
$existingAddressFilters = Get-NetFirewallAddressFilter -AssociatedNetFirewallRule $existingRule

# 获取现有的远程地址
$existingRemoteAddresses = $existingAddressFilters | Select-Object -ExpandProperty RemoteAddress
$existingRemoteAddresses = @($existingRemoteAddresses)
$existingAddressFilters = @($existingAddressFilters)
# 添加新的地址
$newRemoteAddresses = $existingRemoteAddresses + $filteredFailedIPs | Select-Object -Unique

# 更新远程地址过滤器
$existingAddressFilters | Set-NetFirewallAddressFilter -RemoteAddress $newRemoteAddresses
}
else {
Write-Host "规则 $ruleName 不存在。"
New-NetFirewallRule -DisplayName $ruleName -Direction Inbound -Action Block -Protocol Any -RemoteAddress $filteredFailedIPs -RemoteAddressType "IP"
}
ShadowPower
2023-11-28 11:23:18 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/995853

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX