针对CentOS服务器的“端口 + 服务 + 两高一弱“扫描思路

下面给你一套针对 CentOS 服务器 的"端口 + 服务 + 两高一弱"扫描思路,分**远程视角(外网攻击者怎么看你)本机视角(服务器自己漏了啥)**两条线,正好对上你列的三类隐患。


一、先搞清楚:这台机器"开了哪些口"

1)本机看监听端口(第一步,必做)

bash 复制代码
# 看 IPv4/IPv6 监听
ss -lntup
# 或老命令
netstat -lntup

# 只看对外(0.0.0.0)的
ss -lntup | grep '0.0.0.0'

重点关注:

  • 0.0.0.0:22 正常;0.0.0.0:3306/6379/11211/9200 这些就危险了(DB/缓存裸奔)
  • 陌生端口 → ps -fp <pid> 反查是哪个进程

2)本机看防火墙实际放行

bash 复制代码
# firewalld(CentOS 7 默认)
firewall-cmd --list-all

# 如果换成 iptables 了
iptables -L INPUT -n --line-numbers

常见坑:ss 显示监听了,但 firewalld 没放行 → 外面其实进不来,不算暴露;反过来 firewalld 放行了但服务没起 → 也不算。要两边对得上才算真暴露。


二、远程端口扫描(模拟攻击者视角)

1)nmap 全端口 + 版本识别(核心)

bash 复制代码
# 基础:TOP 1000 端口
nmap -sV -sC <服务器公网IP>

# 全端口(慢但全,推荐护网前做一次)
nmap -sV -p- --open <IP>

# 加脚本扫弱口令/未授权(重点)
nmap --script auth,vuln,default <IP>

-sV 把"端口号 → 真实服务+版本"对上,后面查 CVE 要用。

2)UDP 别漏(DNS/NTP/SNMP 常被忘)

bash 复制代码
nmap -sU --top-ports 100 <IP>

三、"两高一弱"逐类对号入座扫描

① 弱口令 ------ 端口暴露 + 协议猜解

服务 端口 扫描/验证方式
SSH 22 hydra -l root -P pass.txt ssh://IP 或查 /var/log/secure 有无大量 Failed
MySQL 3306 mysql -h IP -u root -p 空密码试;nmap --script mysql-empty-password
Redis 6379 redis-cli -h IP 能直接连 = 未授权 🚨
MongoDB 27017 mongosh --host IP 无鉴 = 未授权 🚨
PostgreSQL 5432 psql -h IP -U postgres 空密码
FTP 21 anonymous 登录试
Tomcat/管理口 8080/8009 manager 弱口令

一键脚本感的做法

bash 复制代码
nmap -p 22,3306,6379,27017,5432,11211,9200,5601 \
     --script mysql-empty-password,redis-info,mongodb-info \
     <IP>

② 高危漏洞 ------ 版本 → CVE 映射

CentOS 7 本机先拉版本清单:

bash 复制代码
# 服务版本快照
rpm -qa --last | head -30
nginx -v ; httpd -v ; php -v ; mysql --version ; redis-server -v

# 用 vulners 插件(nmap)
nmap -sV --script vulners <IP>

# 或离线:把 rpm 清单喂给 https://vulners.com 或国产 NESSUS/绿盟/ openVAS

高危常客(CentOS 7 + 老组件)

  • OpenSSL < 1.1.1 → Heartbleed / CVE-2022-3786
  • glibc → GHOST (CVE-2015-0235) 老系统常见
  • sudo → CVE-2021-3156(Baron Samedit)
  • Redis < 5.0.14 / 6.x → 主从 RCE
  • Nginx 老版本 → 整数溢出 / 请求走私
  • Docker 老版本 → runc / containerd CVE 一堆

⚠️ CentOS 7 本身 2024-06-30 EOL ,yum 源官方已迁 vault,即使 yum update 也拿不到新补丁------这属于"底层高危",必须写在报告里,建议迁 Alma/Rocky。

③ 未授权访问 ------ 端口一探便知

bash 复制代码
# Redis
redis-cli -h <IP> ping   # PONG = 裸奔

# MongoDB
mongosh --host <IP> --eval "db.adminCommand('ping')"

# Elasticsearch
curl http://<IP>:9200/_cat/indices

# Docker daemon(若开了 2375)
curl http://<IP>:2375/version

# K8s API server(若开了 6443 对外)
curl -k https://<IP>:6443/api

这些都是"端口开着 + 没鉴权 = 直接进",护网扣分重灾区。


四、"老旧框架组件"扫描(你对的第 2 点)

1)Web 框架版本(Tomcat / Spring / Struts / Weblogic)

bash 复制代码
# 抓 banner
curl -I http://<IP>:8080

