新开的VPS默认用root+密码登录、22端口全网开放,等于把门钥匙挂在门口。搞定这五个安全设置最多花半小时,把脚本小子和自动扫描器挡在外面。每一步都有命令,照做就行。
第一步:创建普通用户、禁用root直接登录
root是每台Linux都有的超级管理员账号,攻击者不需要猜用户名,只猜密码就行。第一步创建一个名字不常见的普通用户,日常用它登录,需要root权限时用sudo提权。
# 创建用户(把youruser换成你想用的名字,别用admin/ubuntu/debian这种默认名)
adduser youruser
# 给这个用户sudo权限
usermod -aG sudo youruser
# 编辑SSH配置,禁用root登录
nano /etc/ssh/sshd_config
# 找到并修改这两行:
PermitRootLogin no
PasswordAuthentication no
# 保存后重启SSH
systemctl restart sshd改完别急着关当前SSH窗口。先新开一个终端用普通用户登录测试,确认能连上再关root窗口。每年都有运维改完配置把自己锁外面,只能通过VNC救急。
第二步:SSH密钥登录代替密码
密码登录有两个致命问题:会被暴力破解、你哪天忘了密码自己也进不去。密钥登录用一对公私钥认证,私钥在你电脑上,公钥放在服务器上,密码猜不了密钥。
# 在你本地电脑(不是服务器)生成密钥对
ssh-keygen -t ed25519 -C "your_email@example.com"
# 一路回车,默认保存在 ~/.ssh/id_ed25519
# 把公钥传到服务器
ssh-copy-id youruser@你的服务器IP
# 输入一次密码后,之后登录就不用密码了
# 验证:
ssh youruser@你的服务器IP
# 应该直接连进去,不提示密码私钥文件(id_ed25519)是你唯一的钥匙,丢了就进不去服务器了。备份到另一个安全的地方。别把私钥放云盘或微信传——这是安全入门第一条。
第三步:改SSH默认端口
22端口是全球扫描器的首要目标。换成五位数的高位端口,脚本扫描不会扫到——虽然安全圈有人认为改端口只是”通过隐蔽实现安全”,但实际上能挡掉99%的自动攻击。
nano /etc/ssh/sshd_config
# 找到 Port 那一行,改成:
Port 22222
# 别用2222、22222这种常见替代端口,换成随机五位数
# 重启SSH
systemctl restart sshd
# 之后登录要指定端口
ssh -p 22222 youruser@你的服务器IP改端口后VPS服务商的防火墙(安全组)也要放开新端口,不然连不上。各家的叫法不同——阿里云叫安全组、雨云和腾讯云叫防火墙规则。
第四步:UFW防火墙最小化开放
默认策略:拒绝所有入站连接,只开放你需要的端口。
# 安装UFW(一般已预装)
apt install ufw -y
# 默认拒绝所有入站NUFW default deny incoming
# 允许所有出站
UFW default allow outgoing
# 只开放你需要的端口
UFW allow 22222/tcp comment 'SSH'
UFW allow 80/tcp comment 'HTTP'
UFW allow 443/tcp comment 'HTTPS'
# 如果你跑的是建站类VPS,MySQL不需要对外开放,别开3306
# 查看规则确认无误
UFW status numbered
# 启用防火墙
UFW enable启用前再看一遍规则——确认SSH的新端口在允许列表里。否则UFW一开你自己先掉线。如果不小心锁了自己,VNC还能救。
第五步:fail2ban自动封禁暴力破解
UFW挡住了端口但不挡暴力尝试。fail2ban监控登录日志,短时间内失败几次就自动把那个IP加进防火墙黑名单。
apt install fail2ban -y
# 创建本地配置文件(不要直接改默认的jail.conf)
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
nano /etc/fail2ban/jail.local
# 关键配置:
[DEFAULT]
bantime = 3600 # 封禁1小时
findtime = 600 # 10分钟内的失败计为连续
maxretry = 5 # 失败5次就封
[sshd]
enabled = true
port = 22222 # 改成你的SSH端口
maxretry = 3 # SSH更敏感,3次就封
# 启动并设为开机自启
systemctl enable fail2ban --now
# 查看被封的IP
fail2ban-client status sshd也可以给Nginx加防护,在jail.local里加一个nginx-http-auth的规则,防止有人暴力破解网站后台。有雨云这类VPS的用户可以用优惠码 admin01 注册享五折,入门VPS几块钱月付,拿来练手安全配置不心疼。
安全加固检查清单
五步做完后,用这张清单确认一遍:
- root不能SSH登录(PermitRootLogin no)
- 密码登录已关闭(PasswordAuthentication no)
- 密钥能正常登录,私钥有备份
- SSH端口已改为非22高位端口,安全组已放行
- UFW已启用,规则正确(只开了必须端口)
- fail2ban在跑,能看到封禁记录
另外,系统保持更新:apt update && apt upgrade -y 每周跑一次。旧版本的OpenSSH和内核有已知漏洞,不更新等于门锁生锈了也不换。
常见问题
改了SSH端口后连不上了怎么办?
先确认VPS的后台安全组/防火墙规则放了新端口。再确认SSH服务重启了(systemctl restart sshd)。都不行就用VNC登录检查——大多数VPS服务商控制台都有VNC功能,不依赖SSH。
私钥丢了还能进服务器吗?
如果还有另一个有sudo权限的账号配了密钥,用它登录后重新给你的账号加公钥。如果所有账号都进不去,只能VNC登录后临时改回密码认证(PasswordAuthentication yes),进去重新配密钥。
fail2ban会不会把我自己也封了?
会。如果你用密码登录(在完全切到密钥之前),手抖输错几次密码,fail2ban会把你的IP封掉。解决方法是把自己的IP加入fail2ban的白名单:在jail.local的[DEFAULT]段加一行 ignoreip = 你的IP地址。






