我们的系统使用在 Ubuntu 10.04 上运行的 Cassandra,在上次流量高峰期间,我们在日志中观察到以下消息:
possible SYN flooding on port 9160. Sending cookies.
这些机器不公开,流量是合法的 - 它来自我们自己的应用服务器。
有人知道内核进入“cookie”模式对调用者有什么后果吗?我知道服务器会停止将半开连接(SYN_RECV)添加到积压队列,但这会以任何方式影响调用者(即我们的 .NET 应用程序)吗?是否存在一些可能引发恶性循环的限制/延迟?
鉴于这些是内部机器,这种保护是否有意义?默认值如何tcp_max_syn_backlog=1024
?
答案1
您可以使用以下方法禁用它们:
echo 0 > /proc/sys/net/ipv4/tcp_syncookies
为了使更改永久生效,请编辑/etc/sysctl.conf
添加如下行:
net.ipv4.tcp_syncookies=0
如果流量是在本地产生的并且合法,我认为这不是问题,除非你自己淹没了你的服务器:)
答案2
鉴于这是有效流量,您将需要禁用此行为 - 在连接的每一端使用 SYN cookie 会对性能产生重大影响。这个想法是通过将负担转移到 CPU(在收到有效回复之前,不会为内存分配 cookie)来防止 SYN 洪水耗尽 RAM 资源。
但是,序列计算需要大量计算,可能会影响您的应用程序和服务器,限制因素是 CPU。它是一种 DDoS 预防机制,当流量已知良好时,您不应该运行它,在这种情况下,这本质上是一种资源浪费。为什么要对所有流量进行不必要的密集计算?
如果您确实禁用了 syn cookies 并认为您的服务器因此可能存在漏洞,那么您可以在服务器上添加逻辑以在检测到其他端口上的洪水时重新启用 cookies,或者您可以在中间放置 IDS / LoadBalancer 或类似程序,以专用于处理此类攻击的资源。