有没有什么方法可以告诉哪个用户将会接收来自入站数据包的数据?

有没有什么方法可以告诉哪个用户将会接收来自入站数据包的数据?

在 Linux 中,考虑这种用例:

1.  User initiates http request for webpage to remote server
2.  Remote server answers request and sends packets

在远程服务器发送的传入数据包中,是否有对启动向远程服务器发出请求的进程的用户的引用?

我正在尝试找出一种方法来过滤入口流量,这样我就可以根据每个用户进行速率限制,而不仅仅是对整个系统进行速率限制。

答案1

是的,您可以使用Ident 协议从源头识别用户。

嗯,以前是可以的。现在唯一会将 ident 服务器暴露给整个互联网的人是那些想要一个时髦昵称的 IRC 用户。

噢,还有那些系统配置错误的人。

答案2

这在 TCP/IP 协议中无法实现,因为……嗯,协议的工作方式不是这样的 - 它没有用户的概念,并且只是为了在设备之间传输数据。

实现此目的(限制特定远程用户的速率)的一般方法是使用会话(OSI 网络模型中的第 5 层,比 TCP/IP 高 1 或 2 层)。您为每个用户分配一些唯一的内容,例如 cookie 或令牌,这样您就可以将各个会话与特定用户关联起来,然后将其传递给速率限制器(而不是仅传递 IP 地址,这是最简单的方法)。

答案3

为用户调整流量并不是一个坏主意,但你的做法是错误的——具体来说,你坚持试图调整入站流量。这句话来自Linux 高级路由和流量控制 HOWTO

通过排队,我们可以确定数据发送的方式。重要的是要意识到,我们只能塑造我们传输的数据。

由于互联网的运作方式,我们无法直接控制人们向我们发送的内容。这有点像您家里的(物理!)邮箱。除非联系所有人,否则您无法影响世界来修改他们向您发送的邮件数量。

[...]

如果你有路由器,并且希望防止网络中某些主机下载速度过快,则需要在 路由器的接口,用于将数据发送到您自己的计算机。

正如 voretaq7 和 MikeyB 在对 Hopeless Noob 的回答的评论中所说,你决定用方法 Y 来完成底层任务 X,而且你问的都是有关方法 Y 的问题。遗憾的是,方法 Y 是完成任务 X 的错误方法。这导致没有成效的答案和普遍的挫败感。

事情之所以会这样,通常是有原因的,而在免费软件中,这些方法很少与营销或其他无关紧要的事情有关;它们通常(但绝非总是)与事实和现实有关。因此,坐下来阅读所提供的方法以实现您想要实现的目标,然后弄清楚如何使用这些方法来解决您的特定问题。

编辑:trickle 根本不与网络堆栈一起工作;它通过拦截对glibc使用 TCP 作为传输机制的动态链接二进制文件的网络代码的调用而更早地参与其中。

这并不能证明流量整形可用于入站流量,而是证明了除了直接使用内核的网络堆栈之外,还有其他方法来限制网络吞吐量。您还可以使用身份验证代理来做您想做的事情,例如,squid它可以为每个用户设置带宽配额。

让我明确一点:我并不是说你想要的东西是不可能的。我只是说我不相信你可以或者应该用入站流量整形来实现它。

squid 和 trickle 实际上都体现了 voretaq7/MikeyB 的观点:如果你问过如何实现你真正想要做的事情,你会得到更好的答案。

答案4

如果iptables规则应用于运行客户端的主机,那么您可以使用该owner模块。这仅适用于传出数据包,因此您需要使用CONNMARK目标来存储传出数据包的信息,以便在处理传入数据包时需要这些信息。

如果数据包通过客户端和防火墙之间的网络链路传输,则该方法不起作用。大约 15 年前,我听说了一个研究项目,该项目试图用信息扩展 LAN 上的 IP 数据包,这将允许防火墙应用类似于模块的规则owner。我认为该实现从未在任何实际生产环境中使用过。

坚持使用已部署的协议,ident@MikeyB 的答案中的协议可能是唯一的选择。不幸的是,让防火墙进行额外的通信以处理数据包并不是一个好选择。必须缓冲数据包,以便数据包的命运取决于稍后收到的数据包,这可能需要对数据包过滤进行根本性的设计更改。此外,由于需要几次往返才能与守护进程通信,因此您将增加延迟ident。您还必须注意避免循环依赖,因为您正在使数据包转发(即 IP 层)依赖于在identTCP 之上运行的协议。

SYN如果在转发来自客户端的数据包时ident启动通信,则可以避免额外的延迟。那么它很可能在ACKTCP 握手结束之前完成。但是,ident这么早启动通信将使防火墙非常容易受到来自 LAN 端的 SYN 泛洪攻击。ident稍后启动通信将使攻击稍微困难一些,同时仍有机会在ident需要转发第一个数据包之前完成通信。但是,您将保护 LAN 免受 SYN 泛洪攻击的责任交给了 Internet 上的随机服务器。LAN 上的主机很容易与 Internet 上的主机勾结进行泛洪攻击,这很难防范。不过,这可能不是一个新问题,任何有状态的防火墙都可能容易受到此类攻击。

重要的是要记住,在任何情况下,客户端运行所在主机的管理员都会决定您是否可以使用用户信息。因此,您必须准备好处理无法使用用户信息的情况。

相关内容