在Linux系统中,防火墙是保障服务器安全的重要组件,通过合理配置防火墙规则可以有效控制网络流量,防止未授权访问,要查看和管理防火墙状态,需要掌握一系列常用命令,这些命令因Linux发行版的不同而有所差异,主要分为iptables(传统工具)和firewalld(CentOS 7+、RHEL 7+等系统默认使用)两大类。

对于使用iptables的系统,查看防火墙状态的基本命令是sudo iptables -L -n -v,其中-L表示列出规则链,-n以数字形式显示地址和端口(避免DNS解析延迟),-v显示详细信息(如数据包计数、网络接口等),若需查看特定链的规则,可添加链名参数,例如sudo iptables -L INPUT -n -v仅查看输入链规则。sudo iptables -S命令以可读性更高的格式显示规则,适合快速查看规则配置;sudo iptables -L --line-numbers则会为每条规则添加行号,方便后续修改或删除规则,要检查iptables服务是否运行,可使用sudo systemctl status iptables或sudo service iptables status(根据系统初始化类型选择)。
对于采用firewalld的系统,命令操作更为直观,查看防火墙当前状态使用sudo firewall-cmd --state,若返回running则表示防火墙已启动,running或notrunning则显示当前状态,查看详细配置信息需结合多个参数:sudo firewall-cmd --list-all会显示当前激活的zone、接口、服务、端口等完整配置;sudo firewall-cmd --list-services列出允许通过的服务(如ssh、http等);sudo firewall-cmd --list-ports则显示开放的端口号(如8080/tcp),若需查看所有区域(包括未激活区域)的配置,可添加--all-zones参数,例如sudo firewall-cmd --list-all --all-zones,firewalld还支持实时查看日志,通过sudo journalctl -u firewalld可查看防火墙服务的启动日志和错误信息。
以下是常用命令的对比总结:
| 防火墙工具 | 命令 | 功能说明 |
|---|---|---|
| iptables | sudo iptables -L -n -v |
列出所有规则链的详细信息(IP、端口、计数等) |
| iptables | sudo iptables -S |
以简洁格式显示规则,适合快速查看 |
| iptables | sudo iptables -L INPUT --line-numbers |
查看输入链规则并显示行号 |
| iptables | sudo systemctl status iptables |
检查iptables服务运行状态 |
| firewalld | sudo firewall-cmd --state |
查看防火墙是否运行(返回running/notrunning) |
| firewalld | sudo firewall-cmd --list-all |
显示当前激活区域的完整配置 |
| firewalld | sudo firewall-cmd --list-services |
列出允许通过的服务名称 |
| firewalld | sudo firewall-cmd --list-ports |
列出开放的端口号(格式如8080/tcp) |
| firewalld | sudo firewall-cmd --list-all --all-zones |
显示所有区域的配置信息 |
在实际操作中,若需临时关闭防火墙(仅用于测试环境),iptables系统可使用sudo iptables -F(清空规则)或sudo systemctl stop iptables(停止服务),firewalld系统则通过sudo firewall-cmd --state确认状态后,执行sudo systemctl stop firewalld,但需注意,生产环境关闭防火墙会极大增加安全风险,建议仅在必要时修改规则而非完全关闭。

相关问答FAQs
Q1: 如何判断当前系统使用的是iptables还是firewalld?
A: 可通过以下方法判断:① 执行sudo systemctl status iptables和sudo systemctl status firewalld,查看哪个服务处于激活状态;② 使用which iptables和which firewall-cmd检查命令是否可用;③ 查看配置文件,如CentOS 7+默认使用firewalld,其规则通常位于/etc/firewalld/目录下,而iptables规则位于/etc/sysconfig/iptables。
Q2: 为什么执行sudo iptables -L时显示规则为空,但防火墙状态显示已运行?
A: 可能的原因有两个:① 防火墙规则策略默认为“拒绝所有”,但未配置允许规则,此时-L会显示规则链为空但状态为运行;② 使用了firewalld但误用iptables命令,firewalld底层使用iptables,但直接操作iptables可能导致规则不同步,建议先确认防火墙工具类型,若使用firewalld,应通过sudo firewall-cmd --list-all查看规则,避免命令混用。

