1.基础操作类
sudo systemctl start firewalld 启动防火墙服务
sudo systemctl enable firewalld 开机自动启动防火墙(disable 关闭开机自动启动)
sudo firewall-cmd --state 查看防火墙状态
sudo firewall-cmd --reload 重新加载规则
sudo firewall-cmd --list-all 查看所有规则
2.zone(区域)管理
sudo firewall-cmd --get-active-zones 查看当前激活区域
sudo firewall-cmd --zone=public --change-interface=eth0 设置接口到指定区域(eth0为实际存在)
sudo firewall-cmd --zone=public --list-all 查看指定区域规则
3.服务器控制类
sudo firewall-cmd --get-services 查看支持的服务列表
sudo firewall-cmd --add-service=http --permanent 允许http服务
sudo firewall-cmd --remove-service=ssh --permanent 移除SHH服务(此条需要慎重,务必确保有控制台或本地终端时操作,否则可能无法远程登录)
sudo firewall-cmd --reload 应用更改
4.端口控制类
sudo firewall-cmd --add-port=8080/tcp --permanent 开放8080端口
sudo firewall-cmd --remove-port=8080/tcp --permanent 删除8080端口
sudo firewall-cmd --list-ports 查看所有端口
5.Rich Rule 高级规则(Rich Rule 会优先于 zone 普通规则生效)
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="22" accept' 限制单个IP访问22端口
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.101" reject' 拒绝某个ip访问
sudo firewall-cmd --list-rich-rules 查看所有rich-rules
6.日常排查与维护
sudo journalctl -u firewalld 查看firewalld日志
sudo firewall-cmd --runtime-to-permanent 将当前运行时规则同步到永久配置
sudo firewall-cmd --get-zones 列出所有区域
PS: 临时规则:不加(--permanent),重启firewalld后失效
永久规则:加,需要--reload生效,重启后仍然有效
7.防火墙规则模版(不同类型基础模版,具体的需要视情况而定)
①web服务器(Nginx,Apache...)
开放HTTP/HTTPS + SSH
限制SSH来源IP
②数据库服务器(MySQL,PostgreSQL....)
只开放数据库端口给特定内网ip段(内网访问)【数据库端口3306/tcp或其他..】
关闭所有不必要服务
③堡垒机/跳板机(Bastion Host)
仅开放SSH,并严格限制来源IP(公司出口或者运维的IP)
PS:保存 ‘ /etc/firewalld ’ 目录,以便快速回复
练习:web服务器脚本:web-firewall.sh(记得使用root权限)
#!/bin/bash
# Web 服务器防火墙初始化脚本
set -e
if ! command -v firewall-cmd &> /dev/null; then
echo "firewalld 未安装,请先安装。"
exit 1
fi
echo "启动并设置 firewalld..."
sudo systemctl enable --now firewalld
echo "添加 http 和 https 服务..."
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
echo "限制 SSH 来源,仅允许 192.168.88.0/24 访问..."
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.88.0/24" service name="ssh" accept'
sudo firewall-cmd --permanent --remove-service=ssh
echo "重新加载 firewalld..."
sudo firewall-cmd --reload
echo "最终规则:"
sudo firewall-cmd --list-all