什么时候需要用到命令行设置网络权限
在公司内网调试服务,或者在家用树莓派搭了个小服务器时,经常会遇到程序连不上网络的问题。很多时候并不是网络不通,而是系统防火墙拦住了请求。图形界面虽然直观,但远程连接服务器时,命令行才是最可靠的工具。
掌握命令行网络权限设置,不仅能快速放开某个端口,还能批量管理规则,避免每次都要点开防火墙设置找半天。
Windows 下使用 netsh 配置防火墙
Windows 系统自带的 netsh 命令可以用来管理防火墙规则。比如你想让外部访问你本机运行的 Web 服务(端口 8080),可以直接添加一条入站规则:
netsh advfirewall firewall add rule name="允许8080" dir=in action=allow protocol=TCP localport=8080这条命令的意思是:创建一个名为“允许8080”的入站规则,允许 TCP 协议通过本地 8080 端口。执行后,别人就能访问你的 8080 页面了。
如果之后想删除这条规则,只需运行:
netsh advfirewall firewall delete rule name="允许8080"Linux 上用 iptables 控制流量
大多数 Linux 发行版仍然支持 iptables,它是控制网络权限的核心工具之一。比如你部署了一个 API 服务监听在 3000 端口,但发现外部无法访问,可能是防火墙挡住了。
添加一条允许 3000 端口的规则:
sudo iptables -A INPUT -p tcp --dport 3000 -j ACCEPT这条规则将接受所有发往 3000 端口的 TCP 请求。如果你还希望限制只允许特定 IP 访问,比如只让 192.168.1.100 连接:
sudo iptables -A INPUT -p tcp -s 192.168.1.100 --dport 3000 -j ACCEPT这样更安全,避免端口对公网开放造成风险。
macOS 使用 pfctl 管理防火墙
macOS 默认启用了 pf 防火墙,可以通过配置文件和命令行控制。假设你在本地跑了个测试服务在 5000 端口,想临时放行外部访问。
先编辑规则文件:/etc/pf.conf,加入一行:
pass in proto tcp from any to any port 5000然后加载并启用规则:
sudo pfctl -f /etc/pf.conf
sudo pfctl -e这时候 5000 端口就对外可用了。完成后如果想关闭,可以用 sudo pfctl -d 禁用防火墙,或者修改配置再重载。
别忘了保存规则
很多人设置了 iptables 规则后重启发现失效了,是因为规则默认不持久。在 Debian/Ubuntu 系统上,可以安装 iptables-persistent:
sudo apt install iptables-persistent
sudo netfilter-persistent saveCentOS 用户可以用 service 命令保存:
service iptables saveWindows 和 macOS 的规则写入后一般会自动保留,但修改配置文件时仍建议备份原文件。
实际场景:远程调试 Node.js 服务
你在云服务器上跑了一个 Node.js 应用,监听 3000 端口,但在本地浏览器打不开。登录服务器检查,服务确实在运行,那问题很可能出在防火墙。
执行以下命令放开端口:
sudo iptables -I INPUT -p tcp --dport 3000 -j ACCEPT刷新页面,服务立刻恢复正常。等调试结束,再用 -D 参数删除规则即可:
sudo iptables -D INPUT -p tcp --dport 3000 -j ACCEPT这种临时放行的方式既快捷又安全。