CC(ChallengeCollapsar)发包工具之网站压力测试siege安装与使用图文教程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CC(ChallengeCollapsar)发包工具之网站压力测试siege安装与使用图文教程相关的知识,希望对你有一定的参考价值。

参考技术A 压力测试是一项很重要的工作。能承受多大访问量、在大访问量情况下性能怎样,这些数据指标好坏将会直接影响用户体验。所以,压力测试非常有必要,有了这些数据,我们就能对自己做维护的平台做到心中有数。

Siege是一款开源的压力测试工具,设计用于评估WEB应用在压力下的承受能力。可以根据配置对一个WEB站点进行多用户的并发访问。

yum install gcc

wget http://download.joedog.org/siege/siege-3.1.4.tar.gz

tar -zxf siege-3.1.4.tar.gz

cd siege-3.1.4

./configure;make

make install

以上就是一键安装命令一键就可以安装完毕,我们就已经更新到官网最新版本~使用方

使用方法:

siege -c 200 -r 20 http://baidu.com

注释解释:siege-c 200 并发200个用户 -r 20 重复循环20

以上是基本命令,假如说你还想使你的攻击力加强请请看下面的参数详解

参数详解

-C,或–config 在屏幕上打印显示出当前的配置,配置是包括在他的配置文件$HOME/.siegerc中,可以编辑里面的参数,这样每次siege 都会按照它运行.

-v 运行时能看到详细的运行信息

-c n,或–concurrent=n 模拟有n个用户在同时访问,n不要设得太大,因为越大,siege 消耗本地机器的资源越多

-i,–internet 随机访问urls.txt中的url列表项,以此模拟真实的访问情况(随机性),当urls.txt存在是有效

-d n,–delay=n hit每个url之间的延迟,在0-n之间

-r n,–reps=n 重复运行测试n次,不能与 -t同时存在

-t n,–time=n 持续运行siege ‘n’秒(如10S),分钟(10M),小时(10H)

-l 运行结束,将统计数据保存到日志文件中siege .log,一般位于/usr/local/var/siege .log中,也可在.siegerc中自定义

-R SIEGERC,–rc=SIEGERC 指定用特定的siege 配置文件来运行,默认的为$HOME/.siegerc

-f FILE, –file=FILE 指定用特定的urls文件运行siege ,默认为urls.txt,位于siege 安装目录下的etc/urls.txt

-u URL,–url=URL 测试指定的一个URL,对它进行”siege “,此选项会忽略有关urls文件的设定

url.txt文件:是很多行待测试URL的列表以换行符断开,格式为:

