防ddos攻击:用 Nginx 限制模块减轻 DDoS 攻击,Apache Anti DDOS安装。

jackxiang 2011-6-12 22:54 | |
方法一:
防ddos攻击
Sysctl 修改
vi /etc/rc.local
加入如下文本
sysctl kern.ipc.maxsockets=100000    ##增加并发的socket,对于ddos很有用
sysctl kern.ipc.somaxconn=65535    ##打开文件数
sysctl net.inet.tcp.msl=2500      ##timeout时间



优化Linux内核参数
vi /etc/sysctl.conf
在末尾增加如下文本
net.core.netdev_max_backlog =  32768
net.core.somaxconn = 32768
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216

net.ipv4.tcp_max_syn_backlog = 65536
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.ip_local_port_range = 1024  65535


方法二:
Nginx 内核带有限制并发和速率模块,我们可以用这个模块来缓和 VPS 的 Load。
我们需要 Nginx 的:
limit_zone
语法:limit_zone zone_name $variable memory_max_size
环境:http
limit_conn
语法:limit_conn zone_name max_clients_per_ip
环境:http, server, location
limit_rate (可选)
语法:limit_rate speed
环境:http, server, location, if in location
例子:
# 警告!例子仅供参考!记得备份原来的文件!  
# Nginx.conf 的位置:/usr/local/nginx/conf/nginx.conf  
http{  
#... 省掉 N 字  
# 下面这段受攻击时用,平常不要用  
# 来自 http://cd34.com/blog/webserver/ddos-attack-mitigation/  
# //------------------------------------  
client_body_timeout 10;  
# 该指令用于设置读取客户端请求内容的超时时间,默认是 60,  
client_header_timeout 10;  
# 该指令用于设置读取客户端请求 Header 头信息的超时时间,默认是 60  
keepalive_timeout 10;  
# 该指令用于设置 keep-alive 连接超时时间,之后服务器会中断连接,默认是 75  
send_timeout 10;  
# 该指令用于设置发送给客户端的应答超时时间。超时时间是指进行了两次 TCP 握手,  
# 还没有转为 established 状态的时间。  
# 如果超过这个时间,客户端没有响应,Nginx 关闭连接  
# //----------------------------------  
limit_zone one $binary_remote_addr 16m;  
# one = 区名,可以随便你叫,后面要一致(看 limit_conn)  
# $binary_remote_addr = 用二进制来储存客户端的地址,1 MB 可以储存 32000 个会话  
}  
server{  
#... 省掉 N 字  
limit_conn one 2;  
# 允许 2 个连接(one 要跟 limit_zone 的变量对应)  
limit_rate_after 5m;  
# 传送 5Mb 后开始限速(就算没用上,默认是 1m)  
limit_rate 100k;  
# 限速为 100KB/秒  
}  
总结:
1、总速度可以去到 200KB/秒左右,一个连接可以去到 100KB,两个就 200KB(数学题)
2、如果你在下载, 又打开网页就,会返回 503 “Service unavailable”,因为太多连接
3、缓解 DDoS 还得靠那几个 timeout 的部分
重要提醒:
1、限制模块是不能防止 DDoS,它是用来减小 Load
2、真正的方法应该是,找出那个攻击者 IP,再用 iptables 封掉它
3、非必要时,不要用这个限制模块,它会给你的网站带来不便

来源:http://www.uuhar.com/server/linux/web/24.html
http://www.excms.cn/manual/install-centos-nginx.html#ddos


Apache Anti DDOS:
mod_evasive 是 apache 的 3rd party 模組,利用限定來源的
HTTP 存取方式來避免遭受到拒絕服務攻擊
必要安裝套件
yum install libxml2 libxml2-devel httpd-devel pcre-devel curl-devel
1. 下載套件
wget http://www.zdziarski.com/blog/wp-content/uploads/2010/02/mod_evasive_1.10.1.tar.gz
2. 安裝套件
tar -zxvf mod_evasive_1.10.1.tar.gz
cd mod_evasive
apxs -i -a -c mod_evasive20.c
3. Apache設定檔新增相關設定
vi /etc/httpd/conf/httpd.conf
DDOS Moudle
LoadModule evasive20_module modules/mod_evasive20.so
LoadModule evasive20_module /usr/lib/httpd/modules/mod_evasive20.so
Anti D.o.S

DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 1800
DOSEmailNotify admin@domain.com
DOSLogdir /var/log/httpd_DoS
DOSWhitelist 127.0.0.1
DOSWhitelist 1.1.1.1
DOSWhitelist 1.2.3.4

參數說明
DOSmailNotify 發現疑似攻擊時,要寄發通知的信箱
DOSLogdir 設定LOG存放路徑
DOSWhitelist 設定進行不阻擋的白名單IP
4. 重啟Apache服務
/etc/init.d/httpd restart
5. 測試 mod_evasive 是否正常運作
mod_evasive 提供了測試程式 test.pl,可執行下列指令
用以測試該模組是否有正常運作
perl test.pl
如果設定正常,執行 perl.pl 後會回傳 403 forbiden 等相關的訊息
blog.imomo.tw/blog/2013/05/19/apache-anti-ddos/

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:http://jackxiang.com/post/4378/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2014-7-15 17:49
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]