SSH 是攻击者的头号目标

公网上 22 端口每分钟都被扫——不做加固,密码弱一点点几天内就被暴破。

下面 6 条措施做完,SSH 入侵风险降 99%

🚨 操作 SSH 配置的铁律保留当前 SSH 会话别关另开一个新窗口验证改完后能登。如果新窗口登不上,旧会话还能救命。每一步 systemctl restart sshd 之前都先想一下这条。

1. 禁用 root 直接登录

/etc/ssh/sshd_config:

PermitRootLogin no

理由:

  • root 用户名是公知的,攻击者只需要密码
  • 改成普通用户登录后用 sudo,多一道防线

2. 禁用密码认证,只用密钥

PasswordAuthentication no
PubkeyAuthentication yes

配置前确认你的 SSH key 已加到目标账户的 authorized_keys——否则你下次登不上。

确认流程:

# 在客户端
ssh-copy-id user@host

# 在服务器
ls -l ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

# 测试用 key 能登
ssh user@host        # 不应该提示输密码

# 确认 OK 后再改 sshd_config 禁用密码

3. 改默认端口

Port 22022

减少机器人扫描流量——不是真正的安全(高级攻击者会扫所有端口),但少 95% 噪声。

改端口后:

# 防火墙开新端口
sudo ufw allow 22022/tcp

# 国内云服务器:安全组也要改
# SELinux(CentOS)也要改:
sudo semanage port -a -t ssh_port_t -p tcp 22022

# 重启 sshd
sudo systemctl restart sshd

# 测试新端口
ssh -p 22022 user@host

# 都 OK 后关 22
sudo ufw delete allow 22/tcp

4. 限制可登录用户

AllowUsers wadely alice
# 或按组
AllowGroups sshusers

只列出能 SSH 的人——新建系统账号不会意外能登录。

5. 启用 fail2ban

自动封暴破 IP:

sudo apt install fail2ban
sudo systemctl enable --now fail2ban

默认配置就够用——监控 sshd 日志,5 次失败封禁 10 分钟。

自定义:

sudo vim /etc/fail2ban/jail.local
[sshd]
enabled = true
port = 22022
maxretry = 3
findtime = 600
bantime = 86400      # 1 天
sudo systemctl restart fail2ban
sudo fail2ban-client status sshd

6. 其他细节

/etc/ssh/sshd_config 推荐配置:

# 安全协议
Protocol 2

# 限制 idle
ClientAliveInterval 300
ClientAliveCountMax 2

# 限制最大连接
MaxAuthTries 3
MaxSessions 5
LoginGraceTime 30

# 禁用不安全 / 不需要的特性
X11Forwarding no
AllowAgentForwarding no            # 除非你需要
AllowTcpForwarding no              # 除非你需要
PermitEmptyPasswords no
PermitUserEnvironment no

# 算法白名单(禁用老算法)
KexAlgorithms curve25519-sha256@libssh.org,curve25519-sha256
HostKeyAlgorithms ssh-ed25519,rsa-sha2-512,rsa-sha2-256
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com

# 日志
LogLevel VERBOSE

改完:

sudo sshd -t            # 语法检查
sudo systemctl restart sshd

测试加固成果

# 用 ssh-audit 工具(推荐)
pip install ssh-audit
ssh-audit your-server.com

# 看报告:弱算法、过时配置都会标红

或:

nmap -sV -p 22022 your-server.com

跳板机(堡垒机)模式

生产环境强烈推荐

互联网 → 堡垒机(只它有公网 IP)→ 内网机器(不开公网)

客户端配 ProxyJump:

Host inner-app
    HostName 10.0.0.5
    User wadely
    ProxyJump bastion

好处:

  • 所有 SSH 经过堡垒机,审计一处搞定
  • 内网机器不暴露公网
  • 多人共用堡垒机 + 个人 key

进阶:硬件密钥 + 2FA

  • U2F / FIDO2 key(YubiKey 等):插上才能 SSH
  • pam_google_authenticator:登录时要输 TOTP 验证码

下一篇:审计与日志。