Windows防火墙屏蔽公网连接|Windows防火墙只允许局域网连接
“上回书”说到,我家里接入了两条宽带。
由于我在遥远的东北某地上学,家中网络出现问题,往往不能及时修复,以至于爸妈的网络使用体验极差,常常会给我差评。因此我在局域网搭建了一台家用服务器,用于我远程维修我家的网络。
服务器都搭建了,下一步在上面跑点测试用的脚本和后端,也是很合理的吧?
理想很美好,现实很骨感。由于我一直以来使用防火墙的坏习惯,导致很多服务在申请防火墙权限的时候,我都是直接无脑点允许的,有时候甚至是直接把防火墙给关掉的。
在今天看到某个博主所做的视频之后,尝试通过公网测试了一下家用服务器的端口
看起来好像是没有什么问题的,另一条线是移动的,没有公网IP,这让我松了一口气。但我突然想到,这台家用服务器是有 IPv6 地址的,遂测试了一下 IPv6
Holy shit! 这台服务器 IPv6 的端口竟然是通的!这说明我的服务器已经在公网上裸跑了一段时间了,没被各路大神黑掉也算是一种幸运了。
起初,我想到的是修改监听地址,同时还需要本机和局域网都能够连通,而跑的程序并不支持同时监听 127.0.0.1
和局域网。要想监听多个地址只能监听 *
,同时修改防火墙规则来实现。
Win+R 打开运行,输入 wf.msc
后按回车,打开“高级安全防火墙”
修改防火墙
首先,点击左栏的 入站规则
然后点击右栏的 新建规则
在“新建入站规则向导”中选择 自定义
,然后点击 下一页
然后选择 此程序路径
,并输入一个绝对路径,尽量不要在路径中夹杂变量,有可能出现未知问题,然后点击 下一页
协议类型按照需求选择,例如 TCP
,本地端口选择 特定端口
,并输入需要开放的端口或端口范围,例如 1234
或者 1230-1239
,然后点击 下一页
点击 添加
,选择 从此 IP 地址范围
,输入一个 IP 段,例如 192.168.31.1
到 192.168.31.255
,主要取决于想要开放的局域网 IP 地址范围。然后点击 确定
、下一页
点击 允许连接
、下一页
根据需要,选择性的勾选 域
、专用
、公用
等网络类型,然后点击 下一步
然后输入一个规则名称,描述可以不填写,点击 完成
这样,便创建好了一条新的规则。
禁用自动创建的规则
因为这是一条新建的规则,为了避免此前程序自动创建的规则对这条规则的干扰,需要禁用掉它。
点击 程序
这一列,让入站规则按照程序路径排列。
找到与刚刚创建的规则程序路径一致的规则,在右栏中点击 禁用规则
或 删除
让这条规则失效即可。
最终效果
这时,通过公网再去测试端口,就会发现已经不通了,而局域网测试的时候则正常。
公网测试
内网测试
题外话
关于入站规则和出站规则的区别,可以简单的这么理解
1、出站规则
出则规则使用来限制对外访问的,也就是说从本机发出的请求中,如果请求的对象是被禁止的,该请求会被拦截,表现方式就是断网。
2、入站规则
入站规则是用来限制远程主机访问本机的服务的,就是说,本机接收的请求中如果被请求的程序或具体端口是被限制的,该请求被拦截。
(摘选自“参见4”)
默认情况下,Windows 是不开放入站访问的。但是如果有程序申请防火墙权限的话,就会放开某个端口,以方便来自公网的访问,例如 BT、P2P 类软件。
虽然我用的这个程序不是这类软件,但是当它监听 *
这个地址的时候,也会申请防火墙权限,写入一条入站规则。如果没有一条入站规则允许外部连接的话,监听 *
与监听 127.0.0.1
的效果是差不多的。
但是这条入站规则默认情况下,是允许所有地址访问的,包括 IPv4
和 IPv6
的入站。IPv4 其实还好一些,因为大部分网关设备在没有配置 端口转发
和 DMZ
模式下,都不会允许公网对某个端口的访问请求;但是 IPv6 下,如果网关转发了所有的 IPv6 数据包,那么相当于这条防火墙规则所开放的端口直接暴露在公网下了,属实有些不安全了。
参见
因为某些原因,一些参考的资料不能列出,敬请谅解!