ss 是什么
ss 属于 Linux 的 iproute2 套件,通过内核 netlink 的 sock_diag 接口直接读取 socket 信息,而不是解析 /proc/net/tcp 文本,所以在几十万条连接的压力场景下比 netstat 快得多,输出也更精确。历史上大家用 net-tools 的 netstat,但主流发行版已不再默认安装 net-tools,新系统一律推荐 ss。应急排查时它是「谁在跟外界通话」的第一入口:一条命令就能同时看到连接状态、对端地址、进程归属。
基本信息
| 所属套件 | iproute2(Linux),精简容器镜像可能未预装需自行补装 |
|---|---|
| 语法 | ss [选项] [过滤表达式] |
| 常用选项 | -a 全部 -n 不解析名字 -t TCP -u UDP -l 仅监听 -p 显示进程 -s 汇总 -e 详细信息 |
| 过滤表达式 | state established、sport = :22、dport = :443、'( dport = :80 or dport = :443 )' |
| 进程归属 | -p 需要 root 或 CAP_NET_ADMIN,普通用户只能看到自己拥有的连接 |
| 替代工具 | 老系统与 Windows 用 netstat -ano;Linux 新系统统一用 ss |
典型使用场景
- 怀疑主机被控时快速筛出对外建立的可疑连接,锁定回连目标地址
- 确认某个端口被哪个进程占用,为后续隔离或清理排序
- 木马清理后复查监听面,确认没有残留后门端口
- 排查连接数暴涨、TIME-WAIT 堆积、文件描述符耗尽类故障
- 在宿主机上查看容器进程的对外连接,定位被投毒的容器
- 与 lsof、tcpdump 结果交叉验证,形成可写进报告的连接证据
高频用法
高频用法
sudo ss -antp # 全部 TCP 连接与监听,含进程
sudo ss -antp state established | grep -vE '127.0.0.1|::1' # 只看对外已建立连接
sudo ss -antp '( dport = :22 or sport = :22 )' # 只看 SSH 相关连接
ss -lntup # 监听端口全景,TCP 与 UDP 一起看
ss -antp | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head # 按对端 IP 统计连接数
ss -s # 汇总统计,判断是否发生连接耗尽
sudo ss -tiep # 带 inode 与计时器信息,便于与取证数据对照输出逐列读法
| 列 | 含义 | 异常信号 |
|---|---|---|
| Netid | 协议类型:tcp、udp、unix、nl | 大量 unix socket 属正常,不必逐个追 |
| State | 连接状态 ESTAB、LISTEN、TIME-WAIT、CLOSE-WAIT | ESTAB 指向陌生公网地址且端口高位随机或非常规 |
| Recv-Q / Send-Q | 接收与发送队列积压字节数 | LISTEN 下 Send-Q 是 backlog;ESTAB 长期积压说明对端不回或程序卡死 |
| Local Address:Port | 本地地址与端口 | 监听在 0.0.0.0 且端口陌生,说明服务暴露到全部网卡 |
| Peer Address:Port | 对端地址与端口 | 回连特征:对端 IP 固定、端口高位、且多台主机指向同一地址 |
| Process | users:(('进程名',pid=,fd=)) | 进程列空白通常是没加 sudo;进程名与预期身份不符要立刻追 |
排查时坚持用 -n:解析域名和端口名会拖慢输出,而且解析请求会暴露到 DNS 侧日志里,对隐蔽处置不利。要记证据时把输出重定向到独立介质,例如 ss -antp > /evidence/ss_$(date +%F_%H%M).txt。
不要把 127.0.0.1 的连接一律当成正常:本地代理端口、frp 本地回连、socks5 中转往往是攻击者链路的一环,应当保留环回连接再去核对其归属进程。
交叉验证与容器场景
交叉验证与容器场景
sudo lsof -i -nP | grep -i estab | head # 用 lsof 交叉核对,能带出进程与用户
cat /proc/net/tcp | head # 内核原始表,地址与端口为十六进制
sudo ss -ltnp # 只看监听,确认有没有新增服务端口
sudo nsenter -t <容器内PID> -n ss -antp # 进入容器的网络命名空间查看其连接容器里的 ss 只能看到本网络命名空间:查容器内部连接要在宿主机用 nsenter 或 docker exec 进容器执行,两种视角的结果不一样,别混淆。
连接状态含义
| 状态 | 含义 | 处置提示 |
|---|---|---|
| LISTEN | 本机在监听,等待对端连接 | 陌生端口的监听是后门最直接的证据 |
| ESTAB | 双向连接已建立,正在通信 | 结合对端地址与进程判断是否为回连 |
| SYN-SENT | 本机已发出握手但未收到回应 | 反复出现说明在对某个不可达地址重试,常见于限速的 C2 |
| TIME-WAIT | 本机主动关闭连接后的等待态 | 数量巨大说明连接频繁创建,可能是程序未复用连接 |
| CLOSE-WAIT | 对端已关闭,本机未关闭 | 长期堆积说明程序有连接泄漏,与安全无关但会影响可用性 |
排查动作顺序
- 先 ss -lntup 看监听面,确认新增或陌生服务端口
- 再 ss -antp state established 看对外连接,逐条核对方地址归属
- 对可疑连接取进程 PID,进 /proc 看 exe 与 cwd 确认真实身份
- 把对端地址整理成 IOC,横向到其他主机上检索同一地址
- 按需用 tcpdump 抓该连接的少量报文,确认通信内容与协议特征