马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
Ubuntu 上刚装好一个服务,本地 curl 能通,外面却连不上,八成是防火墙没放行。Ubuntu 默认的防火墙工具是 ufw(Uncomplicated Firewall),它对 iptables 做了一层好用的封装,开端口就一行命令。本文把启用、放行、查状态的完整流程和几个容易搞错的地方讲清楚。
一、开端口的三步
第一步:确认 ufw 是启用状态
sudo ufw enable
输入后会提示确认,输 y 回车。如果防火墙本来就是启用的,这条命令不会有副作用,只是再确认一次。
第二步:放行指定端口
以放行 8080 为例:
sudo ufw allow 8080
不带协议时,TCP 和 UDP 会一起放行。只想放行其中一种,就显式带上:
sudo ufw allow 8080/tcp
sudo ufw allow 8080/udp
注意端口和协议之间是斜杠,别写成空格或者冒号,写错了 ufw 会报 ERROR: Bad port 之类的提示。
第三步:查看状态
sudo ufw status
这条只列出规则与动作。想看更完整的信息(默认策略、日志 开关等):
sudo ufw status verbose
再详细一档,显示编号、规则类型:
sudo ufw status numbered
二、一次完整的例子
sudo ufw enable
sudo ufw allow 8080
sudo ufw status
第三条命令的典型输出:
Status: active
To Action From
-- ------ ----
8080 ALLOW Anywhere
8080 (v6) ALLOW Anywhere (v6)
两行分别对应 IPv4 和 IPv6,都出现才说明这个端口在两种协议下都能访问。
三、比「放行端口」更该用的做法
只写 sudo ufw allow 8080 等于对全世界开放这个端口。只要这个服务在公网上,就应该顺手把来源限制加上:
sudo ufw allow from 192.168.1.0/24 to any port 8080 proto tcp
这样只有内网网段能访问。运维上更推荐按服务名放行而不是裸端口,比如 OpenSSH、Nginx Full 这类预设。
sudo ufw app list
sudo ufw allow OpenSSH
四、常用管理命令
- 查看规则编号:sudo ufw status numbered
- 按编号删除:sudo ufw delete 3
- 按规则删除:sudo ufw delete allow 8080
- 临时关闭:sudo ufw disable
- 重置所有规则:sudo ufw reset(会清空全部规则,慎用)
- 看日志
:sudo tail -f /var/log/ufw.log
五、改了不生效时的排查顺序
- 看看服务本身监听没:
sudo ss -lntp | grep 8080,端口没在听,防火墙放行也没用。
- 服务是否只绑在 127.0.0.1:绑了本地回环的话,从外面永远连不上,要改成 0.0.0.0 或具体内网网卡。
- 云服务器还有一层安全组:ufw 放行了、安全组没放,外面照样不通。
- ufw 规则顺序:ufw 按规则先后匹配,前面有 deny 规则命中就不会继续往后看,用 numbered 检查顺序。
- IPv6:如果服务只监听 IPv4,而客户端走的是 v6,也会连不上。
六、两个安全提醒
第一,启用 ufw 之前务必先确认 SSH 端口已放行,否则一旦 enable 而 22 没放,你当场就被自己关在门外——这是这类操作最常见的事故。稳妥顺序是:sudo ufw allow OpenSSH 之后再 sudo ufw enable。第二,不要为了排障图省事直接 ufw disable 了事,正确的做法是精确放行必需端口,其余保持拒绝。
qidao123.com企服评测-应用市场 编辑提示
|