ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。1 v9 G* w m" [# z: n X8 s- q2 a
. b5 w3 p- b! {2 D2 n
) z/ p# W- ^$ a* s) u1 F o在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。& ~; i4 J1 p0 C
5 M) g& y* @( _! t6 D' e; V6 p8 v
, E7 d8 S# m5 F! F, ]8 X6 m' H什么是ModSecurity7 s3 O' E4 Z6 I2 v4 ~: F# o
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。& o4 l* z: T! h' @/ o5 O
3 s6 A& b) B) R( O8 V% u
v9 a" I; S1 o! @( PModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。' [1 e5 ?' X8 y4 `
9 s. Y$ [( z1 \8 ^7 \8 O
/ X N- d. p7 _% g. ^ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。8 I8 k0 d1 f7 Y$ L- |( x2 o0 M
& o6 A0 c3 h# p
5 N: _# x) @6 @! l4 P( C# n( d7 U官网: https://www.modsecurity.org/
# t2 \. z6 P0 j, [5 G, S) f/ h/ o, V1 s& s6 \' H5 d2 N% s5 {$ K/ \
* E1 P h2 _7 m7 P
什么是OWASP CRS# b9 K4 b: S& t8 Y3 `1 K
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。& N$ ], S8 D& L4 s* ~0 l' k
. @( I+ |) `7 w" o; `& f2 A4 }6 N" e0 A
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
# T* y% d- f' H2 |8 i8 y Z- B# {5 Q4 x, B- `
. Z' u& h8 a' [9 S2 P
HTTP Protection(HTTP防御)" D3 v. n- D% a3 H( Q6 v/ E- [
HTTP协议和本地定义使用的detectsviolations策略。
3 ^1 l$ r2 c: @% e, a8 x5 C
6 _! ~7 {) G; \2 J$ j5 n5 l' A7 {' c- C
Real-time Blacklist Lookups(实时黑名单查询), K1 {- U" G+ x) K0 w8 ^
利用第三方IP名单。
9 t) j M5 i3 P5 P- o1 R
: v, U9 E: x& a2 o
; H3 S# E" @/ z" Q* {" }HTTP Denial of Service Protections(HTTP的拒绝服务保护)
J# [* Q# _* o: d2 {防御HTTP的洪水攻击和HTTP Dos攻击。
; H$ u& h7 s+ w' `8 k2 p6 d9 U/ t7 a' b) G: X& ]5 k
% G& [) Z8 e0 t. t' U$ _
Common Web Attacks Protection(常见的Web攻击防护)
9 j' ^6 P, ~) R! z. C+ {- ~3 |检测常见的Web应用程序的安全攻击。
4 y$ j9 i8 |% x3 F) l0 x& V
4 n- V& q2 u: \% a. h v+ L) ?0 f4 c* c# G) m$ o6 R4 |
Automation Detection(自动化检测), p7 t9 b3 F- B- `2 Z! L
检测机器人,爬虫,扫描仪和其他表面恶意活动。6 y H+ M( X1 K/ m& v
" ]! N5 i( t& E8 }: j- L0 s' L! T
3 H4 E2 {1 I6 g2 f' \Integration with AV Scanning for File Uploads(文件上传防病毒扫描)
$ c) t. G6 i+ L6 N- m" M检测通过Web应用程序上传的恶意文件。
% S. Y3 B$ g2 U! | h2 |( Z2 n
3 X5 T; Q4 V! C# d# \: d- }5 X U: \
Tracking Sensitive Data(跟踪敏感数据)
! L: A/ \' `/ p5 ~5 h信用卡通道的使用,并阻止泄漏。
8 C) O$ {7 n0 W! p* y2 J7 F* J9 E$ B4 j, ~
) y% j D b+ y: n+ ^& yTrojan Protection(木马防护)# n7 ~7 ]1 q' G. K% _" T
检测访问木马。" R/ {2 R. B! R' J
b" _5 g. D* }5 D+ z6 k: j
. `) Q; C7 Q; @% l7 C. u$ d9 n4 g; l
Identification of Application Defects(应用程序缺陷的鉴定), K4 q$ r Q+ E7 r- A
检测应用程序的错误配置警报。6 V1 w( i. d7 t( {: E0 a
, Y6 T1 x7 l9 k0 ]% v y. ^% I
( N# g0 w$ F* u2 f8 b1 `3 C" q. {Error Detection and Hiding(错误检测和隐藏)
8 I. H S0 h3 _2 f% ~( d2 E" R检测伪装服务器发送错误消息。
# B6 J, }/ x0 i: i9 g/ Q; r$ j2 R7 U) H
7 ?, } c j+ D- d& v' Q
安装ModSecurity
2 j, I3 M6 y- ~1 }/ ?软件基础环境准备
# h, W' l Q8 Y; ^3 ?( k下载对应软件包2 L6 m4 ^: d! U# q& ~
$ cd /root+ H# d5 t: h5 o- X4 x
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz': i1 @( [8 c6 E6 o- T
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz: A6 ?4 }' |# H( t
安装Nginx和ModSecurity依赖包/ I; ]8 _: E/ o# r# H8 ?
Centos/RHEL. H* C4 {0 o6 U4 o# P) x
) H5 [2 |4 p1 D. {9 [5 B+ m
j+ Y9 ~! I6 {% W$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
! ?7 N# O6 N3 ^Ubuntu/Debian" O4 @- n) F1 G5 i3 y
% n o4 a! J2 Q$ Y
* V$ z* {0 R. [4 Z; `& v, D$ apt-get install libreadline-dev libncurses5-dev libssl-dev perl make build-essential git libpcre3 libpcre3-dev libtool autoconf apache2-dev libxml2 libxml2-dev libcurl4-openssl-dev g++ flex bison curl doxygen libyajl-dev libgeoip-dev dh-autoreconf libpcre++-dev( j5 ]0 q/ Q) P3 B
编译安装ModSecurity
" x+ }" R, _9 [# F1 y$ ZNginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。0 U" y2 M% D& k1 F; ~
; Y/ G+ p# N; O( E- W! w
" u9 W% V! T1 l7 C方法一:编译为Nginx静态模块6 \- ?2 ~0 w% i. M* {
$ {$ e0 t: K+ E8 r0 f1 r& G" [8 K( x; e4 ?1 y
编译为独立模块(modsecurity-2.9.1)
3 f. P7 X4 f1 n2 H* @2 O6 e$ tar xzvf modsecurity-2.9.1.tar.gz% V& w8 j5 ~# N3 W" k
$ cd modsecurity-2.9.1/
- @6 J$ w" x, U8 `: X9 _* @& T7 S$ ./autogen.sh4 E! F% Z( X4 k, L
$ ./configure --enable-standalone-module --disable-mlogc
- M# o @3 `! m8 A# X$ make' U9 Y, r) i* m+ j/ D8 y4 L2 u6 s
编译安装Nginx并添加ModSecurity模块
1 J. t6 h( N) G+ z$ tar xzvf nginx-1.9.2.tar.gz
7 E3 }9 _8 s: L2 l$ cd nginx-1.9.2' v. j1 D0 T) L4 L I& L9 K
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/* c* M) c- }9 e) Q) ]
$ make && make install
0 o) d3 |/ L6 E7 T* ~ u6 I6 a) j方法二:编译通过ModSecurity-Nginx Connector加载的动态模块6 |5 m' [' k5 q2 n; X: z9 Y9 K
1 e. p' F; A" }# W) @% ^+ a
. A+ H. U3 w' y, q$ ?编译LibModSecurity(modsecurity-3.0)' j8 [5 d2 n$ ]9 f& J3 p
$ cd /root
( ?6 z# x7 e0 v' N, M* `; b6 H$ git clone https://github.com/SpiderLabs/ModSecurity
# L* g; z |' W& G8 l$ k1 g5 M$ cd ModSecurity
1 J6 J1 k- M% r' i! |6 j4 H$ git checkout -b v3/master origin/v3/master
. u, I/ [0 }, N( I. ]6 k$ sh build.sh
$ E4 o# \& [8 s. p( _$ git submodule init
$ i" _4 N0 j& t! j8 U& d V$ git submodule update: S& v) X# H! E% E- o
$ ./configure( P {. S, {" q7 O% e$ m- ?/ O
$ make$ U2 k% d+ y6 o( j7 z p: x. g7 d. n" @
$ make install( F2 K0 C: V W/ M2 R7 x4 e* k
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
2 o/ b9 Q! @5 O" l: D1 i, I; ?" H- _9 f; e3 d
# P' e1 o" w4 R% X. i b) h% s+ o/ ?
$ ls /usr/local/modsecurity/lib: a+ D0 S$ K. T( s2 b
libmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0
?8 ~8 f( v' Q# Y/ X5 ^编译安装Nginx并添加ModSecurity-Nginx Connector模块
" p$ e: ~0 }7 U使用ModSecurity-Nginx模块来连接LibModSecurity" u( Y. |! O0 X" e% n# o+ B
8 m9 @: r0 f! m$ h3 D9 m1 D% j0 y$ a4 u" e1 s" h+ i
$ cd /root
$ _" R' e8 F( A: O; }, j$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
7 O; T% v3 }: w0 D# q# Y6 e$ tar xzvf nginx-1.9.2.tar.gz0 {" L8 o! J4 j0 ?6 G r
$ cd nginx-1.9.2
. K$ o6 d' R/ G- a+ q/ w$ ./configure --add-module=/root/modsecurity-nginx v# h. t. K% A) P/ I
$ make" D& h8 J! L: H0 ~7 b) ]
$ make && make install
! e6 X% r5 _. N4 n, X* P添加OWASP规则/ p2 H5 ~# m/ e6 y
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
6 W' q; u' D; J7 E
3 v+ @ q$ z( d E z) `8 {6 ?( X1 H! b$ W9 A
下载OWASP规则并生成配置文件! W: f; B; r$ M( C, B, B& `4 v
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git0 g$ T% U' H" b5 L7 Y% |* K/ b
$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/% [ [. E+ e, n5 Y" r* ^
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
- W" J# i# M( q: E& N" k$ cp crs-setup.conf.example crs-setup.conf
4 C5 F; }, b% ?1 S4 j9 o7 h1 q配置OWASP规则
6 \# t# x; Y+ M- X* g1 `3 @编辑crs-setup.conf文件+ J- p: I8 w/ e9 y. \7 M
; Z/ I: w! O9 R1 h! f4 c, M4 p, E+ @6 j( o
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf3 n. \4 h- R1 @
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf/ Q" i6 P8 z- S4 D2 S |$ P
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
$ I/ U+ m, q' E6 e& H& s- I2 J: h( H$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf E9 ?1 k% I0 t0 j8 o) @5 J! Z
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。' S) U; c0 ]1 k/ J4 L [; T
, z- H: _5 x' }
" A# x7 M7 a% x/ ?) K; K启用ModSecurity模块和CRS规则4 `) D4 ]0 t4 Q
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。% m- h" G+ p0 T5 Q5 i& o* |
$ l% e+ ~9 k# U5 I
) \0 [1 c2 E: h2 ?: {' U
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
4 h7 F7 [, | n' P9 S; h& ~ {% r. F$ X1 |5 B9 _* A* w
3 {! G3 w" C6 y! [$ ^/ B9 B) M" e$ cd /root/modsecurity-2.9.1/6 v% }# v6 L( \) F2 t
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
1 X+ H8 @6 v8 [3 T, h6 ?$ cp unicode.mapping /usr/local/nginx/conf/
5 y: b7 X; o' w- Z& Z! C" A" H* }3 c* X将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
. `& q; x! z$ W" q Q
- P. e% G# v0 |5 J+ p/ T R9 S8 V5 o; u, [
$ vim /usr/local/nginx/conf/modsecurity.conf
8 v$ Q& t. U9 u7 `SecRuleEngine On" [& w9 o8 S# F4 P9 z9 v3 Z5 i
ModSecurity中几个常用配置说明:1 F$ N5 p+ n4 z0 ^
2 O/ u5 V, Z, }+ F$ l& y# S
% G8 b! Q I( }* J9 k9 N1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。( ?% S* p0 T# t! u; \
$ [- \2 M" X# h3 N7 c( `5 F( B
% G6 r7 z. U) {% m2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
) L" y& o. X2 r, E3 ^9 k3 K6 L# L& H4 p5 e3 o" x
* A8 H( `1 V3 m% s& e% U
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
7 c f+ X" K6 B4 x- t! ~) u) |* ?
$ e7 F: o4 B1 a: f2 ~7 i) _* G8 F# Z3 q4 L4 f9 [! I
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
) {; I ^. b( w$ u0 l/ E8 W
' j) w# K: b0 N8 p% x& @
1 t9 [# R! l, k在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
% ~- d( g7 F9 x$ b* A" ~) O0 y( ], D8 Z
, Z5 D y9 L$ v# p% \! Z
3.x版本CRS D( N. R- t( z9 k7 R I! H' h7 ]
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs1 z; z1 m% U( W, ?; X- E
# 生成例外排除请求的配置文件% }' `, F9 H- g% z0 u( V/ {2 T% W; ^0 p
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
" x9 A' T. T1 X; ^% c& {$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf, _( }+ ]7 T7 C. E
$ cp rules/*.data /usr/local/nginx/conf' R( x3 e% a+ j& A8 g& r" ^ b
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
9 {' P2 P `) O( N& k; O* u0 n/ a" N0 p! d8 e7 [/ W5 t5 x8 X
# s7 B* R8 G s
$ vim /usr/local/nginx/conf/modsec_includes.conf
# w8 u! _9 A7 |. x- {, [& C0 H. [
[Bash shell] 纯文本查看 复制代码 include modsecurity.conf
include owasp-modsecurity-crs/crs-setup.conf
include owasp-modsecurity-crs/rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
include owasp-modsecurity-crs/rules/REQUEST-901-INITIALIZATION.conf
Include owasp-modsecurity-crs/rules/REQUEST-903.9002-WORDPRESS-EXCLUSION-RULES.conf
include owasp-modsecurity-crs/rules/REQUEST-905-COMMON-EXCEPTIONS.conf
include owasp-modsecurity-crs/rules/REQUEST-910-IP-REPUTATION.conf
include owasp-modsecurity-crs/rules/REQUEST-911-METHOD-ENFORCEMENT.conf
include owasp-modsecurity-crs/rules/REQUEST-912-DOS-PROTECTION.conf
include owasp-modsecurity-crs/rules/REQUEST-913-SCANNER-DETECTION.conf
include owasp-modsecurity-crs/rules/REQUEST-920-PROTOCOL-ENFORCEMENT.conf
include owasp-modsecurity-crs/rules/REQUEST-921-PROTOCOL-ATTACK.conf
include owasp-modsecurity-crs/rules/REQUEST-930-APPLICATION-ATTACK-LFI.conf
include owasp-modsecurity-crs/rules/REQUEST-931-APPLICATION-ATTACK-RFI.conf
include owasp-modsecurity-crs/rules/REQUEST-932-APPLICATION-ATTACK-RCE.conf
include owasp-modsecurity-crs/rules/REQUEST-933-APPLICATION-ATTACK-PHP.conf
include owasp-modsecurity-crs/rules/REQUEST-941-APPLICATION-ATTACK-XSS.conf
include owasp-modsecurity-crs/rules/REQUEST-942-APPLICATION-ATTACK-SQLI.conf
include owasp-modsecurity-crs/rules/REQUEST-943-APPLICATION-ATTACK-SESSION-FIXATION.conf
include owasp-modsecurity-crs/rules/REQUEST-949-BLOCKING-EVALUATION.conf
include owasp-modsecurity-crs/rules/RESPONSE-950-DATA-LEAKAGES.conf
include owasp-modsecurity-crs/rules/RESPONSE-951-DATA-LEAKAGES-SQL.conf
include owasp-modsecurity-crs/rules/RESPONSE-952-DATA-LEAKAGES-JAVA.conf
include owasp-modsecurity-crs/rules/RESPONSE-953-DATA-LEAKAGES-PHP.conf
include owasp-modsecurity-crs/rules/RESPONSE-954-DATA-LEAKAGES-IIS.conf
include owasp-modsecurity-crs/rules/RESPONSE-959-BLOCKING-EVALUATION.conf
include owasp-modsecurity-crs/rules/RESPONSE-980-CORRELATION.conf
include owasp-modsecurity-crs/rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf 6 I1 a% y4 a/ G) i
8 u/ }& w9 H1 x9 M l2 N% }' F
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
7 p8 o6 Q! b: U8 V4 v
/ m" m6 r7 k' I( }, O e/ n4 N& L3 G" [. d
配置Nginx支持Modsecurity, C% D C4 }' E" j$ E8 q) r
启用Modsecurity
$ u' \8 \1 u- N% c7 \7 R- e! P# S+ F) s使用静态模块加载的配置方法+ D7 D9 m( e9 G) G' E
在需要启用Modsecurity的主机的location下面加入下面两行即可:
$ r, ]9 }4 |9 j+ @8 i6 Q. E, {/ K7 u0 w$ W
/ S2 u" s+ e7 d7 NModSecurityEnabled on;
8 k2 o. O, j0 H5 NModSecurityConfig modsec_includes.conf;
! x1 ?" @* m0 H修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。5 A6 Z |, r4 Z# j; @
& C/ t5 N% H* ~9 Q: }
( K: i! S) a9 D# @, ]! S8 z' C
$ vim /usr/local/nginx/conf/nginx.conf
3 `! y3 r9 l7 l" ^0 t
$ c% |! l* m" U. k, \7 ~: @2 f! y$ n; s6 _* m
server {
: f5 h9 w* F$ o% V0 ?. R listen 80;
: s2 v: q Y2 j9 C% |/ k' P server_name example.com;
. B. S7 w& t# `9 Q+ w' c/ l3 u5 e
: l1 A9 ~4 r. W5 u, w- M3 N
location / {
! z i# l" B, d* t9 E. l0 o ModSecurityEnabled on;; g: b/ ]% i7 `& C/ }
ModSecurityConfig modsec_includes.conf;
2 ]+ R( W( s& j0 ~: _; Y root html;# {& }8 e) }- I
index index.html index.htm;
2 e& q5 z# y: D; f6 _4 W. g }
9 L) O" a" K1 U% S}
8 ^& E# r0 J$ I! Z: K使用动态模块加载的配置方法
5 d, }8 q9 E V c" s2 w! K# T( I; _在需要启用Modsecurity的主机的location下面加入下面两行即可:
( `7 ]2 t9 L1 k; s6 B' i5 d# a/ L
/ l7 G, z" G2 V; p, `; L
, ^; a7 T/ [8 {) P9 Zmodsecurity on;
+ n; f) k3 i" L4 C3 W i( Y. wmodsecurity_rules_file modsec_includes.conf;
! z: ?3 w5 V+ R1 t; _. u6 ]4 O修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
7 ]* k7 Q4 C Q! i" ~, b
, N. B6 d% D- ?5 x W+ `
2 W# q# `! \( @# \' }$ vim /usr/local/nginx/conf/nginx.conf( [" r) A3 {1 I3 z9 t2 J
/ X5 O! P+ b2 F$ w* O
$ P! L" t$ Q2 K8 l4 a$ Rserver {
4 e7 K& _% p2 w6 ^9 C; p1 \ listen 80;
! z8 o( z5 `, I server_name localhost mike.hi-linux.com;1 W$ N4 m$ Q9 }9 _2 f' B
access_log /var/log/nginx/yourdomain.log;
$ i5 s% ~2 u% [. \1 z5 c
3 l# y) l% l. G2 n) d7 o! g! y1 J. O
location / {( J+ f& F; ]4 p
2 B7 D2 }2 i' B8 i
+ c5 @( |; t$ t( I modsecurity on;+ E, C+ g1 F6 r! ~
modsecurity_rules_file modsec_includes.conf;
% j5 K, \$ l4 b( S4 l, r root html;6 Z& s0 h9 F5 t( B1 U5 s; C
index index.html index.htm;4 M* r5 N: M* Q4 _, B/ F2 ?9 Y
}1 B1 b9 V9 D, r c. V/ ?$ W
}
5 I7 m1 D* s( e5 i6 h; U' B验证Nginx配置文件
% N. Q- k7 k" X ^& }) I$ /usr/local/nginx/sbin/nginx -t; K& C# {/ e( x0 V' \: L
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok: v3 R- y/ p4 p% r9 s
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
1 e" ]/ P, d" g0 z# \/ W启动Nginx
7 p% B$ B& f; N- l. c2 y6 m, o; ]$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf3 [9 o8 t- C6 y5 I
, V& ~% g8 z8 c* Q7 ~
测试Modsecurity ModSecurity现在已经成功配置了OWASP的规则。现在我们将测试对一些最常见的Web应用攻击。来测试ModSecurity是否挡住了攻击。这里我们启用了XSS和SQL注入的过滤规则,下面的例子中不正常的请求会直接返回403。 在浏览器中访问默认首页,会看到Nginx默认的欢迎页: [/url] 这时我们在网址后面自己加上正常参数,例如: 。同样会看到Nginx默认的欢迎页: [url=http://img.colabug.com/2017/06/842f48f203c6c2cd30144f29b57af97a.png] 接下来,我们在前面正常参数的基础上再加上 ,整个请求变成: [/url] 就会看到Nginx返回403 Forbidden的信息了,说明Modsecurity成功拦截了此请求。再来看一个的例子,同样会被Modsecurity拦截。 [url=http://img.colabug.com/2017/06/246ce28e95310a32f791893d4f5c55ca.png] 查看Modsecurity日志 [url=http://img.colabug.com/2017/06/ae44dcb58b8a4a0ea761317e398b3101.png][/url] 所有命中规则的外部攻击均会存在modsec_audit.log,用户可以对这个文件中记录进行审计。Log文件位置在modsecurity.conf中SecAuditLog选项配置,Linux默认在 /var/log/modsec_audit.log 。 $ cat /usr/local/nginx/conf/modsecurity.confSecAuditLog /var/log/modsec_audit.logModsecurity主要是规则验证(验证已知漏洞),Nginx下还有另一个功能强大的WAF模块Naxsi。Naxsi最大特点是可以设置学习模式,抓取您的网站产生必要的白名单,以避免误报!Naxsi不依赖于预先定义的签名,Naxsi能够战胜更多复杂/未知/混淆的攻击模式。 3 A8 Y* ~4 `% m4 @8 G
|