在 Linux 系统中,防火墙是保护系统安全的重要工具。它通过设定规则来控制网络流量,阻止未经授权的访问,并防御潜在的攻击。firewalld
是一种流行的动态防火墙管理工具,它基于 iptables
,提供了更高效、更灵活的防火墙管理方式。本文将详细介绍如何使用 firewall-cmd
命令来解锁规则和配置防火墙。
一、firewalld
概述
firewalld
是一个前端工具,用于管理防火墙配置,它提供了一种简化的方式来管理 iptables
规则。firewalld
的设计基于区域(zone)和服务(service)的概念,使防火墙配置更加灵活和易于管理。
- 区域(Zone):表示不同网络的安全级别,允许用户为不同的网络接口分配不同的区域。
- 服务(Service):预定义的网络服务(如 HTTP、SSH)规则,简化了对常见服务的配置。
二、安装 firewalld
在大多数 Linux 发行版中,firewalld
通常是预安装的。如果没有安装,可以使用包管理工具进行安装:
Debian/Ubuntu 系统:
sudo apt update sudo apt install firewalld
Red Hat/CentOS 系统:
sudo yum install firewalld
安装完成后,可以启动并启用 firewalld
服务:
sudo systemctl start firewalld
sudo systemctl enable firewalld
三、firewall-cmd
基本用法
firewall-cmd
是 firewalld
的命令行界面工具,用于管理防火墙规则。基本命令格式如下:
firewall-cmd [选项] [命令] [参数]
四、查看防火墙状态
检查防火墙状态
查看
firewalld
是否正在运行:sudo firewall-cmd --state
如果返回
running
,说明firewalld
正在运行。查看当前区域和规则
显示默认区域和已配置的规则:
sudo firewall-cmd --get-active-zones sudo firewall-cmd --list-all
--get-active-zones
命令显示当前激活的区域,--list-all
命令显示当前区域的所有规则。
五、配置防火墙规则
添加和删除服务
firewalld
提供了预定义的服务配置文件,允许通过服务名称来简化规则设置。例如,允许 HTTP 服务:允许 HTTP 服务:
sudo firewall-cmd --zone=public --add-service=http
删除 HTTP 服务:
sudo firewall-cmd --zone=public --remove-service=http
这些命令会立即生效,但不会持久化到系统重启。要使更改持久化,使用
--permanent
选项:持久化允许 HTTP 服务:
sudo firewall-cmd --zone=public --add-service=http --permanent
持久化删除 HTTP 服务:
sudo firewall-cmd --zone=public --remove-service=http --permanent
添加和删除端口
除了服务,
firewalld
还允许直接通过端口号来配置规则:允许 TCP 端口 8080:
sudo firewall-cmd --zone=public --add-port=8080/tcp
删除 TCP 端口 8080:
sudo firewall-cmd --zone=public --remove-port=8080/tcp
同样地,要使更改持久化,使用
--permanent
选项:持久化允许 TCP 端口 8080:
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
持久化删除 TCP 端口 8080:
sudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent
配置区域
firewalld
支持将网络接口分配到不同的区域,每个区域可以有不同的规则。查看所有区域的详细信息:sudo firewall-cmd --list-all-zones
将接口分配到区域:
sudo firewall-cmd --zone=home --change-interface=eth0
设置区域的默认策略:
sudo firewall-cmd --set-default-zone=home
配置服务和端口的访问控制
firewalld
允许设置服务和端口的访问控制策略,包括源 IP 地址和协议。比如,只允许某个 IP 地址访问端口:允许来自特定 IP 的访问:
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port port=8080 protocol=tcp accept'
删除特定 IP 的访问:
sudo firewall-cmd --zone=public --remove-rich-rule='rule family="ipv4" source address="192.168.1.100" port port=8080 protocol=tcp accept'
--add-rich-rule
和--remove-rich-rule
选项用于添加和删除复杂的访问控制规则。
六、查看和验证规则
查看当前配置
查看当前区域的所有规则:
sudo firewall-cmd --list-all
查看所有区域的详细信息:
sudo firewall-cmd --list-all-zones
验证规则
验证防火墙规则是否按预期生效:
sudo firewall-cmd --zone=public --list-all
这将显示
public
区域的所有规则,包括服务、端口和其它设置。
七、管理 firewalld
服务
重新加载配置
在修改了防火墙配置后,使用以下命令重新加载配置使更改生效:
sudo firewall-cmd --reload
禁用和启用防火墙
禁用防火墙:
sudo systemctl stop firewalld
启用防火墙:
sudo systemctl start firewalld
禁用防火墙开机启动:
sudo systemctl disable firewalld
启用防火墙开机启动:
sudo systemctl enable firewalld
八、总结
firewalld
是一个功能强大的防火墙管理工具,通过 firewall-cmd
命令,可以灵活地配置防火墙规则,管理网络流量,确保系统安全。掌握 firewall-cmd
的基本用法和高级功能,可以帮助用户更有效地保护系统免受未经授权的访问,并应对各种网络安全挑战。通过合理配置防火墙规则,可以确保系统在提供服务的同时,保持高度的安全性和稳定性。