服务器登录日志怎么看?一看就懂:SSH 和远程桌面有没有被暴力尝试

服务器放到公网后,登录端口被扫描几乎是常态。很多用户第一次发现问题,往往不是服务器已经被攻破,而是在查看日志时看到大量 Failed password、Invalid user,或者 Windows 远程桌面里出现很多失败登录记录。
这类情况不能简单理解为“服务器中毒”,但也不能完全忽略。真正要判断的是:这些登录尝试来自哪里、频率多高、有没有成功登录、是否命中了真实账号,以及服务器当前防护策略是否足够。
下面我以一台真实业务环境中常见的服务器配置为例,讲清楚 Linux SSH 和 Windows 远程桌面登录日志应该怎么看,以及发现暴力尝试后应该如何处理。
一、示例服务器配置
以一台用于企业官网、后台管理、小型 API 服务的香港服务器为例:
| 项目 | 配置 |
|---|---|
| CPU | E5-2620V2 × 2,12 核 24 线程 |
| 内存 | 32GB |
| 硬盘 | 480GB SSD |
| 带宽 | 30M CN2 / CMIN2 / CU 三网优化线路 |
| IP | 3 个独立 IPv4 |
| 系统 | Ubuntu 22.04 / CentOS 7.x / Windows Server 2019 |
| 场景 | 企业官网、运维后台、数据库管理、API 服务 |
这类服务器的特点是:性能不是瓶颈,真正需要关注的是公网暴露端口带来的安全风险。尤其是 22 端口 SSH 和 3389 端口远程桌面,如果没有限制来源 IP,很容易被自动化工具反复尝试。
二、先判断:这是正常扫描,还是已经有风险?
看到登录失败日志时,不要急着重装系统。可以先按下面几个维度判断风险等级。
1. 只是随机账号尝试
例如 Linux 日志里出现:
Invalid user admin from 45.xx.xx.xx
Invalid user test from 103.xx.xx.xx
Failed password for invalid user oracle
这通常是公网扫描器在批量尝试常见账号,例如:
admin
test
oracle
mysql
ubuntu
user
deploy
如果这些账号本来不存在,并且没有成功登录记录,一般属于低到中风险。
2. 命中了真实账号
如果日志里出现:
Failed password for root from 185.xx.xx.xx
Failed password for ubuntu from 92.xx.xx.xx
这就需要提高警惕。因为对方已经在尝试真实存在的账号,尤其是 root、administrator、ubuntu 这类常见账号。
3. 失败后出现成功登录
最危险的是先看到大量失败记录,后面又出现成功登录。
Linux 中常见成功登录日志:
Accepted password for root from 185.xx.xx.xx
Accepted publickey for deploy from 203.xx.xx.xx
Windows 中常见成功登录事件:
Event ID 4624
Logon Type: 10
如果成功登录 IP 不是你自己的办公 IP、家宽 IP、堡垒机 IP,就要立刻按入侵事件处理。
三、Linux 服务器怎么看 SSH 登录日志?
不同 Linux 系统日志位置略有区别。
Ubuntu / Debian
cat /var/log/auth.log
查看最近 SSH 失败登录:
grep "Failed password" /var/log/auth.log | tail -50
查看不存在账号的尝试:
grep "Invalid user" /var/log/auth.log | tail -50
查看成功登录:
grep "Accepted" /var/log/auth.log | tail -50
统计失败登录来源 IP:
grep "Failed password" /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr | head
CentOS 7.x
CentOS 7.x 通常看:
cat /var/log/secure
查看失败登录:
grep "Failed password" /var/log/secure | tail -50
查看成功登录:
grep "Accepted" /var/log/secure | tail -50
统计攻击 IP:
grep "Failed password" /var/log/secure | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr | head
使用 journalctl 查看 SSH 服务日志
Ubuntu 22.04 上也可以用:
journalctl -u ssh --since "1 hour ago"
部分系统服务名是 sshd:
journalctl -u sshd --since "1 hour ago"
四、Linux 日志里重点看哪些字段?
一条典型失败日志大概长这样:
Failed password for root from 185.220.101.32 port 50312 ssh2
重点看 4 个地方:
| 字段 | 说明 |
|---|---|
| Failed password | 密码登录失败 |
| root | 被尝试的账号 |
| 185.220.101.32 | 来源 IP |
| port 50312 | 对方客户端随机端口,不是你的 SSH 端口 |
很多用户会误解 port 50312,以为服务器开放了这个端口。其实这里通常是攻击者客户端的随机源端口,不是你服务器的监听端口。
再看一条:
Accepted publickey for deploy from 203.0.113.8 port 51288 ssh2
这表示用户 deploy 使用 SSH 密钥成功登录,来源 IP 是 203.0.113.8。如果这个 IP 是你自己的固定办公出口或堡垒机,就属于正常登录;如果不是,就需要立刻排查。
五、Windows Server 怎么看远程桌面登录日志?
Windows Server 远程桌面主要看“事件查看器”。
路径如下:
事件查看器
→ Windows 日志
→ 安全
重点事件 ID:
| 事件 ID | 含义 |
|---|---|
| 4624 | 登录成功 |
| 4625 | 登录失败 |
| 4634 | 注销 |
| 4776 | NTLM 身份验证 |
| 1149 | 远程桌面用户身份验证成功 |
其中最关键的是 4625 和 4624。
远程桌面失败登录怎么看?
在“安全”日志中筛选:
事件 ID:4625
重点看:
| 字段 | 说明 |
|---|---|
| Account Name | 被尝试登录的账号 |
| Source Network Address | 来源 IP |
| Failure Reason | 失败原因 |
| Logon Type | 登录类型 |
远程桌面常见的登录类型是:
Logon Type: 10
它代表远程交互式登录,也就是 RDP 远程桌面。
如果你看到大量类似记录:
Account Name: Administrator
Logon Type: 10
Source Network Address: 91.xx.xx.xx
基本可以判断远程桌面正在被暴力尝试。
六、如何判断 SSH 或 RDP 是否被暴力破解?
可以按下面标准快速判断。
低风险
几十次失败登录
账号都是不存在的随机账号
没有成功登录
来源 IP 分散
这种一般是公网自动扫描,做好基础加固即可。
中风险
短时间几百到几千次失败登录
反复尝试 root / administrator
来源 IP 集中
服务器 CPU 或带宽轻微异常
这种说明服务器已经进入攻击字典库,需要限制来源 IP 或增加防护策略。
高风险
先失败,后成功
成功登录 IP 不认识
系统出现陌生用户
计划任务异常
SSH authorized_keys 被改动
Windows 新增隐藏管理员
这种不能只封 IP,要按疑似入侵处理。
七、Linux SSH 暴力尝试的处理方案
1. 禁止 root 直接登录
编辑 SSH 配置:
vim /etc/ssh/sshd_config
修改或新增:
PermitRootLogin no
然后重启 SSH:
Ubuntu / Debian:
systemctl restart ssh
CentOS:
systemctl restart sshd
建议新建普通运维用户,通过普通用户登录后再 sudo 提权。
2. 禁用密码登录,改用 SSH 密钥
在确认密钥登录可用后,再关闭密码登录:
PasswordAuthentication no
PubkeyAuthentication yes
重启 SSH:
systemctl restart ssh
这是防暴力破解最有效的方法之一。因为对方即使知道用户名,也无法通过字典密码登录。
3. 限制允许登录的用户
例如只允许 deploy 和 ops 登录:
AllowUsers deploy ops
如果你的服务器只是跑网站,不需要多人直接登录,这个策略非常实用。
4. 使用防火墙限制 SSH 来源 IP
Ubuntu 使用 UFW:
ufw allow from 你的办公IP to any port 22
ufw deny 22
ufw enable
CentOS 7.x 使用 firewalld:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="你的办公IP" port protocol="tcp" port="22" accept'
firewall-cmd --permanent --remove-service=ssh
firewall-cmd --reload
如果你的办公 IP 不固定,可以考虑使用 VPN、堡垒机,或者单独开一个管理入口,不建议长期把 SSH 完全暴露在公网。
5. 安装 Fail2ban 自动封禁
Ubuntu 安装:
apt install fail2ban -y
CentOS 安装:
yum install epel-release -y
yum install fail2ban -y
创建配置:
vim /etc/fail2ban/jail.local
示例:
[sshd]
enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
findtime = 600
bantime = 3600
CentOS 需要把日志路径改成:
logpath = /var/log/secure
启动服务:
systemctl enable fail2ban
systemctl start fail2ban
查看封禁状态:
fail2ban-client status sshd
八、Windows 远程桌面暴力尝试的处理方案
1. 不建议长期开放 3389 到公网
最直接的做法是只允许固定 IP 访问远程桌面。
Windows 防火墙可以限制入站规则:
Windows Defender 防火墙
→ 高级设置
→ 入站规则
→ 远程桌面 - 用户模式 TCP-In
→ 作用域
→ 远程 IP 地址
→ 添加你的办公 IP
这样即使外部扫描到 3389,也无法连接。
2. 启用账户锁定策略
路径:
本地安全策略
→ 账户策略
→ 账户锁定策略
建议设置:
| 策略 | 建议值 |
|---|---|
| 账户锁定阈值 | 5 次 |
| 账户锁定时间 | 15 分钟 |
| 重置账户锁定计数器 | 15 分钟 |
这样可以避免攻击者持续尝试同一个账号。
但要注意,如果服务器被大量攻击,攻击者也可能故意触发锁定,导致正常管理员无法登录。所以更推荐配合 IP 限制一起使用。
3. 禁用默认 Administrator 或改为非默认管理账号
不建议直接使用:
Administrator
Admin
test
user
可以新建一个独立管理员账号,然后禁用默认 Administrator。
路径:
计算机管理
→ 本地用户和组
→ 用户
但要注意,改名或禁用默认账号只是降低被命中的概率,不能替代防火墙和强密码策略。
4. 开启网络级别身份验证 NLA
路径:
系统属性
→ 远程
→ 仅允许运行使用网络级别身份验证的远程桌面的计算机连接
NLA 可以在建立完整远程桌面会话之前先完成身份验证,能减少部分无效连接和资源消耗。
5. 使用 VPN 或堡垒机管理 Windows 服务器
如果是企业后台、数据库管理、财务系统等敏感业务,建议不要直接暴露 3389。
更合理的结构是:
管理员电脑
→ VPN / 堡垒机
→ 内网远程桌面
→ Windows Server
这样外部公网无法直接访问远程桌面端口,暴力破解风险会下降很多。
九、发现成功异常登录后应该做什么?
如果确认有陌生 IP 成功登录,不建议只改密码。应该按下面顺序处理:
1. 立即限制登录入口
Linux:
ufw deny 22
或只允许可信 IP。
Windows:
立即在防火墙中限制 3389 来源 IP
2. 修改所有相关密码
包括:
服务器登录密码
数据库密码
后台管理密码
面板密码
FTP/SFTP 密码
应用配置文件中的连接密码
如果使用过同一个密码,要全部更换。
3. 检查新增账号
Linux:
cat /etc/passwd
重点看 UID 为 0 的用户:
awk -F: '$3==0 {print $1}' /etc/passwd
Windows:
计算机管理
→ 本地用户和组
→ 用户
检查是否有陌生管理员账号。
4. 检查 SSH 密钥
Linux:
cat ~/.ssh/authorized_keys
也要检查 root:
cat /root/.ssh/authorized_keys
如果出现陌生公钥,要立即删除。
5. 检查计划任务
Linux:
crontab -l
ls -al /etc/cron*
Windows:
任务计划程序
重点看是否有陌生脚本、可疑 exe、PowerShell 命令。
6. 检查近期登录记录
Linux:
last
lastb
Windows:
事件查看器 → 安全 → 4624 / 4625
如果发现入侵时间较长,建议迁移数据后重装系统,而不是在原系统上继续修补。
十、推荐的服务器登录安全基线
对于公网服务器,我建议至少做到下面这些:
| 项目 | Linux SSH | Windows RDP |
|---|---|---|
| 默认端口 | 可修改,但不作为核心防护 | 可修改,但不作为核心防护 |
| 密码策略 | 禁用密码,使用密钥 | 强密码 + 锁定策略 |
| 默认账号 | 禁止 root 直登 | 禁用或改造 Administrator |
| 来源限制 | 只允许固定 IP / VPN | 只允许固定 IP / VPN |
| 自动封禁 | Fail2ban | 防火墙策略 / 安全软件 |
| 日志检查 | auth.log / secure | 4624 / 4625 / 1149 |
| 管理方式 | 普通用户 + sudo | 独立管理员账号 |
| 高安全场景 | 堡垒机 | VPN / 堡垒机 |
真正有效的安全策略不是“换个端口就完事”,而是减少暴露面、限制来源、降低账号命中率,并确保成功登录行为可追踪。
结语
服务器登录日志不是只有出问题时才看。对于长期运行的网站、后台系统、API 服务来说,定期查看 SSH 和远程桌面登录日志,可以提前发现账号被撞库、端口被扫描、密码策略过弱等问题。
如果只是看到少量失败登录,不必过度紧张;但如果短时间出现大量尝试,或者失败后出现陌生 IP 成功登录,就必须立刻处理。对于企业业务服务器,最稳妥的做法是:SSH 使用密钥登录,远程桌面限制来源 IP,后台管理入口尽量放在 VPN 或堡垒机之后。
服务器安全不是靠单个设置解决,而是靠一套长期可执行的管理习惯。只要登录入口控制好,大多数暴力尝试都只能停留在日志里,无法真正进入系统。