# 精准点:
# Tomcat: catalina.jar MANIFEST.MF
# Spring Boot: /actuator/info(如果开着)
# Struts: 看报错页或 header

高危常客:

  • Struts2 → 多个 RCE(S2-045 / S2-061)
  • Spring Cloud / Spring Boot → CVE-2022-22965(Spring4Shell)
  • Tomcat < 8.5.85 / 9.0.65 → 多个绕过
  • Weblogic → 反序列化老演员

2)中间件 / 语言运行时

bash 复制代码
java -version
python --version
php -v
node -v

老 JDK 8u20x、Python 2.7、PHP 5.6 这些都是"框架没老、运行时先老"。

3)docker 镜像里的组件(容易被忘)

bash 复制代码
docker images
docker inspect <镜像> | grep -i version

很多 "CentOS 7 + docker 跑老镜像" 的场景,宿主机 CentOS 7 老 + 容器里 OpenSSL/glibc 也老,双层老化。


五、"端口暴露过多 / 多系统暴露互联网"(你对的第 3 点)

1)先画资产清单

把前面 ss -lntup + nmap 结果整理成表:

端口 服务 版本 是否需暴露公网 当前是否暴露 风险
22 SSH OpenSSH 7.4 是(但应限IP) 弱口令扫
3306 MySQL 5.7.44 是(0.0.0.0) 裸库 🚨
6379 Redis 5.0.3 未授权 🚨
8080 Tomcat 8.0.53 Struts2 老

2)收敛原则(整改方向)

  • DB / 缓存 / ES / 消息队列绝不公网暴露,走 VPC / 内网 / VPN
  • 管理口(Tomcat manager、Kibana、RabbitMQ UI)→ 要么关,要么加 IP 白名单 + 强口令 + HTTPS
  • SSH → 改非 22 / 限源 IP / 禁 root 密码 / 仅密钥
  • 多余端口 → firewalld 直接 drop,服务停掉

firewalld 限源示例(只让办公网 SSH):

bash 复制代码
firewall-cmd --permanent --add-rich-rule='
  rule family="ipv4"
  source address="1.2.3.4/32"
  port protocol="tcp" port="22" accept'
firewall-cmd --reload

六、一条龙自动化工具(不想手搓就用这些)

工具 用途 备注
nmap + vulners 端口 + 版本 + CVE 轻量首选
Nessus 商业漏扫,两高一弱全覆盖 护网/等保交差利器
OpenVAS/GVM 开源版 Nessus 自建可用
goby 国产,端口+漏洞+未授权+弱口令 界面友好
hydra + medusa 弱口令专用 配合用户名字典
redis-unauth / mongo-unauth 脚本 专扫未授权 单点快

七、给你这台 CentOS 7 的"隐患画像"预判(结合前面对话)

按你前面那台机器(CentOS 7 + Docker + SSH + 日志迁 /home):

  1. CentOS 7 本身 EOL → 所有 rpm 漏洞 yum 修不了,这是根因,必须写在报告"高危"第一条
  2. Docker daemon / 容器端口映射 → 你之前 18000 → 8000 那段,说明有端口映射习惯,要重点查 docker ps 哪些容器端口 -p 映射到 0.0.0.0 了
  3. SSH → 你前面 sudoers / ssh 远程那轮,确认下 PasswordAuthentication yes + PermitRootLogin yes 是不是还在,是的话就是弱口令靶子
  4. Redis / MySQL / ES → 如果 docker-compose 里没显式设密码 + bind 127.0.0.1,基本中招

八、交付用 checklist(扫描完填这张表)

复制代码
[资产]
- 公网IP / 内网IP
- 开放端口清单(nmap)
- 对应服务 + 版本

[两高一弱]
□ 弱口令:SSH / MySQL / Redis / Mongo / Tomcat-manager 逐项测
□ 高危漏洞:nmap --script vulners / rpm 清单 → CVE 库
□ 未授权:Redis / Mongo / ES / Docker 2375 / K8s 6443

[老旧组件]
□ OS:CentOS 7 EOL → 迁 Alma/Rocky
□ Web框架:Tomcat/Struts/Spring 版本
□ 中间件:Nginx/Apache/PHP/Java 版本
□ 容器镜像:docker images 版本链

[暴露面]
□ 端口是否过多
□ DB/缓存是否公网可达
□ 管理口是否裸奔

顺着这台机器可以写一条具体命令链 :从 ss -lntupnmapvulnersdocker ps → 弱口令试,一路 pipe 出一张 Excel 能吃的清单。告诉我这台机器哪些是公网 IP、docker 跑了什么,我可以帮你把扫描范围缩到最小、不打盲拳。