核心是“先控后连、先堵后通”:创建实例时同步配置安全组,仅开放最小必要端口(如限IP的22端口);首次登录后立即禁用密码登录、强制密钥认证并禁止root远程登录;修改SSH默认端口并同步更新防火墙与安全组规则;最后通过AllowUsers和PAM设置登录白名单与失败锁定。

初始阶段就部署好 SSH 接入控制与安全组,核心是“先控后连、先堵后通”——不是等系统装完再补救,而是在实例创建和首次登录之间就把访问边界立住。这一步做对了,能避开 80% 的暴力扫描和未授权尝试。
一、创建实例时同步配置安全组(云平台第一道门)
安全组是流量入口的硬性开关,必须在实例启动前配好,而不是 SSH 登录后再加规则。
- 只开放最小必要端口:默认仅放行 22 端口(SSH),且建议限制源 IP(如公司办公网段或家庭固定宽带 IP)
- 避免“全开放 0.0.0.0/0”:测试期也别图省事,临时用手机热点或动态 IP 时,可先用云厂商的“临时放通”功能(如阿里云的安全组快速授权)
- HTTPS/HTTP 等业务端口一律 暂不开放,等应用部署完成、Nginx 配置就绪后再按需添加
二、初始化系统时立即禁用密码登录,强制密钥认证
密码登录是暴力破解主入口,哪怕你设了强密码,只要允许密码登录,日志里就会堆满失败记录。初始配置必须一步到位:
- 首次用密码登录后,立刻执行:ssh-copy-id -i ~/.ssh/your_key.pub user@server_ip,把公钥推上去
- 编辑 /etc/ssh/sshd_config,确认以下三行已设置:
PasswordAuthentication no
PubkeyAuthentication yes
PermitRootLogin no - 重启服务:sudo systemctl restart sshd,并验证新连接是否仅支持密钥
三、修改默认 SSH 端口 + 防火墙联动(防扫描干扰)
改端口本身不防攻击,但能大幅减少自动化扫描日志量,让真实告警更易被发现。
- 在 sshd_config 中修改 Port 2222(或其他非知名端口),保存后重启 sshd
- 同步更新防火墙规则:如果是 ufw,运行 sudo ufw allow 2222/tcp;如果是 firewalld,运行 sudo firewall-cmd --permanent --add-port=2222/tcp && sudo firewall-cmd --reload
- 最后在安全组中,关闭 22 端口,开放新端口——确保云平台层和系统层策略一致
四、设置登录白名单与失败锁定(精细管控)
不是所有系统用户都需要 SSH 权限,尤其要防止新建用户自动获得远程访问能力。
- 在 sshd_config 中添加:AllowUsers deploy admin(只允许可信用户名登录)
- 启用 PAM 失败锁定(CentOS/RHEL):
编辑 /etc/pam.d/sshd,加入
auth [default=die] pam_faillock.so authfail deny=3 unlock_time=300 - 设置超时与重试限制:
LoginGraceTime 30
MaxAuthTries 3

















