firewalld 详解
概述
firewalld
是一款在 Linux 系统上运行的动态防火墙管理工具,它通过使用 iptables
或 nftables
来管理网络流量。firewalld
提供了一个动态的防火墙管理功能,可以在不重启防火墙的情况下进行规则的添加、删除和修改。这使得它在需要频繁更新规则的环境中非常有用。
firewalld 结构图
+----------------------+ +----------------------+
| firewall-config | | firewall-cmd |
+----------+-----------+ +----------+-----------+
| |
v v
+----------------------+ +----------------------+
| firewalld | | firewalld |
| daemon & service | | daemon & service |
+----------+-----------+ +----------+-----------+
| |
v v
+----------------------------+ +----------------------------+
| iptables/nftables | | iptables/nftables |
+----------------------------+ +----------------------------+
图中展示了 firewalld
与其他配置工具及底层 iptables/nftables
的关系。
firewalld 区域与服务
firewalld
使用区域(zones)和服务(services)来管理防火墙规则。
区域:表示一组防火墙设置,每个网络接口或连接可以分配到一个区域。常见区域包括:
drop
:所有进出流量被丢弃,没有响应。block
:类似于drop
,但进出流量被拒绝,并返回ICMP
消息。public
:不可信网络,允许选择性允许的入站连接。dmz
:允许对指定公共服务器的有限访问。internal
:可信内部网络,允许更多的服务。trusted
:信任所有流量。
- 服务:定义了一组端口和协议,用于允许或拒绝特定的网络服务。例如
http
,https
,ssh
等。
firewalld 基本命令
查看当前区域
# firewall-cmd --get-active-zones
为接口分配区域
# firewall-cmd --zone=public --change-interface=eth0
允许服务
# firewall-cmd --zone=public --add-service=http # firewall-cmd --zone=public --add-service=https
允许端口
# firewall-cmd --zone=public --add-port=8080/tcp
永久生效
# firewall-cmd --runtime-to-permanent
firewalld 高级配置
添加自定义服务
创建一个自定义服务文件,例如
myservice.xml
,内容如下:<?xml version="1.0" encoding="utf-8"?> <service> <short>MyService</short> <description>My custom service</description> <port protocol="tcp" port="12345"/> </service>
- 将文件放置在
/etc/firewalld/services/
目录下。 重新加载
firewalld
配置:# firewall-cmd --reload
设置默认区域
# firewall-cmd --set-default-zone=internal
配置示例
查看所有区域及其设置
# firewall-cmd --list-all-zones
添加规则以允许指定IP地址的访问
# firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" accept'
移除规则
# firewall-cmd --zone=public --remove-service=ftp
设置接口为信任区域
# firewall-cmd --zone=trusted --change-interface=eth1
立即应用并保存所有更改
# firewall-cmd --runtime-to-permanent
本文由mdnice多平台发布
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。