Linux 中 tcp_syncookies 的更好替代品

Linux 中 tcp_syncookies 的更好替代品

为了防止 DDOS 攻击,我按照建议在我的 Linux 系统中将 /proc/sys/net/ipv4/tcp_syncookies 值设置为 1,以启用 TCP syncookies。

然而,当我查看这个 URL 时:http://ckdake.com/content/2007/disadvantages-of-tcp-syn-cookies.html

它告诉我,如果我启用 tcp_syncookies,那么一半的 tcp 功能(包括大窗口管理)将被禁用,这可能会降低性能。

我在其他地方读到,syn cookies 的部分目的是当更多数据包进入时将 tcp syn backlog 缓冲区扩展至其上限之外(通过 /proc/sys/net/ipv4/tcp_max_syn_backlog),这样数据包就不会丢失。

我希望能够禁用 syn cookies,这样我就可以充分利用 tcp,让我的服务器运行得更快,并且不会受到 DDOS 攻击。我可以轻松增加 syn 缓冲区和最大连接数,但我认为如果设置得太高,内存就会耗尽。

有没有人有好的替代方法来在大型服务器上同步 cookies,而不会受到 DDOS 攻击?我想享受 TCP 的功能并快速为用户提供内容。

答案1

Ubuntu 10.04 有以下默认的“sysctl.d/10-network-security.conf”设置:

# Turn on SYN-flood protections.  Starting with 2.6.26, there is no loss
# of TCP functionality/features under normal conditions.  When flood
# protections kick in under high unanswered-SYN load, the system
# should remain more stable, with a trade off of some loss of TCP
# functionality/features (e.g. TCP Window scaling).
net.ipv4.tcp_syncookies=1

答案2

显然,tcp_syncookies 带来的好处多于坏处。

除了在随机博客上进行典型的猜测之外,也许我们可以参考“来源“:

随着 IPv6 和现代 TCP 选项方案的更新,syncookies 似乎准备好继续在其有点深奥的网络安全领域提供甜蜜的缓解。

链接文章引用了一些实验并得出一些结论:

Willy Tarreau:我在一台 AMD LX800 上进行了测试,在 HTTP 反向代理上将 max_syn_backlog 设置为 63000,测试内容包括每秒注入 250 次合法流量和每秒注入 8000 次 SYN 噪音。[..] 如果没有 SYN cookies,平均响应时间约为 1.5 秒,并且不稳定(由于重传),CPU 设置为 60%。启用 SYN cookies 后,响应时间仅下降到 12-15 毫秒,但 CPU 使用率跃升至 70%。差异出现在更高的合法流量速率下。

Ross Vandegrift:在没有 SYN 泛洪的情况下,服务器每秒处理 750 个 HTTP 请求,通过泛洪模式下的 httping 测量。使用默认的 tcp_max_syn_backlog 1024,我可以用 2 个 syn 泛洪线程轻松阻止任何入站客户端连接。启用 tcp_syncookies 可将连接处理速度恢复到每秒 725 次提取。

这些数据有力地证明了 syncookie 的持续价值,而且这一立场似乎已占上风。IPv6 syncookie 补丁现已在网络 2.6.26 开发树中排队。

此外,根据 CentOS'文档,这是以自适应的方式使用的,可能是为了避免破坏合法流量:

如果当达到 tcp_max_syn_backlog 中设置的数字时,此参数将启动,这样您的服务器就不会因为连接等待永远不会到来的 ACK 而无法访问。

答案3

编辑文件 /etc/sysctl.conf,运行:

# vi /etc/sysctl.conf

附加以下条目:

net.ipv4.tcp_syncookies = 1

保存并关闭文件。要重新加载更改,请键入:

# sysctl -p

相关内容