CentOS中的Firewalld:全面介绍与实战应用

CentOS中的Firewalld:全面介绍与实战应用

一、引言

CentOS操作系统中的防火墙管理工具经历了从iptables到firewalld的演变。这一变迁使得防火墙管理更加灵活和动态,有助于系统管理员更好地理解和使用当前的防火墙管理工具。本文将全面介绍firewalld的基本概念、安装与配置方法,以及实战应用,旨在帮助读者更好地保护CentOS系统的安全。

二、Firewalld基础概念
1. 什么是Firewalld

Firewalld是一个动态管理防火墙的守护进程,提供基于区域的网络流量管理。它是在CentOS 7及以后版本中引入的,旨在简化防火墙管理,提供更灵活和动态的控制。

2. Firewalld的特性
  • 动态管理:支持在不中断现有连接的情况下动态更改规则。
  • 区域概念:基于信任级别定义不同的区域,每个区域有不同的规则。
  • 服务管理:可以通过服务名称而不是端口号来配置规则。
  • 接口绑定:可以将网络接口绑定到特定的区域。
  • 丰富的接口:提供命令行工具firewall-cmd和图形界面工具(如firewall-config)进行管理。
3. Firewalld与iptables的区别
  • 设计理念和管理方式

    • iptables:使用静态规则集,所有规则在启动时加载到内核并在运行时保持不变。任何更改都需要重新应用整个规则集,这可能导致短暂的网络中断。
    • firewalld:支持动态添加、修改和删除规则,而无需重启防火墙服务或重新应用整个规则集,因此不会中断现有连接。
  • 使用方式

    • iptables:通过命令行界面手动配置规则,每条规则需要单独添加和管理。
    • firewalld:提供命令行工具firewall-cmd和图形界面工具firewall-config,方便用户管理防火墙。
  • 规则管理和灵活性

    • iptables:使用链(chain)和表(table)的概念,分别为filter、nat、mangle和raw表,每个表包含多个链,如INPUT、OUTPUT、FORWARD等。
    • firewalld:引入区域(zone)的概念,每个区域表示一组防火墙规则,可以根据网络接口或源地址分配到不同的区域。
  • 性能和适用场景

    • iptables:直接操作内核的netfilter框架,性能较高,适合高流量环境。适用于单个节点或简单网络环境的防火墙管理。
    • firewalld:适应现代动态网络环境,特别是云计算和虚拟化环境,提供更好的灵活性和易用性。适合需要综合管理多个网络接口和复杂网络配置的场景。
三、安装与配置Firewalld
1. Firewalld的安装(对于未预装的系统)

首先,确保系统的软件包是最新的。运行以下命令更新系统:

bash 复制代码
sudo yum update -y

然后,使用yum包管理器安装firewalld:

bash 复制代码
sudo yum install firewalld -y

安装完成后,启动firewalld服务并设置开机自启动:

bash 复制代码
sudo systemctl start firewalld
sudo systemctl enable firewalld

最后,验证firewalld状态,确保firewalld正常运行:

bash 复制代码
sudo systemctl status firewalld

如果firewalld正在运行,应该会看到类似以下的输出:

bash 复制代码
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2024-11-07 12:34:56 UTC; 5min ago
2. Firewalld的区域(Zones)管理
  • 区域的概念与作用

    Firewalld将所有的网络数据流量划分为多个区域,从而简化防火墙管理。根据数据包的源IP地址或传入网络接口等条件,将数据流量转入相应区域的防火墙规则。

  • 如何查看当前区域设置

    使用以下命令查看当前区域设置:

    bash 复制代码
    sudo firewall-cmd --get-active-zones
  • 更改默认区域与接口绑定

    使用以下命令将网络接口绑定到特定区域:

    bash 复制代码
    sudo firewall-cmd --zone=trusted --change-interface=eth0
    sudo firewall-cmd --reload
四、Firewalld的常见命令与实战应用
1. 常见命令
  • 查看firewalld服务状态

    bash 复制代码
    sudo firewall-cmd --state
  • 查看所有区域

    bash 复制代码
    sudo firewall-cmd --get-zones
  • 查看指定区域的规则

    bash 复制代码
    sudo firewall-cmd --zone=public --list-all
  • 开放端口

    bash 复制代码
    sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
    sudo firewall-cmd --reload
  • 添加服务

    bash 复制代码
    sudo firewall-cmd --zone=public --add-service=http --permanent
    sudo firewall-cmd --reload
  • 删除端口/服务

    bash 复制代码
    sudo firewall-cmd --zone=public --remove-port=80/tcp --permanent
    sudo firewall-cmd --zone=public --remove-service=http --permanent
    sudo firewall-cmd --reload
