全球服务器测评

海外VPS SSH安全防护修改默认端口、关闭密码登录与配置Fail2Ban全流程

第一次买海外VPS时,最关心的是带宽、线路和延迟,却忽略了一个更现实的问题:服务器刚开机没多久,就已经被全球扫描器盯上了。

尤其是香港、日本、新加坡、美国等热门机房,22端口几乎每天都会收到大量暴力破解请求。很多用户甚至还没部署网站,日志里已经开始出现大量:

  • root 登录尝试
  • SSH密码爆破
  • 异常IP扫描
  • 字典攻击
  • 恶意机器人探测

如果服务器长期裸奔,轻则CPU异常占用、日志爆炸,重则直接被撞库登录、植入后门、挖矿程序,甚至成为攻击跳板。

因此,SSH安全加固不是“可选项”,而是海外服务器上线后的第一件事。

这篇文章会完整讲清楚:

  • 为什么SSH必须加固
  • 如何修改SSH默认端口
  • 如何彻底禁用密码登录
  • 如何配置SSH密钥认证
  • 如何部署Fail2Ban自动封禁攻击IP
  • 如何避免把自己锁在服务器外面
  • 如何验证安全策略是否真正生效

整套方案适用于:

  • Ubuntu
  • Debian
  • CentOS
  • Rocky Linux
  • AlmaLinux
  • Oracle Linux

无论你是搭建网站、WordPress、Docker、代理服务还是数据库环境,这套SSH安全方案都建议长期保留。

为什么海外服务器更容易被暴力破解

很多用户以为:

“我服务器没人知道IP,应该很安全。”

实际上公网IP每天都在被全球扫描。

黑客并不是“人工盯着你”,而是通过自动化脚本不断扫描:

  • 22端口
  • 3389端口
  • Redis默认端口
  • MySQL默认端口
  • Docker API
  • Elasticsearch

尤其SSH默认22端口,几乎是所有扫描器的首要目标。

你可以执行:

lastb

或者:

cat /var/log/auth.log

通常会看到大量类似日志:

Failed password for root from 185.xxx.xxx.xxx
Invalid user admin from 103.xxx.xxx.xxx
Failed password for ubuntu from 91.xxx.xxx.xxx

有些服务器一天会收到几千次尝试。

如果密码强度不够,或者使用简单口令:

root123
admin123
123456
password

那么被撞库只是时间问题。

SSH安全加固的核心思路

真正有效的SSH防护,并不是单独依赖某一个措施,而是组合策略。

推荐的方案:

安全措施 作用
修改SSH端口 减少扫描命中
禁用root密码登录 防止暴力破解
使用SSH密钥 替代弱密码
禁止空密码 避免低级漏洞
配置Fail2Ban 自动封禁攻击IP
防火墙限制端口 减少暴露面
定期更新系统 修复漏洞

很多人只改端口,但实际上这只能降低扫描量,不能真正防止攻击。

真正安全的是:

“密码彻底失效,只允许密钥登录。”

修改SSH默认22端口

默认SSH端口:

22

这是全球扫描器重点攻击对象。

虽然改端口不是绝对安全,但可以显著降低日志污染和无效攻击。

修改SSH配置文件

编辑:

/etc/ssh/sshd_config

Ubuntu/Debian:

sudo nano /etc/ssh/sshd_config

CentOS:

sudo vi /etc/ssh/sshd_config

找到:

#Port 22

修改为:

Port 46221

建议:

  • 不要使用过于简单的端口
  • 不要用8888、12345这种常见端口
  • 选择10000以上端口

例如:

Port 46221

放行防火墙端口

很多人改完SSH端口后,直接失联。

原因是:

防火墙没放行新端口。

Ubuntu UFW

查看状态:

sudo ufw status

放行:

sudo ufw allow 46221/tcp

CentOS Firewalld

sudo firewall-cmd --permanent --add-port=46221/tcp
sudo firewall-cmd --reload

重启SSH服务

Ubuntu/Debian:

sudo systemctl restart ssh

CentOS:

sudo systemctl restart sshd

千万不要立刻关闭当前SSH窗口

正确做法:

新开一个终端测试。

例如:

ssh -p 46221 root@你的IP

确认能连接后,再关闭旧会话。

否则一旦配置错误,你可能只能进VNC救援模式。

配置SSH密钥登录

这是SSH安全最核心的一步。

相比密码:

SSH密钥几乎无法被暴力破解。

因为它不是简单字符口令,而是非对称加密认证。

Windows生成SSH密钥

Windows 11已经自带OpenSSH。

PowerShell执行:

ssh-keygen

连续回车即可。

生成位置:

C:\Users\用户名\.ssh\

会得到:

id_rsa
id_rsa.pub

其中:

文件 作用
id_rsa 私钥
id_rsa.pub 公钥

私钥必须自己保存。

绝对不要泄露。

上传公钥到服务器

方法一:

ssh-copy-id -p 46221 root@服务器IP

如果本地没有ssh-copy-id,也可以手动上传。

手动方式

服务器执行:

mkdir -p ~/.ssh
nano ~/.ssh/authorized_keys

把:

id_rsa.pub

内容复制进去。

然后设置权限:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

测试密钥登录

执行:

ssh -p 46221 root@服务器IP

如果直接登录成功,没有输入密码。

说明密钥认证已经生效。

禁用SSH密码登录

这是最关键的一步。

