Linux SSH安全:密钥认证与端口防护实战指南
在 Linux 服务器管理中,SSH(Secure Shell) 是用于安全远程登录和管理服务器的事实标准。默认配置的 SSH 服务存在安全隐患,容易受到暴力破解等攻击。因此,对 SSH 服务进行安全加固至关重要。本指南将介绍如何通过 Linux SSH 密钥认证 、修改默认端口及配置防火墙等手段,提升 Linux SSH 安全性,有效防范潜在的安全风险。我们将以 CentOS/RHEL 7/8/9 或 Ubuntu 18.04/20.04/22.04 等常见发行版为例,讲解具体操作步骤。
Linux SSH安全:禁用密码认证,启用密钥认证
使用密码进行 SSH 认证的安全性较低,容易受到暴力破解攻击。为提高 Linux SSH 安全性,强烈建议禁用密码认证,启用密钥认证。密钥认证基于公钥密码学,使用密钥对(公钥和私钥)进行身份验证。私钥保存在客户端,公钥保存在服务器端。本节将详细介绍如何生成密钥对、上传公钥以及禁用密码认证,从而避免暴力破解风险。
生成 SSH 密钥对(RSA)
首先,需要在客户端(例如您的本地电脑)生成 SSH 密钥对。可以使用 ssh-keygen 命令。以下命令生成一个 4096 位的 RSA 密钥对:
ssh-keygen -t rsa -b 4096
执行该命令后,会在用户目录下生成 .ssh 目录,其中 id_rsa 是私钥,id_rsa.pub 是公钥。请务必妥善保管私钥,切勿泄露给他人。私钥丢失可能导致无法登录服务器。
上传 SSH 公钥到服务器
生成密钥对后,需要将公钥上传到服务器,以便服务器能够使用公钥验证客户端的身份。可以使用 ssh-copy-id 命令简化上传过程,例如:
ssh-copy-id user@your_server_ip
该命令会自动将公钥添加到服务器上的 ~/.ssh/authorized_keys 文件中。如果 ssh-copy-id 命令不可用,也可以手动将 id_rsa.pub 的内容追加到服务器上的 ~/.ssh/authorized_keys 文件中。为了保证 Linux SSH 安全性,务必确保 .ssh 目录的权限是 700,authorized_keys 文件的权限是 600。
手动上传公钥的步骤如下:
-
使用
scp或其他文件传输工具将id_rsa.pub文件上传到服务器的临时目录,例如/tmp。 -
在服务器上,使用以下命令将公钥添加到
~/.ssh/authorized_keys文件中:cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys -
设置正确的权限:
chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
禁用 SSH 密码认证
成功上传公钥后,就可以禁用密码认证了。编辑服务器上的 SSH 配置文件 /etc/ssh/sshd_config。找到以下选项,并修改为:
PasswordAuthentication no
ChallengeResponseAuthentication no # 如果有的话,也禁用
UsePAM no # 建议禁用PAM认证,除非你有特殊需求
保存文件后,重启 SSH 服务使配置生效:
systemctl restart sshd
**重要提示:**在禁用密码认证之前,请务必确保您已经成功配置了密钥认证,并且能够使用密钥登录服务器。否则,您可能会因为无法通过密码认证登录而失去对服务器的访问权限。建议在一个新的终端窗口中测试密钥认证是否生效,确认无误后再禁用密码认证。
通过禁用密码认证并启用密钥认证,可以有效防止暴力破解,提高 SSH 安全性。
Linux SSH安全:修改默认端口,配置防火墙
SSH 默认使用 22 端口进行通信,但攻击者通常会扫描服务器的 22 端口,尝试进行攻击。修改默认端口可以增加攻击者扫描和攻击的难度,提高 Linux SSH 安全性。同时,配置防火墙可以限制对 SSH 端口的访问,只允许特定的 IP 地址或 IP 段访问 SSH 服务。本节将介绍如何修改 SSH 端口,并配置防火墙规则,以降低被恶意扫描和攻击的风险。
修改 SSH 默认端口
编辑 SSH 配置文件 /etc/ssh/sshd_config。找到以下选项,并修改为:
Port 2222 # 修改为其他未被使用的端口,例如2222
建议选择一个大于 1024 且未被其他服务使用的端口。保存文件后,重启 SSH 服务:
systemctl restart sshd
注意: 修改端口后,需要同时更新防火墙规则,允许新的端口通过。客户端连接时也需要指定新的端口,例如:ssh -p 2222 user@your_server_ip。
配置防火墙规则
使用 firewalld 或 iptables 配置防火墙,只允许特定的 IP 地址访问 SSH 端口。以 firewalld 为例,以下命令允许来自 192.168.1.0/24 网段的 IP 地址访问 2222 端口:
firewall-cmd --permanent --add-port=2222/tcp
firewall-cmd --permanent --add-source=192.168.1.0/24 --add-port=2222/tcp # 允许特定IP段访问
firewall-cmd --reload
如果使用 iptables,可以参考以下配置:
iptables -A INPUT -p tcp --dport 2222 -s 192.168.1.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 2222 -j DROP # 默认拒绝其他IP访问
service iptables save
service iptables restart
下表总结了 SSH 安全加固中的一些常见配置项及其推荐值,供您参考:
| 配置项 | 文件路径 | 推荐值 | 说明 |
|---|---|---|---|
PasswordAuthentication |
/etc/ssh/sshd_config |
no |
禁用密码认证,防止暴力破解 |
Port |
/etc/ssh/sshd_config |
非 22 端口 (例如 2222) |
修改默认端口,增加扫描难度 |
PermitRootLogin |
/etc/ssh/sshd_config |
no |
禁止 root 用户直接登录 |
| 防火墙规则 | firewalld 或 iptables |
仅允许特定 IP 访问 SSH 端口 | 限制对 SSH 端口的访问 |
修改 SSH 默认端口并配置防火墙,可以有效降低被恶意扫描和攻击的风险,增强服务器的安全性。
其他 Linux SSH 安全加固措施
除了密钥认证和端口防护之外,还有一些其他的措施可以进一步提高 SSH 服务的安全性。这些措施是对密钥认证和端口防护的补充,共同构建更完善的安全体系。
- 禁止 root 用户直接登录: 编辑
/etc/ssh/sshd_config,设置PermitRootLogin no。禁止 root 用户直接通过 SSH 登录,可以降低 root 账号被攻破的风险。 - 设置登录尝试次数限制: 使用
MaxAuthTries限制每个连接的认证尝试次数。例如,设置为 3 表示允许最多尝试 3 次密码或密钥认证。 - 使用 fail2ban:
fail2ban可以自动监控 SSH 日志,并禁止恶意 IP 地址。Fail2ban 通过分析日志文件,自动识别并屏蔽尝试暴力破解 SSH 服务的 IP 地址。 - 定期更新 SSH 软件: 及时安装安全补丁,修复已知漏洞。
- 禁用 X11 forwarding: 除非需要通过 SSH 运行图形界面程序,否则应该禁用 X11 forwarding(
X11Forwarding no),以降低安全风险。
常见问题:
- 能否使用 SSH 证书认证代替密钥认证? 可以。 SSH 证书认证比普通的密钥认证更安全,但配置也更复杂,适用于对安全性要求极高的场景。
通过综合运用这些安全加固措施,可以显著提高 Linux SSH 服务的安全性。
- 禁用密码认证,强制使用 SSH 密钥认证。
- 修改 SSH 默认端口,降低被扫描和攻击的风险。
- 配置防火墙规则,限制对 SSH 端口的访问。
- 禁止 root 用户直接 SSH 登录,降低 root 账户被攻破的风险。
- 使用 Fail2ban 自动屏蔽恶意 IP。