firewalld 配置

教学目标

  • 掌握 firewalld 的基本概念和工作原理
  • 熟悉 firewalld 的命令语法和配置方法
  • 学会管理 firewalld 的区域和服务
  • 能够应用 firewalld 解决实际网络安全问题
  • 了解 firewalld 与 iptables 的区别和联系

主要知识点

1. firewalld 基本概念

  • firewalld:Linux 系统中的动态防火墙管理器,支持网络区域概念
  • 区域(Zones):预定义的网络环境,每个区域有不同的安全级别
    • drop:最低安全级别,丢弃所有入站流量
    • block:阻止所有入站流量,返回错误信息
    • public:默认区域,只允许选定的服务
    • external:用于外部网络,启用 NAT
    • internal:用于内部网络,较高安全级别
    • dmz:用于非军事区,有限访问内部网络
    • work:用于工作网络,信任网络中的大多数主机
    • home:用于家庭网络,信任网络中的所有主机
    • trusted:最高安全级别,允许所有流量
  • 服务(Services):预定义的网络服务,包含相关的端口和协议
  • 规则(Rules):定义如何处理网络流量的规则
  • 运行时配置:临时配置,重启后失效
  • 永久配置:持久化配置,重启后仍然有效

2. firewalld 命令语法

# 基本命令格式
firewall-cmd [选项]

# 常用选项
--state:查看防火墙状态
--get-zones:查看所有可用区域
--get-default-zone:查看默认区域
--set-default-zone=ZONE:设置默认区域
--get-active-zones:查看当前激活的区域
--zone=ZONE:指定操作的区域
--add-service=SERVICE:添加服务
--remove-service=SERVICE:移除服务
--add-port=PORT/PROTOCOL:添加端口
--remove-port=PORT/PROTOCOL:移除端口
--add-rich-rule='RULE':添加富规则
--remove-rich-rule='RULE':移除富规则
--reload:重新加载配置
--runtime-to-permanent:将运行时配置保存为永久配置
--permanent:操作永久配置

3. firewalld 区域管理

  • 查看区域

    firewall-cmd --get-zones
    firewall-cmd --get-default-zone
    firewall-cmd --get-active-zones
  • 设置默认区域

    firewall-cmd --set-default-zone=public
  • 将接口分配到区域

    # 运行时配置
    firewall-cmd --zone=public --add-interface=eth0
    
    # 永久配置
    firewall-cmd --permanent --zone=public --add-interface=eth0
    firewall-cmd --reload

4. firewalld 服务管理

  • 查看服务

    firewall-cmd --get-services
    firewall-cmd --zone=public --list-services
  • 添加服务

    # 运行时配置
    firewall-cmd --zone=public --add-service=ssh
    firewall-cmd --zone=public --add-service=http
    firewall-cmd --zone=public --add-service=https
    
    # 永久配置
    firewall-cmd --permanent --zone=public --add-service=ssh
    firewall-cmd --permanent --zone=public --add-service=http
    firewall-cmd --permanent --zone=public --add-service=https
    firewall-cmd --reload
  • 移除服务

    # 运行时配置
    firewall-cmd --zone=public --remove-service=ssh
    
    # 永久配置
    firewall-cmd --permanent --zone=public --remove-service=ssh
    firewall-cmd --reload

5. firewalld 端口管理

  • 添加端口

    # 运行时配置
    firewall-cmd --zone=public --add-port=8080/tcp
    firewall-cmd --zone=public --add-port=8080-8090/tcp
    
    # 永久配置
    firewall-cmd --permanent --zone=public --add-port=8080/tcp
    firewall-cmd --permanent --zone=public --add-port=8080-8090/tcp
    firewall-cmd --reload
  • 移除端口

    # 运行时配置
    firewall-cmd --zone=public --remove-port=8080/tcp
    
    # 永久配置
    firewall-cmd --permanent --zone=public --remove-port=8080/tcp
    firewall-cmd --reload

6. firewalld 富规则

富规则:提供更灵活的规则配置,支持源地址、目标地址、端口、协议等多种条件

  • 添加富规则

    # 允许特定 IP 访问 SSH
    firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" service name="ssh" accept'
    
    # 拒绝特定 IP 访问 HTTP
    firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.200" service name="http" reject'
    
    # 限制特定 IP 的访问速率
    firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="http" limit value="20/m" accept'
  • 查看富规则

    firewall-cmd --zone=public --list-rich-rules

