介绍
当您查看身份验证日志时,您可能会看到来自各种IP地址的多次登录失败尝试。这些登录失败尝试通常来自于一个僵尸网络中的节点,该网络在整个网络中搜索具有默认凭据的易受攻击的服务器。虽然大多数人会使用安全密码或SSH密钥来防止攻击者登录他们的服务器,但有些服务器可能会受到这种扫描的影响。虽然您可能无法阻止这些攻击,但您可以通过蜜罐来减缓它们的速度。
在本教程中,您将安装和配置Endlessh,一个慢慢向任何尝试登录的用户发送无限长横幅的蜜罐。您还将配置SSH服务以在不同的端口上运行,这将使您的身份验证日志更易于阅读。
完成本教程后,您将能够连接到非标准端口的服务器,而任何扫描您服务器的机器人将发现他们在敲打一个永远不会打开的门时浪费了时间。
先决条件
要完成此教程,您需要以下内容:
- 一个具有sudo非根用户、防火墙和至少1GB RAM的Ubuntu服务器,您可以按照使用Ubuntu 22.04进行初始服务器设置进行设置。
- 在您的服务器上安装Git,您可以通过Git安装教程完成。
步骤1 – 将SSH移至非标准端口
在此步骤中,您将将SSH移至非标准端口,以便为Endlessh释放一个端口。由于僵尸网络没有无尽的资源,它们通常只扫描默认的SSH端口(22
)。通过将SSH移至非标准端口,您可以将僵尸网络困在Endlessh陷阱中。
要开始,请使用以下命令备份服务器上的SSH配置文件:
如果有什么问题或者您决定将SSH移回默认端口,可以使用此文件恢复原始设置。
打开SSH配置文件/etc/ssh/sshd_config
,使用nano或您喜欢的文本编辑器:
定位#Port 22
这一行。通过删除#
取消注释此行,然后将端口更改为服务器上未使用的端口:
...
Port 2222
...
一个通常未使用的端口示例是2222
。您可以选择任何您想要用于您的重复SSH连接的端口。保存并关闭文件。
如果您的服务器正在使用防火墙,例如ufw
,您需要允许流量到新端口:
接下来,重新启动SSH服务:
在单独的终端会话中,尝试使用新端口连接到您的服务器:
警告:除非您确认可以使用新端口的SSH,否则不要关闭您的活动SSH会话。如果您无法通过新端口连接,关闭会话会导致您失去对服务器的访问权限。如果您无法在单独的终端会话中连接到服务器,您可以通过运行以下命令恢复原始的SSH设置:
如果遇到进一步的问题,请检查sshd
是否成功重启,并审查防火墙设置,确保端口2222
接受tcp流量。
一旦您验证可以连接到端口2222
,您可以安全地关闭原始终端。将来连接服务器时,您将始终需要指定新端口,如下所示:
现在您已成功将SSH移动到非标准端口,是时候设置Endlessh了。
步骤2 – 安装 Endlessh
Endlessh 没有官方软件包,因此您需要克隆存储库并手动构建。您将使用 Git 克隆存储库,build-essential
软件包(用于编译项目)和 libc6-dev
软件包。
使用 apt 软件包管理器安装所需软件包:
在提示时确认安装时输入 y
。
然后从 GitHub 克隆 Endlessh 存储库到您的主目录:
进入项目目录并使用 make
命令编译 Endlessh:
现在可以使用以下命令启动 Endlessh:
为了测试 Endlessh 是否工作正常,您可以尝试使用 -v
详细标志进行 SSH 连接到端口 22
,这将显示正在传输的无尽横幅。在新的终端窗口中,使用以下命令之一连接到端口 22
:
当您的新 SSH 会话尝试连接到端口 22
时,您将在连接终端中每隔 10 秒看到一串随机字符,直到会话关闭,如下所示:
Outputdebug1: kex_exchange_identification: banner line 0: NvnHF>]&W4p+tg*"+
debug1: kex_exchange_identification: banner line 1: n<
debug1: kex_exchange_identification: banner line 2: @/O5c0/;>1b{qd(M,vK
debug1: kex_exchange_identification: banner line 3: i+ OZ
debug1: kex_exchange_identification: banner line 4: yn
debug1: kex_exchange_identification: banner line 5: T[V\\[HUg
一旦您通过尝试使用新会话连接确认它正常工作,您可以关闭新终端并在原始终端会话中使用 Ctrl+C
停止 Endlessh。
在这一步中,您下载并构建了 Endlessh 源代码。接下来,您将对其进行配置,并将其部署为一个服务,以便在注销并重新启动服务器时保持持久性。
步骤 3 – 配置 Endlessh
在这一步中,您将设置 Endlessh 作为一个服务,该服务将在您的会话结束后持续存在,并在系统重新启动时继续运行。
将编译好的二进制文件移动到 /usr/local/bin
目录中:
如果需要,输入密码。
将项目中的服务文件复制到 /etc/systemd/system
目录中:
您需要稍微修改服务文件,以便在端口小于 1024
的情况下运行 Endlessh。使用 nano 或您喜欢的文本编辑器打开服务文件:
找到关于在端口小于 1024
上运行 Endlessh 的部分。
通过移除行首的 #
并在行首添加 #
,将文件进行更新,像这样:
...
## 如果您希望 Endlessh 绑定在端口 < 1024
## 1) 运行:
## setcap 'cap_net_bind_service=+ep' /usr/local/bin/endlessh
## 2) 取消以下行的注释
AmbientCapabilities=CAP_NET_BIND_SERVICE
## 3) 注释以下行
#PrivateUsers=true
...
保存并退出文件。
接下来,您将允许Endlessh在低于1024
的端口上运行,也称为Internet域特权端口。使用setcap
命令为Endlessh二进制文件设置此功能:
您需要为Endlessh定义一个配置文件,告诉它使用哪个端口。创建并打开名为/etc/endlessh/config
的配置文件:
在配置文件中,将要使用的端口定义为22
:
Port 22
保存并关闭文件。
现在您可以持久地启动Endlessh服务:
包括--now enable
将使服务在重新启动服务器后持久存在。
要检查服务是否成功启动,您可以使用systemctl status
命令:
如果成功启动,您将看到如下输出:
Output● endlessh.service - Endlessh SSH Tarpit
Loaded: loaded (/etc/systemd/system/endlessh.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2022-04-22 11:20:39 UTC; 1 months 11 days ago
Docs: man:endlessh(1)
Main PID: 34007 (endlessh)
Tasks: 1 (limit: 1081)
Memory: 380.0K
CGroup: /system.slice/endlessh.service
└─34007 /usr/local/bin/endlessh
如果正在运行,您可以尝试在新的终端会话上连接端口22
:
因为您的蛛网陷阱正在运行,新的终端会话将无法连接,并将永久运行,直到在连接终端中手动停止,使用Ctrl+C
。
如果您希望停止服务运行,您可以使用以下命令:
停止服务后,您可以按照步骤1警告中的SSH恢复说明来恢复原始服务器配置。您可以使用sudo systemctl --now enable endlessh
重新启用服务,而无需重新进行设置过程,但请确保在执行此操作时SSH未在端口22
上运行。
结论
您已成功安装并配置了Endlessh,并帮助清理了您的身份验证日志,准备好浪费随机SSH机器人的时间。
在设置好Endlessh坑阱后,请查看其他推荐的安全措施以保护您的服务器。
Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-an-endlessh-tarpit-on-ubuntu-22-04