参考文档1
参考文档2
一、 简介
ModSecurity 是一个 Web 应用程序防火墙 (WAF),并且具有一个强大的持续维护的规则库,其有以下优点。

实时监控和攻击检测
实时监控 HTTP 流量以检测攻击,并且提供可自定义的日志记录功能。
预防攻击和虚拟补丁
可以拦截利用已知漏洞进行的攻击,并且可以打虚拟补丁,对于一些异常的行为可以对其ip等进行打分行为,从而跟踪行为,最终判定是否拦截。
灵活的规则引擎
CRS(coreruleset)是ModSecurity体系的核心,规则体系强大并且灵活,下文也将重点介绍其规则体系。
嵌入式模式部署
ModSecurity 是一个嵌入式 Web 应用程序防火墙,这样可以缩小性能开销,并且对于https流量也能直接处理。
基于网络的部署
可以部署在反向代理服务器上,用于保护后端服务。

apt update

安装apache2:
apt install apache2

安装apache2的mod-security模块:
apt-get install libapache2-mod-security2

启用mod-security
a2enmod security2

重命名配置文件:
cd /etc/modsecurity
mv modsecurity.conf-recommended modsecurity.conf

修改配置文件modsecurity.conf
SecRuleEngine On

重新启动apache2,使得modsecurity的配置生效
systemctl restart apache2

测试:
http://ip/index.php?exec=/bin/bash
sql注入指令
http://ip/index.php?id=1 AND 1=1
会出现"Forbidden"提示信息

检查apache日志
cat /var/log/apache2/error.log |grep index.php

规则写法:
SecRule VARIABLES OPERATOR [TRANSFORMATION_FUNCTIONS, ACTIONS]

示例:
SecRule REQUEST_METHOD "^(?:PUT|CONNECT|TRACE|DELETE)$" "phase:1,id:49,log,block,t:none"
SecRule REQUEST_METHOD "^(?:HEAD|PUT|DELETE|CONNECT|TRACE)$" "id:50,log,block,msg:'block_msg',t:none"
SecRule ARGS "@rx attack" "phase:1,log,deny,id:1"
SecRule REMOTE_ADDR "@ipMatch 192.168.1.101" "id:xxx"
SecRule REMOTE_PORT "@lt 1024" "id:xxx"
SecRule REQUEST_HEADERS:Content-Length "@eq 0" t:none
SecRule REQUEST_LINE "@beginsWith GET" "id:xxx" #检测以“GET”开头的请求行
SecRule REQUEST_LINE "@contains .php" "id:xxxx" #在请求行中的任何位置检测是否包含“.php”字符串
SecRule ARGS "@containsWord select" "id:xxx" #在ARGS的任何地方检测是否包含“select”字符串
SecRule ARGS "@rx attack" "phase:1,log,deny,id:1"

VARIABLES:
REQUEST_METHOD 请求方法

操作符 operator:
beginsWith,contains,rx

动作Actions :
chain:使用紧随其后的规则与当前规则进行链接,形成规则链。
drop: 关闭TCP连接
block:执行SecDefaultAction定义的阻断性动作
msg: 将自定义信息分配给规则或规则链。 该消息将与每次警报一起记录到日志中。

标签: none

评论已关闭