一次防火墙操作,把我从生产服务器踢下线了

admin 2026-02-17 20:12:58 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 作者在生产服务器启动firewalld防火墙后SSH断连,原因是默认ssh服务仅放行22端口而实际使用10022端口。复盘指出应使用–add-port放行实际端口而非依赖服务名,并建议配置定时任务自动关闭防火墙作为保险。若使用iptables后果更严重,需严格按顺序配置规则。 综合评分: 78 文章分类: 安全运营,实战经验,安全建设


cover_image

一次防火墙操作,把我从生产服务器踢下线了

原创

didiplus didiplus

攻城狮成长日记

2026年2月10日 22:08 广东

这不是演示,不是段子。  这是一次真实发生在生产环境的事故复盘

事情的起因非常简单:👉 在生产服务器上开启 Linux 防火墙。

事故背景

  • 生产环境
  • 一台线上服务器
  • SSH端口不是22
  • 系统:麒麟系统
  • 防火墙:firewalld(默认)

目标也很单纯:

把服务器的防火墙规范起来,减少暴露端口。 当时的我很自信,觉得这不过是几条命令的事。

事故经过(真正的翻车点)

⏱ 21:06

我通过SSH连上服务器,一切正常。

⏱ 21:07

确认firewalld已安装,但未启用。

⏱ 21:08

开始检查防火墙放通了哪些服务和端口。从下图可以看到已经是放通了ssh服务。

心里想的是:

SSH放行了,肯定没问题。

接着,我执行了:

1systemctl start firewall

⏱ 21:16:02

SSH连接断开。 没有报错,没有提示。 终端只剩下一行:

第一反应:懵了,第一反应不是技术判断,而是生理反应

  • 心跳加快
  • 手心出汗
  • 第一时间再连一遍服务器

结果很直接:

1 No route to host

这时我才意识到一个问题: 我在唯一的 SSH 连接里,重载了防火墙。

事故原因定位

冷静下来后,开始复盘。

1️⃣ 防火墙真的“放行 SSH”了吗?

答案是:没有。

需要默认配置是放通了ssh服务,但忽略了一个关键事实:firewalld里的ssh服务,默认只放行22端口。

1<service&nbsp;name="ssh"/>

而我的服务器:

1SSH Port&nbsp;=10022

所以结论很明确:

👉 防火墙生效的那一刻,SSH端口被直接拦截。

2️⃣ 为什么reload会立刻断线?

因为firewalldreload时,会重新加载规则:

  • 新规则生效
  • 未放行端口立即被拦截
  • 当前SSH会话被中断

这不是bug,是机制。

3️⃣应该提前放通端口

/etc/firewalld/zones/public.xml的配置文件中,添加放通端口的配置,如下:

1<port&nbsp;protocol="tcp"port="10022"/>

事故本质总结(一句话) 我“以为”放行了SSH实际上只放行了22端口。

正确做法复盘(如果重来一次)

✅ 先确认 SSH 实际端口

1ss&nbsp;-lntp|grepssh

2# 或

3grep&nbsp;Port /etc/ssh/sshd_config

假设端口是:

110022

✅ 放行端口,而不是服务

1firewall-cmd --add-port=10022/tcp&nbsp;--permanent

确认:

1firewall-cmd --list-ports

看到:

110022/tcp

✅ 实战经验

这是生死线。当遇到因为防火墙启动而暂时无法连接的情况时,这个定时任务就能在关键时刻帮助我们自动关闭防火墙,确保一切顺利进行。

1*/5 * * * * systemctl stop firewall

如果这是iptables,后果会更严重

iptablesfirewalld最大的区别在于:

iptables 是“立即生效”的,没有缓冲。

如果当时我执行的是:

1iptables&nbsp;-P&nbsp;INPUT DROP

那不是SSH断线,而是 服务器直接失联iptables正确顺序应该是:

1# 已建立连接

2iptables&nbsp;-A&nbsp;INPUT&nbsp;-m&nbsp;state&nbsp;--state&nbsp;ESTABLISHED,RELATED&nbsp;-j&nbsp;ACCEPT

3# SSH

4iptables&nbsp;-A&nbsp;INPUT&nbsp;-p&nbsp;tcp&nbsp;--dport10022-j&nbsp;ACC

5# 本地回环

6iptables&nbsp;-A&nbsp;INPUT&nbsp;-i&nbsp;lo&nbsp;-j&nbsp;ACCEPT

7# 最后再丢弃

8iptables&nbsp;-P&nbsp;INPUT DROP

顺序错一个字,就是事故。

写在最后

这次事故没有造成业务中断,但它让我彻底改掉了一个习惯: 所有“看起来很简单”的操作在生产环境里,都必须当成事故来对待。如果你也在生产环境操作防火墙,希望这篇复盘能帮你少一次心跳加速。

| | | — | | 推荐文章 NeuraPress开源推荐:专为公众号打造的Markdown排版神器 写FastAPI项目前必读:这份开源最佳实践让你少踩 90% 的坑! 复习太难?我做了个刷题网站,效率直接翻3 倍! 远程办公救星!用code-server打造你的专属云端IDE |


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:攻城狮成长日记 didiplus didiplus《一次防火墙操作,把我从生产服务器踢下线了》

评论:0   参与:  0