核心是系统性加固ssh:禁用root直连并强制普通用户+sudo流程,启用密钥认证禁用密码登录,限制访问来源与修改端口缩小暴露面,配置会话超时、认证次数限制及fail2ban实现行为监控与自动封禁。

加固Linux服务器的远程访问安全,核心是把SSH这扇“主大门”管严、锁死、设防。它不是改一个配置就完事,而是围绕身份验证、网络控制、服务暴露和行为监控四个关键点系统性收紧。
禁用root直接登录,强制走普通用户+sudo流程
这是最基础也最关键的一步。允许root远程登录等于把万能钥匙挂在门口。必须先创建一个有sudo权限的普通用户,再禁止root登录:
- 添加管理员用户:useradd -m -s /bin/bash admin,然后passwd admin设强密码
- 赋予sudo权限:usermod -aG sudo admin(Ubuntu/Debian)或usermod -aG wheel admin(CentOS/RHEL)
- 编辑/etc/ssh/sshd_config,确认设置:PermitRootLogin no
- 重启服务:systemctl restart sshd,但务必在新用户已验证可登录后再执行
关闭密码认证,只允许SSH密钥登录
密码容易被暴力破解或钓鱼窃取,而密钥对具备天然抗爆破能力。启用后,攻击者即使知道用户名也无法登录:
- 客户端生成密钥:ssh-keygen -t ed25519 -C "admin@server"
- 上传公钥到服务器:ssh-copy-id -i ~/.ssh/id_ed25519.pub admin@your_ip
- 修改sshd_config:PasswordAuthentication no、PubkeyAuthentication yes
- 为防误锁,建议先开一个备用会话测试密钥登录成功,再重启sshd
限制访问来源与调整端口,缩小暴露面
减少被扫描和撞库的概率,从网络层过滤不必要流量:
- 修改默认端口(非必需但推荐):Port 22222(选1024–65535间未被占用的端口)
- 仅允许可信IP访问:AllowUsers admin@192.168.1.100 admin@203.0.113.5,或结合防火墙做更细粒度控制
- 配合iptables/nftables规则,例如只放行指定IP段的SSH端口,其余一律DROP
- 隐藏SSH版本信息:DebianBanner no,避免泄露系统细节
强化会话管理与异常行为拦截
防止合法连接被劫持或长期空闲导致风险,同时自动响应暴力尝试:
- 设置连接保活:ClientAliveInterval 300 和 ClientAliveCountMax 2,空闲10分钟后自动断开
- 限制单次连接最大认证次数:MaxAuthTries 3
- 部署Fail2ban:监控/var/log/auth.log,对5分钟内失败3次的IP自动封禁1小时
- 禁用不安全的认证方式:ChallengeResponseAuthentication no、KerberosAuthentication no(除非明确需要)
不复杂但容易忽略——所有变更都应备份原配置、逐项验证、保留应急通道(如VNC或云平台控制台)。安全不是一劳永逸,而是持续校准的过程。











