modSecurity规则学习(八)——防止CC攻击
modSecurity日志收集:在phase 5阶段处理。
由于CC攻击主要考虑对动态请求的防护,所以要排除静态资源的请求,或者自定义动态请求的后缀或者关键字做接口针对性的防护。
定义需要排除的请求url后缀名称
- SecAction \
- "id:900260,\
- phase:1,\
- nolog,\
- pass,\
- t:none,\
- setvar:'tx.static_extensions=/.mvc/ /.jpg/ /.jpeg/ /.png/ /.gif/ /.js/ /.css/ /.ico/ /.svg/ /.webp/'"
然后是怎么判断是CC攻击?根据访问频率来定义,某个ip在dos_burst_time_slice的时间(单位秒)内dos_counter_threshold次请求算一次攻击嫌疑,如果超过2次,我们就认定是CC攻击的IP,对该IP封禁,解封时间定义为dos_block_timeout。
例如,定义60s内100次动态请求算一次攻击嫌疑,封禁时间为600s。
- SecAction \
- "id:900700,\
- phase:1,\
- nolog,\
- pass,\
- t:none,\
- setvar:'tx.dos_burst_time_slice=60',\
- setvar:'tx.dos_counter_threshold=100',\
- setvar:'tx.dos_block_timeout=600'"
接下来就是关键的拦截策略了。
总体思路如下:
1、如果一个请求访问的是非静态(TX:STATIC_EXTENSIONS)资源,那我们就定义一个变量(IP:DOS_COUNTER)+1,IP为客户端IP
- SecRule REQUEST_BASENAME ".*?(\.[a-z0-9]{1,10})?$" \
- "phase:5,\
- id:912150,\
- t:none,\
- t:lowercase,\
- nolog,\
- pass,\
- tag:'application-multi',\
- tag:'language-multi',\
- tag:'platform-multi',\
- tag:'attack-dos',\
- capture,\
- setvar:tx.extension=/%{TX.1}/,\
- chain"
- SecRule TX:EXTENSION "!@within %{tx.static_extensions}" \
- "setvar:ip.dos_counter=+1"
2、如果IP:DOS_COUNTER大于TX:DOS_COUNTER_THRESHOLD阈值,就创建一个CC嫌疑次数IP:DOS_BURST_COUNTER=1,如果存在则该值设置为2。且IP:DOS_COUNTER置0,CC嫌疑次数IP:DOS_BURST_COUNTER有一个超时时间TX:DOS_BURST_TIME_SLICE。
- SecRule IP:DOS_COUNTER "@ge %{tx.dos_counter_threshold}" \
- "phase:5,\
- id:912160,\
- t:none,\
- nolog,\
- pass,\
- tag:'application-multi',\
- tag:'language-multi',\
- tag:'platform-multi',\
- tag:'attack-dos',\
- chain"
- SecRule &IP:DOS_BURST_COUNTER "@eq 0" \
- "setvar:ip.dos_burst_counter=1,\
- expirevar:ip.dos_burst_counter=%{tx.dos_burst_time_slice},\
- setvar:!ip.dos_counter"
- SecRule IP:DOS_COUNTER "@ge %{tx.dos_counter_threshold}" \
- "phase:5,\
- id:912161,\
- t:none,\
- nolog,\
- pass,\
- tag:'application-multi',\
- tag:'language-multi',\
- tag:'platform-multi',\
- tag:'attack-dos',\
- chain"
- SecRule &IP:DOS_BURST_COUNTER "@ge 1" \
- "setvar:ip.dos_burst_counter=2,\
- expirevar:ip.dos_burst_counter=%{tx.dos_burst_time_slice},\
- setvar:!ip.dos_counter"
3、如果CC嫌疑次数IP:DOS_BURST_COUNTER大于2就认定为CC攻击,定义一个值IP:DOS_BLOCK,该变量超时时间为TX:DOS_BLOCK_TIMEOUT。
定义大于等于两次封IP的规则:如果IP:DOS_BURST_COUNTER大于等于2,设置变量ip.dos_block=1,且设置该变量的超时时间为TX:DOS_BLOCK_TIMEOUT。在phase5发生。
- SecRule IP:DOS_BURST_COUNTER "@ge 2" \
- "phase:5,\
- id:912170,\
- t:none,\
- log,\
- pass,\
- tag:'application-multi',\
- tag:'language-multi',\
- tag:'platform-multi',\
- tag:'attack-dos',\
- msg:'Potential Denial of Service (DoS) Attack from %{tx.real_ip} - # of Request Bursts: %{ip.dos_burst_counter}',\
- setvar:ip.dos_block=1,\
- expirevar:ip.dos_block=%{tx.dos_block_timeout}"
4、在phase1,如果IP:DOS_BLOCK为1,则阻断该请求,且IP:DOS_BLOCK_COUNTER+=1。如果一个IP第一次被阻断,记录阻断日志并设置一个IP:DOS_BLOCK_FLAG 标志,该标志的超时时间为60s,设置该标志的后面不记录日志,避免刷屏。也就是说如果一直攻击,最多60s记录一次日志。为了显示IP:DOS_BLOCK_COUNTER的同时重置该值,将IP:DOS_BLOCK_COUNTER复制到TX:DOS_BLOCK_COUNTER这个变量。
- #
- # Block and track # of requests and log
- #
- SecRule IP:DOS_BLOCK "@eq 1" \
- "chain,\
- phase:1,\
- id:912120,\
- drop,\
- tag:'application-multi',\
- tag:'language-multi',\
- tag:'platform-multi',\
- tag:'attack-dos',\
- msg:'Denial of Service (DoS) attack identified from %{tx.real_ip} (%{tx.dos_block_counter} hits since last alert)'"
- SecRule &IP:DOS_BLOCK_FLAG "@eq 0" \
- "setvar:ip.dos_block_counter=+1,\
- setvar:ip.dos_block_flag=1,\
- expirevar:ip.dos_block_flag=60,\
- setvar:tx.dos_block_counter=%{ip.dos_block_counter},\
- setvar:ip.dos_block_counter=0"
- SecRule IP:DOS_BLOCK "@eq 1" \
- "phase:1,\
- id:912130,\
- t:none,\
- drop,\
- nolog,\
- tag:'application-multi',\
- tag:'language-multi',\
- tag:'platform-multi',\
- tag:'attack-dos',\
- setvar:ip.dos_block_counter=+1"
modSecurity规则学习(八)——防止CC攻击的更多相关文章
- cc攻击和ddos攻击
DoS攻击.CC攻击的攻击方式和防御方法 DDoS介绍 DDoS是英文Distributed Denial of Service的缩写,意即“分布式拒绝服务”,那么什么又是拒绝服务(Denial of ...
- 防cc攻击利器之Httpgrard
一.httpgrard介绍 HttpGuard是基于openresty,以lua脚本语言开发的防cc攻击软件.而openresty是集成了高性能web服务器Nginx,以及一系列的Nginx模块,这其 ...
- DDos、CC攻击与防御
DDoS介绍 DDoS是英文Distributed Denial of Service的缩写,意即"分布式拒绝服务",那么什么又是拒绝服务(Denial of Service)呢? ...
- 浅谈iptables防SYN Flood攻击和CC攻击
------------------------本文为自己实践所总结,概念性的东西不全,这里粗劣提下而已,网上很多,本文主要说下目前较流行的syn洪水攻击和cc攻击------------------ ...
- 基于日志数据分析以防御CC攻击的想法
1. What - 什么是CC攻击 CC攻击,即针对应用层HTTP协议的DDos攻击,攻击者在短时间内向目标服务器发送大量的HTTP请求,使得服务器会非常繁忙,资源消耗会增加:同时,如果请求中包含基于 ...
- 简单的cc攻击防御
简单的cc攻击防御cckiller 一.下载#wget wget --no-check-certificate https://zhangge.net/wp-content/uploads/files ...
- 网站防止CC攻击的方法
CC攻击(Challenge Collapsar)是DDOS(分布式拒绝服务)的一种,也是一种常见的网站攻击方法,攻击者通过代理服务器或者肉鸡向向受害主机不停地发大量数据包,造成对方服务器资源耗尽,一 ...
- linux中防CC攻击两种实现方法(转)
CC攻击就是说攻击者利用服务器或代理服务器指向被攻击的主机,然后模仿DDOS,和伪装方法网站,这种CC主要是用来攻击页面的,导致系统性能用完而主机挂掉了,下面我们来看linux中防CC攻击方法. 什么 ...
- Linux CC攻击脚本
CC(ChallengeCollapsar)主要是用来攻击页面的.大家都有这样的经历,就是在访问论坛时,如果这个论坛比较大,访问的人比较多,打开页面的速度会比较慢,访问的人越多,论坛的页面越多,数据库 ...
随机推荐
- 搭建rsync实时同步
1.本实验基于centos6.5服务器做的 cat cat /etc/redhat-release 2.在配置环境之前需要先将服务器自带的rsync卸除 yum -y remove rsync* 3. ...
- C语言声明语句
设计理念: C语言的一个设计理念就是声明变量和使用变量的形式应该是一致的 优点:声明变量和使用变量时的运算符优先级是相同的 缺点:运算符的优先级是C语言过度解析的部分之一 术语: 变量声明中使用到的符 ...
- ActiveMQ服务安装
1.下载安装ActiveMQ服务提供者 http://activemq.apache.org/ 2.启用ActiveMQ服务 cd [activemq_install_dir] bin\activem ...
- 【Henu ACM Round#24 A】k-String
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 如果是一个k-string的话. 考虑最后的串假设形式为sss..ss(k个s) 则s中出现的字母,整个串中最后出现的次数肯定为k的 ...
- MarkDown写作之嵌入LaTeX和HTML
本系列文章由 @YhL_Leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/49788741 Markdown 是一种 ...
- JAVA关于byte数组与String转换的问题
1 public class ToString{ public static void main(String[] args){ String aa = "hellow"; byt ...
- URAL - 1243 - Divorce of the Seven Dwarfs (大数取模)
1243. Divorce of the Seven Dwarfs Time limit: 1.0 second Memory limit: 64 MB After the Snow White wi ...
- linux下创建带password的用户
一直在做实验室linuxserver的账号管理系统,现阶段是用户申请后我这边收到邮件,然后手动创建,这个略显麻烦,打算全然做成自己主动化的.用户申请后,我直接在管理界面点击批准就可以创建用户,同一时候 ...
- 好记性不如烂笔头86-spring3学习(7)-ApplicationContext中bean的生命周期
假设使用ApplicationContext来生成.管理Bean, 一个Bean从建立到销毁,会历经几个运行阶段. 我个人理解一般的bean的生命周期主要包含:建立,初始化,使用阶段,销毁四个核心阶段 ...
- django 笔记12 session
第一步写好函数,然后生成数据库session表 python manage.py makemigrations python manage.py migrate session原理: .Session ...