Linux 端口不通排查:从 ss 到云安全组的四层定位(附体检脚本)

Linux Swap 子系统:架构、内存管理与虚拟化 Swap Linux Swap机制通过将不活跃内存页移至磁盘或压缩内存,扩展系统有效内存容量,缓解内存压力。传统架构中,逻辑Swap槽与物理存储绑定,导致资源浪费,尤其在使用Zswap等压缩技术时。为此,Vswap与Xswap提出虚拟化方案:前者以XArray实现灵活映射,支持多后端迁移;后者采用稀疏映射,简化管理但容量固定。二者在架构设计、资源记账与动态扩展上各有权衡,反映了内核开发中对性能、可维护性与灵活性的深层考量。 阅读详情

摘要

端口不通的四层定位法:监听地址、本机防火墙、容器 DNAT 链、云安全组,外加 tcpdump 判别表。含 ss 监听地址判读、ufw 与 firewalld 的 reload 差异、DOCKER-USER 链拦截写法、安全组四个必查字段,以及一份可直接跑的端口体检脚本。


正文(可直接复制)

0. 适用场景

单机服务对外端口不可达,本机访问正常。适用于 Ubuntu 20.04/22.04、CentOS 7/8、Debian 11/12,容器场景同样适用。命令中的 IP 与端口需替换为实际值。

1. 四层模型

层

检查对象

命令

典型症状

L1

监听地址

ss -lntp

refused,本机通外网不通

L2

本机防火墙

ufw status / firewall-cmd --list-all

timeout,抓包有 SYN 无 SYN-ACK

L3

容器 DNAT

iptables -t nat -L DOCKER

ufw 已拒绝但仍可访问

L4

云安全组

控制台入方向规则

timeout,抓包无 SYN

排查顺序固定为 L1 → L2 → L3 → L4,不要从控制台开始。

2. 步骤一:确认监听地址
ss -lntp 'sport = :8080'

三种输出三种含义:

  • 127.0.0.1:8080:仅本机,外部必不通。
  • 0.0.0.0:8080:IPv4 全地址,正常。
  • [::]:8080:IPv6 全地址,是否接 IPv4 取决于 net.ipv6.bindv6only。
sysctl net.ipv6.bindv6only

返回 1 时只接 IPv6,需要改成双栈监听或显式监听 0.0.0.0。

3. 步骤二:本机防火墙

Ubuntu(ufw):

ufw status verbose
ufw allow 8080/tcp

CentOS(firewalld):

firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-ports

注意 --permanent 与 --reload 必须成对出现。只写前者的规则在重启后生效、当前不生效;只 reload 不写 permanent 的规则重启后丢失。

4. 步骤三:容器端口发布
iptables -t nat -L DOCKER -n --line-numbers

存在 DNAT ... dpt:8080 to:172.17.0.2:8080 即表示端口由 docker 发布。此路径经过 FORWARD 链,ufw 的 INPUT 规则拦不住。

拦截写法(DOCKER-USER 链在 docker 自动规则之前被遍历):

iptables -I DOCKER-USER -p tcp --dport 8080 -j DROP

-I 是插入链首,-A 是追加到链尾。追加的规则可能永远轮不到,因为前面的放行规则已经先命中了。

更稳妥的是发布时只绑回环,由 nginx 统一对外:

docker run -d -p 127.0.0.1:8080:8080 <image>
5. 步骤四:云安全组四个字段

字段

要确认的事

常见错误

绑定对象

规则绑在当前实例所在安全组

绑在默认组,实例已换组

方向

入方向 ingress

改成了出方向

优先级

拒绝规则是否更靠前

全拒绝规则压住了放行

源地址

是否包含实际来源网段

只放了内网段

大陆云主机的 80/443 需备案放行,25 端口默认封禁且换端口无效。

改之前先把当前规则导一份存着。几十条规则的老账号,改错之后靠记忆复原基本不可能,回滚时才发现页面上的记录早被覆盖了。

客户那几台机器分散在三个云账号,排查时我常开着极目Linux桌面,把它们并排挂着看监听,改完一处抬眼就能对一眼。它对规则冲突没有判断,还是得自己一条条对。

如果不想在机器上装 Web 面板,还有一类做法:本地渲染型客户端,界面在本地渲染、只走现成的 SSH 通道,服务器侧不装 Web 服务、也不新增端口。选型时固定一句判断——看它是否在服务器上新增对外端口。

