我正在c中制作一个http服务器。 这是在alpha阶段,但似乎足够稳定,部署在我的服务器上,并运行4个最小的网站。 它已经运行了两天,直到今天早上。 守护进程没有运行,没有干净地退出。 我看了看原木,发现连续10行说:
[815259.230706] possible SYN flooding on port 80. Sending cookies.
然后没有更多的消息logging从http服务器,所以我认为这是它死的地方。 我不知道接收到的信号是什么消失,所以我认为它是SIGKILL,SIGSEGV或SIGABRT,因为它们没有被捕获,SIGKILL也无法被捕获。 我查了SYN洪水,这是一种DoS攻击。 我不确定服务器是否真的受到攻击,但是我收到的4个网站最多的请求最多只能运行1次,没有足够的可能被误认为是DoS攻击。
我的问题是:
这是一个DoS攻击有多大可能?
内核(linux)会因为这个杀死http服务器还是自己死掉了?
如果内核杀死了它,我如何防止这种情况发生,我不能让它意外死亡?
如果内核没有杀死它,死亡可能是由SYN泛滥造成的,我如何debugging它,还是更可能是一个无关的编程错误?
我应该采取哪些安全措施来防止SYN泛滥?
编辑:http服务器现在已经崩溃了3次发生相同的情况。
Linux内核正在向远程计算机发送一个SYN cookie,这个远程计算机正在进行可靠的攻击,但不会发送到您的Web服务器。
您可以阅读将TCP / IP堆栈强化为SYN攻击,以了解有关SYN泛滥攻击的更多信息。
另外也许你想阅读本指南有关apachedebugging,并应用一些想法来debugging自己的服务器。
运行netstat并查看连接的状态。 如果你看到很多SYN_RECV套接字就在那里,那么在DOS下有一个很好的机会。 如果所有连接都来自同一个ip,修复很简单。
也有可能你的网站已经变得stream行,或被一个编码不好的search机器人抓取,导致很多连接,你的服务器无法处理它。 在您最喜爱的search引擎中search“Linux tcp tuning”会调出很多关于调整服务器tcp堆栈的提示/技巧/方法。