背景: 勒索病毒事件让重视到网络安全这块,由于业务只需要为国内范围提供服务,为了减少风险想到将服务器仅限对国内开启访问权限,其它国家都将禁止访问
由于是 Windows Server 不像宝塔直接带有防火墙功能,只能自己想办法
第一时间想到 联系阿里云服务商提供解决方案 — (无果)
要么让你花钱买防火墙 要么你自己解决
云提供商的 [安全组规则] 是不提供MAC地址过滤,也不提供访问日志的
明明轻而易举能做到事, 就是不做为!
回正题,经过搜寻解决方案,最终找到了一种可行办法
使用Windows自带防火墙,配置规则达到目标
- 第1步 获取国内ip地址段
这个网络上比较多,却存在ip地址量的不同
有6000条+的国内ip, 也有8000条+的, 最终选择了8000+的版本
网站: https://www.ipdeny.com
下载IP地址段文件
下载链接: http://www.ipdeny.com/ipblocks/data/countries/cn.zone
这里不太确定, 如果网友你发现有更好的库, 欢迎你的回复
- 第2步 禁止全部ip地址访问
防火墙这里要设置好,默认阻止不匹配的入站连接
, 其实出站也能配置,可以自由发挥了
- 第3步 允许国内ip地址访问
要次大量的ip地址导入到防火墙规则也遇到了问题,可是8000多条,一个一个的加能加到什么时候呢
想到了使用PowerShell, 不过PowerShell这里还有一个坑
先给代码
$url = "https://www.ipdeny.com/ipblocks/data/countries/cn.zone" # 要访问的URL地址
$response = Invoke-WebRequest -Uri $url # 发送HTTP GET请求获取网页内容
$contentLines = ($response.Content | Out-String) -split "`n" # 按换行符分隔内容为多行字符串数组
foreach($line in $contentLines){
if(![string]::IsNullOrWhiteSpace($line)){
$ipAddress += '"' + $line + '",' # 在每行前后添加双引号,并存入变量中
}
}
# 去除最后一个逗号(如果有)
if($ipAddress[-1] -eq ','){
$ipAddress = $ipAddress.Substring(0,$ipAddress.Length-1)
}
# 输出结果
# Write-Output $ipAddress
$file = "c:\ip.ps1"
$cmd= "New-NetFirewallRule -DisplayName ""允许国内IP地址"" -Direction Inbound -Action Allow -Protocol Any -RemoteAddress "
#写入ps1文件
$cmd + $ipAddress | Out-File -FilePath $file
#执行命令
# invoke-expression -Command $file
最后一代码 invoke-expression -Command $file
PowerShell中就是无法执行成功,经过很长时间查询,也不知道原因在哪里,通过手动运行生成c:\ip.ps1
却是可以的,只有分成两部操作, 总之一次性把8000+的ip地址规则配置好就行了,这样就把数据添加好了
运行上面代码不生成Windows防火墙规则
必须要运行c盘生成的ip.ps1
请注意!!! 上面的测试规则是开放所有端口
请注意!!! 上面的测试规则是开放所有端口
请注意!!! 上面的测试规则是开放所有端口
测试结果
阿里云网站运维检测平台
https://boce.aliyun.com/detect/ping
概况
国内结果
文章来源:https://www.toymoban.com/news/detail-766795.html
海外结果
由于只使用了IPv4提供服务
所以这里只针对IPv4进行了配置, IPv6也是同理的文章来源地址https://www.toymoban.com/news/detail-766795.html
到了这里,关于【Windows防火墙配置Windows Server服务器只允许国内IP访问】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!