在CentOS 7.2系统中,防火墙管理主要通过firewalld服务实现,相比传统的iptables,firewalld支持动态规则更新、区域(zone)管理等高级功能,以下将详细介绍CentOS 7.2防火墙的核心命令及使用场景,帮助用户高效管理服务器安全策略。

防火墙基础操作
-
启动与停止服务
首先确保firewalld服务已安装并启用,若未安装,可通过yum install firewalld
安装,启动服务使用systemctl start firewalld
,停止服务为systemctl stop firewalld
,设置开机自启则执行systemctl enable firewalld
,临时禁用防火墙(不推荐生产环境使用)可运行systemctl mask firewalld
。 -
查看防火墙状态
执行systemctl status firewalld
可查看服务运行状态,或使用firewall-cmd --state
直接显示防火墙是否运行中,查看详细规则列表需结合firewall-cmd --list-all
,该命令会显示当前区域、接口、服务及端口等配置信息。
区域管理
firewalld通过区域划分网络信任级别,默认区域为public
,常用区域包括trusted
(信任所有流量)、block
(拒绝所有连接)、dmz
(隔离区)等,查看当前区域命令为firewall-cmd --get-active-zones
,切换区域可使用firewall-cmd --set-default-zone=<zone_name>
,将默认区域设置为home
:firewall-cmd --set-default-zone=home
。
服务与端口管理
-
启用/禁用预定义服务
firewalld支持预定义服务(如http、ssh),通过firewall-cmd --add-service=<service_name>
临时启用,--permanent
参数可持久化规则,永久开放HTTP服务:(图片来源网络,侵删)firewall-cmd --permanent --add-service=http firewall-cmd --reload # 重新加载配置
-
手动管理端口
开放单个端口需指定协议(TCP/UDP),如开放8080端口TCP协议:firewall-cmd --permanent --add-port=8080/tcp
查看已开放端口列表使用
firewall-cmd --list-ports
,删除规则则替换--add
为--remove
。
高级规则配置
-
富规则(Rich Rules)
富规则支持更精细的流量控制,例如限制特定IP访问SSH服务:firewall-cmd --permanent --add-rich-rule='rule service name="ssh" source address="192.168.1.100" accept'
-
端口转发与MASQUERADE
启用端口转发需修改/etc/sysctl.conf
设置net.ipv4.ip_forward=1
,然后添加规则:(图片来源网络,侵删)firewall-cmd --permanent --add-forward-port=port=80:proto=toc:toport=8080
MASQUERADE(IP伪装)常用于NAT场景,执行:
firewall-cmd --permanent --add-masquerade
日志与调试
启用日志记录可帮助排查问题,例如记录丢弃的包:
firewall-cmd --set-log-denied=all
查看日志文件路径可通过grep -i "firewalld" /var/log/messages
。
常见命令速查表
功能 | 命令示例 |
---|---|
查看所有规则 | firewall-cmd --list-all |
永久添加端口 | firewall-cmd --permanent --add-port=80/tcp |
临时添加服务 | firewall-cmd --add-service=https |
删除规则 | firewall-cmd --remove-service=ftp |
重新加载配置 | firewall-cmd --reload |
FAQs
Q1: 如何开放特定IP的访问权限?
A: 可通过富规则实现,例如允许IP 192.168.1.50访问所有服务:
firewall-cmd --permanent --add-rich-rule='rule source address="192.168.1.50" accept' firewall-cmd --reload
Q2: 防火墙规则修改后未生效怎么办?
A: 首先检查是否使用--permanent
参数持久化规则,然后执行firewall-cmd --reload
重新加载配置,若规则为临时生效(无--permanent
),需确认防火墙服务未重启,临时规则会在服务重启后丢失。