LHIDC

海外服务器遭遇可疑登录尝试后,账号、SSH日志和防火墙策略应如何复核

面向运维工程师,说明海外服务器出现异常登录尝试后如何通过SSH认证日志、账号与密钥、防火墙规则判断风险,并给出访问入口加固和持续审计建议。

海外服务器遭遇可疑登录尝试后,账号、SSH日志和防火墙策略应如何复核

风险范围先定清:可疑登录不等于已入侵,但不能只看一条告警

海外服务器暴露在公网后,SSH 端口出现来自陌生 IP 的登录尝试并不少见。真正需要立即确认的是:这些尝试是否只是被拒绝的扫描,还是已经出现成功登录、弱口令命中、异常账号活动或防火墙放行范围过宽。处理时应以“保留现有会话、先查证再变更”为原则,避免在未确认远程控制台可用的情况下修改 SSH 或防火墙导致自己被锁在服务器外。

以下操作默认面向 Linux 服务器,并且你已拥有合法管理员权限。不同发行版的 SSH 认证日志路径可能不同:Debian/Ubuntu 通常在 /var/log/auth.log,RHEL/CentOS/Rocky/AlmaLinux 通常在 /var/log/secure,使用 systemd-journald 的系统也可以通过 journalctl 查看。若服务器由云平台托管,还要同步核对安全组、ACL 或边界防火墙,因为系统内防火墙并不一定代表最终访问入口。

从日志判断风险等级:重点看失败、成功和来源变化

SSH日志是确认可疑登录风险的第一入口。不要只统计失败次数,更要关注是否出现了成功登录、登录用户是否合理、来源 IP 是否与运维出口一致、时间点是否匹配正常变更窗口。

先定位 SSH 认证日志位置

可以先按发行版检查日志文件,再用 journalctl 补充确认:

# Debian / Ubuntu 常见路径
sudo grep -Ei "sshd|failed|accepted|invalid user" /var/log/auth.log | tail -n 100

# RHEL / CentOS / Rocky / AlmaLinux 常见路径
sudo grep -Ei "sshd|failed|accepted|invalid user" /var/log/secure | tail -n 100

# systemd 日志方式,适用于多数现代 Linux
sudo journalctl -u ssh -u sshd --since "24 hours ago" --no-pager

如果日志已经轮转,可查看压缩日志:

sudo zgrep -Ei "sshd|failed|accepted|invalid user" /var/log/auth.log* | tail -n 100
sudo zgrep -Ei "sshd|failed|accepted|invalid user" /var/log/secure* | tail -n 100

关注几类关键日志含义

日志特征 风险判断 处理重点
Failed password 密码登录失败,常见于扫描或撞库 判断频率、来源、目标账号
Invalid user 对不存在账号尝试登录 通常是自动化扫描,但需确认是否持续高频
Accepted password 密码登录成功 高风险,需确认来源和账号是否可信
Accepted publickey 密钥登录成功 不一定异常,需核对密钥归属和登录来源
authentication failure 认证失败记录 结合用户、IP、时间段分析
session opened / session closed 会话打开或关闭 用于确认登录是否形成有效会话

如果只看到大量 Invalid userFailed password,且没有成功登录记录,通常说明服务器被扫描,但入口仍需加固。如果出现非预期的 Accepted passwordAccepted publickey,应按疑似入侵处理:先保留日志、保留当前连接、确认业务影响,再进行账号、密钥和凭据轮换。

快速筛选成功登录记录

# Debian / Ubuntu
sudo grep -Ei "Accepted password|Accepted publickey" /var/log/auth.log*

# RHEL 系
sudo grep -Ei "Accepted password|Accepted publickey" /var/log/secure*

# journald
sudo journalctl -u ssh -u sshd --since "7 days ago" --no-pager | grep -Ei "Accepted password|Accepted publickey"

同时查看近期登录历史:

