firewalld 服务教程
1. 什么是 firewalld? 🤔
firewalld 是一款基于区域的动态防火墙管理工具,适用于 Linux 系统。它提供了比传统 iptables 更易用的界面,可以通过命令行或图形化工具配置。firewalld 默认基于 zones(区域)来管理网络流量,可以根据不同的信任级别和网络接口设置规则。🌐
特点 | 描述 |
---|---|
区域管理 | 使用区域(zones)来管理不同的网络接口。 |
动态管理 | 不需要重启服务即可应用配置,便于实时管理。 |
支持丰富的协议 | 支持 TCP、UDP、ICMP 等协议的配置。 |
2. 安装 firewalld 📥
2.1 安装 firewalld
在大多数 Linux 发行版中,firewalld 可能已经预装。如果没有,可以使用以下命令安装它 :
在 Ubuntu 或 Debian 系统上:
sudo apt update
sudo apt install firewalld
在 CentOS 或 RHEL 系统上:
sudo yum install firewalld
2.2 启动 firewalld 服务
安装完成后,启动 firewalld 服务:
sudo systemctl start firewalld
2.3 设置 firewalld 开机自启
为了确保 firewalld 在系统启动时自动启用,使用以下命令:
sudo systemctl enable firewalld
2.4 检查 firewalld 服务状态
检查 firewalld 是否正在运行:
sudo systemctl status firewalld
3. 配置 firewalld 防火墙 ⚙️
3.1 firewalld 区域(Zones)
firewalld 使用“区域”来表示不同网络接口的信任级别。每个区域可以拥有不同的规则,允许或拒绝某些类型的网络流量。默认情况下,firewalld 提供了以下几种区域:
- public: 适用于不信任的网络,默认拒绝大多数连接。
- home: 适用于家庭网络,通常允许大多数流量。
- work: 适用于公司网络。
- trusted: 允许所有流量的区域。
你可以使用以下命令查看当前系统支持的区域:
sudo firewall-cmd --get-zones
3.2 设置活动区域
查看当前网络接口所在的区域:
sudo firewall-cmd --get-active-zones
如果你想更改某个接口的区域,可以使用:
sudo firewall-cmd --zone=public --change-interface=eth0
3.3 查看当前区域规则
你可以查看某个区域的规则,例如查看 public
区域的规则:
sudo firewall-cmd --zone=public --list-all
3.4 配置防 火墙规则
3.4.1 允许某个端口的访问
例如,要允许 SSH(端口 22)访问:
sudo firewall-cmd --zone=public --add-port=22/tcp --permanent
3.4.2 允许服务(如 HTTP 和 HTTPS)
可以通过服务名称添加规则:
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=https --permanent
3.4.3 拒绝 ICMP(Ping)请求
如果你想阻止 ICMP 请求(即禁用 Ping):
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="0.0.0.0/0" reject' --permanent
3.4.4 允许来自特定 IP 地址的流量
你可以限制只允许来自某个 IP 地址的流量访问某个服务,例如只允许 IP 地址为 192.168.1.100
的机器访问 SSH:
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port port="22" protocol="tcp" accept' --permanent
3.4.5 设置默认区域
如果你想将默认区域更改为 home
,可以使用以下命令:
sudo firewall-cmd --set-default-zone=home
4. 临时应用和永久配置 🔧
4.1 临时应用规则
通过 firewalld 命令添加的规则默认为临时的,会在重启后失效。如果你想立即应用规则,但不保存到配置文件,可以使用:
sudo firewall-cmd --zone=public --add-port=8080/tcp
4.2 保存规则
为了确保规则在重启后仍然有效,使用 --permanent
参数保存规则:
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
4.3 重载防火 墙配置
修改防火墙配置后,需要重新加载配置:
sudo firewall-cmd --reload
5. 管理 firewalld 服务 🛠️
5.1 查看防火墙规则
要查看当前防火墙的状态和规则,可以使用:
sudo firewall-cmd --list-all
5.2 删除规则
要删除某个端口的规则,可以使用:
sudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent
5.3 禁用防火墙
如果你暂时不需要防火墙,可以通过以下命令禁用 firewalld:
sudo systemctl stop firewalld
5.4 开启防火墙
要重新启用 firewalld,可以使用:
sudo systemctl start firewalld
6. 使用 rich rules 进行复杂配置 🔐
firewalld 支持使用 rich rules 来定义更复杂的防火墙规则。rich rules 提供了更多的灵活性,如限制来源、目标等。
例如,允许来自某个 IP 地址的 SSH 请求:
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port port="22" protocol="tcp" accept' --permanent