Letmein 是一个简单的端口敲击器,具有简单且安全的身份验证机制。它可用于强化对 SSH、VPN、IMAP 等服务的预身份验证攻击。
Letmein 将服务器上的服务隐藏在敲击身份验证屏障后面,以减少服务的攻击面。除非敲门认证成功,否则该服务将无法访问。如果敲门成功,letmeind 服务器只会为执行敲门的客户端 IP 地址打开被敲门的端口。具有不同 IP 地址的计算机仍然无法访问受保护的服务。
无法成功验证敲门序列的计算机将无法访问受保护的服务。他们将通过提供的示例nftables.conf
在受保护的服务端口上收到 ICMP reject
。 (您也可以决定将数据包drop
到nftables.conf
中)。
Letmein 需要一个基于nftables
防火墙。它不适用于iptables
。如果您使用基于iptables
的防火墙,请在安装 letmein 之前转换为nftables
。互联网上有关于如何执行此操作的说明。这并不像听起来那么难和那么多工作。 :)
letmein 控制通信本身默认为 TCP 端口 5800,但可以配置为任何 TCP 或 UDP 端口。如果您选择 UDP 端口作为控制端口并配置 control-error-policy=basic-auth,则 letmein 服务本身将以隐身模式运行,并且不会响应未经身份验证的传入消息。
主页
Git 存储库
Github 存储库
在服务器上安装 letmein 服务器软件(请参阅下面的部分)。
在客户端上安装 letmein 客户端软件(请参阅下面的部分)。
请阅读该项目提供的 nftables.conf 示例配置文件。需要将 letmein 特定输入链添加到现有的nftables
配置中。相应地修改您的nftables.conf
。
使用以下客户端命令生成要安装在服务器和客户端上的共享密钥和用户标识符:
letmein gen-key -u 00000000
gen-key 命令会将生成的密钥字符串打印到控制台。默认情况下,这将为用户标识符00000000
生成一个安全随机密钥。如果需要,您可以手动编辑用户标识符,也可以保持原样。
将生成的字符串(用户标识符和共享密钥)添加到/opt/letmein/etc/letmeind.conf
中的服务器配置中。将生成的密钥字符串与用户标识符一起放入配置文件的[KEYS]
部分。
将相同的生成字符串(用户标识符和共享密钥)添加到/opt/letmein/etc/letmein.conf
中的客户端配置中。将生成的密钥字符串与用户标识符一起放入配置文件的[KEYS]
部分。
在服务器中创建一个resource
,描述可以打开的sshd
端口。在服务器配置文件/opt/letmein/etc/letmeind.conf
的[RESOURCES]
部分中,必须指定所有可能打开的端口。资源由资源标识符和端口标识符组成,如下所示:
[RESOURCES]
00000022 = port: 22
资源标识符是一个 8 位十六进制数。在此示例中,它是 22(十六进制),但它可以是任何数字。服务器和客户端上的号码必须相同。 port:
指定可敲开的端口号(十进制)。
将具有相同资源标识符和相同端口号的相同资源添加到/opt/letmein/etc/letmein.conf
中的客户端配置中。
重启letmein服务器:
systemctl restart letmeind.service
现在从nftables.conf
防火墙配置中删除静态sshd
端口 (22) accept
。敲击认证成功后,Letmein 会动态地将这样的规则安装到 Letmein 输入链中。然后重新启动nftables:
systemctl restart nftables.service
完毕!您现在应该能够打开服务器上的sshd
端口:
# This must fail! No successful knock authentication, yet.
# If this does not fail, check if you have removed the sshd accept rule from nftables.conf.
ssh your-server.com
# Knock-open port 22 (sshd) on the server using user-id/key 00000000:
# (You do not have to specify -u 00000000 if that is your default user (see config).)
letmein knock -u 00000000 your-server.com 22
# Now you should be able to ssh into your server successfully:
ssh your-server.com
要在使用 ssh 连接之前自动敲入端口,您可以将Match exec
规则添加到~/.ssh/config
文件中:
Match host your-server.com exec "letmein knock -u 00000000 your-server.com 22"
有关如何构建和安装 letmein 的更多信息,请参阅安装说明。
如果您想从系统中完全删除letmein,请参阅卸载说明。
客户端应用程序letmein
是可移植的并且应该在所有主要平台上运行。测试过的平台有:
服务器应用程序letmeind
仅适用于Linux,因为它仅支持nftables
作为防火墙后端。
有关如何配置letmein服务器和客户端的详细信息,请参阅配置文档。
请注意,配置文件中的用户标识符和资源标识符通过网络传输,未以明文加密。
确保用户标识符和资源标识符不包含任何私人信息。
这些标识符仅仅是用于管理不同letmein
密钥、安装和设置的抽象标识。
Letmein的主要设计目标是:
-4
和-6
客户端命令行选项来调整此行为。有关安全和报告漏洞的更多信息,请参阅letmein的安全文档。
版权所有 (c) 2024 迈克尔·布施 [email protected]
根据您的选择,根据 Apache 许可证版本 2.0 或 MIT 许可证进行许可。