6. 步骤五:抓包定性
tcpdump -i any -nn 'tcp port 8080' -c 20

抓到

判定

处理方向

仅 SYN

到达主机被丢

L2/L3 规则

无 SYN

未到达主机

L4 安全组、路由、NAT

SYN + SYN-ACK

链路正常

应用层,非端口问题

7. 端口体检脚本
#!/usr/bin/env bash
set -uo pipefail
PORT="${1:-8080}"
SCHEME=http
echo "== listen"
ss -lntp "sport = :${PORT}"
echo "== local"
curl -sS -m 2 -o /dev/null -w '%{http_code}\n' "${SCHEME}://127.0.0.1:${PORT}/" || echo "local fail"
echo "== ufw"
ufw status 2>/dev/null | sed -n '1,6p'
echo "== docker dnat"
iptables -t nat -L DOCKER -n 2>/dev/null | grep -c "dpt:${PORT}" || true
echo "== addrs"
ip -4 addr show scope global | awk '/inet /{print $2}'

最后两行输出的是"该端口是否存在 DNAT 规则"的计数与本机 IPv4 地址,用来快速确认监听是否落在了正确的网卡上。

7. 三类常见误判

现象

容易误判成

实际原因

内网能连、公网不通

服务只监听了回环

安全组只放行了内网段,或弹性 IP 未绑定

改完规则立刻测仍不通

规则没写对

云平台异步下发,一般需要等待数十秒

容器端口 ufw 拦不住

ufw 失效

流量走 FORWARD 链,需在 DOCKER-USER 拦截

排查结束后把临时规则收回,0.0.0.0/0 的放行改成具体来源网段。这一步不做,前面省下的时间会在下一次扫描里还回去。

FAQ

Q1:四层排查能不能写成一条命令跑完?

不能给结论,只能给证据。脚本能把四层的状态一次性打印出来,但"是哪一层"需要人看输出判断,尤其 L2 与 L4 的症状都是 timeout。抓包那一步必须有人在外网同时发起连接,脚本替代不了。

Q2:非 root 用户执行 ss -lntp,进程名那一列是空的,正常吗?

正常。-p 需要 root 或与进程同一用户才能读到进程信息,权限不足时这一列会留空,而端口照样列出来。很容易被误读成"没有进程在听",所以排查时优先用 root,或者用 lsof -i :端口 交叉确认一次。

Q3:云安全组规则改完,为什么没有立刻生效?

多数平台是异步下发,控制台显示成功到实例上的规则生效之间有几十秒延迟。另外规则可能存在多个副本(经典网络与专有网络各一套),改的那套不是实际生效的那套。等一分钟再测,仍然不通就检查规则绑定的对象。

Q4:不装采集 agent、不开新端口,能拿到哪些状态?

监听与连接(ss)、防火墙规则(iptables -S 或 nft list ruleset)、服务状态(systemctl)、资源与进程(/proc、ps)。这些数据系统里本来就有,只是分散在几个命令里。本地渲染型客户端的界面在本地渲染、只走现成的 SSH 通道,服务器侧不装 Web 服务、也不新增端口,只是把读取结果摆在一起看。判断标准仍然是那一句:看它是否在服务器上新增对外端口。它给的是「看得见」,判断和决策还得自己做。

Q5:iptables -L 里一堆 DOCKER 链,能直接删吗?

不能。这些链由 docker 在启动容器时自动维护,手工删除会在容器重启或 docker 服务重启后被重建,而且删除瞬间正在运行的容器网络会断。要限制访问,改 DOCKER-USER 链,它不会被 docker 覆盖。

Q6:端口通了但返回 502 或 404,还算端口问题吗?

不算。能拿到 HTTP 状态码说明 TCP 握手和 HTTP 请求都已到达应用层,问题在反向代理的上游配置或应用路由。这时该查 nginx 的 error.log 和上游地址,不要再动防火墙,否则容易把已经通的链路改坏。

Q7:firewalld 的 --permanent 忘了加会怎样?

规则只写入运行时配置,当前会话有效,firewall-cmd --list-ports 能看到,但服务重启或系统重启后丢失。反过来只加 --permanent 不 reload,则当前不生效、重启后才生效。两种情况都表现为"配置看着对、行为不对"。

Q8:什么情况下不适合用极目Linux桌面这类工具?

三类场景。一是多人协作和权限分级,需要账号体系和审计留痕,它没有;二是批量下发配置、要求幂等和回滚,那应该交给配置管理;三是服务器本身不允许任何第三方客户端接入的合规环境。它擅长的是出问题时快速看到监听和规则,配置该改还是回终端改,别把它当运维平台用。