如果不关闭密码,即使配置了密钥,攻击者仍然可以暴力破解密码。

编辑:

/etc/ssh/sshd_config

修改以下内容:

PasswordAuthentication no

同时建议:

PermitRootLogin prohibit-password
PubkeyAuthentication yes
PermitEmptyPasswords no

推荐最终配置:

Port 46221

PermitRootLogin prohibit-password

PubkeyAuthentication yes

PasswordAuthentication no

PermitEmptyPasswords no

UsePAM yes

配置含义解析

PermitRootLogin prohibit-password

含义:

允许root登录,但只能用密钥。

禁止root密码认证。

PasswordAuthentication no

彻底关闭密码登录。

这是防爆破核心。

PermitEmptyPasswords no

禁止空密码账户。

检查SSH配置是否有语法错误

很多人改完直接重启。

结果SSH启动失败。

正确做法:

sshd -t

如果没有输出。

说明配置正常。

重新启动SSH

systemctl restart sshd

Ubuntu部分系统:

systemctl restart ssh

Fail2Ban是什么

即使关闭密码登录。

攻击请求仍然会不断扫描服务器。

Fail2Ban的作用:

自动识别恶意IP。

并动态封禁。

它本质是:

“日志分析 + 防火墙联动”

例如:

某IP连续5次登录失败。

Fail2Ban自动:

iptables ban

或者:

firewalld ban

攻击IP会被临时拉黑。

安装Fail2Ban

Ubuntu/Debian:

sudo apt update
sudo apt install fail2ban -y

CentOS:

sudo yum install epel-release -y
sudo yum install fail2ban -y

启动Fail2Ban

sudo systemctl enable fail2ban
sudo systemctl start fail2ban

查看状态:

systemctl status fail2ban

配置SSH防护规则

不要直接修改:

jail.conf

正确方式:

创建:

/etc/fail2ban/jail.local

写入:

[sshd]

enabled = true

port = 46221

filter = sshd

logpath = /var/log/auth.log

maxretry = 5

findtime = 10m

bantime = 12h

参数详解

参数 作用
enabled 启用规则
port SSH端口
filter 使用ssh过滤器
logpath 日志路径
maxretry 最大失败次数
findtime 检测时间
bantime 封禁时间

CentOS日志路径不同

CentOS通常是:

/var/log/secure

因此:

logpath = /var/log/secure

重启Fail2Ban

systemctl restart fail2ban

查看封禁状态

查看整体状态:

fail2ban-client status

查看SSH状态:

fail2ban-client status sshd

会看到:

Banned IP list:

手动解封IP

如果误封:

fail2ban-client set sshd unbanip IP地址

例如:

fail2ban-client set sshd unbanip 1.1.1.1

配合防火墙效果更好

推荐:

  • Ubuntu:UFW
  • CentOS:Firewalld

只开放必要端口:

22/SSH
80/HTTP
443/HTTPS

其它全部关闭。

不要暴露:

  • Redis
  • MySQL
  • MongoDB
  • Docker Remote API

这些端口一旦裸露公网,非常危险。

SSH安全加固后的效果

配置完成后。

你会发现:

  • auth.log安静很多
  • 暴力破解大量减少
  • CPU异常占用下降
  • 无意义扫描减少
  • 服务器更稳定

尤其是海外VPS。

差别非常明显。

额外推荐的SSH安全策略

禁止root直接登录

更严格的做法:

创建普通用户:

adduser admin

加入sudo:

usermod -aG sudo admin

然后:

PermitRootLogin no

以后:

ssh admin@IP

再:

sudo su

这是企业服务器常见方案。

限制SSH登录IP

如果你有固定办公IP。

可以直接限制:

allow 你的IP
deny all

或者:

iptables白名单。

这是更高级的安全策略。

使用Google Authenticator双重验证

可以增加:

  • 动态验证码
  • 手机二次验证

即使密钥泄露。

也难以登录。

适合:

  • 重要业务服务器
  • 企业生产环境
  • 金融类项目

定期更新系统补丁

很多入侵并不是密码问题。

而是漏洞。

建议定期执行:

Ubuntu:

apt update && apt upgrade -y

CentOS:

yum update -y

最容易犯的几个错误

改端口后没放行防火墙

最常见。

直接失联。

禁用密码前没测试密钥

结果:

永远登录不上。

authorized_keys权限错误

SSH直接拒绝密钥。

正确权限:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
Fail2Ban日志路径错误

导致根本不生效。

Ubuntu:

/var/log/auth.log

CentOS:

/var/log/secure

一套适合长期使用的SSH安全方案

个人比较推荐的长期组合:

项目 推荐
SSH端口 10000以上
登录方式 仅密钥
root登录 禁止密码
Fail2Ban 必装
防火墙 只开放必要端口
双重验证 重要服务器启用

这套方案已经足够应对绝大多数自动化攻击。

对于个人站长、中小企业、跨境业务服务器来说,安全性会比默认配置高很多。

很多服务器被入侵,并不是因为黑客技术有多强,而是因为默认配置太“裸”。

默认22端口。

默认root登录。

默认密码认证。

这些组合在海外公网环境里,风险极高。

真正成熟的运维习惯,不是等服务器被挂马后再补救,而是在上线第一天就完成SSH安全加固。

未经允许不得转载:全球服务器测评 » 海外VPS SSH安全防护修改默认端口、关闭密码登录与配置Fail2Ban全流程