《远程访问安全加固策略》
第3章 SSH服务端加固
3、SSH服务端加固:禁用root登录、修改默认端口、使用密钥认证
SSH(Secure Shell)是远程管理Linux服务器的核心通道,但默认配置往往存在严重安全隐患。本课程将系统讲解三项最关键的加固措施:禁用root直接登录、修改默认22端口以及强制使用密钥认证。这三项措施如同为服务器安装了三把安全锁,能有效抵御暴力破解、端口扫描和权限提升攻击。
3.1 禁用root直接登录
root账户拥有系统最高权限,直接使用root进行SSH登录是极其危险的行为。攻击者一旦通过暴力破解获取root密码,即可完全控制服务器。正确的做法是:使用普通用户登录,再通过sudo提权。
| 配置项 | 推荐值 | 说明 |
|---|---|---|
PermitRootLogin |
no |
禁止root直接SSH登录 |
PermitRootLogin |
prohibit-password |
仅允许密钥登录root(次优方案) |
配置步骤:
- 使用普通用户登录服务器
- 编辑SSH配置文件:
sudo vim /etc/ssh/sshd_config - 找到
#PermitRootLogin yes,修改为PermitRootLogin no - 重启SSH服务:
sudo systemctl restart sshd
# 修改前
#PermitRootLogin yes
# 修改后
PermitRootLogin no
3.2 修改默认SSH端口
SSH默认监听22端口,全球自动化扫描工具会优先扫描该端口。修改为高位端口(如2222、10022等)可以有效避开90%以上的自动化攻击。
| 端口范围 | 推荐用途 | 说明 |
|---|---|---|
| 1024-49151 | SSH服务端口 | 建议选择5000以上的端口 |
| 49152-65535 | 动态/私有端口 | 也可使用,但需注意防火墙规则 |
配置步骤:
- 编辑配置文件:
sudo vim /etc/ssh/sshd_config - 找到
#Port 22,修改为Port 2222(或其他端口) - 配置防火墙放行新端口:
sudo ufw allow 2222/tcp - 重启SSH服务:
sudo systemctl restart sshd - 重要:保持原22端口会话不退出,另开终端测试新端口连接成功后再关闭旧会话
# 修改前
#Port 22
# 修改后
Port 2222
# 防火墙放行
sudo ufw allow 2222/tcp
sudo ufw reload
3.3 使用密钥认证
密码认证存在被暴力破解、中间人窃听等风险。密钥认证采用非对称加密(RSA/Ed25519),安全性远高于密码认证。推荐使用Ed25519算法,兼顾安全性与性能。
| 认证方式 | 安全性 | 便捷性 | 推荐场景 |
|---|---|---|---|
| 密码认证 | ⭐ | ⭐⭐⭐ | 仅用于临时访问 |
| RSA密钥(4096位) | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | 兼容性要求高时使用 |
| Ed25519密钥 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | 强烈推荐 |
配置步骤:
- 客户端生成密钥对:
ssh-keygen -t ed25519 -C "your_email@example.com" - 复制公钥到服务器:
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server_ip -p 2222 - 服务器端配置:编辑
/etc/ssh/sshd_config,确保以下配置生效 - 重启SSH服务:
sudo systemctl restart sshd
# 服务器端 sshd_config 关键配置
PubkeyAuthentication yes # 启用密钥认证
PasswordAuthentication no # 禁用密码认证(重要!)
ChallengeResponseAuthentication no # 禁用挑战响应认证
UsePAM no # 禁用PAM认证(可选)
# 客户端生成密钥
ssh-keygen -t ed25519 -C "admin@example.com"
# 复制公钥到服务器
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@192.168.1.100 -p 2222
3.4 综合加固检查清单
完成上述三项加固后,建议使用以下清单进行验证:
- 禁用root登录:尝试
ssh root@server_ip,应被拒绝 - 端口修改:使用
nmap -p 22 server_ip确认22端口关闭 - 密钥认证:尝试使用密码登录,应被拒绝
- 防火墙规则:确认新端口已放行,旧端口已关闭
- 日志检查:查看
/var/log/auth.log确认无异常登录尝试
# 验证命令汇总
# 1. 测试root登录(应失败)
ssh root@server_ip -p 2222
# 2. 测试密码认证(应失败)
ssh user@server_ip -p 2222 -o PreferredAuthentications=password
# 3. 测试密钥认证(应成功)
ssh user@server_ip -p 2222 -i ~/.ssh/id_ed25519
# 4. 查看SSH日志
sudo tail -f /var/log/auth.log | grep sshd
💡 核心要点:SSH服务端加固是服务器安全的第一道防线。禁用root登录切断最高权限入口,修改默认端口规避自动化扫描,密钥认证杜绝密码泄露风险。三项措施缺一不可,建议在服务器初始化时立即实施。