码上问学问代码之理,学编程之道
教材同步›项目 12
教材同步 · 叶廷东《Linux 操作系统管理(第 2 版)》航空工业出版社 · “十四五”国家规划教材

项目12 防火墙 firewalld

firewalld 是服务器安全总闸:按区域管规则,放行端口与服务,富规则做精细控制,端口转发。

任务 12.1

firewalld 概述

动态防火墙,按『区域』管规则

firewalld 用区域(zone)把网络接口分组(如 public 公共、trusted 信任),规则分 runtime(临时)与 permanent(永久)。改 permanent 后必须 --reload 才生效。教材项目 12。

任务 12.2

区域与服务管理

放行端口与服务
12.2.1查看与设置区域
bash
firewall-cmd --get-default-zone
firewall-cmd --set-default-zone=public
firewall-cmd --get-active-zones
public (默认区域设为 public) public interfaces: ens33
12.2.2放行端口与服务
firewall-cmd★ 必会

Linux 服务器安全的总闸,务必会。

随身参数卡 · firewall-cmd 大全
查
  • --list-all 看当前区域全部规则
  • --list-ports / --list-services
  • --get-zones 列出所有区域
  • --query-port=80/tcp 是否放行
放行(务必 --permanent)
  • --add-port=80/tcp --permanent
  • --add-service=http --permanent
  • --add-service=https --permanent
  • --reload 重载使永久规则生效
  • --remove-port=80/tcp --permanent 撤销
bash
firewall-cmd --add-service=http --permanent
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-all
success success (已重载) public (active) services: ssh http ports: 8080/tcp
任务 12.3

富规则与排障

更精细的控制
12.3.1富规则 rich-rule

当『只允许某网段访问 ssh』这类细粒度需求时用富规则。语法较长但表达力强。

bash
firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.1.0/24 service name=ssh accept' --permanent
firewall-cmd --reload
(仅 192.168.1.0/24 可 ssh 登录)
12.3.2端口转发与排障

可用 --add-forward-port 做端口转发;连不上服务时,先 --list-all 确认端口已放行,再看服务是否监听、再看服务日志,最后才是网络本身。

bash
firewall-cmd --add-masquerade --permanent
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080 --permanent
firewall-cmd --reload
(开启 IP 伪装并转发 80→8080)
本项目与项目 7~11 配套使用:每个服务配好后都要回到 firewalld 放行对应 --add-service,否则客户端连不上。完整五步实战见 网络服务配置实战。

拓展训练

教材每项目末尾 · 上机可重做取最高分
1
把 firewalld 默认区域设为 public,再放行 http 与 8080/tcp,--reload 后用 --list-all 核对。
2
写一条富规则:只允许 192.168.1.0/24 网段 ssh 登录,其余拒绝。
3
把 80 端口转发到 8080(tomcat 常用),用 curl -I localhost 验证仍能访问。
4
故意删掉 http 服务的放行规则并 reload,从浏览器访问应失败;再补回规则,体会『防火墙是总闸』。

firewalld 改错不会立刻断连(runtime 不变),但忘了 --permanent + --reload,重启后规则就丢——这是最常见的『重启后连不上』原因。