windows防火墙配置以及网络服务开放排查
前言
windows中,防火墙向来不被重视,大多数人的建议都是关掉防火墙。此处仅探讨如何配置防火墙。
配置
ping/ICMPv4
判断你和他人是否完成组网,通常是使用ping命令,比如说
ping 192.168.10.52
然而,如果你没有关闭防火墙,通常是ping不通的,因为ICMP默认是被防火墙禁止入站的。
按Win
搜索高级安全 Windows Defender 防火墙
入站规则-新建规则
自定义-所有程序--选择ICMPv4--作用域直接下一步
配置文件勾选域网络
和专用网络
,域网络一般在公司里组内网,专用网络一般就是我们的家庭网络,而公用网络则是商店网络或者校园网这种公有的,因此一般没有开放端口给这种网络的需求。
没有密码的WIFI也属于公用网络,以及上面提到的校园网、各种需要登录的网络(比如酒店中)。
假如不巧在这种环境下,某个应用请求开放网络访问,那么在专用网络和域网络中,这些应用就会被禁止外界访问,挺坑爹的。
名称自己取一个,比如Ping/ICMPv4。
配置完成后,就会发现可以ping通了。
修改配置
应用要开放服务时,一般会有窗口提示,我们一般也会直接确定,这个没什么好说的。
但是如果你点确定时处于公共网络,他只会在公共网络时提供访问,专用和域网络反而不能访问,非常反直觉,这就很曹丹。
入站规则中找到需要修改的配置项,比如nginx,双击,点击高级
标签页,勾选域
和公用
。
建议配置
如果觉得烦,直接关掉三个防火墙,或者只开公用网络的。
该说不说,防火墙这个东西确实大多数情况下都是多此一举。
保守一些的话,像上面那样,开启ICMPv4的入站,然后在某个服务无法被访问时,考虑一下防火墙。
命令行
windows防火墙的命令行工具非常难用。
通过UI操作你需要很多步,首先,你很可能忘记了需要搜索高级安全
这个前缀,而第一时间想到的肯定是防火墙
三个字,这样你会首先打开设置中的防火墙。
而进去之后,先不说你会不会点开专用网络之类的配置,很可能被这个允许应用通过防火墙
所诱导
于是乎你进入下面的页面
这个页面相当不友好,信息只有一个名称不说,双击点开也只是属性,而没有那么多配置。
就算你前面点开了高级设置,这个页面也不提供搜索功能,你需要自己找到需要修改的应用。
查询(不推荐)
建议还是使用UI界面去查询防火墙规则
$appKeyword = "*ollama*"
$appRules = Get-NetFirewallRule | Where-Object {
(Get-NetFirewallApplicationFilter -AssociatedNetFirewallRule $_).Program -like $appKeyword
}
$appRules | Format-Table -Property Name, DisplayName, Enabled, Direction, Action
以上这个命令是用来查询防火墙规则的,appKeyword则是应用名称。
这个命令要执行十来秒,实在是让人等不起。
你会看到类似这样的输出。
放行端口(推荐)
由于应用添加防火墙规则他是会自动弹出选项的,因此一般不需要命令行来操作。
添加防火墙规则,首先你需要以管理员身份启动命令行。
# 放行8080端口
New-NetFirewallRule -DisplayName "Allow TCP 8080" -Direction Inbound -LocalPort 8080 -Protocol TCP -Action Allow
如此一来,无论哪个应用开启了8080端口,外界都能访问到这个端口。
或者不开放公共网络访问,而开放域和专用网络访问。
New-NetFirewallRule -DisplayName "Allow TCP 8080 for Domain and Private" -Direction Inbound -LocalPort 8080 -Protocol TCP -Action Allow -Profile Domain,Private
放行应用(一般用不上)
修改下面DisplayName和-Program处的参数即可。
New-NetFirewallRule -DisplayName "Allow App for Domain and Private" -Direction Inbound -Program "C:\Path\To\YourApp.exe" -Protocol TCP -Action Allow -Profile Domain,Private
开放服务问题排查
回环地址
对外界开放服务,首先要保证自己的服务是正常的。
比如访问下面这个地址,使用localhost回环地址,回环地址只有自己能访问到,而且不需要任何网络环境。
localhost:11434
# ollama,状态码200表明没有问题
curl -I localhost:11434
如果正常,则说明服务没有问题。
网络地址
网络地址并非指的是我们平常上网的那个网络(外网),局域网(内网)也是网络。
在WIFI或者以太网详情中可以看到自己的网络IP地址(局域网IP)。
假如没有将地址暴露到网络中,则即使在本机上,访问本机的IP和端口也不会成功。
curl -I 192.168.10.51:11434
在powershell中,配置环境变量,ollama监听的地址
$env:OLLAMA_HOST='192.168.10.51'
# 启动ollama服务
ollama serve
这样就能在局域网中访问了。
然而,通常情况下,路由器使用了DHCP,这会导致我们的机器连接网络时很可能会发生IP的变化(比如路由器重启),就算不是,我们更换网络时IP也会变。
因此一个奇特而方便的地址,0.0.0.0
出现了,(具体原因不必去了解,这个ip的定义肯定是为了方便使用的,就像回环地址那样)这个地址代表了本机能被访问到的任何ip。
本机访问:http://localhost:<端口> 或 http://127.0.0.1:<端口>。
局域网访问:http://<你的局域网IP>:<端口>。
公网访问:http://<你的公网IP>:<端口>
公网访问
这个的测试也很简单,直接在本机上测试公网ip或者域名就行了,如果能正常访问页面,一般情况下别的机器也能正常访问。
值得一说的是ipv6,ipv6一般的使用场景在公网。而与ipv4不同的是,ipv6并不是默认打开的,在某些网络中,ipv6是关闭的,比如公共网络之类的。
也就是说,你在ipv6公网开放的服务,很有可能有一大批用户无法访问,因为需要支持ipv6的网络才能访问ipv6服务。