查看哪些外部网络访问过你的 CentOS 服务器,要分层来看------SSH 登录 、Docker 服务访问 、实时连接 、历史流量各看各的。结合你这台(刚被 206.189.236.217 / 103.64.129.163 暴过 SSH,Docker 一堆 0.0.0.0 端口),下面按"从准到粗"的顺序给。
一、SSH 访问记录(最常用,你这台刚被扫过)
1)成功登录过的 IP
bash
# 谁成功登过(含 pts/tty、来源IP、时间)
last -i | grep -v "0.0.0.0\|127.0.0.1" | head -30
输出格式:用户名 pts/ip 来源IP 时间~时间 (在线时长)
2)失败的登录尝试(暴破证据)
bash
# 所有失败
sudo grep "Failed password" /var/log/secure | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr
这条直接给你IP + 次数,比如你上一轮日志里那两个:
N 103.64.129.163
N 206.189.236.217
如果想看完整上下文:
bash
sudo grep "Failed password\|Invalid user" /var/log/secure | tail -50
3)无效用户尝试(扫用户名阶段的)
bash
sudo grep "Invalid user" /var/log/secure | awk '{print $NF}' | sort | uniq -c | sort -nr
输出类似 python / oracle / admin / test 这类被扫的用户名。
4)当前在线的人
bash
w
# 或
who
5)失败登录专用库(lastb)
bash
sudo lastb | head -30
lastb 读的是 /var/log/btmp,专存失败记录,比 /var/log/secure 更聚焦。
⚠️ CentOS 7 默认
/var/log/secure会被 logrotate 切割,老的记录在/var/log/secure-YYYYMMDD,要追久的得一起看。
二、Docker 容器服务的访问(你这台重点,SSH 看不见)
你那堆 0.0.0.0 映射端口(8098/8095/9000/9090/6379/3306/11883),SSH 日志管不到,得看应用层日志。
1)Nginx 访问日志(反向代理入口,最全)
bash
# 看你 nginx 容器挂载出来的 log 路径,或进容器看
docker exec nginx cat /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head
如果 nginx 没挂 volume 出来,先进容器找:
bash
docker exec nginx find / -name "access.log" 2>/dev/null
你那台 nginx 是本地 build(短 ID 8d088...),大概率日志在容器里没挂出来 → 建议下一个整改项就是把 nginx 日志挂 volume 到 /home/zhrcsq/log/nginx/,否则 Docker 重启就丢。
2)Redis 访问 IP
Redis 本身不记客户端 IP 到文件,但可以实时看:
bash
# 进容器
docker exec -it redis redis-cli
# 执行
CLIENT LIST
输出里 addr= 字段就是来源 IP:port。脚本化提取:
bash
docker exec redis redis-cli CLIENT LIST | grep -oP 'addr=\K[^:]+' | sort | uniq -c | sort -nr
3)MySQL 访问 IP
bash
# 进容器查 processlist
docker exec mysql8.0 mysql -u root -p -e "SHOW PROCESSLIST;" | grep -v "system user"
# 或开 general log(耗性能,临时用)
更稳的是看 MySQL 的 slow log / error log,如果挂了 volume 就在宿主机。
4)MinIO 访问
MinIO 控制台和 API 的访问会打在容器 stdout(被 docker logs 接住):
bash
docker logs minio --tail 100 | grep -oE "([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+):[0-9]+"
5)Mosquitto MQTT 连接
bash
docker logs mosquitto --tail 100 | grep -i "New client\|connected"
三、实时看"现在谁在连我"(瞬时快照)
1)所有已建立的外部连接
bash
ss -tnp | grep ESTAB | grep -v "127.0.0.1\|::1"
这条能看到哪个外部 IP 连了你哪个端口、对应 PID/进程名,比如:
ESTAB 0 0 0.0.0.0:6379 206.189.236.217:xxxxx users:(("docker-proxy",pid=xxx,fd=xx))
一眼看出 Redis 被谁连了。
2)按端口过滤(比如只看 3306)
bash
ss -tnp | grep ":3306.*ESTAB"
3)按 IP 过滤
bash
ss -tnp | grep "103.64.129.163"
四、系统层"谁碰过我"------journal + 防火墙 LOG
1)journalctl 看 SSH 单元
bash
journalctl -u sshd --since "2026-06-20" | grep -E "Failed|Accepted|Invalid"
比 /var/log/secure 好处是重启后不丢 (你之前 journald 已迁 /home/zhrcsq/log persistent 了,这条对你特别有用)。
2)firewalld 加 LOG 规则(以后能追)
如果之前没配,现在可以加一条让 firewalld 把 NEW 连接打到内核日志,事后 dmesg 能查:
bash
sudo firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 1 \
-p tcp -m state --state NEW ! -s 127.0.0.1 -j LOG --log-prefix "NEW_CONN: "
sudo firewall-cmd --reload
之后:
bash
sudo dmesg | grep "NEW_CONN" | tail -50
五、历史流量类工具(如果装了)
1)fail2ban 日志(强烈建议你装)
bash
sudo tail -f /var/log/fail2ban.log
sudo fail2ban-client status sshd
会告诉你哪些 IP 被 ban 了、因为几次失败、ban 多久。你这台被暴过,装上后 103.64.129.163 这种扫 root 的直接 24h 封。
2)iftop / nethogs(实时流量画像)
bash
sudo yum install -y iftop nethogs
sudo iftop -i eth0 # 看哪个IP:端口在跑流量
sudo nethogs eth0 # 看哪个进程在跑流量
你这台 docker-proxy 会占一堆端口,nethogs 能直接告诉你"redis 进程 ⇄ 某个外网 IP 在跑流量"。
六、一键汇总脚本(给你贴过去就能跑)
bash
#!/bin/bash
# who_accessed_me.sh ------ 看谁碰过这台 CentOS
echo "===== 当前在线 ====="
w
echo -e "\n===== 成功 SSH 登录(去本机/内网)====="
last -i | grep -v "0.0.0.0\|127.0.0.1" | head -15
echo -e "\n===== 失败 SSH TOP IP ====="
sudo grep "Failed password" /var/log/secure 2>/dev/null | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr | head -10
echo -e "\n===== 扫描过的无效用户名 ====="
sudo grep "Invalid user" /var/log/secure 2>/dev/null | awk '{print $NF}' | sort | uniq -c | sort -nr | head -10
echo -e "\n===== 当前已建立的外部连接 ====="
ss -tnp | grep ESTAB | grep -v "127.0.0.1\|::1"
echo -e "\n===== Redis 当前客户端 IP ====="
docker exec redis redis-cli CLIENT LIST 2>/dev/null | grep -oP 'addr=\K[^:]+' | sort | uniq -c | sort -nr 2>/dev/null
echo -e "\n===== Docker 容器端口映射(谁在监听外网)====="
docker ps --format "table {{.Names}}\t{{.Ports}}" | grep "0.0.0.0"
跑完 bash who_accessed_me.sh,攻击面 + 已来访客一目了然。
七、结合你这台的建议动作
- 先跑上面脚本 → 把
103.64.129.163 / 206.189.236.217这两个 IP 记下来,firewalld 先封 - Redis / MySQL / MinIO 的访问 IP 跑出来如果看到非公司 IP → 那就是已经被连过了,立刻改密码 + 绑
127.0.0.1 - 装 fail2ban → 以后
/var/log/fail2ban.log自动记谁被 ban - nginx 日志挂 volume 到
/home/zhrcsq/log/nginx/,否则反向代理入口是盲区 - firewalld 加 LOG 规则 → 以后
dmesg | grep NEW_CONN能追历史