如何停止SYN_SENT?

24

运行netstat命令后,即使重启服务器,也会显示数百条此类信息 - 它会重新发送,导致许多连接到该IP地址。

tcp        0      1 server1700.skdedicate:36283 154.45.206.59:https   SYN_SENT
tcp        0      1 server1700.skdedicate:36283 154.45.206.59:https   SYN_SENT
tcp        0      1 server1700.skdedicate:36283 154.45.206.59:https   SYN_SENT
tcp        0      1 server1700.skdedicate:36283 154.45.206.59:https   SYN_SENT
tcp        0      1 server1700.skdedicate:36283 154.45.206.59:https   SYN_SENT

我停止了所有脚本,但它仍在尝试。

我知道这意味着IP不响应 SYN_SENT,但我如何停止这些 SYN_SENT?或者有什么最好的解决方案吗?

谢谢。


2
运行 netstat -pnt 命令以获取拥有套接字的进程名称。 - Alan Curry
@AlanCurry:tcp 0 1 213.163.64.207:39316 154.45.206.59:443 SYN_ SENT 12388/httpd。它是由httpd打开的,但我在那里看到了端口443,这不奇怪吗? - EGN
那么你最好查看一下你的Web服务器,看看是什么原因导致它发出了一个HTTPS连接。顺便说一句,当我尝试向该IP地址发送HTTPS请求时,我会被重定向到rapidshare.com,所以这可能是一个提示,可以用来寻找问题所在。 - Alan Curry
@AlanCurry:是的,我知道,我的网站从rapidshare下载,但似乎没有更多连接到那个IP,我不知道为什么,但现在一切似乎都没问题了。 - EGN
@Eugene Yousif,你找到停止这些的解决方案了吗? - Sunil Silumala
1个回答

75

这个问题似乎得到了很多浏览,但是没有答案,所以我决定为寻找解决方案的任何人回答自己的问题。

首先要知道的是,了解原因就是解决问题的一半。我遭受了所谓的SYN洪泛攻击,它利用HTTP协议的行为反对自身。

简而言之,远程客户端尝试通过发送SYN与您的服务器建立连接,您的服务器会回复SYN_ACK(在日志中您将看到SYN_SENT),并等待接收ACK。如果在xx秒内未收到ACK,则您的服务器将再次发送SYN_ACK,....再次发送....再次发送。它最终将达到配置的阈值并停止接受任何更多的SYN请求,使您的服务器无响应。我遇到的其中一个症状是我的网站有时会正常响应,但在接下来的xx次中不会响应。

HTTP Protocol SYN

对我有效的解决方案是启用SYN cookies,SSH进入您的服务器,使用您喜欢的编辑器打开以下文件。在此示例中,我使用vi。

vi /etc/sysctl.conf

将这些行添加到文件中,然后重新启动服务器。希望这样做能够像对我一样停止攻击。

net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_synack_retries = 3

我曾经使用CentOS,我认为上面的解决方案适用于所有发行版,但如果不行,可以搜索适用于您的Linux发行版的“如何停止SYN洪水攻击”的方法。

顺便说一句,阻止发起SYN请求的IP地址可能不会有帮助,因为攻击者很可能伪造了IP地址。


3
当你意识到你的解决方案被超过17K个用户查看,但只收到12个赞时 :( - EGN
8
这里,拿我的 :) - javabot
1
这是一篇旧帖子,但今天确实帮了我。我的服务器上出现了SYN_SENT问题。 - ashlrem

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接