阅读量:3
Windows防火墙配置Windows Server服务器只允许国内IP访问
- 背景: 勒索病毒事件让重视到网络安全这块,由于业务只需要为国内范围提供服务,为了减少风险想到将服务器仅限对国内开启访问权限,其它国家都将禁止访问
- ` 要么让你花钱买防火墙 要么你自己解决`
- 回正题,经过搜寻解决方案,最终找到了一种可行办法
- `先给代码`
- `必须要运行c盘生成的ip.ps1`
- 测试结果
背景: 勒索病毒事件让重视到网络安全这块,由于业务只需要为国内范围提供服务,为了减少风险想到将服务器仅限对国内开启访问权限,其它国家都将禁止访问
由于是 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
概况
国内结果
海外结果
由于只使用了IPv4提供服务
所以这里只针对IPv4进行了配置, IPv6也是同理的