二十二、【Linux系统防火墙管理】firewalld命令详解
firewalld命令详解
- 本章学习目标
- 内容简介
- 防火墙核心功能
- 防火墙工作流程
- 操作演示
- 启停防火墙服务
- 区域管理
- 开放http服务
- 自定义端口开放
- 临时开放端口
- IP白名单
- 端口转发
- 拒绝ICMP响应(禁ping)
- 故障排查流程
本章学习目标
了解学习Linux系统防火墙信息与firewalld命令使用
内容简介
防火墙核心功能
-
动态规则管理
- 无需重启生效:规则修改后通过
--reload
重载即时生效,不中断现有连接 - 双状态配置:
运行时规则
:临时生效,重启后失效(不加--permanent
)。持久化规则
:需--permanent
+--reload
,重启后保留
- 无需重启生效:规则修改后通过
-
区域隔离策略
- 分层信任模型
public
(默认):不信任公共网络,仅放行显式允许的服务。trusted
:完全信任指定 IP(如--add-source=192.168.1.0/24
)。
- 接口绑定:将网卡分配到不同区域(如
--zone=home --change-interface=eth0
),实现网络环境差异化策略
- 分层信任模型
-
高级流量控制
- 富规则 (Rich Rules)
- 精准过滤:支持 IP/端口/协议组合(如仅允许某 IP 访问特定端口)。
- 限速与审计:
limit value="2/s"
限制每秒连接数,log prefix="Blocked: "
记录拒绝事件 。
- NAT 与端口转发:
- 依赖
--add-masquerade
启用 IP 伪装,实现端口转发或隐藏内网结构
- 依赖
- 富规则 (Rich Rules)
防火墙工作流程
操作演示
演示命令 | 功能描述 | 关键选项/参数 |
---|---|---|
systemctl start firewalld | 启动防火墙服务 | start 立即运行 |
firewall-cmd --get-default-zone | 查看默认区域 | 无参数 |
firewall-cmd --zone=public --add-service=http --permanent | 永久允许服务 | --add-service 服务名 |
firewall-cmd --zone=public --add-port=8080/tcp --permanent | 永久开放端口 | --add-port 端口/协议 |
firewall-cmd --list-all | 列出所有规则 | --list-all 完整配置 |
firewall-cmd --add-rich-rule='rule...' --permanent | 添加 IP 白名单 | --add-rich-rule 复杂规则 |
firewall-cmd --add-forward-port=port=80:... | 端口转发 | --add-forward-port 转发目标 |
启停防火墙服务
# 启动并设置开机自启
[root@localhost ~]# systemctl start firewalld
[root@localhost ~]# systemctl enable firewalld
Created symlink /etc/systemd/system/multi-user.target.wants/firewalld.service → /usr/lib/systemd/system/firewalld.service.# 查看运行状态
[root@localhost ~]# firewall-cmd --state
running # 防火墙已运行
区域管理
# 查看默认区域
[root@localhost ~]# firewall-cmd --get-default-zone
public # 默认区域为 public# 切换默认区域为 home
[root@localhost ~]# firewall-cmd --set-default-zone=home
success # 生产环境慎用(home 区域规则较宽松)
开放http服务
# 永久允许 HTTP(80/TCP)
[root@localhost ~]# firewall-cmd --zone=public --add-service=http --permanent
success
[root@localhost ~]# firewall-cmd --reload # 重载生效
自定义端口开放
# 永久开放 TCP 端口 8080
[root@localhost ~]# firewall-cmd --zone=public --add-port=8080/tcp --permanent
success
[root@localhost ~]# firewall-cmd --reload# 查看当前规则
[root@localhost ~]# firewall-cmd --list-all
public (active)services: dhcpv6-client http ssh # 已放行服务ports: 8080/tcp # 已开放端口
临时开放端口
# 临时开放 9999/TCP(重启失效)
[root@localhost ~]# firewall-cmd --add-port=9999/tcp
success # 无需重载,立即生效
IP白名单
# 仅允许 192.168.1.0/24 访问 SSH
[root@localhost ~]# firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept' --permanent
success
[root@localhost ~]# firewall-cmd --reload # 阻断非白名单 IP 的 SSH 访问
端口转发
# 将本机 80 转发至 192.168.0.100:8080
[root@localhost ~]# firewall-cmd --add-masquerade --permanent # 开启 IP 伪装(NAT)
success
[root@localhost ~]# firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.0.100 --permanent
success
[root@localhost ~]# firewall-cmd --reload # 实现内网服务隐藏
拒绝ICMP响应(禁ping)
# 禁止公网 Ping 探测
[root@localhost ~]# firewall-cmd --zone=public --add-icmp-block=echo-reply --permanent
success
[root@localhost ~]# firewall-cmd --reload # 提升隐蔽性