正在运行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
?或者最佳解决方案是什么?
感谢。
答案 0 :(得分:39)
这个问题似乎得到了很多观点但却没有答案,所以我决定回答我自己的问题,寻找解决方案。
首先,了解原因是解决方案的一半。我处于所谓的SYN Flooding Attack之下,它使用针对自身的HTTP协议行为
缺点是,远程客户端尝试通过发送SYN与您的服务器建立连接,您的服务器回复SYN_ACK(在您的日志中您将看到SYN_SENT)并将等待它收到ACK。如果在xx秒内没有收到ACK,您的服务器将再次发送SYN_ACK,....再次发送....它最终将达到配置的阈值并停止接受任何更多的SYN请求,使您的服务器无响应。发生在我身上的一个症状是,我的网站在没有错误的情况下做出响应,但在接下来的xx时间没有响应。
对我有用的解决方案是启用SYN Cookie,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,我认为上述解决方案适用于所有发行版,但万一它没有搜索"如何停止SYN Flooding Attack"为您的Linux发行版
另一方面,阻止启动SYN请求的IP可能无济于事,因为攻击者很可能欺骗了IP