如何在 Ubuntu 22.04 上设置 Endlessh Tarpit

作者选择了 自由和开源基金作为 写给捐款计划的一部分接受捐款。

介绍

当您查看身份验证日志时,您可能会看到来自不同IP地址的几次未成功登录尝试。这些未成功登录尝试通常来自botnet上的一个节点,该节点会扫描整个网络以使用默认身份验证来查找易受攻击的服务器。虽然大多数人会有一个安全的密码或SSH密钥,以防止攻击者登录到他们的服务器,但有些服务器会受到这种扫描的侵害。

在本教程中,您将安装和配置 Endlessh,一个缓慢向试图登录的任何用户发送一个无限长的标签。

完成本教程后,您将能够在非标准端口连接到您的服务器,而任何扫描您的服务器的机器人都会发现他们的时间被浪费,敲门永远不会打开。

前提条件

要完成本教程,您将需要以下内容:

步骤 1 – 将 SSH 移动到非标准端口

在此步骤中,您将将 SSH 移动到非标准端口,以便为 Endlessh 释放一个端口. 由于机器人网络没有无限的资源,它们通常只扫描默认 SSH 端口(22)。

首先,使用以下命令从您的服务器上备份您的 SSH config 文件:

1sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

此文件可用于恢复原始设置,如果某些东西不起作用或如果您决定将SSH移动回默认端口。

使用 nano 或您最喜欢的文本编辑器打开 SSH 配置文件 /etc/ssh/sshd_config:

1sudo nano /etc/ssh/sshd_config

通过删除#,然后将端口更改为您的服务器上未使用的端口:

1[label /etc/ssh/sshd_config]
2...
3Port 2222
4...

一个通常未使用的端口的例子是2222。您可以选择您想要使用的任何端口来重复使用 SSH 连接。

如果您的服务器正在使用防火墙,例如ufw,则需要允许流量到新的端口:

1sudo ufw allow 2222/tcp

接下来,重新启动 SSH 服务:

1sudo systemctl restart sshd

在单独的终端会话中,尝试使用新端口连接到您的服务器:

1ssh sammy@your_server_ip -p 2222

<$>[警告] **警告:**除非您确认可以在新端口上使用 SSH,否则不要关闭活跃的 SSH 会话。

1sudo cp /etc/ssh/sshd_config.bak /etc/ssh/sshd_config
2sudo systemctl restart sshd

如果您遇到其他问题,请检查sshd是否成功重新启动,并检查您的防火墙设置,以确保端口2222接受tcp流量。

一旦您确认您可以连接到端口2222,您可以安全地关闭原来的终端。在将来连接到您的服务器时,您将始终需要指定新的端口,如下:

1ssh sammy@your_server_ip -p 2222

现在你已经成功地将SSH迁移到非标准端口,是时候设置Endlessh了。

步骤二:安装 Endlessh

Endlessh 没有正式的包,所以你会克隆存储库来手动构建它.你会使用 Git 来克隆存储库、构建必需包(来编译项目)和libc6-dev 包。

使用 apt 包管理器安装所需的包:

1sudo apt install build-essential libc6-dev

请在提示时用y确认安装。

然后将 Endlessh 存储库从 GitHub 克隆到您的主目录:

1git clone https://github.com/do-community/endlessh

移动到项目目录并使用制造命令来编译 Endlessh:

1cd endlessh
2make

您现在可以使用以下命令启动 Endlessh:

1sudo ./endlessh -v -p 22

要测试 Endlessh 是否正在工作,您可以尝试使用-v字符串标签将 SSH 连接到端口22以显示正在传输的无限标签。

1ssh sammy@your_server_ip -v
1ssh sammy@your_server_ip -p 22 -v

