新购 VPS 后,最优先的动作是配置 SSH 密钥登录并关闭密码认证,同时设置防火墙只放行必要端口,这是防止暴力破解最有效的基础措施。
先说结论:默认配置通常为了兼容性牺牲了安全性,必须修改 SSH 认证方式和防火墙规则才能投入生产使用。
- 先判断:确认当前网络环境是否允许你配置密钥,避免把自己锁在门外。
- 优先做:创建普通用户、配置 SSH Key、关闭 Root 密码登录、开启防火墙。
- 再验证:保留一个已登录的终端窗口,新开窗口测试新配置成功后再关闭旧窗口。
命令速用版
# 1. 更新系统包 (需要 root 或 sudo 权限)\nsudo apt update && sudo apt upgrade -y # Debian/Ubuntu\nsudo yum update -y # CentOS\n\n# 2. 创建新用户并赋予 sudo 权限\nsudo adduser newuser # Debian/Ubuntu\nsudo useradd -m -G wheel newuser # CentOS\nsudo passwd newuser\n\n# 3. 检查 SSH 配置语法\nsudo sshd -t\n\n# 4. 重启 SSH 服务\nsudo systemctl restart sshd\n\n# 5. 开启防火墙并放行 SSH\nsudo ufw allow 22/tcp # Debian/Ubuntu\nsudo ufw enable\n# CentOS 使用 firewalld\nsudo firewall-cmd `--permanent` `--add-service`=ssh\nsudo firewall-cmd `--reload`为什么会这样
云厂商提供的镜像通常保留 Root 密码登录且开放所有出站流量,这种默认状态在互联网上暴露几分钟就可能被自动化脚本扫描。关闭密码登录能从根本上杜绝暴力破解密码的风险,而防火墙则能减少被攻击的面。这些修改不涉及性能损耗,主要是身份验证和网络访问控制层面的加固。
分步处理
第一步:创建普通用户
长期使用 Root 操作风险较高,误操作可能导致系统损坏。创建一个普通用户用于日常维护。注意不同系统的命令差异:
# Debian/Ubuntu\nsudo adduser admin\n\n# CentOS/RHEL\nsudo useradd -m -G wheel admin\nsudo passwd admin第二步:配置 SSH 密钥
在本地电脑生成密钥对,将公钥上传到服务器。不要直接编辑 authorized_keys 文件权限,建议使用 ssh-copy-id。
ssh-copy-id admin@服务器地址第三步:修改 SSH 配置文件
编辑/etc/ssh/sshd_config,找到以下项并修改。注意:不要直接复制粘贴,要取消注释并修改值。
sudo vim /etc/ssh/sshd_config\n\n# 修改以下配置项\nPermitRootLogin no\nPasswordAuthentication no\nPubkeyAuthentication yes\n# 如果修改了端口,例如 Port 2222,需确保防火墙已放行第四步:配置防火墙
使用 UFW(Ubuntu)或 firewalld(CentOS)。先放行 SSH 端口,再启用防火墙。
# Ubuntu/Debian (UFW)\nsudo ufw allow 22/tcp\nsudo ufw enable\n\n# CentOS (firewalld)\nsudo firewall-cmd `--permanent` `--add-service`=ssh\nsudo firewall-cmd `--reload`\nsudo systemctl enable firewalld\nsudo systemctl start firewalld重要提醒:在重启 SSH 服务或启用防火墙前,务必保持当前终端连接不断开,新开一个终端测试登录成功后,再关闭旧连接。
怎么验证是否生效
1. SSH 配置检查:运行sudo sshd -t,如果没有输出则说明配置文件语法正确。
2. 登录测试:打开新的终端窗口,使用密钥登录普通用户,确认不需要输入密码且 Root 无法直接登录。
3. 防火墙状态:运行sudo ufw status (Ubuntu) 或 sudo firewall-cmd `--list-all` (CentOS),确认状态为 active 且只放行了必要端口。
4. 服务状态:运行sudo systemctl status sshd,确认服务正在运行且无报错。
常见坑
1. 把自己锁在门外:修改 SSH 配置后没有测试就直接关闭了当前连接,一旦配置错误就无法远程登录。解决方法是使用控制台(VNC)登录修复。
2. 防火墙规则顺序:先启用防火墙再放行 SSH 端口,会导致立即断开连接。必须先 allow/add-service 再 enable/reload。
3. 密钥权限问题:服务器上~/.ssh目录权限必须是 700,authorized_keys必须是 600,否则 SSH 会拒绝使用密钥登录。
4. SELinux 拦截:在 CentOS 等开启 SELinux 的系统上,修改 SSH 端口或目录可能需要调整 SELinux 策略,否则服务无法启动。
5. 修改端口未更新防火墙:如果在 sshd_config 中修改了 SSH 端口(如改为 2222),但未在防火墙中放行新端口,重启服务后将无法连接。务必先放行新端口再重启 SSH 服务。