虽然通常不需要超过 64k 的可用端口,但我对 PoC 感兴趣,因为拥有 64 位端口号将减轻对访问端口(ssh、vpn...)的常规攻击。拥有 64b 端口几乎不可能针对 DoS 或登录来随机攻击服务。喜欢
ssh -p 141592653589793238 my.site.com
- 是否可以将 Linux 配置为使用 64 位端口? (当然客户端和服务端都要配置)
并且实际上
- 这会干扰互联网设备吗? (“传输”是 OSI 第 4 层,位于 IP 之上,因此路由本身不应受到影响,但某些设备会上升到上层进行分析/恶意软件检测...;64 位端口 Linux 盒子将充当家庭路由器)
答案1
是否可以将 Linux 配置为使用 64 位端口?
您无法更改参数以在 TCP/UDP 中使用 64 位端口。
你可以创建类似的协议,但您只能与修改后的主机进行通信,并且它不会是 TCP / UDP,而是一组新的协议,比如说 TCP64 / UDP64。
在考虑内存影响和大量其他问题之前,您必须添加以下一些内容才能使这些协议正常工作,只是为了开始:
- TCP64 的定义(当前 TCP 段的修改)
- 一个新系列 AF_INET 能够容纳扩展端口,以及处理它的内核代码(如果您正在考虑复制/粘贴,请注意,您至少必须更改结构定义、类型定义的列表并致电
htons()
或ntohs()
例如 - 向所有旨在使用新堆栈的用户空间程序编写代码,包括那些位于网络边缘的程序,例如防火墙(如果您计划过滤流量)。
因为这将是一组不同的协议,有自己的协议IP号码,它们不会干扰路由节点,尽管它们可能会被路由节点丢弃,因为 IP 协议号是未知的。
至于缓解措施:fail2ban
不过,类似软件和自定义服务端口(在 16 位范围内)是常用技术不是唯一的。
答案2
拥有 64b 端口几乎不可能针对 DoS 或登录来随机攻击服务。喜欢
ssh -p 141592653589793238 my.site.com
客户怎么知道 141592653589793238 呢?如果可以从某种目录或查询服务获得此信息,那么攻击者将从该服务获取端口号,并且没有任何好处。如果 141592653589793238 是一个秘密,那么这会限制该协议的有用性,即客户端仅连接到他们之前从其接收过秘密信息的知名服务器。很少有服务符合这种描述。 SSH 是少数适合的协议之一,但即便如此,它也是一个额外的障碍。
此外,可以观察传输中的数据包的攻击者可以看到端口号。所以这个秘密不会秘密太久。
至于好处,那几乎是不存在的。除了一些拒绝服务攻击之外,攻击者是否可以打开与服务的连接并不重要。重要的是该服务没有可利用的漏洞。将一项特定服务 (SSH) 隐藏在比典型 SSH 服务器的安全性弱得多的附加秘密后面并不能真正获得任何安全性。
是否可以将 Linux 配置为使用 64 位端口? (当然客户端和服务端都要配置)
不。端口号的位数不是一个系统的属性。它是协议(的一个方面传输控制协议)大家都同意。如果不同的系统使用不同的端口号大小,它们将无法相互通信。
当然可以实施与 TCP 类似但具有 64 位端口号的协议。但这不仅仅是更改配置项的问题,而是一段全新的代码和全新的协议。
这会干扰互联网设备吗?
是的。几乎每个 TCP/IP 客户端都背后有一个网络地址转换。 NAT 通过端口号来识别连接。 NAT 也需要支持新协议。
答案3
正如其他人提到的,这是不可能的TCP和UDP都使用16位用于端口指定。因此,您必须让互联网上的所有主机将 TCP 协议更改为其他协议,但这种情况极不可能发生。
幸运的是,我们有IPv6现在在很多地方都部署了,因此您可以让主机上的不同服务侦听不同的 IPv6 地址,而不是让攻击者猜测您的端口是什么,从而使攻击者不得不猜测 IP 地址 - 通过让他们搜索更大的范围来完成同样的事情空间。 IPv6 地址有 128 位,甚至一台计算机始终可以为自己使用至少 64 位(如果允许的话,可以使用更多),因此攻击者比您的 64 位端口想法更难猜测。
当然,与隐藏端口的想法一样,您必须小心不要让攻击者轻易获得您的隐藏 IPv6 地址。
(当然,源计算机和目标计算机都必须具有 IPv6 连接。如果没有,请游说您的 ISP 本地提供它,并使用一些 IPv6 隧道,例如隧道经纪网直到他们这样做)
答案4
我认为修改 TCP 堆栈是不可行的,因为即使您在服务器端执行此操作,您也必须修补客户端及其上运行的软件。
作为缓解措施,我建议使用 CrowdSec。这是一种现代的fail2ban(因此在日志中查找行为并阻止它们),但符合IPV6、更快且解耦。最重要的是,您可以从保护其 SSH 端口的所有其他用户的 IP 黑名单中受益,这些用户识别出针对这些端口的攻击性 IP。
免责声明:我是 CrowdSec 团队的一员。