当新的 SSH 会话尝试连接到端口 `22 时,您将看到连接终端每 10 秒出现一个随机字符串,直到会话关闭,如下面的输出:

1[secondary_label Output]
2debug1: kex_exchange_identification: banner line 0: NvnHF>]&W4p+tg*"+
3debug1: kex_exchange_identification: banner line 1: n<
4debug1: kex_exchange_identification: banner line 2: @/O5c0/;>1b{qd(M,vK
5debug1: kex_exchange_identification: banner line 3: i+ OZ
6debug1: kex_exchange_identification: banner line 4: yn
7debug1: kex_exchange_identification: banner line 5: T[V\\[HUg

一旦您通过尝试连接到一个新的会话来确认它正在工作,您可以关闭新终端,并在原始终端会话中使用Ctrl+C来停止 Endlessh。

在此步骤中,您从源头下载并构建了 Endlessh. 接下来,您将配置并部署为服务,使其在退出和重新启动服务器时持久。

步骤 3 – 配置 Endlessh

在此步骤中,您将将 Endlessh 设置为服务,该服务将在您的会话结束后和系统重新启动后继续使用。

将编译的二进制移动到 /usr/local/bin 目录:

1sudo mv ./endlessh /usr/local/bin/

请在提示时输入您的密码。

将服务文件从项目复制到 /etc/systemd/system 目录:

1sudo cp util/endlessh.service /etc/systemd/system/

您将稍微更改服务文件,以便在1024下的端口上运行 Endlessh。

1sudo nano /etc/systemd/system/endlessh.service

1024下找到有关在端口上运行Endlessh的部分。

更新该文件,删除#在行开始时使用AmbientCapabilities=CAP_NET_BIND_SERVICE,并将#添加到行开始时PrivateUsers=true,如下:

 1[label /etc/systemd/system/endlessh.service]
 2...
 3## If you want Endlessh to bind on ports < 1024
 4## 1) run: 
 5##     setcap 'cap_net_bind_service=+ep' /usr/local/bin/endlessh
 6## 2) uncomment following line
 7AmbientCapabilities=CAP_NET_BIND_SERVICE
 8## 3) comment following line
 9#PrivateUsers=true
10...

保存和退出文件。

接下来,您将允许Endlessh在低于1024的端口上运行,也称为互联网域特权端口

1sudo setcap 'cap_net_bind_service=+ep' /usr/local/bin/endlessh

您需要为 Endlessh 定义一个配置文件,告诉它使用哪个端口. 创建并打开名为 /etc/endlessh/config 的配置文件:

1sudo mkdir /etc/endlessh
2sudo nano /etc/endlessh/config

在配置文件中,将要使用的端口定义为22:

1[label /etc/endlessh/config]
2Port 22

保存并关闭文件。

现在您可以持续地启动 Endlessh 服务:

1sudo systemctl --now enable endlessh

包括现在启用将使服务在重新启动服务器后持续。

要检查服务是否成功启动,您可以使用systemctl status命令:

1sudo systemctl status endlessh

如果成功启动,你会看到这样的输出:

 1[secondary_label Output]
 2 endlessh.service - Endlessh SSH Tarpit
 3     Loaded: loaded (/etc/systemd/system/endlessh.service; enabled; vendor preset: enabled)
 4     Active: active (running) since Fri 2022-04-22 11:20:39 UTC; 1 months 11 days ago
 5       Docs: man:endlessh(1)
 6   Main PID: 34007 (endlessh)
 7      Tasks: 1 (limit: 1081)
 8     Memory: 380.0K
 9     CGroup: /system.slice/endlessh.service
10             └─34007 /usr/local/bin/endlessh

如果它正在运行,您可以在新的终端会话中尝试连接到端口22:

1ssh sammy@your_server_ip

由于您的 tarpit 正在运行,新终端会话将无法连接,并将持续运行,直到在连接终端中用Ctrl + C手动停止。

如果您想阻止该服务运行,您可以使用以下命令:

1sudo systemctl --now disable endlessh

停止服务后,您可以使用步骤 1 警告中的 SSH 恢复指示来恢复原始服务器配置. 您可以使用sudo systemctl --now enable endlessh重新启用该服务,而不会再次通过安装过程,但请确保 SSH 不会在端口 `22’ 上运行。

结论

您已成功安装和配置 Endlessh,帮助清除您的身份验证日志,并准备浪费随机SSH机器人的时间。

安裝 Endlessh tarpit 後,請檢查其他 建議安全措施來保護您的伺服器

Published At
Categories with 技术
comments powered by Disqus