防范HTTP洪流和小型DDoS攻击

防止HTTP洪流和WEB服务器上的小型DDoS攻击的一种典型方法是使用(D)DoS Deflate实用程序。该实用程序的工作原理基于从一个IP获得连接数。这是使用netstat实用程序完成的:
$ netstat -n -p | awk ‘{print $5}’|awk -F: ‘{print $1}’ | sort -n | uniq -c | sort -nr | head -n10

734 109.120.130.51
562 77.221.129.90
415 109.206.161.21
410 109.86.223.41
这样的保护有一个很大的缺点-无法从一个IP中选择最佳连接数,这被认为是一种攻击。

大多数Internet提供商都使用NAT,因此许多用户具有相同的IP。从WEB服务器的侧面无法理解-来自一个IP的大量连接是攻击,或者这些是具有相同IP的不同用户。同时,同一站点可以从一个IP生成完全不同数量的请求,例如图像搜索。一个搜索可以给出10个或100个结果-每个资源都是IP请求。

但是,在紧急情况下,可以直接使用(D)DoS Deflate或netstat,但是,有必要了解阻止是相当不礼貌的,并且我们不建议您持续使用此方法(添加到cron中)。

XDDoS-DDoS保护系统
还有另一种处理洪灾的方法-使用XDDoS解析访问日志。

当前,已经实现了nginx访问日志解析器,但是对任何Web服务器的日志进行解析非常简单。要阻止,您可以直接使用Advanced Policy Firewall或iptables。

工作原理
XDDoS解析Web服务器日志并确定对特定URL的请求数。如果该数字超过指定的阈值(参数—阈值),则IP被阻止。

示例:
(1)http://attacktarget.com/main
(2)http://attacktarget.com/dfjslkdjf?query=fdksjf
(3)http://attacktarget.com/dfjslkdjf?query=3847587

例如,如果来自同一IP的URL(2)包含35个以上的请求(默认值),则该IP被阻止。

使用XDDoS防御DDoS攻击和HTTP洪流的示例

nginx日志分析和通过APF阻止

tail -n 1000 /var/log/nginx/access.log | xddos –dry-run -p /var/run/httpprot.pid -f nginx -b apf –stdin

Nginx日志分析和通过iptables阻止

tail -n 1000 /var/log/nginx/access.log | xddos –dry-run -p /var/run/httpprot.pid -f nginx -b iptables –stdin
您需要在启动模式下删除–dry-run键。

要控制每个URL的请求数,请使用–threshold参数。

可以使用脚本/usr/share/xddos/tlog.sh 而不是tail -n 1000,该脚本可让您在两次启动之间获取WEB服务器日志的附加部分。在/usr/share/xddos/runner.sh中使用脚本的示例(此脚本通过具有自动保护功能的cron运行)。

安装XDDoS
wget –no-check-certificate https://bootstrap.pypa.io/get-pip.py
python get-pip.py

pip install pip –upgrade –no-cache-dir
pip install xddos

更新

pip install xddos –upgrade –no-cache-dir

文档

xddos -h
可以将XDDoS添加到cron中以进行实时Web服务器保护:
cd /usr/share/xddos
./enable.sh

禁用实时保护

cd /usr/share/xddos
./disable.sh
XDDOS在Github上的文件和安装:https://github.com/servancho/xddos

发表评论