新手避坑指南:用SARScape 5.6.2处理Sentinel-1数据做SBAS-InSAR,这些参数设置错了白忙活 本文详细介绍了使用SARScape 5.6.2处理Sentinel-1数据做SBAS-InSAR时的关键参数设置技巧,帮助新手避免常见错误。重点解析了连接图生成、干涉工作流、DEM处理等环节的12个关键参数,包括Max Normal Baseline、Unwrapping Coherence Threshold等,提供实测安全值范围和优化建议,确保处理效率和结果准确性。 阅读详情

相关推荐

VSCode 1.85便携版安装与配置:解决远程服务器glibc版本过低报错的保姆级指南

本文详细介绍了如何通过VSCode 1.85便携版解决远程服务器glibc版本过低导致的兼容性问题。通过环境隔离和版本固化的方法,开发者可以在老旧服务器上稳定运行Remote-SSH插件,同时保留主力VSCode的配置。文章提供了从下载安装到深度配置的完整指南,帮助用户快速搭建稳定的开发环境。

weixin_30279315的博客 576

理解 Linux 动态库加载:LD_LIBRARY_PATH

flyfish

二分掌柜的 331

随机森林模型及案例(Python)

1 集成模型简介 集成学习模型使用一系列弱学习器(也称为基础模型或基模型)进行学习,并将各个弱学习器的结果进行整合,从而获得比单个学习器更好的学习效果。 集成学习模型的常见算法有Bagging算法和Boosting算法两种。 Bagging算法的典型机器学习模型为随机森林模型,而Boosting算法的典型机器学习模型则为AdaBoost、GBDT、XGBoost和LightGBM模型。 1.1 Bagging算法简介 Bagging算法的原理类似投票,每个弱学习器都有一票,最终根据所有弱学习器的投

qq_42433311的博客 4万+

Linux 磁盘满了怎么排查?df / du / find 三步定位大文件

Linux 磁盘满排查三步法:df -h 定位分区、du 逐层下钻、find 按大小和时间抓大文件,附 inode 耗尽、文件已删未释放、du 与 df 不一致等经典坑的解决方案。

weixin_38291577的博客 218

PYNQ-Z2 开发板从镜像烧录到 Jupyter 交互全流程指南

本文详细介绍了PYNQ-Z2开发板从镜像烧录到Jupyter交互的全流程指南,包括硬件解析、镜像烧录技巧、设备启动与网络配置、Jupyter Notebook深度使用以及实战案例分享。通过具体步骤和实用技巧,帮助开发者快速上手PYNQ-Z2开发板,实现高效的FPGA开发和智能家居控制应用。

weixin_28736355的博客 438

EPLAN二次开发入门:Visual Studio 2019环境配置与插件调试实战

本文详细介绍了EPLAN二次开发入门的关键步骤,重点讲解如何在Visual Studio 2019中配置开发环境并进行插件调试。通过创建符合命名规范的项目、引用核心API库、实现插件接口以及使用附加进程调试等实战技巧,帮助电气工程师快速掌握EPLAN插件开发,提升自动化设计效率。

h6i7j8的博客 763

Linux-iostat命令详解

Linux命令学习记录

m0xin的博客 98

STC8H开发(十六): GPIO模拟SPI驱动Ci24R1实现低成本无线遥控

本文详细介绍了如何使用STC8H单片机通过GPIO模拟SPI驱动Ci24R1无线模块,实现低成本无线遥控方案。内容涵盖硬件设计要点、软件驱动开发技巧及实战优化经验,特别适合消费电子产品开发者参考。Ci24R1凭借其高性价比和双模协议支持,成为替代传统nRF24L01+的理想选择。

weixin_30378623的博客 349

Linux 服务器性能排查手册(2026):CPU、内存、磁盘IO、网络四大瓶颈定位

iptables 四表五链模型、firewalld zone 信任级别、云安全组与主机防火墙的关系与优先级,避坑改了防火墙把自己挡在服务器外面的翻车事故。

2502_91473995的博客 287

分享一些基于微信小程序开发的小游戏源码

