Linux 关闭 SELinux 与防火墙:排查网络问题前必须先做的两件事

为什么要关闭 SELinux 和防火墙

刚拿到一台 Linux 服务器,准备部署网站或者跑应用,结果发现端口死活连不上、服务启动了但外部访问不了——这种情况十有八九是 SELinux 或者防火墙在”保护”你。

SELinux(Security-Enhanced Linux)是 Linux 内核层面的强制访问控制机制,防火墙(Firewalld / iptables)则是网络层面的访问控制。它们的设计初衷都是为了安全,但很多生产环境和测试场景下,它们反而会成为你排查问题的最大障碍。

本文会带你一步步关闭 SELinux 和防火墙,并教你如何确认它们已经真正停掉了。

第一步:检查当前状态

在动手之前,先看看 SELinux 和防火墙分别是什么状态。执行以下两条命令:

# 查看 SELinux 状态
getenforce

# 查看 Firewalld 状态
systemctl status firewalld
使用 sestatus 命令查看 SELinux 当前状态
使用 sestatus 命令查看 SELinux 当前运行状态

getenforce 会返回三个值之一:

  • Enforcing——正在强制执行安全策略(需要关闭)
  • Permissive——只记录违规行为但不阻止(算半关状态)
  • Disabled——已完全关闭(目标状态)

防火墙那边,systemctl status firewalld 会告诉你它是 active (running) 还是 inactive (dead)

第二步:关闭 SELinux

临时关闭(立即生效,重启失效)

如果你只是临时调试,用 setenforce 0 可以立即把 SELinux 切换到 Permissive 模式:

setenforce 0
getenforce
# 输出应为 Permissive
执行 setenforce 0 临时关闭 SELinux
执行 setenforce 0 后 SELinux 切换为 Permissive 模式

永久关闭(重启后依然生效)

临时关闭不够,重启后 SELinux 又会恢复原样。要永久关闭,需要修改配置文件:

vi /etc/selinux/config

找到 SELINUX= 这一行,把值改为 disabled

# 修改前
SELINUX=enforcing

# 修改后
SELINUX=disabled
修改 selinux 配置文件将 SELinux 设为 disabled
修改 /etc/selinux/config 文件,将 SELINUX 设为 disabled

保存退出后,重启服务器才能让永久配置生效:

reboot

重启后用 getenforce 确认,应该输出 Disabled

第三步:关闭 Firewalld 防火墙

临时停止(立即生效,重启失效)

systemctl stop firewalld

永久关闭(禁止开机自启)

systemctl disable firewalld

验证一下:

systemctl status firewalld
# 应显示 inactive (dead)

如果是 iptables 怎么关

有些系统(比如 Ubuntu)用的是 ufw,有些老系统用的是原生 iptables,处理方式稍有不同:

UFW(Ubuntu 默认)

ufw disable
ufw status
# 应显示 Status: inactive

iptables 清空规则

iptables -F
iptables -X
iptables -Z

-F 清空所有规则链,-X 删除自定义链,-Z 把计数器归零。但这种方式重启后会失效,要想持久化需要额外安装 iptables-persistent 包。

关闭之后还是连不上怎么办

SELinux 和防火墙都关了,但还是访问不了?按这个顺序排查:

  1. 服务是否在监听——用 ss -tlnp | grep 端口号 确认端口是否处于 LISTEN 状态
  2. 云平台安全组——阿里云、腾讯云、AWS 等都有网络层面的安全组,需要在控制台放行端口
  3. 服务本身绑定地址——有些服务默认只监听 127.0.0.1,需要改为 0.0.0.0
  4. 路由和网络配置——确认服务器的网关、DNS 配置是否正确

安全提醒

关闭 SELinux 和防火墙确实能省去很多麻烦,但也意味着你失去了一层重要的安全防护。在生产环境中,更推荐的做法是:

  • 保留防火墙,只放行需要的端口,而不是一刀切全关
  • SELinux 设为 Permissive 先跑一段时间,等确认没规则冲突后再完全关闭
  • 使用云平台安全组作为第一层防护,比系统防火墙更可靠

对于刚入门的朋友,先关掉排障是完全可以的。等你的运维能力上来了,再逐步把安全策略加回来也不迟。

总结

排查网络问题的标准流程:先关 SELinux,再关防火墙,然后逐层检查服务和网络配置。记住这三条命令就够了:

setenforce 0              # 临时关 SELinux
systemctl stop firewalld  # 临时关防火墙
systemctl disable firewalld  # 永久关防火墙

掌握这些,以后遇到”服务启动了但访问不了”的问题就不会慌了。

© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容