在Linux服务器管理中,防火墙是保障系统安全的重要屏障,有效控制网络流量并防止未授权访问,不同Linux发行版默认使用不同的防火墙管理工具,如CentOS/RHEL系列的firewalld、Ubuntu系列的ufw(Uncomplicated Firewall),以及传统的iptables,本文将详细介绍如何查看Linux服务器防火墙的状态、规则、配置信息及常见操作方法,帮助管理员全面掌握防火墙的监控与管理技巧。

查看防火墙状态与基本信息
首先需要确认防火墙是否处于运行状态,这是基础的安全检查步骤,对于使用systemd的系统,可通过systemctl命令管理防火墙服务。
检查防火墙服务状态
以firewalld为例,执行以下命令:
systemctl status firewalld
若输出显示active (running),则表示防火墙已启用;若为inactive (dead),则表示防火墙未运行,同理,对于ufw,使用:
systemctl status ufw
使用防火墙专用命令查看状态

- firewalld:
firewall-cmd --state
直接返回
running或not running,适用于快速判断。 - ufw:
ufw status
输出可能为
Status: active(启用)、inactive(禁用)或disabled(未安装)。
查看防火墙默认策略
默认策略决定了未明确匹配的流量处理方式,通常为DROP(丢弃)或REJECT(拒绝)。
- firewalld:
firewall-cmd --get-default-zone
查看默认区域(如
public),并通过以下命令查看区域的默认策略:
(图片来源网络,侵删)firewall-cmd --zone=public --list-all
- iptables(传统工具):
iptables -L -n -v
在
Chain INPUT和Chain FORWARD中查看policy列,默认策略通常为DROP或ACCEPT。
查看防火墙规则详情
防火墙规则是实际控制流量的核心,管理员需要定期检查规则的有效性、端口开放情况及IP白名单/黑名单。
firewalld规则查看
- 列出所有区域的规则:
firewall-cmd --list-all-zones
输出包含每个区域的接口、服务、端口、端口转发等配置,适合全局查看。
- 查看特定区域的规则:
firewall-cmd --zone=public --list-ports
显示已开放的端口(如
80/tcp 443/tcp);firewall-cmd --zone=public --list-services
显示已允许的服务(如
http https)。 - 查看富规则(Rich Rules):
富规则是更精细的控制策略,通过以下命令查看:firewall-cmd --list-rich-rules
ufw规则查看
-
查看所有规则:
ufw status verbose
输出包含规则编号、动作(allow/deny)、协议、端口、IP地址等详细信息,
Status: active Logging: on (low) Default: deny (incoming), allow (outgoing) New profiles: skip To Action From -- ------ ---- 22/tcp ALLOW Anywhere 80/tcp ALLOW Anywhere 22/tcp (v6) ALLOW Anywhere (v6) 80/tcp (v6) ALLOW Anywhere (v6) -
查看规则编号:
ufw status numbered
输出带编号的规则,便于后续删除或修改(如
ufw delete 2删除第二条规则)。
iptables规则查看
iptables规则较为复杂,需结合链(Chain)和匹配条件(如-p tcp、--dport 80)进行查看。
- 查看所有规则:
iptables -L -n -v --line-numbers
-n以数字形式显示IP和端口,避免DNS解析延迟;--line-numbers显示规则编号,方便管理。 - 查看特定链的规则:
iptables -L INPUT -n -v
只查看
INPUT链的规则,适合关注入站流量控制。 - 查看NAT规则:
iptables -t nat -L -n -v
查看网络地址转换相关的规则,如端口转发(DNAT/SNAT)。
使用表格对比不同工具的规则查看命令
| 防火墙工具 | 查看所有规则命令 | 查看端口/服务命令 | 查看规则编号/编号删除示例 |
|------------|---------------------------|----------------------------------|----------------------------------|
| firewalld | firewall-cmd --list-all | firewall-cmd --list-ports | 无编号,需通过--zone和--remove-port删除 |
| ufw | ufw status verbose | ufw status(显示端口和服务) | ufw status numbered + ufw delete <num> |
| iptables | iptables -L -n -v | iptables -L INPUT -n --dport 80 | iptables -L --line-numbers + iptables -D INPUT <num> |
查看防火墙日志与连接状态
防火墙日志是排查安全事件的重要依据,而连接状态可帮助实时监控活动会话。
查看防火墙日志
- firewalld日志:
默认日志位于/var/log/firewalld,可通过journalctl查看:journalctl -u firewalld -f
-f参数实时跟踪日志输出。 - ufw日志:
日志文件通常为/var/log/ufw.log,使用tail命令实时查看:tail -f /var/log/ufw.log
日志格式包含时间、动作(ALLOW/DENY)、源IP、目标端口等信息。
- iptables日志:
需先通过iptables -A INPUT -j LOG将丢弃/拒绝的流量记录到日志,日志文件默认为/var/log/messages,使用:grep "iptables" /var/log/messages | tail -n 20
查看活跃连接
- firewalld:
firewall-cmd --get-active-connections
显示当前活跃的区域和连接接口。
- ss/netstat(通用工具):
查看与防火墙规则相关的连接,ss -tulpn | grep :80
查看监听80端口的进程及PID,结合
iptables规则判断是否允许访问。
常见问题排查
在查看防火墙时,可能会遇到规则未生效、日志无记录等问题,以下为排查思路:
- 规则未生效:检查防火墙服务是否运行、规则是否添加到正确的区域(firewalld)、规则语法是否正确(iptables)。
- 日志无记录:确认日志功能是否启用(如
ufw logging on),检查日志文件权限及磁盘空间。 - 特定端口无法访问:使用
telnet或nc测试端口连通性,结合iptables -L INPUT -n -v查看规则是否匹配流量。
相关问答FAQs
Q1: 如何区分防火墙规则中的DROP和REJECT策略?
A: DROP策略会直接丢弃数据包,不返回任何响应,可能导致客户端超时;REJECT策略会发送拒绝响应(如ICMP错误包),客户端会立即收到连接失败提示,可通过iptables -L INPUT -n -v查看策略,或使用tcpdump抓包分析响应行为。
Q2: 防火墙规则显示端口已开放,但外部仍无法访问,可能的原因有哪些?
A: 可能原因包括:(1)安全组(如云服务器ECS安全组)未开放对应端口;(2)SELinux或AppArmor阻止流量;(3)服务未监听正确地址(如仅监听127.0.0.1);(4)网络路径存在其他防火墙设备(如硬件防火墙),需依次排查:检查安全组配置、getenforce查看SELinux状态、使用netstat -tulnp确认服务监听地址、测试网络连通性。
