SSH服务器安全防护升级:10个必知的硬核加固配置指南

作为一名专业的 Linux 系统工程师,在日常工作中,我们都知道 SSH 服务是管理 Linux 服务器的“大门”。这道门如果关不严,服务器就会暴露在网络攻击的风险之下。默认的 SSH 配置往往更注重连接的便捷性,而非安全性。因此,对 SSH 服务进行“加固”,是每一位系统管理员在上线服务器前必须完成的关键任务。
下面将结合专业实践,详细介绍如何对 Linux 服务器上的 OpenSSH 服务进行安全加固,以最大限度地减少攻击面,抵御暴力破解和未授权访问。
1.准备工作与风险提示
在开始任何配置更改前,请确保满足以下条件:
- 一台 Linux 服务器,并拥有 SSH 访问权限。
- 具备 Root 或 Sudo 权限,以便修改配置文件。
- 已经生成并配置好 SSH 密钥对,这是后续禁用密码登录的基础。
- 所有 SSH 服务端的配置均位于
/etc/ssh/sshd_config文件中。修改完成后,需要重启服务使配置生效:systemctl restart sshd
重要提示:修改 SSH 配置有把自己“锁在门外”的风险。在应用任何更改,特别是禁用密码认证或更改端口前,务必保持一个除 SSH 外的备用登录渠道,例如通过 VNC 或本地控制台登录来实现自救。
2.SSH 服务器加固最佳实践
2.1 核心防线:采用基于密钥的认证
密码认证是暴力破解攻击的主要目标。基于密钥的认证使用一对公私钥进行身份验证,安全性远高于密码,因为它几乎无法被暴力猜测。
在确认可以使用 SSH 密钥无密码登录服务器后,请禁用密码认证:
# /etc/ssh/sshd_config PasswordAuthentication no
此方法将强制所有用户只能使用 SSH 密钥登录,从根本上杜绝了密码被暴力破解的风险。
2.2 权限最小化:禁止 root 用户直接登录
直接允许 root 用户通过 SSH 登录是巨大的安全隐患,因为攻击者知道 root 用户名是固定的,可以集中火力进行攻击。
最佳实践:完全禁止 root 登录。
# /etc/ssh/sshd_config PermitRootLogin no
日常管理应使用普通用户登录,在需要执行特权命令时,再通过 sudo 或 su – 切换至 root。
# /etc/ssh/sshd_config PermitRootLogin prohibit-password
2.3 规避扫描:更改默认 SSH 端口
SSH 默认监听 22 端口。虽然这并非真正的安全措施,但可以有效减少来自自动化扫描脚本和僵尸网络的“噪音”,降低被随机攻击的概率。
修改端口为大于 1024 的非知名端口(例如 2222, 10022 等):
# /etc/ssh/sshd_config Port 2222
关键步骤:在重启 SSH 服务前,务必先在防火墙中放行新端口,以免立即断开连接。
# 如果使用 UFW sudo ufw allow 2222/tcp # 如果使用 firewalld sudo firewall-cmd --permanent --add-port=2222/tcp sudo firewall-cmd --reload # 如果使用 iptables sudo iptables -A INPUT -p tcp --dport 2222 -j ACCEPT
2.4 精细化控制:限制可登录的用户/用户组
默认情况下,所有本地系统用户都可以通过 SSH 登录,这无疑增加了风险。我们可以使用 AllowUsers 或 AllowGroups 指令进行白名单控制,只允许特定用户或组访问。
仅允许特定用户登录:
# /etc/ssh/sshd_config AllowUsers alice bob charlie
仅允许特定用户组的成员登录:
# /etc/ssh/sshd_config AllowGroups ssh-users wheel
2.5 杜绝漏洞:禁用空密码与缩短登录时间窗
(1)禁用空密码:确保任何密码为空的账户都无法通过 SSH 登录。
# /etc/ssh/sshd_config PermitEmptyPasswords no
(2)缩短登录超时时间:LoginGraceTime 定义了服务器等待用户完成认证的时间。默认 120 秒过长,应缩短以降低被慢速 DoS 攻击的风险。
# /etc/ssh/sshd_config LoginGraceTime 30
(3)限制认证尝试次数:MaxAuthTries 限制每个连接允许的最大认证尝试次数,能有效减缓暴力破解速度。
# /etc/ssh/sshd_config MaxAuthTries 3
2.6 功能精简:禁用不必要的转发功能
如果不需要通过 SSH 隧道转发图形界面或建立 VPN,应禁用这些功能以减少潜在的攻击向量。
(1)禁用 X11 转发:用于转发图形化应用程序,在纯命令行服务器上应关闭。
# /etc/ssh/sshd_config X11Forwarding no
(2)禁用 TCP 转发:用于创建端口转发隧道,如非必要,建议关闭。
# /etc/ssh/sshd_config AllowTcpForwarding no
2.7 会话管理:设置空闲超时自动断开
为闲置的 SSH 连接设置自动断开,可以防止员工离席后会话被滥用,以及清理僵尸进程。
# /etc/ssh/sshd_config # 每隔 300 秒(5 分钟)向客户端发送一个空包以维持连接 ClientAliveInterval 300 # 如果连续 2 次(共 10 分钟)未收到客户端响应,则强制断开连接 ClientAliveCountMax 2
2.8 主动防御:部署 Fail2Ban
Fail2Ban 是一个入侵防御工具,通过扫描日志文件(如 /var/log/auth.log),对表现出恶意行为的 IP(如多次认证失败)进行封禁。
# 安装与配置:
(1)安装 Fail2Ban:
sudo apt update && sudo apt install fail2ban # Debian/Ubuntu # sudo yum install epel-release && sudo yum install fail2ban # CentOS/RHEL 7 # sudo dnf install fail2ban # CentOS/RHEL 8/9, Fedora
(2)创建本地配置文件:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
(3)编辑 jail.local,启用并配置 SSH 服务的防护规则:
# /etc/fail2ban/jail.local [sshd] enabled = true port = ssh # 如果修改了 SSH 端口,这里需改为实际端口,如 2222 filter = sshd logpath = /var/log/auth.log maxretry = 3 # 最大失败次数 bantime = 3600 # 封禁时间(秒),3600 秒=1 小时 findtime = 600 # 检测时间窗口(秒)
(4)启动并启用 Fail2Ban 服务:
sudo systemctl enable fail2ban --now
(5)查看 SSH 防护状态:
sudo fail2ban-client status sshd
2.9 安全提示:显示登录警告横幅
在用户登录前显示一个法律警告,可以在法律层面声明未经授权的访问是不被允许的,并能对潜在入侵者起到心理威慑作用。
创建横幅文件:
sudo tee /etc/ssh/banner <<EOF ******************************************************************** * ** 警告 / WARNING ** * * 这是一个专用系统,仅限授权用户访问。所有活动均被记录和监控。 * * Unauthorized access to this system is forbidden and will be * * logged and monitored. * ******************************************************************** EOF
然后在配置文件中启用它:
# /etc/ssh/sshd_config Banner /etc/ssh/banner
2.10 加密算法:使用强密钥与禁用弱算法
(1)生成强密钥:推荐使用 Ed25519 算法,它性能优越且安全性高。如果必须使用 RSA,请确保位数至少为 4096 位。
# 推荐 ssh-keygen -t ed25519 # 或 ssh-keygen -t rsa -b 4096
(2)服务端配置(进阶):在 sshd_config 中可以禁用已过时或不安全的算法。例如,在文件末尾添加以下行来限制密钥交换、加密和消息认证码算法:
KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256 Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com
3.配置速查表
| 配置项 | 推荐值 | 目的 |
|---|---|---|
| PasswordAuthentication | no | 强制使用密钥认证,杜绝密码暴力破解 |
| PermitRootLogin | no (或 prohibit-password) | 禁止(或限制)root 直接登录 |
| Port | 大于 1024 的端口 | 避开默认端口扫描 |
| AllowUsers / AllowGroups | user1 user2 / groupname | 实施用户/组白名单 |
| PermitEmptyPasswords | no | 禁止空密码账户登录 |
| LoginGraceTime | 30 | 缩短登录等待时间 |
| MaxAuthTries | 3 | 限制认证尝试次数 |
| X11Forwarding | no | 禁用不必要的功能 |
| ClientAliveInterval | 300 | 设置空闲超时检查间隔 |
| ClientAliveCountMax | 2 | 设置最大无响应次数 |
| Banner | /etc/ssh/banner | 显示登录警告 |
| AllowTcpForwarding | no | 禁用端口转发 |
4.常见问题
(1)更改 SSH 端口真的有必要吗?
它不能提供真正的安全性,但能有效减少日志中来自自动化扫描的“噪音”,是“通过隐匿实现安全”的一种手段。建议作为多层防御的一环,但不应依赖它作为唯一的安全措施。
(2)最重要的加固步骤是什么?
禁用密码认证,强制使用 SSH 密钥。
这是最根本、最有效的防御措施,直接消除了密码被暴力破解的风险。
(3)如何查看当前生效的 SSH 配置?
可以使用sudo sshd -T命令,它会打印出 sshd 实际使用的所有配置项,包括默认值和配置文件中的覆盖值,非常有用。
sudo sshd -T
以上关于SSH服务器安全防护升级:10个必知的硬核加固配置指南的文章就介绍到这了,更多相关内容请搜索码云笔记以前的文章或继续浏览下面的相关文章,希望大家以后多多支持码云笔记。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » SSH服务器安全防护升级:10个必知的硬核加固配置指南
微信
支付宝