二十二、【Linux系统防火墙管理】firewalld命令详解

发布于:2025-07-29 ⋅ 阅读:(22) ⋅ 点赞:(0)

本章学习目标

了解学习Linux系统防火墙信息与firewalld命令使用

内容简介

防火墙核心功能

  1. 动态规则管理

    • 无需重启生效:规则修改后通过 --reload 重载即时生效,不中断现有连接
    • 双状态配置
      • 运行时规则:临时生效,重启后失效(不加 --permanent)。
      • 持久化规则:需 --permanent + --reload,重启后保留
  2. 区域隔离策略

    • 分层信任模型
      • public(默认):不信任公共网络,仅放行显式允许的服务。
      • trusted:完全信任指定 IP(如 --add-source=192.168.1.0/24)。
    • 接口绑定:将网卡分配到不同区域(如 --zone=home --change-interface=eth0),实现网络环境差异化策略
  3. 高级流量控制

    • 富规则 (Rich Rules)
      • 精准过滤:支持 IP/端口/协议组合(如仅允许某 IP 访问特定端口)。
      • 限速与审计limit value="2/s" 限制每秒连接数,log prefix="Blocked: " 记录拒绝事件 。
    • NAT 与端口转发
      • 依赖 --add-masquerade 启用 IP 伪装,实现端口转发或隐藏内网结构

防火墙工作流程

匹配
未匹配
首包
允许
拒绝
后续包
合法
非法
网络流量进入
基础包处理
解析帧头部/IP头
白名单/黑名单检查?
放行或阻断
会话表查询
状态检测
安全策略匹配
创建会话表项
丢弃并记录
基于会话表转发
应用层安全检测
内容安全检测
地址转换NAT
发送报文

操作演示

演示命令 功能描述 关键选项/参数
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  # 提升隐蔽性

故障排查流程

不通流量
检查接口安全域
启用Debug
分析策略匹配
补全规则

网站公告

今日签到

点亮在社区的每一天
去签到