如何在 Linux 中保护 SSH
有必要保护您的 SSH 服务器免受不必要的数据泄露和恶意攻击。
您可以通过不同的方式执行此操作。在这里,我们将向您展示其中的一些。
使用强用户名和密码
如果您使用向外界显示的 SSH,您将面临一些来自黑客的登录尝试。黑客使用许多不同的技术来破解您的 SSH 用户名和密码。
为了防止攻击者,建议选择强用户名和密码。您可以使用密码生成器创建随机的强密码。
更改 Linux 中的默认 SSH 端口
SSH 连接的默认端口为 22。您可以更改此端口,以保护 SSH 服务器免受攻击。若要更改默认的 22 端口,请按照下列步骤操作:
首先,打开 /etc/ssh/sshd_config 文件。
然后,将以下行添加到文件中。在非标准端口上运行 SSH。
Port 30125
接下来,您需要重新启动 SSHD 服务以使用以下命令应用更改:
sudo systemctl restart sshd
此时,SSH 默认端口将更改为另一个端口。
在 Linux 中禁用 root 登录
建议禁用 root 用户登录,改用非 root 用户访问权限,以提高安全性。
为此,请以 root 用户身份登录您的服务器,然后打开 /etc/ssh/sshd_config 文件。
找到 PermitRootLogin 行并将其更改为:
PermitRootLogin no
之后,通过编写“AllowUsers your_username”添加要用于登录的用户帐户。
完成后,保存并关闭文件。
在这里,您需要重新启动 SSHD 服务以应用更改:
sudo systemctl restart sshd
接下来,打开一个新终端并尝试使用您选择的用户登录,然后关闭根会话。您可以对具有 root 权限的用户使用“su”命令。
使用 SSH 密钥而不是密码
与其使用强密码,不如使用 SSH 密钥为您的服务器安全添加额外的层。
SSH 密钥对是两个加密安全密钥(私钥/公钥),可用于向 SSH 服务器验证客户端。
SSH 密钥对是两个加密安全密钥,可用于向 SSH 服务器验证客户端。每个密钥对由一个公钥和一个私钥组成。
创建 SSH 密钥
要在 Linux 中创建 SSH 密钥,请按照下列步骤操作:
1) 检查现有的 SSH 密钥
在终端中运行以下命令以检查现有 SSH 密钥:
cd ~/.ssh
如果您看到“没有这样的文件或目录”,则表示没有任何现有密钥。
因此,请检查您是否已经拥有此命令的密钥:
ls id_*
2)备份旧的SSH密钥
如果您有现有密钥,但不想使用它们,则可以通过以下命令备份它们:
# mkdir key_backup
# cp id_rsa* key_backup
3)生成新密钥
如果您没有现有的 SSH 密钥,则可以按照以下步骤轻松生成新密钥:
• 要生成公钥/私钥对,请在终端中运行以下命令:
ssh-keygen
• 只需按 <Enter> 即可接受默认位置和文件名。如果 .ssh 目录不存在,系统会为您创建一个。
• 输入密码,并在出现提示时重新输入密码。
• 大功告成;您的密钥现已生成。
注意:如果要查看有关生成的密钥的所有信息,可以使用以下命令:
ssh-agent
禁用空密码
Linux 允许用户创建空密码,并允许空密码登录服务器将显示您的服务器容易受到网络攻击。
若要禁用空密码,请打开sshd_config文件。然后,找到 PermitEmptyPasswords 行并将其更改为:
PermitEmptyPasswords no
要应用更改,请重新启动 SSHD:
sudo systemctl restart sshd
配置空闲超时间隔
您可以设置空闲超时间隔,以避免出现不需要的 SSH 会话。
打开 /etc/ssh/sshd_config 文件,并将以下行添加到该文件中:
ClientAliveInterval 360
ClientAliveCountMax 0
您刚刚设置的空闲超时间隔为 360 秒。此时间过后,空闲用户将自动注销。
在 Linux 中使用 SSH 协议 2
SSH 服务器可以使用两种协议。协议 1 较旧且安全性较低。但协议 2 更新、更安全。
注意:如果您希望您的服务器符合PCI标准,则必须禁用协议1。
为此,请打开您的 /etc/ssh/sshd_config 文件,然后找到协议行并通过删除其中的“#”并将其更改为:
Protocol 2
然后,重新启动 SSHD 服务以应用更改:
sudo systemctl restart sshd
仅允许特定客户端
您需要向路由器添加防火墙规则或更新 Iptables,以便只能从端口 22 上的特定 IP 地址访问您的服务器。您可以使用以下命令:
iptables -A INPUT -p tcp -s YourIP --dport 22 -j ACCEPT
如果要全局打开SSH服务器端口,Iptables可以通过登录并阻止从同一IP地址登录的重复尝试来防止攻击。
为此,您可以使用以下命令:
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name ssh –rsource
以下规则验证该 IP 地址在过去 90 秒内是否尝试连接了 3 次或更多次。如果没有,则接受数据包(此规则需要输入链上的默认策略 DROP)。
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent ! --rcheck --seconds 90 --hitcount 3 --name ssh --rsource -j ACCEPT
在防火墙上进行过滤是保护 Linux 中 SSH 服务器的有用方法。