Linux SSH安全:密钥认证与端口防护实战指南

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_rsaid_rsa.pub)或指定其他文件名。同时,强烈建议设置一个密码短语(passphrase)来保护私钥,即使私钥泄露,也需要密码短语才能使用它,从而增加安全性。

将SSH公钥安全上传到Linux服务器

生成密钥对后,需要将公钥(id_rsa.pub)上传到服务器。最简单的方法是使用 ssh-copy-id 命令:

ssh-copy-id user@server_ip

如果 ssh-copy-id 命令不可用,也可以手动上传公钥,步骤如下:

  1. 使用 SSH 连接到服务器:ssh user@server_ip
  2. 创建 .ssh 目录(如果不存在):mkdir -p ~/.ssh
  3. 将公钥的内容追加到 authorized_keys 文件:
    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
  4. 设置 .ssh 目录和 authorized_keys 文件的权限:
    chmod 700 ~/.sshchmod 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安全。以下是一些建议:

  • 限制登录用户: 使用 AllowUsersDenyUsers 指令限制允许或禁止登录的用户。只允许特定的用户通过 SSH 登录,可以减少潜在的攻击面。
  • 设置空闲超时: 使用 ClientAliveIntervalClientAliveCountMax 指令设置空闲超时,防止 SSH 连接长时间占用资源。长时间空闲的连接可能会被恶意利用,设置超时可以及时断开这些连接。
  • 禁用 X11 转发: 如果不需要 X11 转发,禁用它可以减少潜在的安全风险。在 /etc/ssh/sshd_config 文件中设置 X11Forwarding no。X11 转发允许通过 SSH 连接运行图形界面程序,如果不需要此功能,禁用它可以减少安全风险。
  • 定期更新 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 端口通过防火墙。