Linux SSH安全:密钥认证与端口防护实战指南
在使用 Linux 服务器时,保障 SSH 服务的安全至关重要,特别是针对 Linux SSH 安全的防护。本文面向 Linux 系统管理员和运维工程师,提供一份关于 Linux SSH 安全的实战指南,重点介绍如何通过更安全的 密钥认证 替代传统的密码认证,并进行 端口防护,以增强服务器的安全性。本文将详细介绍如何配置 SSH 密钥认证、修改默认端口,并提供其他安全加固措施,有效防止暴力破解和恶意攻击,提升服务器整体的安全防护水平。本文侧重于 SSH 本身的安全加固,不涉及 `fail2ban` 等入侵检测工具或防火墙规则的详细配置。
通过实施密钥认证、修改默认端口等策略,可以显著提升 Linux 服务器的 SSH 安全性,降低被攻击的风险。
Linux SSH密钥认证配置详解:提升服务器安全性的核心策略
密码认证是 SSH 最常见的认证方式,但也最容易受到暴力破解攻击。配置 Linux SSH密钥认证,使用密钥对替代密码认证,是大幅提升 Linux 服务器安全性的核心策略。密钥认证基于非对称加密原理,安全性远高于传统的密码认证方式,因为暴力破解私钥的难度远高于破解密码。
生成安全的Linux SSH密钥对
首先,在客户端(例如你的本地电脑)上生成 Linux SSH密钥对。可以使用 ssh-keygen 命令,生成一个 4096 位的 RSA 密钥对:
ssh-keygen -t rsa -b 4096
执行该命令后,你可以选择使用默认文件名(id_rsa 和 id_rsa.pub)或指定其他文件名。同时,强烈建议设置一个密码短语(passphrase)来保护私钥,即使私钥泄露,也需要密码短语才能使用它,从而增加安全性。
将SSH公钥安全上传到Linux服务器
生成密钥对后,需要将公钥(id_rsa.pub)上传到服务器。最简单的方法是使用 ssh-copy-id 命令:
ssh-copy-id user@server_ip
如果 ssh-copy-id 命令不可用,也可以手动上传公钥,步骤如下:
- 使用 SSH 连接到服务器:
ssh user@server_ip - 创建
.ssh目录(如果不存在):mkdir -p ~/.ssh - 将公钥的内容追加到
authorized_keys文件:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys - 设置
.ssh目录和authorized_keys文件的权限:
chmod 700 ~/.ssh和chmod 600 ~/.ssh/authorized_keys
注意: 确保 .ssh 目录的权限为 700,authorized_keys 文件的权限为 600,否则 SSH 可能会拒绝使用密钥认证。这是因为 SSH 服务对目录和文件的权限有严格要求,不符合要求的权限设置会导致认证失败。
禁用Linux SSH密码认证,只允许密钥登录
为了进一步提高安全性,建议禁用密码认证。编辑 SSH 服务器的配置文件 /etc/ssh/sshd_config:
sudo vi /etc/ssh/sshd_config
找到以下行,并修改为:
PasswordAuthentication no
ChallengeResponseAuthentication no
保存并关闭文件后,重启 SSH 服务:
sudo systemctl restart sshd
现在,SSH 连接只能通过密钥认证,密码认证已被禁用。在禁用密码认证之前,请务必确保已成功配置密钥认证,并且能够使用密钥正常登录服务器,否则将无法连接到服务器,导致无法远程登录。这是配置 SSH 密钥认证时最常见的错误之一。
配置 SSH 密钥认证是提升 SSH 安全性的有效方法,它通过非对称加密技术,有效防止密码破解。
Linux SSH端口防护实战:修改默认端口以抵御扫描攻击
SSH 默认使用 22 端口进行通信。这是一个众所周知的端口,也是黑客扫描和攻击的主要目标之一。修改 Linux SSH端口,降低服务器被恶意扫描和攻击的风险,是 Linux SSH安全 的重要一环。虽然修改端口并不能完全阻止攻击,但它可以增加攻击者的扫描成本和难度,从而提升服务器的安全性。
如何修改Linux SSH监听端口
编辑 SSH 服务器的配置文件 /etc/ssh/sshd_config:
sudo vi /etc/ssh/sshd_config
找到以下行,并修改为:
#Port 22
修改为例如:
Port 2233
取消注释(删除 #),并将端口号修改为你选择的端口。建议选择一个大于 1024 的端口,避免与常用端口冲突。保存并关闭文件后,重启 SSH 服务:
sudo systemctl restart sshd
注意: 修改 SSH 端口后,需要更新防火墙规则,允许新的端口通过。例如,在使用 ufw 防火墙的 Ubuntu 系统上,可以使用以下命令:
sudo ufw allow 2233
sudo ufw enable
在使用 firewalld 防火墙的 CentOS 系统上,可以使用以下命令:
sudo firewall-cmd --permanent --add-port=2233/tcp
sudo firewall-cmd --reload
修改端口后,连接 SSH 时需要指定新的端口号:
ssh -p 2233 user@server_ip
修改 SSH 默认端口可以增加攻击者的扫描成本,降低服务器被恶意攻击的风险。请务必同时更新防火墙规则,确保新端口的流量能够正常通过。
其他Linux SSH安全加固措施建议
除了密钥认证和端口防护,还可以采取其他措施来提高 Linux SSH安全。以下是一些建议:
- 限制登录用户: 使用
AllowUsers或DenyUsers指令限制允许或禁止登录的用户。只允许特定的用户通过 SSH 登录,可以减少潜在的攻击面。 - 设置空闲超时: 使用
ClientAliveInterval和ClientAliveCountMax指令设置空闲超时,防止 SSH 连接长时间占用资源。长时间空闲的连接可能会被恶意利用,设置超时可以及时断开这些连接。 - 禁用 X11 转发: 如果不需要 X11 转发,禁用它可以减少潜在的安全风险。在
/etc/ssh/sshd_config文件中设置X11Forwarding no。X11 转发允许通过 SSH 连接运行图形界面程序,如果不需要此功能,禁用它可以减少安全风险。 - 定期更新 SSH 软件: 及时安装 SSH 软件的更新和补丁,修复已知的安全漏洞。SSH 软件的漏洞可能会被攻击者利用,定期更新可以及时修复这些漏洞。
下表总结了 SSH 安全配置参数及其作用,供您参考。
| 参数 | 作用 | 建议值 |
|---|---|---|
PasswordAuthentication |
是否允许密码认证 | no(禁用) |
ChallengeResponseAuthentication |
是否允许基于质询-响应的认证 | no(禁用) |
Port |
SSH 监听端口 | 大于 1024 的随机端口 |
AllowUsers |
允许登录的用户列表 | 根据实际情况配置 |
DenyUsers |
禁止登录的用户列表 | 根据实际情况配置 |
ClientAliveInterval |
服务器向客户端发送请求的间隔时间(秒) | 300 |
ClientAliveCountMax |
客户端未响应请求的最大次数 | 3 |
X11Forwarding |
是否允许 X11 转发 | no(禁用) |
配置 Linux SSH 安全涉及多个方面,从密钥认证到端口修改,再到其他安全加固措施,都需要系统管理员认真对待。一个常见问题是:“修改了 SSH 端口后,为什么无法连接服务器?” 这通常是因为防火墙没有允许新的端口通过。因此,在修改端口后,请务必更新防火墙规则。
Linux 服务器的 SSH 安全配置至关重要。通过禁用密码认证、启用密钥认证、修改默认 SSH 端口、限制 SSH 登录用户、定期更新 SSH 软件以及配置防火墙规则,可以有效提升服务器的安全性,降低被攻击的风险。
- 要点:禁用密码认证,启用密钥认证,提升 SSH 安全性。
- 要点:修改默认 SSH 端口,增加攻击者的扫描难度。
- 要点:限制 SSH 登录用户,减少潜在的风险。
- 要点:定期更新 SSH 软件,及时修复安全漏洞。
- 要点:配置防火墙规则,允许新的 SSH 端口通过防火墙。