端口清单是暴露面的底账
端口治理的起点不是关端口,而是先有一份准确清单:本机在听哪些端口、绑定在哪个地址、由哪个进程带起来。把清单与“批准清单”逐条比对,多出来的就是待收敛项,通常来自测试残留、默认安装的服务、或被改成监听全部地址的业务组件。清单还要能对比出漂移:新装一个软件就多出几个默认端口,没有基线快照就只能靠记忆判断。
基本信息
| 加固项 | 监听端口最小化与归属确认 |
|---|---|
| 适用平台 | Linux(ss 来自 iproute2) |
| 权限要求 | 看进程归属需要 root |
| 达标判据 | 每个监听端口都能说明业务用途与责任人 |
| 常用选项 | -t TCP、-u UDP、-l 监听、-n 数字端口、-p 进程 |
典型使用场景
- 新接手服务器时的暴露面盘点
- 月度巡检对比上期快照,发现端口漂移
- 安全事件排查:确认有没有新增的可疑监听
- 上线前自查,避免把测试端口带到生产
- 容器宿主机上确认有没有容器把端口映射到全部地址
生成清单
生成清单
ss -tulnp # 全量清单:TCP/UDP、数字端口、进程
ss -tulnp | grep -v '127.0.0.1\|::1' # 只看对外暴露的项
ss -lunp | grep ':161' # 按端口反查,排查同类风险
ss -s # 套接字与连接统计概览
ss -x # unix socket:本地与容器通信不在 tcp/udp 清单里
sudo lsof -i -P -n | grep LISTEN | head -30 # 交叉验证,能带出更多进程信息ss -tulnp 逐列读法
| 列 | 含义 | 关注点 |
|---|---|---|
| Netid | tcp 或 udp | TCP 未授权暴露风险更高,UDP 还要考虑反射放大 |
| State | 连接状态 | UDP 通常显示 UNCONN,没有 LISTEN |
| Local Address:Port | 监听地址与端口 | 0.0.0.0 或 :: 表示对所有地址开放 |
| Peer Address:Port | 对端地址 | 监听项一般为空或 *:* |
| Process | 进程名与 PID | 需 root 可见,是确认归属的关键列 |
重要节点建议把清单定期快照留存(命令输出加时间戳归档),既能对比漂移,也是事件取证材料:出事后能回答“这个端口是什么时候出现的”,整改前后也能直接对照举证。快照建议纳入巡检脚本,避免依赖人工记忆。
两个常见盲区:一是 -p 需要 root,普通用户跑 ss 看不到进程归属,会漏掉关键线索;二是容器内的监听进程不在宿主机的进程命名空间里,只看宿主机可能看到端口却找不到进程,需要进入对应网络命名空间(如 nsenter -t <PID> -n ss -tulnp)再核查。