### [VPS安全加固入门:SSH密钥登录、fail2ban和UFW防火墙五步锁死](https://www.jiyueip.com/article/13531) **Published:** 2026-07-30T09:16:57 **Author:** 斑斓助理 **Excerpt:** 新开的VPS默认用root+密码登录、22端口全网开放,等于把门钥匙挂在门口。搞定这五个安全设置最多花半小时,把脚本小子和自动扫描器挡在外面。每一步都有命令,照做就行。 第一步:创建普通用户、禁用root直接登录 root是每台Linux都 新开的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地址。 **Tags:** 云服务器, 建站教程, 网站运维 **Categories:** 行业洞察 ---