last -a | head -n 30
lastlog | head -n 30
who
w

last 记录依赖 /var/log/wtmplastlog 记录用户最近登录时间。它们可以辅助判断,但不应作为唯一证据;如果系统已被深度入侵,本地日志存在被篡改的可能,后续应结合远程日志、堡垒机记录或云平台登录审计。

复核账号与密钥:确认有没有异常入口被留下

SSH 登录最终落到系统账号和认证材料上。可疑登录出现后,账号安全检查不要只改 root 密码,而要核对所有可登录账号、sudo 权限、SSH 密钥和系统配置。

检查可交互登录账号

先查看哪些账号拥有可登录 Shell:

awk -F: '$7 ~ /(bash|sh|zsh|ksh)$/ {print $1,$3,$6,$7}' /etc/passwd

重点关注:

  • 是否存在不认识的普通用户;
  • UID 是否异常,尤其是 UID 为 0 的非 root 账号;
  • 业务账号是否被赋予交互式 Shell;
  • 临时运维账号是否过期后仍保留;
  • 是否有账号近期登录时间与运维记录不匹配。

检查 UID 为 0 的账号:

awk -F: '$3 == 0 {print $1,$3,$6,$7}' /etc/passwd

正常情况下只有 root 使用 UID 0。如果出现其他账号,应立即确认来源。

检查 sudo 和管理组权限

不同发行版的管理组名称不同。Debian/Ubuntu 常见为 sudo,RHEL 系常见为 wheel

getent group sudo
getent group wheel
sudo grep -R "^[^#].*ALL" /etc/sudoers /etc/sudoers.d/ 2>/dev/null

这里不建议直接删除 sudo 配置。更安全的做法是先记录当前配置、确认业务依赖,再禁用不应拥有管理权限的账号。涉及 /etc/sudoers 的修改应使用 visudo,避免语法错误导致管理员权限不可用。

检查 SSH 公钥文件

重点查看 root 和运维账号的 authorized_keys

sudo find /root /home -path "*/.ssh/authorized_keys" -type f -print -exec ls -l {} \;

进一步查看密钥内容时,应核对备注、指纹和归属,不要只看文件是否存在:

sudo ssh-keygen -lf /root/.ssh/authorized_keys

如果某个用户的 authorized_keys 中存在无法确认来源的公钥,应先备份该文件,再移除异常条目,并记录操作时间。不要直接清空整个文件,避免影响正常运维入口。

同时检查 SSH 目录权限。常见建议为:

# 仅查看,不直接修改
sudo ls -ld /root/.ssh /home/*/.ssh 2>/dev/null
sudo ls -l /root/.ssh/authorized_keys /home/*/.ssh/authorized_keys 2>/dev/null

一般情况下,用户家目录不应对其他用户可写,.ssh 目录通常为 700authorized_keys 通常为 600 或更严格。权限过宽可能导致密钥被非预期用户修改。

复核 SSH 登录限制:优先减少暴露面

