### 1. 禁用 Root 登录
防止直接使用 `root` 用户登录,强制用户以普通用户身份登录,然后使用 `sudo` 提升权限。
在 `/etc/ssh/sshd_config` 中设置:
```bash
PermitRootLogin no
```
### 2. 使用公钥认证
禁用密码认证,强制使用 SSH 公钥认证,以防止暴力破解。
在 `/etc/ssh/sshd_config` 中设置:
```bash
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no
```
### 3. 限制用户登录
通过 `AllowUsers` 或 `AllowGroups` 指定允许登录的用户或组。
在 `/etc/ssh/sshd_config` 中设置:
```bash
AllowUsers user1 user2
# 或
AllowGroups sshusers
```
### 4. 改变默认 SSH 端口
改变默认的 SSH 端口(22)可以减少被扫描和攻击的机会。
在 `/etc/ssh/sshd_config` 中设置:
```bash
Port 2222
```
### 5. 禁用空密码登录
防止使用空密码的账户登录。
在 `/etc/ssh/sshd_config` 中设置:
```bash
PermitEmptyPasswords no
```
### 6. 限制最大认证尝试次数
设置 `MaxAuthTries` 来限制失败的认证尝试次数,从而防止暴力攻击。
在 `/etc/ssh/sshd_config` 中设置:
```bash
MaxAuthTries 3
```
### 7. 启用登录速率限制
使用 `MaxStartups` 限制并发的未认证连接,以防止 DoS 攻击。
在 `/etc/ssh/sshd_config` 中设置:
```bash
MaxStartups 10:30:60
```
- `10`:初始连接数(超过这个数时将开始概率拒绝连接)。
- `30`:超过初始连接数后,按 30% 的概率拒绝连接。
- `60`:最大并发未认证连接数。
### 8. 使用防火墙限制 SSH 访问
使用防火墙(如 `iptables` 或 `ufw`)限制 SSH 的访问范围,仅允许可信任的 IP 地址连接到 SSH 服务。
### 9. 设置登录通知和记录
配置 `LoginGraceTime` 限制未认证用户在登录时的等待时间,设置较短的等待时间可以降低攻击成功率。
在 `/etc/ssh/sshd_config` 中设置:
```bash
LoginGraceTime 30s
```
还可以设置 `LogLevel` 增加日志记录的详细程度:
```bash
LogLevel VERBOSE
```
### 10. 定期更新 OpenSSH
确保你的 OpenSSH 软件是最新版本,以获得最新的安全补丁。
### 11. 禁用 X11 转发
除非确实需要,否则禁用 X11 转发以减少潜在的攻击途径。
在 `/etc/ssh/sshd_config` 中设置:
```bash
X11Forwarding no
```
### 12. 启用防护机制
在现代 Linux 发行版中,可以启用一些额外的防护机制,如:
```bash
UsePrivilegeSeparation sandbox
```
这可以进一步隔离 SSH 进程,减少潜在的攻击面。
### 13. 2FA 双因素认证
通过配置 PAM(Pluggable Authentication Module)支持,例如 Google Authenticator,启用双因素认证。
### 14. 限制登录时间
可以结合 PAM 和 `cron` 服务,限制用户只能在特定时间段内登录 SSH。
这些设置能够显著提高 SSH 的安全性,帮助防止未经授权的访问和潜在的安全威胁。