文章总结: 作者在生产服务器启动firewalld防火墙后SSH断连,原因是默认ssh服务仅放行22端口而实际使用10022端口。复盘指出应使用–add-port放行实际端口而非依赖服务名,并建议配置定时任务自动关闭防火墙作为保险。若使用iptables后果更严重,需严格按顺序配置规则。 综合评分: 78 文章分类: 安全运营,实战经验,安全建设
一次防火墙操作,把我从生产服务器踢下线了
原创
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 name="ssh"/>
而我的服务器:
1SSH Port =10022
所以结论很明确:
👉 防火墙生效的那一刻,SSH端口被直接拦截。
2️⃣ 为什么reload会立刻断线?
因为firewalld在reload时,会重新加载规则:
- 新规则生效
- 未放行端口立即被拦截
- 当前
SSH会话被中断
这不是bug,是机制。
3️⃣应该提前放通端口
在/etc/firewalld/zones/public.xml的配置文件中,添加放通端口的配置,如下:
1<port protocol="tcp"port="10022"/>
事故本质总结(一句话) 我“以为”放行了
SSH,实际上只放行了22端口。
正确做法复盘(如果重来一次)
✅ 先确认 SSH 实际端口
1ss -lntp|grepssh
2# 或
3grep Port /etc/ssh/sshd_config
假设端口是:
110022
✅ 放行端口,而不是服务
1firewall-cmd --add-port=10022/tcp --permanent
确认:
1firewall-cmd --list-ports
看到:
110022/tcp
✅ 实战经验
这是生死线。当遇到因为防火墙启动而暂时无法连接的情况时,这个定时任务就能在关键时刻帮助我们自动关闭防火墙,确保一切顺利进行。
1*/5 * * * * systemctl stop firewall
如果这是iptables,后果会更严重
iptables和firewalld最大的区别在于:
iptables 是“立即生效”的,没有缓冲。
如果当时我执行的是:
1iptables -P INPUT DROP
那不是SSH断线,而是 服务器直接失联。iptables正确顺序应该是:
1# 已建立连接
2iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
3# SSH
4iptables -A INPUT -p tcp --dport10022-j ACC
5# 本地回环
6iptables -A INPUT -i lo -j ACCEPT
7# 最后再丢弃
8iptables -P INPUT DROP
顺序错一个字,就是事故。
写在最后
这次事故没有造成业务中断,但它让我彻底改掉了一个习惯: 所有“看起来很简单”的操作在生产环境里,都必须当成事故来对待。如果你也在生产环境操作防火墙,希望这篇复盘能帮你少一次心跳加速。
| | | — | | 推荐文章 NeuraPress开源推荐:专为公众号打造的Markdown排版神器 写FastAPI项目前必读:这份开源最佳实践让你少踩 90% 的坑! 复习太难?我做了个刷题网站,效率直接翻3 倍! 远程办公救星!用code-server打造你的专属云端IDE |
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:攻城狮成长日记 didiplus didiplus《一次防火墙操作,把我从生产服务器踢下线了》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








评论