Nginx 0.7开始提供了2个限制用户连接的模块:NginxHttpLimitZoneModule 和 NginxHttpLimitReqModule。NginxHttpLimitZoneModule可以根据条件进行并发连接数控制。NginxHttpLimitReqModule可以根据条件进行请求频率的控制。http {limit_zone my_zone $binary_remote_addr 10m;limit_req_zone $binary_remote_addr zone=my_req_zone:10m rate=1r/s;}server {...location ~ ^/blog/(index|forumdisplay|viewthread).php$ {limit_conn myzone_bbs 3;limit_req zone=bbs burst=2 nodelay;...}
应用这条规则后,blog目录下的index.php、forumdisplay.php和viewthread.php这些页面同一个IP只许建立3个连接,并且每秒只能有1个请求(突发请求可以达到2个)。
另外我们可以找个脚本来封攻击者的IP.访问者通过浏览器正常访问网站,与服务器建立的连接一般不会超过20个,我们可以通过脚本禁止连接数过大的IP访问以下脚本通过netstat命令列举所有连接,将连接数最高的一个IP如果连接数超过150,则通过 iptables 阻止访问:建立脚本vi stop.sh
#!/bin/shstatus=`netstat -na|awk '$5 ~ /[0-9]+:[0-9]+/ {print $5}' |awk -F ":" -- '{print $1}' |sort -n|uniq -c |sort -n|tail -n 1`NUM=`echo $status|awk '{print $1}'`IP=`echo $status|awk '{print $2}'`result=`echo "$NUM > 150" | bc`if [ $result = 1 ]thenecho IP:$IP is over $NUM, BAN IT!/sbin/iptables -I INPUT -s $IP -j DROPfi
运行crontab -e,将上述脚本添加到crontab每分钟自动运行:*/1 * * * * /root/stop.sh
免责声明:本站发布的内容(图片、视频和文字)以原创、来自互联网转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:ts@56dr.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
Copyright © 2009-2021 56dr.com. All Rights Reserved. 特网科技 版权所有 珠海市特网科技有限公司 粤ICP备16109289号
域名注册服务机构:阿里云计算有限公司(万网) 域名服务机构:烟台帝思普网络科技有限公司(DNSPod) CDN服务:阿里云计算有限公司 中国互联网举报中心 增值电信业务经营许可证B2