【Windows防火墙配置Windows Server服务器只允许国内IP访问】

avatar
作者
筋斗云
阅读量:3

Windows防火墙配置Windows Server服务器只允许国内IP访问

背景: 勒索病毒事件让重视到网络安全这块,由于业务只需要为国内范围提供服务,为了减少风险想到将服务器仅限对国内开启访问权限,其它国家都将禁止访问

由于是 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也是同理的

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!