前言
服务器初始化时照着教程敲了几条 firewall-cmd,但当时并不真正理解每条命令在干什么。这篇文章是我把 firewalld 重新学了一遍之后的整理。
三个核心概念
- 区域(zone):一组防火墙规则的集合。默认是
public,一般个人服务器用这一个就够了 - 服务(service):预定义的端口组合,比如
http就是 80/tcp,https就是 443/tcp - 端口(port):直接放行某个端口号,服务没覆盖到的就用它
常用命令
查看当前放行了什么:
firewall-cmd --list-all
放行网站需要的服务:
firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https firewall-cmd --reload
放行一个自定义端口(比如测试后端时临时用):
firewall-cmd --permanent --add-port=8000/tcp firewall-cmd --reload
用完记得关掉:
firewall-cmd --permanent --remove-port=8000/tcp firewall-cmd --reload
两个容易踩的坑
- 忘了
--permanent:不加它规则重启就没了;加了它必须--reload才生效。我一开始经常只做其中一半 - 阿里云还有一层安全组:firewalld 放行了但网页打不开,多半是控制台里的安全组没放行。两层都要通
我的原则
只开放必要的端口:SSH(22)、HTTP(80)、HTTPS(443)。数据库、后端服务这些都不直接暴露公网,要访问就走 Nginx 反向代理或 SSH 隧道。
总结
防火墙不难,难的是每次改完都想着"哪些门是开的"。定期跑一次 --list-all 检查,心里就有数了。