7. firewalld 配置管理

  • 运行时配置与永久配置

    # 运行时配置(临时)
    firewall-cmd --zone=public --add-service=http
    
    # 永久配置
    firewall-cmd --permanent --zone=public --add-service=http
    firewall-cmd --reload
    
    # 将运行时配置保存为永久配置
    firewall-cmd --runtime-to-permanent
  • 配置文件位置

    • 服务配置:/usr/lib/firewalld/services/
    • 区域配置:/usr/lib/firewalld/zones/
    • 永久配置:/etc/firewalld/

8. firewalld 与 iptables 的区别

特性 firewalld iptables
管理方式 动态管理,无需重启 静态管理,需要重启
配置方式 区域和服务为中心 规则为中心
配置文件 XML 格式 文本格式
依赖关系 基于 iptables/nftables 直接操作 Netfilter
易用性 更高,适合新手 更灵活,适合高级用户

实用案例分析

案例 1:基本防火墙配置

场景:配置一个基本的防火墙,只允许 SSH、HTTP 和 HTTPS 服务。

配置步骤

# 查看当前状态
firewall-cmd --state

# 设置默认区域为 public
firewall-cmd --set-default-zone=public

# 添加所需服务(运行时配置)
firewall-cmd --zone=public --add-service=ssh
firewall-cmd --zone=public --add-service=http
firewall-cmd --zone=public --add-service=https

# 保存为永久配置
firewall-cmd --runtime-to-permanent

# 验证配置
firewall-cmd --zone=public --list-services

案例 2:允许特定 IP 访问

场景:只允许特定 IP 地址访问服务器的 SSH 服务,拒绝其他所有 IP。

配置步骤

# 移除默认的 SSH 服务
firewall-cmd --permanent --zone=public --remove-service=ssh

# 添加富规则,只允许特定 IP 访问 SSH
firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" service name="ssh" accept'
firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.101" service name="ssh" accept'

# 重新加载配置
firewall-cmd --reload

# 验证配置
firewall-cmd --zone=public --list-rich-rules

案例 3:配置端口转发

场景:将外部访问服务器 8080 端口的流量转发到内部 192.168.1.100 的 80 端口。

配置步骤

# 启用 IP 转发
firewall-cmd --permanent --add-masquerade

# 添加端口转发规则
firewall-cmd --permanent --add-forward-port=port=8080:proto=tcp:toaddr=192.168.1.100:toport=80

# 重新加载配置
firewall-cmd --reload

# 验证配置
firewall-cmd --list-all

案例 4:配置富规则实现高级访问控制

场景:配置一个规则,允许来自 192.168.1.0/24 网络的主机访问 HTTP 服务,但限制速率为每分钟最多 20 个连接。

配置步骤

# 添加富规则
firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="http" limit value="20/m" accept'

# 重新加载配置
firewall-cmd --reload

# 验证配置
firewall-cmd --zone=public --list-rich-rules

课后练习

  1. 基本配置练习

    • 查看当前防火墙状态和默认区域
    • 设置默认区域为 public
    • 添加 SSH、HTTP 和 HTTPS 服务
    • 验证配置是否生效
  2. 区域管理练习

    • 创建一个新的区域 testzone
    • 将 eth0 接口分配到 testzone
    • 为 testzone 添加 FTP 服务
    • 验证配置
  3. 端口管理练习

    • 添加自定义端口 8888/tcp
    • 添加端口范围 9000-9010/tcp
    • 验证配置
    • 移除添加的端口
  4. 富规则练习

    • 配置只允许特定 IP 访问 SSH 服务
    • 配置拒绝特定 IP 访问 HTTP 服务
    • 配置速率限制规则
  5. 配置管理练习

    • 进行运行时配置更改
    • 将运行时配置保存为永久配置
    • 编辑配置文件,手动添加一个服务
    • 重新加载配置并验证
  6. 故障排除练习

    • 模拟一个场景:配置完 firewalld 后,SSH 无法连接
    • 分析并解决这个问题

总结

本章节详细介绍了 Linux 系统中 firewalld 防火墙的配置方法,包括:

  • firewalld 的基本概念和工作原理
  • firewalld 的命令语法和配置方法
  • 区域管理和服务管理
  • 端口配置和富规则配置
  • 运行时配置和永久配置的管理
  • firewalld 与 iptables 的区别
  • 实际应用场景的解决方案

通过学习本章节,您应该能够熟练使用 firewalld 配置和管理 Linux 系统的防火墙,保护服务器和网络的安全。firewalld 提供了更友好的用户界面和更灵活的配置方式,特别适合初学者使用。在实际应用中,建议根据具体的网络环境和安全需求,选择合适的防火墙工具和配置策略。

扩展阅读

« 上一篇 iptables 配置 下一篇 » nftables 配置