
Linux 防火墙入门
Nginx 都启动了,外面就是访问不了,原来是防火墙挡了 80 端口
Linux基础 实战课
Linux 基础实战课 · 进阶篇
————————————————
💬 有个项目上架了一台 Web 服务器,Nginx 配好了,systemctl start nginx 也没报错,本地 curl localhost 正常返回页面。一切看起来都没问题——但同事从办公室电脑上就是访问不了。
排查了 ip、子网掩码、网关、DNS,全对。最后要放弃的时候,有人说了句「防火墙开了没有?」——果然,80 端口没放行。一条 firewall-cmd --add-port=80/tcp 搞定,前后排了两小时。
防火墙是 Linux 服务器的「看门大爷」,你不说让谁进,它全给你拦了。这篇把 firewalld 和 ufw 两个最常用的防火墙工具讲清楚。
————————————————
一、先分清两个工具
你遇到的服务器防火墙,大概率是这两个之一:
工具 | 常见于 | 特点 |
firewalld | RHEL/CentOS 7+, AlmaLinux, Rocky Linux | 功能强,分区 zone 概念 |
ufw | Ubuntu, Debian | 简单易用,命令短,上手快 |
💡 先确认你的系统用哪个:firewall-cmd --state 有输出就是 firewalld,ufw status 有输出就是 ufw。都显示 inactive 说明防火墙没开。
二、firewalld 核心操作
看状态:
systemctl status firewalld | 看防火墙服务状态 |
firewall-cmd --state | 看防火墙是否运行中 |
firewall-cmd --list-all | 查看所有规则 |
开放端口(最常用):
firewall-cmd --add-port=80/tcp --permanent | 永久开放 80 端口 |
firewall-cmd --add-port=443/tcp --permanent | 永久开放 443 端口 |
firewall-cmd --reload | 重载,让新规则生效 |
⚠️ 加 --permanent 表示永久写入配置,不加只对当前运行有效——重启后会丢。记得改完以后 firewall-cmd --reload 让配置生效。
按服务名开放(比端口更直观):
firewall-cmd --add-service=http --permanent | 开放 HTTP 服务 |
firewall-cmd --add-service=https --permanent | 开放 HTTPS 服务 |
firewall-cmd --add-service=mysql --permanent | 开放 MySQL 端口 |
删规则:
firewall-cmd --remove-port=8080/tcp --permanent | 关闭 8080 端口 |
firewall-cmd --reload | 重载生效 |
查看当前开了哪些端口:
firewall-cmd --list-ports | 列出所有开放的端口 |
三、ufw 核心操作
ufw(Uncomplicated Firewall)如其名,命令超级简单:
放行端口:
sudo ufw allow 80 | 开放 80 端口 |
sudo ufw allow 443 | 开放 443 端口 |
sudo ufw allow 22 | 开放 SSH 端口 |
放行服务(和 firewalld 类似):
sudo ufw allow http | 开放 HTTP |
sudo ufw allow https | 开放 HTTPS |
删除规则:
sudo ufw delete allow 80 | 关闭 80 端口 |
sudo ufw status numbered | 看规则编号,方便删 |
sudo ufw delete 3 | 删第 3 条规则 |
💡 如果你是阿里云/腾讯云/华为云的云服务器,还有一层「安全组」防火墙在外面!服务器内部防火墙 + 云平台安全组两层都要放行,缺一个端口都不通。
四、实战:新部署服务的端口放行标准流程
假设你刚装好 Nginx,需要让外面能访问:
① 确认服务在监听目标端口:
ss -tlnp | grep :80 | 确认 Nginx 在监听 80 端口 |
② 开防火墙端口:
firewall-cmd --add-port=80/tcp --permanent && firewall-cmd --reload | firewalld 一把梭 |
或
③ 验证端口外面能否连上(从另一台机器测):
或
④ 如果还不通,查云平台安全组(阿里云 ECS → 安全组 → 入方向规则 → 添加 80 端口)。
这套流程你跑两遍就会了。下次再遇到「服务起了连不上」的情况,先别怀疑代码出 bug,查防火墙是第一优先级。
————————————————
下篇预告:《Linux 打包压缩实战:tar / zip,备份传文件全靠它》
💬 你第一次被防火墙「坑」是什么时候?
是忘了开端口,还是云平台安全组没配?评论区分享一下
👍 点赞💬 留言🔄 转发给需要的朋友
有问题欢迎评论区留言,看到都会回复