用一条命令筛出高危暴露
端口清单很长,但真正需要优先处理的是固定的一批:数据库、缓存、消息队列、远程管理与容器接口。这些端口的共性是默认防护薄弱——部分组件历史版本甚至不带认证。这条核查用一次端口扫描把这些目标筛出来,命中即列为待确认项,由业务方说明用途后才能保留。
基本信息
| 加固项 | 高危端口暴露 |
|---|---|
| 适用平台 | Linux(也可用同类工具在 Windows 上排查) |
| 风险等级 | 高 |
| 判读 | 命中即列为待确认;数据库与缓存类不应对外 |
| 数据来源 | 本机监听清单,最终以外部实测连通性收口 |
典型使用场景
- 周期巡检:快速筛出不该出现的对外服务
- 交付检查:确认新机器没有默认开放高危服务
- 事件排查:判断主机是否长期存在可被扫描利用的入口
- 整改复核:处置后重跑同一条命令确认命中项收敛
- 跨机比对:同类主机命中项不一致时,找出被额外开启的机器
核查命令
核查命令
ss -tulnp | grep -E ':(21|23|25|111|135|137|139|445|1433|1521|3306|3389|5432|5900|6379|9200|11211|2375|27017)([^0-9]|$)'
ss -tulnp | grep -vE '127.0.0.1|\[::1\]' | grep -E ':(3306|6379|27017)' # 只看对外监听
sudo ss -tlnp | head -40 # 加 sudo 才能看到进程名
sudo iptables -S | grep -E 'ACCEPT' | head -20 # 对照放行规则端口分组与处置优先级
| 分组 | 代表端口 | 处置优先级 |
|---|---|---|
| 缓存与内存数据库 | 6379、11211、27017 | 最高,历史版本常无认证 |
| 搜索与数据分析 | 9200 至 9300 | 最高,未授权可读写全量数据 |
| 关系型数据库 | 3306、5432、1433 | 高,撞库与弱口令目标 |
| 远程管理与文件共享 | 3389、445、5900 | 高,爆破与横向移动入口 |
| 容器与集群接口 | 2375 至 2376、6443 | 最高,暴露即等于交出管理权 |
缓存与容器管理类端口对公网暴露往往在很短时间内就被利用:发现后先限制来源或直接封禁,再评估是否需要保留、是否已被利用。处置动作与排查动作要同时安排,封禁只解决后续风险。
筛选端口时要用边界写法(排除数字前后仍为数字的情况),否则会误匹配到端口号相近的服务,例如把高位的两位数字当成目标端口的一部分。清单本身也要随业务更新,新增组件时同步补充到检查列表。
把清单维护起来
把这条命令的端口清单写成配置文件或脚本变量,与业务组件清单保持同步:新上线组件时同步加入,下线时移除。定期执行并把结果与上次比对,命中项的增减都能立刻看到,比每次人工判断「哪些端口算高危」更稳定,也更容易向业务方解释整改依据。