Linux服务器查看防火墙是否打开,核心命令是“systemctl status firewalld”,状态为“active (running)”代表已开启,“inactive (dead)”代表已关闭。对于多数云服务器和CentOS 7以上系统,掌握这个命令就能快速定位问题,很多新手在排查端口不通时,第一反应是检查应用程序,结果折腾半天发现是防火墙拦住了,白白浪费时间。
快速查看Linux防火墙运行状态的三种可靠方法
systemctl命令:最通用且直观的检查方式
登录服务器后,直接执行以下命令:
systemctl status firewalld
输出结果中,重点看两行信息,第一行是“Loaded”和“Active”参数,当出现“active (running)”字样时,代表防火墙服务正在运行中,如果出现“inactive (dead)”,则代表防火墙服务未启动,第二行是“Main PID”,若该参数有数字,同样代表防火墙进程正活跃。
若你想查看防火墙是否设置了开机自启,执行:
systemctl is-enabled firewalld
返回“enabled”表示开机自动启动,返回“disabled”表示开机不启动。
firewall-cmd命令:直接获取防火墙工作状态
对于使用firewalld服务的系统,运行:
firewall-cmd --state
这是最简单的判断方法之一,返回“running”代表防火墙正在运行,返回“not running”则代表未运行,若系统提示“FirewallD is not running”,那你的防火墙目前没有开启,可以排除是防火墙挡住了网络请求。
检查iptables服务:老版本系统的备用方案
如果你的服务器是CentOS 6或更早版本,或者使用了纯iptables方案,需要检查:
service iptables status
或使用:
/etc/init.d/iptables status
该命令会列出当前的防火墙规则链。若输出包含“Chain INPUT”且下方有规则条目,代表防火墙在运作;若提示“iptables: Firewall is not running”,则代表未开启
,需要注意的是,部分云厂商的镜像预装了firewalld,但实际没有运行iptables服务,这属于正常现象。
防火墙规则查看:不只是看状态,还要看放行了什么
查看firewalld的详细放行规则
防火墙运行中,不代表你需要的端口就开放了,查看具体规则,执行:
firewall-cmd --list-all
输出结果中,查看“ports”和“services”两个字段,ports字段显示已放行的端口号,8080/tcp”代表8080端口对TCP协议放行,services字段显示已放行的服务名称,ssh”、“http”等,如果端口没出现在列表中,外部流量仍然会被拦截。
想查看某个特定端口是否放行,使用:
firewall-cmd --query-port=3306/tcp
返回“yes”说明已放行,返回“no”则说明该端口被禁用。
查看iptables的详细规则链
若是iptables方案,执行:
iptables -L -n --line-numbers
这条命令会输出INPUT、FORWARD、OUTPUT三条链的所有规则。重点关注INPUT链,它是外部流量进入服务器的第一道关卡,若看到“DROP”或“REJECT”策略位于“ACCEPT”策略之前,且没有针对特定端口的放行规则,那么相关端口的访问会被拒绝。
防火墙未开启但端口仍然不通?排查这些真实场景
云平台安全组的干扰
在简米云、酷番云、华为云上购买的服务器,除系统防火墙外,云平台控制台还有一层独立的安全组规则,即使Linux防火墙完全关闭,安全组没放行对应端口,外部依然无法访问,这种情况经常出现在“Linux防火墙关了但端口就是不通”的排查中,属于服务器管理常识。
行业内专家指出,云服务器的网络流量路径是先经过安全组检查,再到达系统防火墙,两处需要同时放行,网络才能彻底打通。
服务本身未监听正确的网卡
使用命令检查服务监听状态:
netstat -tlnp
重点看监听地址,如果服务只监听了“127.0.0.1”或“::1”,说明只允许本机访问,外部请求会被直接拒绝,这时即使关闭防火墙也没用,需要修改服务配置文件中的绑定地址为“0.0.0.0”。
SELinux的叠加拦截
CentOS系统默认安装SELinux,它也会拦截端口访问,查看SELinux状态:
getenforce
返回“Enforcing”代表强制开启,返回“Permissive”仅记录不拦截,返回“Disabled”则完全关闭,若确实没有使用SELinux的需求,可通过修改“/etc/selinux/config”文件将SELINUX参数设为disabled并重启,这样做能免去很多权限问题。
Linux防火墙状态查询的常见场景与运维方案
部署Web服务前检查80和443端口
执行命令检查放行状态:
firewall-cmd --list-all | grep -E 'ports|services'
若没有看到“80/tcp”和“443/tcp”,需要马上放行:
firewall-cmd --permanent --add-port=80/tcp --add-port=443/tcp firewall-cmd --reload
排查数据库远程连接失败的问题
远程连接MySQL或PostgreSQL时,若无法建立连接,按以下步骤排查:
- 执行“systemctl status firewalld”确认防火墙是否开启
- 防火墙开启状态下,执行“firewall-cmd –query-port=3306/tcp”等命令确认对应端口是否已经放行
- 确认云平台安全组的入方向规则是否放行了相同端口
- 最后检查数据库配置文件中的bind-address参数是否为0.0.0.0
临时调试时快速关闭防火墙
开发环境测试时,偶尔需要临时关闭防火墙:
systemctl stop firewalld
临时关闭后重启服务器会重新生效,适合调试场景使用,在生产环境不建议这样做,若确定永久不需要防火墙,则执行:
systemctl disable firewalld
同时停止服务,这个操作会彻底关闭防火墙服务。
常用查询命令速查表
| 需求场景 | 推荐命令 | 期望结果 |
|---|---|---|
| 查看防火墙运行状态 | systemctl status firewalld | active (running) |
| 查看防火墙开启自启 | systemctl is-enabled firewalld | enabled |
| 查看已放行端口 | firewall-cmd –list-all | ports列表 |
| 查看特定端口是否放行 | firewall-cmd –query-port=8080/tcp | yes |
| 查看iptables规则 | iptables -L -n –line-numbers | 规则列表 |
| 查看SELinux状态 | getenforce | Enforcing |
常见问题解答
Linux防火墙永久关闭和临时关闭有什么区别?
临时关闭使用“systemctl stop firewalld”,只对当前会话生效,重启服务器后防火墙会重新启动,永久关闭需要额外执行“systemctl disable firewalld”,该命令会移除开机启动项,重启后防火墙依然保持关闭状态,日常排查网络问题时,使用临时关闭即可,确认问题出在防火墙后,再针对性放行端口,不要长期关闭防火墙。
怎么看linux防火墙是否开启的日志记录?
防火墙的运行日志存储在“/var/log/firewalld”文件,某些发行版会写入“/var/log/messages”,使用命令“journalctl -u firewalld”可以查看systemd记录的防火墙服务日志,日志中能看到端口被拒绝的记录,格式为“BLOCK_”开头的条目,通过日志能定位到具体是哪个来源IP被拦截。
服务器上同时有firewalld和iptables,以哪个为准?
使用“systemctl status firewalld”确认firewalld处于运行状态时,iptables命令查看到的规则不一定是当前生效的规则,firewalld会动态管理iptables规则链,手动通过“iptables -A”添加的规则可能在firewalld重载后被清除,选一种防火墙方案使用,多数现代系统默认使用firewalld,iptables命令仅用于查看底层规则。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/741050.html