2. 实战应用
  • 开放SSH访问(端口22)

    bash 复制代码
    sudo firewall-cmd --zone=public --add-port=22/tcp --permanent
    sudo firewall-cmd --reload
  • 开放HTTP和HTTPS服务

    bash 复制代码
    sudo firewall-cmd --zone=public --add-service=http --permanent
    sudo firewall-cmd --zone=public --add-service=https --permanent
    sudo firewall-cmd --reload
  • 将网络接口从默认的public区域移动到trusted区域

    bash 复制代码
    sudo firewall-cmd --zone=trusted --change-interface=eth0
    sudo firewall-cmd --reload
  • 禁止Ping请求

    bash 复制代码
    sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" protocol="icmp" icmp-type="echo-request" drop' --permanent
    sudo firewall-cmd --reload
  • 允许特定IP访问SSH端口

    bash 复制代码
    sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="22" accept' --permanent
    sudo firewall-cmd --reload
3. Firewalld配置文件路径

Firewalld的配置文件位于/etc/firewalld/目录下,其中主要的配置文件有:

  • firewalld.conf:Firewalld的主要配置文件。
  • zones:每个区域的配置文件都在这个目录下,例如public.xml, internal.xml等。
  • services:包含每个服务的XML文件,例如http.xml, ssh.xml等。

通过修改这些配置文件,可以自定义Firewalld的行为,但记得在修改后重新加载防火墙配置。

五、Firewalld的预定义区域说明

Firewalld提供了多个预定义区域,每个区域都有不同的安全策略:

  • trusted(信任区域):可接收所有的网络连接。
  • public(公共区域):除非与传出流量相关,或与ssh或dhcpv6-client预定义服务匹配,否则拒绝流量传入。
  • work(工作区域):用于工作区,除非与传出流量相关,或与ssh、ipp-client、dhcpv6-client预定义服务匹配,否则拒绝流量传入。
  • home(家庭区域):用于家庭网络,除非与传出流量相关,或与ssh、ipp-client、mdns、samba-client、dhcpv6-client预定义服务匹配,否则拒绝流量传入。
  • internal(内部区域):用于内部网络,除非与传出流量相关,或与ssh、ipp-client、mdns、samba-client、dhcpv6-client预定义服务匹配,否则拒绝流量传入。
  • external(外部区域):除非与传出流量相关,或与ssh预定义服务匹配,否则拒绝流量传入。
  • dmz(隔离区域也称为非军事化区域):除非和传出的流量相关,或与ssh预定义服务匹配,否则拒绝流量传入。
  • block(限制区域):除非与传出流量相关,否则拒绝所有传入流量。
  • drop(丢弃区域):除非与传出流量相关,否则丢弃所有传入流量,并且不产生包含ICMP的错误响应。
六、总结

Firewalld是CentOS系统中一个强大的防火墙管理工具,通过理解其基本概念和掌握常见命令,可以更好地利用其功能来提高系统的安全性。Firewalld的动态管理、区域概念、服务管理以及丰富的接口使得防火墙管理更加灵活和高效。定期更新和维护防火墙规则是确保网络安全的重要部分,希望本文能帮助读者更好地配置和管理CentOS系统中的Firewalld防火墙。

相关推荐
PieroPc17 分钟前
Python 写的 智慧记 进销存 辅助 程序 导入导出 excel 可打印
开发语言·python·excel
watermelonoops1 小时前
Deepin和Windows传文件(Xftp,WinSCP)
linux·ssh·deepin·winscp·xftp
疯狂飙车的蜗牛2 小时前
从零玩转CanMV-K230(4)-小核Linux驱动开发参考
linux·运维·驱动开发
梧桐树04294 小时前
python常用内建模块:collections
python
Dream_Snowar4 小时前
速通Python 第三节
开发语言·python
远游客07134 小时前
centos stream 8下载安装遇到的坑
linux·服务器·centos
马甲是掉不了一点的<.<4 小时前
本地电脑使用命令行上传文件至远程服务器
linux·scp·cmd·远程文件上传
jingyu飞鸟4 小时前
centos-stream9系统安装docker
linux·docker·centos
超爱吃士力架5 小时前
邀请逻辑
java·linux·后端
蓝天星空6 小时前
Python调用open ai接口
人工智能·python