我正在运行一个2 GB的ram上的网站。 使用LAMP
每天几个小时(大约3到4个小时),apache就会closures。 加载页面花费的时间太长,大部分时间显示请求超时。 但是其他的端口也可以像ftp也是7778,因为我使用的是kloxo。
我不是服务器专家,但我已经search了一下,做了一些研究,我认为这是一个ddos syn攻击。
我使用了netstat -n | grep :80 | grep SYN |wc -l netstat -n | grep :80 | grep SYN |wc -l netstat -n | grep :80 | grep SYN |wc -l查看syn连接
在攻击期间,它显示了一个3000以上的数字。但是当我的网站恢复正常时,显示的数字大约是100。
所以请帮助我。 并告诉我如何阻止这个真的让我感到厌烦。
首先要做的是确定发生了什么事情。 现在你所知道的是,Apache有时候并没有反应,在这个时候,你有很多半开放的TCP连接。 您不知道TCP连接是问题的原因还是症状 。
你有任何性能监测系统,如仙人掌,穆宁,Zabbix,Observium或在这个领域的任何其他选项? 如果没有,现在就得到其中一个。 将它们configuration为绘制所有正常情况,例如内存使用情况,平均负载情况,CPU使用情况,可用磁盘空间,IOPS,networking使用情况等,但也可能需要添加自定义度量标准,如每分钟请求数或TCP状态。 还要添加与您使用的服务相匹配的任何模板,例如Apache,MySQL,memcached等。
通过分析这些工具产生的图表,您应该能够find在这些停机期间达到100%的资源。 从那里,你可以追溯到导致问题的最初的触发因果链。 可能耗尽的资源不是由你来衡量,甚至可能不在你的掌握之中。
作为一个猜测,如果你的连接处于SYN_SENT状态,你可能正在使用别人的HTTP over HTTP,或者他们已经closures,或者他们暂时阻止了你。 如果它们处于SYN_RECV状态,则可能存在阻止客户端收到SYN-ACK响应或者您收到客户端响应的防火墙问题。 它也可能是你build议的SYN洪水。
在真正的SYN洪水期间,您将看到带宽和每秒数据包数量显着增加。 在iptables中使用tcpdump -w packet-capture-file.cap或-j LOGlogging这些数据包,看看是否可以发现一个模式。 也许源地址总是相同的,也许它总是在一个小范围内,也许一个奇怪的TCP标志(如URG或PSH)被设置。 如果没有,请参阅所涉及的IP地址是否进行多次连接尝试。 如果他们这样做,您可以将它们添加到防火墙中的DROP规则,以便您的操作系统不必处理它们。 根据有多less个不同的IP地址,你可能需要将你的规则分成几个表来减lessiptables必须扫描的列表大小。
DDoS可能足够大,实际上已经耗尽了您的托pipe服务提供商的带宽。 如果是这样的话,他们或者你可能需要去专门的DDoS缓解公司。 这些家伙使用DNS或BGP将您的stream量路由到他们,过滤出DDoSstream量,并将剩余的stream量发送给您。 他们通常不便宜,您将不得不权衡宕机成本与减灾服务的成本。 还有像CloudFlare这样的服务可以防止DDoS攻击达到一定的限度,并且有更实惠的定价计划。
他们是从一个单一的IP分配还是来自? 无论哪种方式,我会推荐一个防火墙,如csf限制TCP syn攻击。
快速而廉价的解决scheme是:
减lesssyn包超时的超时
编辑/etc/sysctl.conf
net.netfilter.nf_conntrack_tcp_timeout_syn_recv=30
创造新的链子
iptables -N syn-flood
限制传入数据包
iptables -A syn-flood -m limit --limit 10/second --limit-burst 50 -j RETURN
日志攻击
iptables -A syn-flood -j LOG --log-prefix "SYN flood: "
默默地放下其余的
iptables -A syn-flood -j DROP
资源
谁在乎追踪知识产权。 DoS / DDoS攻击的90%将被代理! 您需要根据“恶意stream量”设置黑名单时间段。
http://perishablepress.com/eight-ways-to-blacklist-with-apaches-mod_rewrite/
在SYN攻击中,你的系统会被一系列SYN包(显然)所淹没。 每个数据包都会导致您的系统发出SYN-ACK响应。 您的系统等待SYN + ACK(三次握手)之后的ACK。 由于攻击从不发回ACK,因此您的系统资源将被占用。 一旦队列满了,你的系统会忽略来自合法用户的服务请求(http / mail等)。 因此有必要用iptables,ipfw等来阻止这种攻击
至于iptables规则:
iptables -A INPUT -p tcp! –syn -m状态 – 状态NEW -j DROP