firewalld
是一个用于动态管理防火墙的工具,它支持网络区域(zone)的概念,允许使用不同的策略来处理来自不同区域的流量。firewalld
默认使用 iptables
作为后端规则引擎,但提供了更简单的命令行接口和配置文件管理方式。
firewall-cmd
是 firewalld
的命令行工具,用于配置和管理防火墙规则。
systemctl status firewalld
如果未运行,可以通过以下命令启动并设置开机自启:
systemctl start firewalld
systemctl enable firewalld
firewall-cmd --get-active-zones
每个连接都可以分配到一个区域,默认区域决定了新连接的默认规则。
firewall-cmd --set-default-zone=public
firewall-cmd --list-ports
例如,打开 HTTP(80)和 HTTPS(443)端口:
firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --add-port=443/tcp --permanent
firewall-cmd --reload
注意:
--permanent
参数表示永久生效,需配合--reload
生效。
firewall-cmd --remove-port=80/tcp --permanent
firewall-cmd --reload
firewalld
提供了预定义的服务(如 ssh、http、https 等),可以直接启用。
firewall-cmd --add-service=http --permanent
firewall-cmd --reload
firewall-cmd --remove-service=http --permanent
firewall-cmd --reload
firewall-cmd --get-services
firewall-cmd --list-all
如果不加 --permanent
参数,规则仅在当前会话中有效,重启后失效。
firewall-cmd --add-port=22/tcp
如果需要完全禁用防火墙:
systemctl stop firewalld
systemctl disable firewalld
firewalld
使用区域来定义网络的安全级别。常见的区域包括:
可以通过以下命令查看所有区域:
firewall-cmd --get-zones
如果需要为特定应用程序创建服务规则,可以编辑 /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
firewalld
支持日志记录功能,可以通过以下命令启用:
firewall-cmd --set-log-denied=all
这将记录所有被拒绝的连接。
firewalld
提供了一种灵活且易于管理的方式,帮助用户配置 Linux 系统的防火墙规则。通过 firewall-cmd
命令,可以快速实现端口开放、服务添加、区域管理等功能。