深色模式
firewalld 实战
摘要:CentOS/RHEL 7+ 默认用 firewalld。本文演示如何查看当前 zone、临时与永久开放 80 端口、用 rich-rule 做更细控制,并避免「改完重启失效」。
适用环境
bash
# 需要 root,且系统使用 firewalld
sudo systemctl status firewalld --no-pager | head -3
which firewall-cmd1
2
3
2
3
操作步骤
1. 查看当前状态与默认 zone
bash
sudo firewall-cmd --state
sudo firewall-cmd --get-default-zone
sudo firewall-cmd --list-all1
2
3
2
3
2. 临时开放 80(重启丢失,先验证)
bash
sudo firewall-cmd --add-port=80/tcp
sudo firewall-cmd --list-ports1
2
2
3. 永久开放(真正生效需 --permanent + reload)
bash
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --reload
sudo firewall-cmd --list-ports --permanent1
2
3
2
3
4. 用 rich-rule 限制来源 IP(更安全)
bash
# 只允许 10.0.0.0/24 访问 80
sudo firewall-cmd --permanent --add-rich-rule='
rule family="ipv4" source address="10.0.0.0/24" port protocol="tcp" port="80" accept'
sudo firewall-cmd --reload1
2
3
4
2
3
4
5. 移除规则
bash
sudo firewall-cmd --permanent --remove-port=80/tcp
sudo firewall-cmd --reload1
2
2
验证
bash
# 确认 80 在 permanent 配置中已开放
sudo firewall-cmd --list-ports --permanent | grep 80
# 从外部机器测(本机回环不受防火墙限制,必须外部测)
nc -vz <本机IP> 80 # 或用另一台的 curl1
2
3
4
2
3
4
常见坑
WARNING
--add-port 不带 --permanent 只是运行时生效,重启 firewalld/机器后丢失。上线务必两条都加(或先验证再补 --permanent + reload)。
DANGER
别在远程 SSH 会话里执行 firewall-cmd --reload 或改动 SSH 端口规则时不小心把自己锁在外面。改前确认 22 端口仍在允许列表,或保留一个带外管理通道。