SSH安全最佳实践
AI 生成
SSH安全配置最佳实践
SSH (Secure Shell) 是系统管理员远程管理服务器的主要工具,也是服务器最容易受到攻击的入口之一。本文将详细介绍如何加固 SSH 服务,提高服务器安全性。
1. 基本安全配置
1.1 更改默认端口
默认的 22 端口是黑客首先尝试的目标,更改为非标准端口可以减少被扫描的概率。
编辑 /etc/ssh/sshd_config
文件:
1 | # 默认为 Port 22 |
1.2 禁用 root 登录
禁止直接使用 root 账户登录系统,降低系统被入侵的风险。
1 | # 禁止root直接登录 |
1.3 限制登录用户
只允许特定用户通过 SSH 登录系统:
1 | # 指定允许登录的用户 |
1.4 禁用密码认证
使用密钥认证替代密码认证,提高安全性:
1 | # 启用公钥认证 |
1.5 配置超时设置
设置会话超时,减少未活动会话的安全风险:
1 | # 认证超时时间(秒) |
2. 高级安全配置
2.1 强化加密算法
只允许使用强加密算法,提高连接安全性:
1 | # 指定密钥交换算法 |
2.2 限制 SSH 版本
只允许使用 SSH 协议版本 2,禁用不安全的版本 1:
1 | # 只使用SSH协议版本2 |
2.3 禁用 X11 转发
除非必要,禁用 X11 转发功能:
1 | X11Forwarding no |
2.4 禁用 TCP 端口转发
如不需要端口转发功能,建议禁用:
1 | AllowTcpForwarding no |
2.5 禁用 Agent 转发
如不需要 SSH 代理转发功能,建议禁用:
1 | AllowAgentForwarding no |
2.6 禁用 GSSAPI 认证
如不使用 Kerberos 认证,建议禁用 GSSAPI:
1 | GSSAPIAuthentication no |
2.7 使用 chroot 环境
对特定用户使用 chroot 限制其访问范围:
1 | # 开启chroot功能 |
3. 使用密钥认证
3.1 生成密钥对
在本地计算机上生成 SSH 密钥对:
1 | # 推荐使用Ed25519算法 (更安全,密钥更短) |
3.2 上传公钥到服务器
方法一:使用 ssh-copy-id
工具
1 | ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server_ip -p 2222 |
方法二:手动上传
1 | # 先确保服务器上的 .ssh 目录存在 |
3.3 测试密钥登录
在配置完成后,确保密钥登录可用再禁用密码登录:
1 | ssh -i ~/.ssh/id_ed25519 user@server_ip -p 2222 |
4. 使用 SSH 配置文件
4.1 创建客户端配置文件
在本地创建 ~/.ssh/config
文件,简化 SSH 连接:
1 | Host myserver |
使用时只需:
1 | ssh myserver |
4.2 服务器多因素认证
结合 Google Authenticator 实现双因素认证:
1 | # 安装Google Authenticator |
5. 防火墙配置
5.1 使用 UFW (Ubuntu/Debian)
1 | # 安装UFW |
5.2 使用 firewalld (CentOS/RHEL)
1 | # 安装firewalld |
5.3 使用 iptables
1 | # 允许SSH端口 |
6. 监控与日志审计
6.1 查看 SSH 日志
1 | # 查看SSH登录日志 |
6.2 使用 Fail2Ban
Fail2Ban 可以监控登录失败次数,并自动封禁 IP 地址:
1 | # 安装Fail2Ban |
6.3 设置登录通知
配置 SSH 在用户登录时发送邮件通知:
1 | # 安装mailutils |
7. 常见问题与排查
7.1 登录缓慢
如果 SSH 登录速度慢,可能原因:
DNS 解析慢:禁用 DNS 解析
1
UseDNS no
GSSAPI 认证:禁用 GSSAPI
1
GSSAPIAuthentication no
7.2 密钥认证失败
常见原因与解决方法:
权限问题
1
2
3# 服务器上
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keysSELinux 限制
1
2
3
4
5# 查看SELinux上下文
ls -Z ~/.ssh/authorized_keys
# 修复上下文
restorecon -r ~/.ssh确认密钥格式正确
1
2# 密钥格式应为:
ssh-rsa AAAAB3N.... user@host
7.3 防火墙阻止
确认防火墙允许 SSH 端口:
1 | # 检查防火墙状态 |
8. SSH 工具与扩展
8.1 WinSCP 与 PuTTY 配置
Windows 用户可以通过配置 PuTTY 和 WinSCP 使用密钥认证:
- 使用 PuTTYgen 转换密钥格式
- 在 PuTTY/WinSCP 连接设置中配置私钥
8.2 使用 SSH 隧道
创建端口转发隧道:
1 | # 本地端口转发 |
8.3 免密码使用 sudo
允许特定用户或组使用 sudo 而无需输入密码:
1 | # 编辑sudoers文件 |
总结
适当配置 SSH 安全设置对于服务器安全至关重要。通过本文介绍的最佳实践,你可以显著提高 SSH 服务的安全性,降低被攻击的风险。记住,安全是一个持续的过程,定期更新系统和审查安全策略同样重要。