firewalld 详解

概述

firewalld 是一款在 Linux 系统上运行的动态防火墙管理工具,它通过使用 iptablesnftables 来管理网络流量。firewalld 提供了一个动态的防火墙管理功能,可以在不重启防火墙的情况下进行规则的添加、删除和修改。这使得它在需要频繁更新规则的环境中非常有用。

firewalld 结构图

+----------------------+         +----------------------+
|  firewall-config     |         |  firewall-cmd        |
+----------+-----------+         +----------+-----------+
           |                                |
           v                                v
+----------------------+         +----------------------+
|    firewalld         |         |    firewalld         |
|  daemon & service    |         |  daemon & service    |
+----------+-----------+         +----------+-----------+
           |                                |
           v                                v
+----------------------------+   +----------------------------+
|      iptables/nftables     |   |      iptables/nftables     |
+----------------------------+   +----------------------------+

图中展示了 firewalld 与其他配置工具及底层 iptables/nftables 的关系。

firewalld 区域与服务

firewalld 使用区域(zones)和服务(services)来管理防火墙规则。

  1. 区域:表示一组防火墙设置,每个网络接口或连接可以分配到一个区域。常见区域包括:

    • drop:所有进出流量被丢弃,没有响应。
    • block:类似于 drop,但进出流量被拒绝,并返回 ICMP 消息。
    • public:不可信网络,允许选择性允许的入站连接。
    • dmz:允许对指定公共服务器的有限访问。
    • internal:可信内部网络,允许更多的服务。
    • trusted:信任所有流量。
  2. 服务:定义了一组端口和协议,用于允许或拒绝特定的网络服务。例如 http, https, ssh 等。

firewalld 基本命令

  1. 查看当前区域

    # firewall-cmd --get-active-zones
  2. 为接口分配区域

    # firewall-cmd --zone=public --change-interface=eth0
  3. 允许服务

    # firewall-cmd --zone=public --add-service=http
    # firewall-cmd --zone=public --add-service=https
  4. 允许端口

    # firewall-cmd --zone=public --add-port=8080/tcp
  5. 永久生效

    # firewall-cmd --runtime-to-permanent

firewalld 高级配置

  1. 添加自定义服务

    • 创建一个自定义服务文件,例如 myservice.xml,内容如下:

      <?xml version="1.0" encoding="utf-8"?>
      <service>
        <short>MyService</short>
        <description>My custom service</description>
        <port protocol="tcp" port="12345"/>
      </service>
    • 将文件放置在 /etc/firewalld/services/ 目录下。
    • 重新加载 firewalld 配置:

      # firewall-cmd --reload
  2. 设置默认区域

    # firewall-cmd --set-default-zone=internal

配置示例

  1. 查看所有区域及其设置

    # firewall-cmd --list-all-zones
  2. 添加规则以允许指定IP地址的访问

    # firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" accept'
  3. 移除规则

    # firewall-cmd --zone=public --remove-service=ftp
  4. 设置接口为信任区域

    # firewall-cmd --zone=trusted --change-interface=eth1
  5. 立即应用并保存所有更改

    # firewall-cmd --runtime-to-permanent

本文由mdnice多平台发布


逼格高的汤圆
10 声望2 粉丝