帮助中心 >  技术知识库 >  云服务器 >  服务器教程 >  Linux防火墙配置与管理:firewalld使用详解

Linux防火墙配置与管理:firewalld使用详解

2025-12-18 16:42:36 155

Linux防火墙配置与管理:firewalld使用详解

在云计算和服务器运维中,防火墙是保护系统安全的第一道防线。Linux系统提供了多种防火墙管理工具,其中firewalld是Red Hat系发行版(如CentOS、RHEL、Fedora)默认的防火墙管理工具,相比传统的iptables提供了更友好、动态的配置方式。本文将详细介绍firewalld的基本概念、常用操作和实际配置示例。

firewalld基本概念

firewalld采用zone(区域)和service(服务)的概念来管理防火墙规则:

· Zone:定义信任级别,如public(公共区域)、trusted(信任区域)等

· Service:预定义的应用程序规则集,如http、https、ssh等

· 运行时配置:临时生效,重启后丢失

· 永久配置:写入配置文件,永久生效

1. 基本管理命令

查看firewalld状态

# 查看firewalld运行状态

sudo systemctl status firewalld

 

# 启动firewalld

sudo systemctl start firewalld

 

# 停止firewalld

sudo systemctl stop firewalld

 

# 设置开机自启

sudo systemctl enable firewalld

 

# 禁止开机自启

sudo systemctl disable firewalld

查看防火墙信息

# 查看默认区域

sudo firewall-cmd --get-default-zone

 

# 查看所有可用区域

sudo firewall-cmd --get-zones

 

# 查看当前区域配置

sudo firewall-cmd --list-all

 

# 查看所有区域配置

sudo firewall-cmd --list-all-zones

2. 常用配置操作

添加和移除服务

# 添加服务到当前区域(运行时)

sudo firewall-cmd --add-service=http

 

# 永久添加服务

sudo firewall-cmd --add-service=http --permanent

 

# 从当前区域移除服务

sudo firewall-cmd --remove-service=http

 

# 永久移除服务

sudo firewall-cmd --remove-service=http --permanent

 

# 重载配置(应用永久规则)

sudo firewall-cmd --reload

开放和关闭端口

# 开放TCP端口(运行时)

sudo firewall-cmd --add-port=8080/tcp

 

# 永久开放端口

sudo firewall-cmd --add-port=8080/tcp --permanent

 

# 开放UDP端口

sudo firewall-cmd --add-port=53/udp

 

# 关闭端口

sudo firewall-cmd --remove-port=8080/tcp

sudo firewall-cmd --remove-port=8080/tcp --permanent

设置默认区域

# 查看当前默认区域

sudo firewall-cmd --get-default-zone

 

# 设置默认区域为public

sudo firewall-cmd --set-default-zone=public

 

# 查看指定网卡的区域

sudo firewall-cmd --get-zone-of-interface=eth0

 

# 将网卡分配到指定区域

sudo firewall-cmd --zone=public --add-interface=eth0

sudo firewall-cmd --zone=public --change-interface=eth0

3. 实际配置示例

示例1:配置Web服务器防火墙

假设需要配置一台运行Nginx的Web服务器,开放HTTP(80)和HTTPS(443)端口:

# 1. 查看当前状态

sudo firewall-cmd --state

 

# 2. 添加http和https服务

sudo firewall-cmd --add-service=http --permanent

sudo firewall-cmd --add-service=https --permanent

 

# 3. 如果使用非标准端口,如8080

sudo firewall-cmd --add-port=8080/tcp --permanent

 

# 4. 限制SSH访问只允许特定IP

# 先移除所有SSH访问

sudo firewall-cmd --remove-service=ssh --permanent

# 添加只允许192.168.1.0/24网段SSH访问

sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept' --permanent

 

# 5. 应用配置

sudo firewall-cmd --reload

 

# 6. 验证配置

sudo firewall-cmd --list-all

示例2:配置数据库服务器

对于MySQL数据库服务器,通常只需要开放数据库端口给应用服务器:

# 1. 移除不需要的服务

sudo firewall-cmd --remove-service=ssh --permanent

sudo firewall-cmd --remove-service=http --permanent

 

# 2. 开放MySQL端口(默认3306)

sudo firewall-cmd --add-port=3306/tcp --permanent

 

# 3. 限制只允许特定IP访问数据库

sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port port="3306" protocol="tcp" accept' --permanent

sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.101" port port="3306" protocol="tcp" accept' --permanent

 

# 4. 应用配置

sudo firewall-cmd --reload

4. 高级配置技巧

使用富规则(Rich Rules)

富规则提供更细粒度的控制:

# 允许特定IP访问特定端口

sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.50" port port="22" protocol="tcp" accept' --permanent

 

# 拒绝特定IP访问

sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="10.0.0.0/8" drop' --permanent

 

# 设置端口转发

sudo firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080 --permanent

创建自定义区域

# 创建新区域

sudo firewall-cmd --new-zone=webserver --permanent

 

# 为新区域添加服务

sudo firewall-cmd --zone=webserver --add-service=http --permanent

sudo firewall-cmd --zone=webserver --add-service=https --permanent

sudo firewall-cmd --zone=webserver --add-service=ssh --permanent

 

# 添加网卡到新区域

sudo firewall-cmd --zone=webserver --add-interface=eth1 --permanent

 

# 应用配置

sudo firewall-cmd --reload

 


提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题:
XML 地图