确认账号状态后,应检查 SSH 服务配置。配置文件通常为 /etc/ssh/sshd_config,部分系统还会使用 /etc/ssh/sshd_config.d/*.conf 目录拆分配置。修改前建议备份并先做语法检查。

sudo sshd -T | grep -Ei "port|permitrootlogin|passwordauthentication|pubkeyauthentication|kbdinteractiveauthentication|maxauthtries|allowusers|allowgroups"

sshd -T 会输出最终生效配置,比单独查看配置文件更接近实际状态。重点关注以下项:

配置项 建议方向 说明
PermitRootLogin 优先关闭 root 远程登录或限制为密钥 先确保有普通管理账号和 sudo 权限
PasswordAuthentication 能使用密钥时建议关闭密码登录 关闭前必须验证密钥登录可用
PubkeyAuthentication 通常保持启用 便于使用密钥替代密码
KbdInteractiveAuthentication 按需关闭 避免绕过密码登录限制的误配置
AllowUsers / AllowGroups 限定可登录用户 适合账号较少的服务器
MaxAuthTries 适当降低 减少单连接尝试次数

示例配置片段如下,仅作为方向,不能直接覆盖现有文件:

# /etc/ssh/sshd_config 或 /etc/ssh/sshd_config.d/hardening.conf
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
KbdInteractiveAuthentication no
MaxAuthTries 3
AllowUsers opsuser

变更前务必确认 opsuser 已能通过密钥登录并具备必要的 sudo 权限。修改后先检查语法:

sudo sshd -t

再重载服务。不同发行版服务名可能是 sshsshd

sudo systemctl reload sshd
# 如果提示服务不存在,再核对:
sudo systemctl reload ssh

重载后不要关闭当前 SSH 会话,另开一个终端测试新连接,确认可登录后再退出旧会话。

防火墙策略复核:系统防火墙和云侧安全组要一起看

海外服务器的 SSH 可疑登录往往来自公网大范围扫描。只在系统里限制端口还不够,如果云平台安全组仍对全网开放,攻击流量仍会到达服务器。反过来,如果安全组已经限制来源,系统内防火墙可能看不到完整风险。

先查看当前放行面

常见防火墙查看命令如下,按实际系统选择:

# UFW,常见于 Ubuntu
sudo ufw status verbose

# firewalld,常见于 RHEL 系
sudo firewall-cmd --list-all

# nftables
sudo nft list ruleset

# iptables
sudo iptables -S

复核时重点看:

  • SSH 端口是否对 0.0.0.0/0::/0 开放;
  • 是否存在多个 SSH 端口同时开放;
  • IPv6 是否被忽略,导致 IPv4 限制了但 IPv6 仍开放;
  • 云安全组、系统防火墙、面板防火墙是否规则不一致;
  • 运维出口 IP 是否固定,是否适合做白名单。

优先采用来源限制,而不是只依赖改端口

更改 SSH 端口可以减少低质量扫描噪声,但不能作为核心防护。更可靠的策略是只允许可信办公出口、堡垒机、VPN 或跳板机访问 SSH。

以 UFW 为例,调整前应先确认当前会话来源 IP,并优先添加允许规则,再收紧默认访问:

# 示例:仅允许可信运维出口访问 22 端口
sudo ufw allow from 203.0.113.10 to any port 22 proto tcp

# 确认规则存在后再评估是否移除全网放行规则
sudo ufw status numbered

以 firewalld 为例,可使用 rich rule 进行来源限制:

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.10/32" port protocol="tcp" port="22" accept'
sudo firewall-cmd --reload
sudo firewall-cmd --list-all

上述 IP 203.0.113.10 是文档示例地址,实际应替换为你的运维出口、堡垒机或 VPN 出口。若运维人员经常跨地区办公,直接使用个人动态 IP 白名单可能维护成本较高,应考虑 VPN、零信任接入或堡垒机统一入口。

在执行防火墙变更前,建议具备以下条件:

  • 已确认云平台控制台或远程救援模式可用;
  • 当前 SSH 会话保持不断开;
  • 已备份当前防火墙规则;
  • 已准备回滚命令或可通过控制台恢复;
  • 已同步修改 IPv4 与 IPv6 规则。

备份示例:

# iptables 规则备份
sudo iptables-save > ~/iptables-backup-$(date +%F-%H%M).rules

# nftables 规则备份
sudo nft list ruleset > ~/nftables-backup-$(date +%F-%H%M).rules

验证加固是否生效:看连接结果,也看日志变化

完成账号、SSH 配置和防火墙策略调整后,需要验证“该拒绝的拒绝、该允许的允许”。验证不是简单地能连上就结束,还要看日志是否按预期记录。

建议按以下顺序检查:

  1. 从可信来源新建 SSH 连接,确认管理账号可登录;
  2. 确认 root 远程登录是否按配置被拒绝;
  3. 确认密码登录是否已禁用,密钥登录是否正常;
  4. 从非白名单来源测试 SSH 是否无法建立连接;
  5. 查看认证日志,确认拒绝原因符合预期;
  6. 查看防火墙命中记录或云安全组流量记录。

可用以下命令观察实时日志:

# Debian / Ubuntu
sudo tail -f /var/log/auth.log

# RHEL 系
sudo tail -f /var/log/secure

# journald
sudo journalctl -u ssh -u sshd -f

如果修改后出现正常账号无法登录,应优先通过现有会话或控制台恢复配置。不要连续盲目重启 SSH 服务,否则可能扩大影响。若 sshd -t 已提示配置错误,应先修正语法再重载。

出现成功可疑登录时,应按更高等级处置

如果 SSH日志中已经出现无法解释的 Accepted passwordAccepted publickey 或异常会话记录,不能只把防火墙收紧当作结束。此时应假设账号凭据可能泄露,并评估服务器上业务数据、配置文件、密钥、数据库连接串和第三方 Token 是否暴露。

建议动作包括:

  • 立即保存相关日志副本,避免轮转覆盖;
  • 记录异常登录账号、来源 IP、时间段和执行痕迹;
  • 检查该账号的 Shell 历史、计划任务和启动项;
  • 轮换该账号密码、SSH 密钥及相关业务密钥;
  • 核对 /etc/crontab/etc/cron.*、用户 crontab;
  • 检查 systemd 自启动服务是否有异常项;
  • 对关键业务进行完整性校验;
  • 必要时从可信备份重建服务器,而不是在不可信系统上继续修补。

相关检查示例:

sudo crontab -l
sudo ls -la /etc/cron.d /etc/cron.daily /etc/cron.hourly /etc/cron.weekly
sudo systemctl list-unit-files --type=service --state=enabled
sudo ss -tunlp

这些命令用于发现异常持久化和监听服务,不应代替完整的安全取证。若服务器承载核心业务或敏感数据,建议保留磁盘快照后再进行深入分析,避免清理动作破坏证据。

将可疑登录处置固化为持续审计

单次加固只能降低当前暴露面,不能保证以后不再出现可疑登录。海外服务器面向公网运行时,应把账号安全、SSH日志和防火墙策略纳入持续审计。

可落地的审计项包括:

  • 每周检查一次成功登录记录,重点关注非办公时间和陌生来源;
  • 对管理员账号建立清单,离职、转岗或外包结束后及时回收;
  • 定期核对 authorized_keys 指纹,避免遗留临时密钥;
  • 将 SSH 认证日志转发到独立日志平台,减少本机日志被篡改的影响;
  • 对短时间大量失败登录设置告警;
  • 使用 Fail2ban、sshguard 或等效工具做自动封禁,但不要替代白名单策略;
  • 为关键服务器引入堡垒机、VPN 或多因素认证;
  • 定期演练防火墙回滚和控制台救援流程。

Fail2ban 这类工具适合降低暴力尝试频率,但它依赖日志匹配和封禁规则,不能宣称百分百防御。若 SSH 已通过安全组限制到固定入口,Fail2ban 的价值主要体现在二次防护;若 SSH 仍对公网开放,则应优先收紧访问来源。

最后保留一份服务器访问基线:哪些账号允许登录、哪些 IP 可以访问 SSH、SSH 配置关键项是什么、日志保留多久、告警由谁处理。下次再出现海外服务器可疑登录时,就能快速判断是普通扫描、配置偏差,还是已经触及账号安全边界,并按既定流程响应。

上一篇 日本名古屋云服务器和大阪云服务器面向关西用户,延迟与交付如何比较

LHIDC 产品中心

继续查看可购买的海外服务器产品

文章用于辅助选型,最终价格、库存与配置请以产品详情页和下单页面展示为准。

查看产品 查看方案