Linux 下的防火墙管理工具

485 阅读5分钟

Firewalld:Linux 下的防火墙管理工具

Firewalld 是一个针对 Linux 系统设计的动态防火墙管理工具。它提供了简单的方式来配置和管理系统防火墙,使得管理员能够轻松地定义和调整防火墙规则以保护系统免受网络攻击。

为什么使用 Firewalld?

  • 动态更新: Firewalld 支持动态更新防火墙规则,无需重新加载整个防火墙配置文件。这意味着您可以即时地添加、修改或删除规则,而不会中断网络连接。

  • 基于区域的规则: Firewalld 将网络连接划分为不同的区域,每个区域都有一组预定义的规则。这样的设计使得管理员能够根据网络连接的安全级别划分区域,并灵活地应用不同的规则。

  • 简单易用: Firewalld 提供了简单的命令行界面和图形化界面,使得管理员能够轻松地配置和管理防火墙。它的命令结构和语法也相对直观,易于理解和使用。

Firewalld 的基本概念

  • 区域(Zone)
    Firewalld 将网络连接划分为不同的区域,每个区域都有一组预定义的规则。常见的区域包括公共区域、私有区域和受信任的区域等。管理员可以根据实际需求将网络接口分配到相应的区域中,并为每个区域指定适当的安全级别和规则集。

  • 服务(Service)
    服务是一组预定义的防火墙规则,用于允许或拒绝特定类型的网络连接。例如,HTTP 服务、SSH 服务、FTP 服务等。通过定义服务,管理员可以轻松地允许或限制特定类型的网络流量,以确保系统的安全性。

  • 端口(Port)
    端口是网络通信的端点,每个端口对应着不同类型的网络服务或协议。Firewalld 允许管理员控制哪些端口可以打开用于网络通信,从而有效地限制了系统对外部网络的暴露和攻击面。

安装与使用 Firewalld

  • 安装
    在大多数基于 Red HatLinux 发行版(如 CentOSFedora)上,Firewalld 已经作为默认的防火墙管理工具安装。如果您的系统上尚未安装 Firewalld,您可以使用包管理器来安装它。

    CentOS/RHEL 上,您可以使用以下命令安装 Firewalld:

    sudo yum install firewalld
    

    Ubuntu/Debian 上,您可以使用以下命令安装 Firewalld:

    apt-get install firewalld
    
  • 启动和配置 Firewalld
    一旦安装了 Firewalld,您可以使用以下命令来启动它并设置开机启动:

    sudo systemctl start firewalld
    sudo systemctl enable firewalld
    
  • 查看配置数据:

    firewall-cmd --list-all
    
  • 添加暴露端口:

    firewall-cmd --add-port=8001/tcp [--permanent]     # 添加
    firewall-cmd --remove-port=8001/tcp [--permanent]  # 删除
    # 不加 `--permanent` 为临时暴露  加上`--permanent`是永久暴露,需要 reload 生效
    
  • 重加载配置:

    firewall-cmd --reload
    

Firewalld 可以进行端口转发

  • 先开启允许防火墙伪装 IP

    firewall-cmd --query-masquerade   # 检查是否允许伪装IP
    firewall-cmd --add-masquerade     # 允许防火墙伪装IP
    firewall-cmd --remove-masquerade  # 禁止防火墙伪装IP
    
  • 转发配置:

    firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080                       # 将80端口的流量转发至8080
    firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.1.0.1             # 将80端口的流量转发至192.168.0.1
    firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.0.1:toport=8080   # 将80端口的流量转发至192.168.0.1的8080端口
    
    firewall-cmd --remove-forward-port=port=80:proto=tcp:toport=8080                    # 删除配置
    

如果配置完以上规则后仍不生效,检查防火墙是否开启 80 端口
如果 80 端口已开启,仍无法转发,可能是由于内核参数文件 sysctl.conf 未配置 ip 转发功能

具体配置如下

  1. 打开 sysctl.conf 文件

    vim /etc/sysctl.conf
    
  2. 在文本内容中添加:

    net.ipv4.ip_forward = 1
    
  3. 保存文件后,输入以下命令生效

    sysctl -p
    

Firewalld 常用命令

  • 启动和停止 Firewalld
    • 启动 Firewalld: systemctl start firewalld
    • 停止 Firewalld: systemctl stop firewalld
    • 重启 Firewalld: systemctl restart firewalld
  • 查看服务状态
    • 查看 Firewalld 状态: systemctl status firewalld
  • 查看当前防火墙状态
    • 查看 Firewalld 状态: firewall-cmd --state
  • 查看和修改防火墙区域
    • 查看默认防火墙区域: firewall-cmd --get-default-zone
    • 查看活动的防火墙区域: firewall-cmd --get-active-zones
    • 将网络接口添加到指定的防火墙区域中: firewall-cmd --zone=<区域名> --change-interface=<网络接口>
  • 添加和移除防火墙规则
    • 添加指定服务的防火墙规则,并永久生效: firewall-cmd --zone=<区域名> --add-service=<服务名> --permanent
    • 移除指定服务的防火墙规则,并永久生效: firewall-cmd --zone=<区域名> --remove-service=<服务名> --permanent
    • 添加指定端口的防火墙规则,并永久生效: firewall-cmd --zone=<区域名> --add-port=<端口号/协议> --permanent
    • 移除指定端口的防火墙规则,并永久生效: firewall-cmd --zone=<区域名> --remove-port=<端口号/协议> --permanent
  • 重新加载防火墙配置
    • 重新加载 Firewalld 的配置文件,使更改生效: firewall-cmd --reload

结语

通过本文的介绍,您应该对 Firewalld 有了更深入的了解,包括其基本概念以及常用命令的使用。Firewalld 提供了一种简单而强大的方式来配置和管理 Linux 系统的防火墙,希望本文能够帮助您更好地保护您的系统安全。