firewall-cmd (firewalld)防火墙管理

2025-04发布7次浏览

firewall-cmd (firewalld) 防火墙管理

一、什么是 firewalld?

firewalld 是一个用于动态管理防火墙的工具,它支持网络区域(zone)的概念,允许使用不同的策略来处理来自不同区域的流量。firewalld 默认使用 iptables 作为后端规则引擎,但提供了更简单的命令行接口和配置文件管理方式。

firewall-cmdfirewalld 的命令行工具,用于配置和管理防火墙规则。


二、firewalld 的主要特点

  1. 动态更新:无需重启服务即可实时应用更改。
  2. 区域(Zone)概念:根据网络环境定义不同的安全级别。
  3. 服务定义:可以轻松添加或移除预定义的服务(如 SSH、HTTP 等)。
  4. 支持 IPv4 和 IPv6:同时支持两种协议的规则管理。

三、常用命令及实践步骤

1. 检查 firewalld 服务状态

systemctl status firewalld

如果未运行,可以通过以下命令启动并设置开机自启:

systemctl start firewalld
systemctl enable firewalld

2. 查看当前活动区域

firewall-cmd --get-active-zones

3. 设置默认区域

每个连接都可以分配到一个区域,默认区域决定了新连接的默认规则。

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

4. 列出所有开放端口

firewall-cmd --list-ports

5. 打开端口

例如,打开 HTTP(80)和 HTTPS(443)端口:

firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --add-port=443/tcp --permanent
firewall-cmd --reload

注意:--permanent 参数表示永久生效,需配合 --reload 生效。

6. 关闭端口

firewall-cmd --remove-port=80/tcp --permanent
firewall-cmd --reload

7. 添加服务

firewalld 提供了预定义的服务(如 ssh、http、https 等),可以直接启用。

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

8. 移除服务

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

9. 查看所有服务

firewall-cmd --get-services

10. 列出当前规则

firewall-cmd --list-all

11. 临时规则

如果不加 --permanent 参数,规则仅在当前会话中有效,重启后失效。

firewall-cmd --add-port=22/tcp

12. 禁用 firewalld

如果需要完全禁用防火墙:

systemctl stop firewalld
systemctl disable firewalld

四、扩展知识

1. 区域(Zone)的作用

firewalld 使用区域来定义网络的安全级别。常见的区域包括:

  • public:公共网络,只允许最基本的通信。
  • home:家庭网络,信任其他设备。
  • work:工作网络,类似于家庭网络。
  • trusted:完全信任的网络,允许所有通信。
  • block:阻止所有传入连接。
  • drop:丢弃所有传入连接,不响应。

可以通过以下命令查看所有区域:

firewall-cmd --get-zones

2. 自定义服务

如果需要为特定应用程序创建服务规则,可以编辑 /etc/firewalld/services/ 目录下的 XML 文件。例如,创建一个名为 myapp 的服务:

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>MyApp</short>
  <description>A custom service for MyApp.</description>
  <port protocol="tcp" port="1234"/>
</service>

保存为 /etc/firewalld/services/myapp.xml,然后通过以下命令启用:

firewall-cmd --add-service=myapp --permanent
firewall-cmd --reload

3. 日志记录

firewalld 支持日志记录功能,可以通过以下命令启用:

firewall-cmd --set-log-denied=all

这将记录所有被拒绝的连接。


五、总结

firewalld 提供了一种灵活且易于管理的方式,帮助用户配置 Linux 系统的防火墙规则。通过 firewall-cmd 命令,可以快速实现端口开放、服务添加、区域管理等功能。