小游戏小程序是运行在微信生态系统(或其他支持小程序的平台)中的轻量级应用程序,专为休闲游戏体验而设计的小程序子类别,小游戏小程序通常体积较小,加载速度快,用户无需等待长时间即可开始游戏。用户无需下载或安装单独的游戏应用程序,即可通过小程序入口直接进入游戏,同时小游戏小程序通常包含排行榜、分享功能等社交元素,可以增强游戏体验并促进用户参与。game.js:游戏页面的逻辑文件,包含页面数据、生命周期函数、事件处理函数等。game.wxml:游戏页面的结构文件,定义了页面的布局和组件。

xinshangdian的博客 6222

基于锁相环的高精度频率分频器simulink建模与仿真

在现代电子系统中,高精度频率分频器扮演着至关重要的角色。它能够提供精确的频率参考,广泛应用于通信、仪器仪表、航空航天等领域。基于锁相环的高精度频率分频器具有结构简单、性能稳定等优点,成为了研究的热点。

平时工作较为繁忙,私信消息一般晚上回复,谢谢大家~~ 776

【Linux】APT 本地 deb 安装与 `-f` 参数总结笔记

apt install ./xx.deb 可自动解析并安装依赖,无需 -f;-f 仅用于修复已损坏的依赖状态,非首次安装时必需。apt install -f 可单独运行,修复 broken dependencies。两者职责不同:前者是安装与依赖解决,后者是故障修复。完全离线时需提前准备依赖包或本地源。

hknaruto的专栏 209

STM32串口控制LED灯的亮灭