[protocol://] host.domain.com[:port][path/to/file]

用法举例:

siege -c 300 -r 100 -f url.txt

说明:-c是并发量,-r是重复次数。url.txt就是一个文本文件,每行都是一个url,它会从里面随机访问的。

网站遭遇CC攻击怎么破?

一、何为CC攻击

那么,什么是 CC 攻击呢?

这里用一个段子做引,顾客点了份鱼香肉丝没有肉丝,找店家理论,店家矢口否认,于是第二天顾客找了 N 多闲杂人等把小饭馆全部坐满,还不消费,正常顾客无法消费就餐,店主损失巨大。

这,就是店家不懂 CC 攻击的下场。

CC 攻击/Challenge Collapsar 是指攻击者控制某些主机,不断发送大量数据包给网站服务器,造成服务器资源耗尽,直到宕机崩溃。大家或多或少都有过网页访问人数过多导致网页打不开或者打开非常慢的经历,CC 攻击就会造成如此结果。CC 攻击由 DDoS 攻击而生出,是 DDoS 的子集,它的攻击对象是网站页面,会模拟多个用户 (多少线程就是多少用户) 不停地访问那些需要大量数据操作 (意味着需要大量 CPU 时间) 的页面,造成服务器资源浪费,CPU 长时间处于 100% 的状态,处理不尽的连接导致网络拥塞,正常访问便会被中止。

CC攻击的特点

  1. 攻击的 IP 都是真实的、有效的,无法拒绝;
  2. 发送的数据包都是正常的数据包;
  3. 攻击的是网页,服务器可以连接,就是网页访问不了;
  4. 攻击成本低、技术含量低、容易实施,主机影响巨大。

二、如何判断CC攻击

CC 攻击发生时,经常出现带宽资源被严重消耗,网站瘫痪;CPU、内存利用率飙升,主机瘫痪;瞬间快速打击,无法快速响应这些现象。这时,比较简单直接的判断方法就是查看 80 端口的连接数,对比正常情况,如果相差悬殊,甚至无法统计,基本可以断定是 CC 攻击了。

netstat -an|grep \':80\' -c

三、测试&防御

我们使用 Apache 自带的压力测试工具 ab 做并发测试,可以模拟多用户访问。

测试 I

模拟 600 个用户同时访问,共访问 10000 次,执行:

ab.exe -n 10000 -c 600 -r   http://www.cc.com/test.html

ab 返回的结果如下:

Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests

Server Software:        Apache/2.4.38
Server Hostname:        10.232.16.55
Server Port:            80

Document Path:          /test.html
Document Length:        24738 bytes
Concurrency Level:      600
Time taken for tests:   56.949 seconds
Complete requests:      10000

Apache 日志:

10.232.18.53 - - [04/Dec/2019:20:51:04 +0800] "GET /test.html HTTP/1.0" 200 24738
10.232.18.53 - - [04/Dec/2019:20:51:05 +0800] "GET /test.html HTTP/1.0" 200 24738
10.232.18.53 - - [04/Dec/2019:20:51:05 +0800] "GET /test.html HTTP/1.0" 200 24738
10.232.18.53 - - [04/Dec/2019:20:51:06 +0800] "GET /test.html HTTP/1.0" 200 24738
10.232.18.53 - - [04/Dec/2019:20:51:07 +0800] "GET /test.html HTTP/1.0" 200 24738
10.232.18.53 - - [04/Dec/2019:20:51:07 +0800] "GET /test.html HTTP/1.0" 200 24738
10.232.18.53 - - [04/Dec/2019:20:51:08 +0800] "GET /test.html HTTP/1.0" 200 24738
10.232.18.53 - - [04/Dec/2019:20:51:10 +0800] "GET /test.html HTTP/1.0" 200 24738
10.232.18.53 - - [04/Dec/2019:20:51:10 +0800] "GET /test.html HTTP/1.0" 200 24738
10.232.18.53 - - [04/Dec/2019:20:51:10 +0800] "GET /test.html HTTP/1.0" 200 24738

可以看到,Apache 可以绰绰有余地应付,访问一切正常。

测试 II

将并发数提高到 900,再来看 Apache 的反应,执行:

ab.exe -n 10000 -c 900 -r   http://www.cc.com/test.html

ab 返回的结果为:

Total of 1 requests completed

Apache 错误日志:

[Wed Dec 04 21:08:25.654731 2019] [mpm_event:error] [pid 46995:tid 139688010909504] AH00484: server reached MaxRequestWorkers setting, consider raising the MaxRequestWorkers setting

这一次的访问量,Apache 已无法应对,页面出现无法访问的情况:

Apache 防御模块

Apache 可以通过加载 mod_evasive 模块缓解 CC 攻击。mod_evasive 模块提供多个可选参数,通过简单设置这些参数,可以在遭受攻击期间规避操作,并可通过电子邮件和系统日志工具报告滥用行为,如匹配设定参数则发送 403 响应并记录 IP 地址 。

可选参数:

<IfModule mod_evasive20.c>
    DOSHashTableSize 3097
    DOSPageCount 2
    DOSSiteCount 50
    DOSPageInterval 1
    DOSSiteInterval 1
    DOSBlockingPeriod 60
    DOSEmailNotify <someone@somewhere.com>
</IfModule>

DOSPageCountDOSSiteCount 是比较温和的两个值,以避免客户端被不必要地阻塞。

DOSPageCount 是对每个 IP 地址单位时间 (通常为 1s) 内对同一个 URL 页面的请求数量限制。超过该时间间隔的阈值,客户端的 IP 地址会自动被加到阻止列表中。

DOSSiteCount 是对每个 IP 地址单位时间 (通常为 1s) 内对整个网站的请求总数限制。可以酌情修改为更大的值。

如下例子中,Apache 配置文件 httpd.conf 中设置以下参数:

LoadModule evasive20_module /usr/lib64/httpd/modules/mod_evasive24.so 
<IfModule evasive20_module>
    DOSPageCount 2
    DOSSiteCount 100
    DOSLogDir /var/log
</IfModule>

再次测试 900 的并发数,执行 ab.exe-n10000-c900-r http://www.cc.com/test.html,看 Apache 作何反应。在前面完全没有防护措施的场景中,Apache 无法应对这种测试。

Apache 日志:

[Wed Dec 04 21:52:40.582741 2019] [:error] [pid 49596:tid 139700899661568] [client 10.232.18.53:58234] client denied by server configuration: /usr/local/apache2.4/htdocs/test.html
[Wed Dec 04 21:52:40.583081 2019] [:error] [pid 49596:tid 139700899661568] [client 10.232.18.53:58235] client denied by server configuration: /usr/local/apache2.4/htdocs/test.html
[Wed Dec 04 21:52:40.583323 2019] [:error] [pid 49596:tid 139700899661568] [client 10.232.18.53:58236] client denied by server configuration: /usr/local/apache2.4/htdocs/test.html

可以看出,mod_evasive 模块已生效,阻止同一用户非正常的大量并发访问,而其他用户访问正常。

Nginx 防御模块

当 Web 服务器软件切换为 Nginx,测试内容与 Apache 相同。虽然 Nginx 处理并发的能力远远大过 Apache,但并发量不断增加,同样会耗尽资源。我们不禁会问,Apache 有 mod_evasive 模块,那 Nginx 呢?

Nginx 主要通过 ngx_http_limit_conn_modulengx_http_limit_req_module 这两个内置模块来防御 CC 攻击。

ngx_http_limit_conn_module 可以限制单个 IP 地址的连接数。但并不是所有的连接都会被计数,只有当一个请求的整个请求头都已经被读取并且正在被服务器处理,这个请求所在的连接才会被计数。

ngx_http_limit_req_module 则可以限制单个 IP 每秒请求数。通过漏斗算法,限制每秒固定处理请求数,推迟过多请求。

nginx.conf 中的配置如下:

http {

    limit_conn_zone $binary_remote_addr zone=cc_conn:10m;
    limit_req_zone $binary_remote_addr zone=cc_req:10m rate=1r/s;
    ...

    server {
        limit_conn cc_test 20;  #同一个ip并发连接数不能超过20个
        ...

        location / {
            limit_req zone=cc_req burst=20 nodelay;  #限制平均每秒不超过一个请求,同时允许超过频率限制的请求数不多于20个,用nodelay参数表示不希望超过的请求被延迟。
            ...
            }
        }
    }

再次测试 1000 的并发数,执行:

ab.exe -n 10000 -c 1000 http://www.cc.com/test.html

结果是这样的:

10.232.18.153 - - [05/Dec/2019:22:42:19 +0800] "GET /test.html HTTP/1.0" 200 24738 "-" "ApacheBench/2.3"
10.232.18.153 - - [05/Dec/2019:22:42:19 +0800] "GET /test.html HTTP/1.0" 503 494 "-" "ApacheBench/2.3"
10.232.18.153 - - [05/Dec/2019:22:42:20 +0800] "GET /test.html HTTP/1.0" 503 494 "-" "ApacheBench/2.3"
10.232.18.153 - - [05/Dec/2019:22:42:20 +0800] "GET /test.html HTTP/1.0" 503 494 "-" "ApacheBench/2.3"
10.232.18.153 - - [05/Dec/2019:22:42:20 +0800] "GET /test.html HTTP/1.0" 503 494 "-" "ApacheBench/2.3"
10.232.18.153 - - [05/Dec/2019:22:42:20 +0800] "GET /test.html HTTP/1.0" 503 494 "-" "ApacheBench/2.3"
10.232.18.153 - - [05/Dec/2019:22:42:20 +0800] "GET /test.html HTTP/1.0" 503 494 "-" "ApacheBench/2.3"
10.232.18.153 - - [05/Dec/2019:22:42:20 +0800] "GET /test.html HTTP/1.0" 503 494 "-" "ApacheBench/2.3"
10.232.18.153 - - [05/Dec/2019:22:42:20 +0800] "GET /test.html HTTP/1.0" 503 494 "-" "ApacheBench/2.3"

返回 503 (limit_conn和limit_req 的默认返回码),说明大量非正常并发连接已被拦截。


通过以上测试可以看出,Apache 通过加载 mod_evasive 模块、Nginx 通过加载内置 ngx_http_limit_conn_modulengx_http_limit_req_module 模块都可以实现防御 CC 攻击的效果。当然如果配合 iptables 等机制限制 IP 黑名单,效果会更好。

以上方法都是通过限制并发连接数量的手段,达到防止 CC 攻击的目的。当然还有另外的方法,如接入 CDN,多台做负载均衡,扩大带宽等。(卢岩 | 天存信息)

以上是关于CC(ChallengeCollapsar)发包工具之网站压力测试siege安装与使用图文教程的主要内容,如果未能解决你的问题,请参考以下文章

(CC)与(WAF)之间的较量

网站遭遇CC攻击怎么破?

常见的网络***有哪些?

什么是CC***?和DDOS的***有何区别?

CC攻击网站和游戏如何针对性预防?

服务器要怎么防cc攻击?