A-A+

Linux下如何防止大量IP的并发访问

2014年11月28日 Linux 暂无评论 阅读 220 次浏览 次

问题的来源是一个无效的请求的导致drupal进程特别消耗服务器资源,导致cpu超高。由于近期也在研究iptable的ddos策略,所以就研究了一下,大概列举一下相关的解决方案。



首先,看看iptable解决办法。

对于要解决syn flood以及ddos等推荐用iptable,比较轻量级,也是iptable比较擅长的。

在网上找了一下,iptable的 recent模块可以解决问题,

先看一下recent的参数,

--name #设定列表名称,默认DEFAULT。
--rsource #源地址,此为默认。
--rdest #目的地址
--seconds #指定时间内
--hitcount #命中次数
--set #将地址添加进列表,并更新信息,包含地址加入的时间戳。
--rcheck #检查地址是否在列表,以第一个匹配开始计算时间。
--update #和rcheck类似,以最后一个匹配计算时间。
--remove #在列表里删除相应地址,后跟列表名称及地址。

最终测试,下面的代码可以测试通过:

#!/bin/bash
IPT=/sbin/iptables
# Max connection in seconds
SECONDS=100
# Max connections per IP
BLOCKCOUNT=10
# ....
# ..
# default action can be DROP or REJECT
DACTION="REJECT"
$IPT -A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --set
$IPT -A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --update --seconds ${SECONDS} --hitcount ${BLOCKCOUNT} -j ${DACTION}
# ....
# ..

向服务器发送超过10次请求,就会出现connect closed的错误消息,表示成功。

测试用浏览器即可,因为之后10次请求,多的话可以用ab -n xx -c xx。

其次,varnish的解决方案。

varnish的优点是VCL功能强大,之前笔者用varnish做过防止robots抓取的操作,但是vcl如何防止ddos以及同一ip的限制,在网上看到一个解决方案,就是security.vcl,但是感觉vcl写得忒忒多,不知道是不是因为功能太复杂的原因。

具体查看这个VCL

https://github.com/ssm/security.vcl

最后,Nginx和Apache解决方案

Nginx和Apache是最终的web服务器,所以安全层面可以放到这里来做,关于并发访问的模块。

Nginx有一个 ngx_http_limit_conn_module

http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html

Apache的模块,limitipconn

http://dominia.org/djao/limitipconn2.html

 

标签:

评论已关闭!

Copyright © 香港虚拟主机_美国虚拟主机_香港服务器_美国服务器租用托管 保留所有权利.   Theme  Ality 蜀ICP备14006632号-1

用户登录