STM32中的串口控制LED灯的亮灭,分为两种方式,一种是直接发送数字0和1来控制灯的亮灭,另一种是通过发送字符串来控制。 我所使用的开发板主控芯片是STM32F401RET6,主频84MHz, 首先要进行串口的初始化: /* 函数功能:串口的初始化 函数名:Usart_Init 返回值:无 参数:u32 brr 备注: USART1_TXD->PA9 USART1_RXD->PA10 */ void Usart_Init(u32 brr) { float div; u16 div

博客 2万+

Linux rm 误删文件恢复实操教程

Linux使用rm删除文件时,并不会直接抹除磁盘上的数据,只是移除文件索引,让系统不再识别这块空间。只要没有写入新数据,原有扇区内容就会保留。新文件写入才有可能覆盖这些区域,一旦覆盖就很难找回。恢复的本质就是扫描磁盘,找到这些还存在、但索引丢失的数据条目,再把它们导出保存到其他分区。越早停止写入,恢复成功的概率越高。

海天数据恢复-winhex数据恢复教程 225

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Linux sudo

如果输出 → 无 sudo 权限 如果输出 → 拥有全部 sudo 权限 辅助验证命令 ⚠️ 注意:在 wheel 组 ≠ 一定能 sudo,必须 开启 Ubuntu/Debian: ✅ 重要:修改组之后,用户要重新登录才生效! 或者执行 临时生效 看到这行(没有 #注释)才生效: 方式 2:visudo 直接单独给用户授权(精细化权限) 找到 ,下面添加一行: 自带语法校验,写错会告警,不要直接 vim 改 ,写错直接 sudo 炸掉! 想免密 su

fengliyang_的博客 178

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Linux 磁盘 100% 但 du 查不出东西,五种情况逐个排

监控告警说根分区 100%,登录上去 du -sh /* 加起来只有 12GB,df 显示 40GB 已用。差了快 30GB,du 找不到任何东西。这种情况基本都是"文件被删了但进程还开着",但也可能是别的原因。这篇按可能性排一下顺序。

2408_89646393的博客 163

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Windows/Linux下强实时运动控制内核(二):基于Qt的Delta机械手的开发应用

强实时运动控制内核MotionRT750下Qt开发Delta机械手的完整开发流程。

weixin_57350300的博客 240

Linux 网络基础详解:IP、子网、路由与 ip、ss 命令实战

建库建表、增删改查、连接查询(内连左连右连)、聚合函数、权限控制 GRANT/REVOKE,每条命令配可运行示例,零基础也能跟着敲会 SQL 基础。

2502_91473995的博客 610

Linux、Shell、MySQL 测试卷逐题细讲(下篇:MySQL)

本文为Linux、Shell、MySQL测试卷下半段MySQL部分逐题讲解,包含填空、选择与SQL分析三类题型。填空题覆盖COUNT、HAVING、DISTINCT、事务、约束、索引等核心语法;选择题辨析存储过程、索引类型、ACID、存储引擎、用户管理等考点。SQL大题围绕员工、部门、职位、地点四张关联表,考察多表连接、分组聚合、自连接、相关子查询、NULL处理等高频写法,标注LEFT JOIN统计计数、NULL判断、子查询别名等易错坑点,同时梳理试卷OCR识别带来的干扰问题,重点提示SQL实操中的常见失误

dongziwen1的博客 181

Linux 下 OpenCode 接入自定义大模型 API 教程:以 DeepSeek-V4.1-Flash-1017 为例

本文介绍在Linux下通过Python脚本配置OpenCode接入自定义大模型API(以DeepSeek-V4.1-Flash-1017为例),实现永久化、非侵入式配置。通过修改~/.config/opencode/opencode.json文件,添加OpenAI兼容服务商BLSC,注册模型并设置APIKey。支持命令行测试、默认模型设定及安全权限控制,操作简单且不影响原有配置。适用于各类支持OpenAI接口的自定义模型服务,提升开发灵活性与安全性。

qq_15060477的博客 122

【Linux 命令实战(02):文件与目录操作,掌握 pwd、ls、cd 三个核心命令】

命令作用cd /进入根目录cd ~进入当前用户家目录cd返回当前用户家目录cd …返回上一级目录cd …/…返回上两级目录cd -返回上一次所在目录进入指定目录命令核心用途常用参数pwd查看当前目录-L、-Pls查看文件和目录cd切换目录…、~、-Linux 文件系统的基本结构。绝对路径与相对路径的区别。Tab 自动补全。Shell 通配符。使用&&组合命令。这篇文章主要解决的是如何在 Linux 文件系统中快速定位目录。

一些微不足道的见解、希望能帮助各位 192

Linux Day29——HTTP与网络排障

*实测**:`traceroute -n -m 8 8.8.8.8` 的输出:第 1 跳 `172.17.144.1`(本机网关)、第 2 跳 `10.32.0.1`、第 3 跳 `10.50.255.253`、第 4 跳 `* * *`、第 5 跳 `221.226.71.193`、第 6 跳 `* * *`、第 7、8 跳有地址但夹着星号。`ping` 和 `traceroute` 都靠它。**实测**:`ss -lta` 看到三行 `domain`,加 `-n` 后变成 `53`。

2503_94114317的博客 151

【Linux】进程间通信的基础概念及基于匿名管道的进程池

前面我们介绍了进程的创建、退出和等待,接下来看看进程之间怎样传递数据。这篇从匿名管道入手,再用管道把父子进程联系起来,写一个简单的进程池小demo。而且我把发行版从CentOS切换成Ubuntu了,主要是CentOS已经不维护了,可惜了。。。

qeen87的博客 316

Linux的渲染与显示系统链路

Linux渲染与显示链路核心为DRM/KMS + EGL直连模式,绕过传统X11/Wayland中间层,实现低延迟、高效率的直接帧提交。相比X11的粗粒度权限控制与Wayland的合成开销,该方案链路短、资源消耗低,但仅支持单进程独占显示,缺乏窗口管理与系统级兜底。EGL作为跨平台桥梁,连接OpenGL ES与原生显示系统,通过Display、Surface、Context三要素构建渲染环境。内核层DRM管理GPU资源,KMS配置显示模式,用户态GDM负责登录会话,共同构成从硬件到应用的完整图形栈。

微小的鱼的博客 206

Linux 启动流程与故障修复:GRUB、systemd 与救援模式实战

密钥登录配置替代密码、sshd_config 禁 root 禁密码改端口、fail2ban 自动封爆破 IP、端口改不改的权衡,服务器被扫描爆破时的完整加固方案。

2502_91473995的博客 459

芯参谋(88):Linux 嵌入式系统开发指南

本文为面向MPU/Linux平台的用户态系统层开发指南,聚焦启动链各环节的可测量、可判据化工程实践。涵盖交叉工具链一致性、Bootloader交接、根文件系统构建与瘦身、init/systemd服务编排、进程与IO模型、网络接入、调试可观测性、实时性优化、安全加固、电源管理及OTA升级等核心内容。强调“启动时间、镜像大小、内存峰值、断电恢复”等量化指标,提出四条读者路径:从零搭建、启动优化、线上问题排查、实时性实现。以Linux 6.1/LTS内核、glibc2.36/musl1.2、systemd252等

qq520131714的专栏 465
上一篇: 一次 WordPress 站点迁移的完整命令清单(CentOS 7 → Ubuntu 22.04)
下一篇: Linux 服务器可视化管理选型:Web 面板、本地渲染客户端、纯终端
DevNote_
博客等级 码龄1年 3粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值