VPS安全加固入门:SSH密钥登录、fail2ban和UFW防火墙五步锁死

创建用户、SSH密钥登录、改端口、UFW防火墙和fail2ban五步锁死VPS
发布于
3

新开的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几块钱月付,拿来练手安全配置不心疼。

安全加固检查清单

五步做完后,用这张清单确认一遍:

  1. root不能SSH登录(PermitRootLogin no)
  2. 密码登录已关闭(PasswordAuthentication no)
  3. 密钥能正常登录,私钥有备份
  4. SSH端口已改为非22高位端口,安全组已放行
  5. UFW已启用,规则正确(只开了必须端口)
  6. 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地址。

本文由作者原创/授权发布于极跃圈(jiyueip.com)未经许可,禁止转载。题图来自Unsplash,基于CC0协议。

声明:极跃圈(JIYUEIP.com)内网友所发表的所有内容及言论仅代表其本人,并不反映任何极跃圈(JIYUEIP.com)之意见及观点。

0 讨论
热门最新
总结
暂无总结
0 / 600

按网上的教程配了SSH密钥、禁了密码登录,结果退出后连不上了——这种翻车事故每年都在重复上演。本文把SSH配置中的常见翻车点和恢复方法系统讲一遍。 翻车一:改了配置文件重启SSH后连不上 最经典的翻车:改了/etc/ssh/sshd_con

VPS突然连不上,SSH断掉、网站打不开、面板也进不去——如果你正在经历这个,大概率是被DDoS了。这时候慌没用,按下面的步骤走,先止血再恢复。 怎么判断是不是DDoS攻击 不是所有的连不上都是DDoS。先排除几个常见情况:服务器欠费被停了

VPS突然抽风——SSH连不上、控制台显示”Unknown”、机房通知物理机故障。慌的时候容易把本来就复杂的事情搞得更乱。本文是一份冷静状态下写好的恢复清单——按步骤走,二十分钟内把服务迁到新机器上。 第一步:确认挂到什么程度 先别急着重建

家里没有公网IP、公司内网的服务器只能在局域网里访问、NAS只能在连了家里WiFi时用——这些问题用一台便宜VPS搭个frp内网穿透就能解决。原理很简单:VPS作为公网入口,在VPS和你的内网设备之间建立一条加密隧道,外网用户访问VPS的某