ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
& J2 i7 J9 x1 g3 x0 u
8 n8 f& z0 x; k9 u4 Z* {9 G/ u) [. A: O: a* a8 ?& e
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。/ X5 ?5 R( W/ J
3 [: Y5 V& W; W* }3 f2 f
. x: t6 S# S+ H' `1 ]! A
什么是ModSecurity) t. C% s4 W8 u' `/ l( M% W o/ c, r
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
- l$ X5 O! Y) a( E6 x4 ~2 H
" G' X3 D& F1 o: a) p5 R" b; h8 P5 O) ], A: w5 T+ G
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
+ v; N- r7 e( F$ s! {/ _! h* w6 t2 K2 f/ K9 F# B9 s
9 L, ]/ A, G z3 M2 h: X! ~3 Z
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
) W0 w% v1 J4 u, J" X9 f, E1 |5 ~
/ ^% V& G! G1 ?
2 |6 z6 W% a+ ~4 ~4 o5 W B: Z官网: https://www.modsecurity.org/* U/ o, K: w+ |3 s4 j) x. @
6 K% B P$ B- ?
( ]: r$ N. F) \什么是OWASP CRS
$ d! G4 Y+ d( h0 q# DOWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
8 J; k* M" ]$ T
3 k8 n6 ?9 w" c! p' x4 ?/ F# F& J {/ j( |, s
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
4 b0 L2 H. z+ G
0 J6 i! W( v1 G, c* y( f" \0 `- u2 X: }" c; @0 k, H1 S
HTTP Protection(HTTP防御)4 f& W# {, o2 `
HTTP协议和本地定义使用的detectsviolations策略。
$ A I) K; S! o! ^# [
+ {# x) G* z' m8 r* }# J+ d* w* L3 o$ S
Real-time Blacklist Lookups(实时黑名单查询)
& G* o _7 l$ H G, ~' |4 `利用第三方IP名单。# h. \* @4 \' ]6 `
2 W: `2 W) m% V6 f% d( w
: C' p: f- Q. w- LHTTP Denial of Service Protections(HTTP的拒绝服务保护)- G" N# [$ K3 T' m
防御HTTP的洪水攻击和HTTP Dos攻击。
: W: y% O* W8 M a
! w0 ~) G8 f) j! W/ T( _) r+ Z" N& _9 f* t$ s4 l9 H _3 B, a
Common Web Attacks Protection(常见的Web攻击防护)
& I- o8 `: [4 M x4 \检测常见的Web应用程序的安全攻击。! G" t0 C* l- u; D! U2 l8 p7 [
! X8 B+ }7 }$ o9 K' z: W* B
: d% }! Y# t0 \* O4 a6 O, A2 ~& {
Automation Detection(自动化检测)
+ L+ V+ Z6 W, k' }检测机器人,爬虫,扫描仪和其他表面恶意活动。$ x _6 |* K+ X2 d
3 t/ f4 O$ r, i; ~
' p: Q. P: Y% S" t) U0 T
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)
8 R( j: K; q1 m0 E检测通过Web应用程序上传的恶意文件。
0 ]; k ]& s8 }3 l7 Y$ ]9 e, `, m: q i. k) n/ g3 g9 j J
" x$ N3 A6 g/ v% ?7 L+ K
Tracking Sensitive Data(跟踪敏感数据)2 a2 h6 u9 w6 A9 D
信用卡通道的使用,并阻止泄漏。& x! k/ o U, V
4 c A F' T: n4 T6 k/ J
) e& @8 P' g6 \, i; Y+ |9 r1 C# N/ eTrojan Protection(木马防护)0 P- m% J5 U, m1 o8 z4 ~! I; @
检测访问木马。/ r) k) }: x" d* e
& Y6 R% T% {8 l6 b
- P( v: n& Z2 aIdentification of Application Defects(应用程序缺陷的鉴定)
+ e$ E, w8 q5 o% j2 \检测应用程序的错误配置警报。
" q1 i: H5 u' P/ |+ F- B
9 u: U5 N; X$ S$ `7 u# U. B% k& l, O& V! S, U
Error Detection and Hiding(错误检测和隐藏)
: {$ y8 ^1 n( f+ u# x检测伪装服务器发送错误消息。3 Q& }' y2 i0 Q+ T
7 x1 D P2 X# l, Y" e3 i8 [( r+ G$ Z# `% g& ^) m
安装ModSecurity: _# b7 M5 e" ^# W2 g, J9 }
软件基础环境准备! h5 y0 E w5 Y, h! I/ M
下载对应软件包
2 v8 _+ ^' s0 n4 ?6 r, I/ ?# H6 A3 |4 s$ cd /root
, }+ O1 w I4 _$ ^" m7 t$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'1 G1 I7 s- m! ]2 M+ |! a* x. ^
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz
$ b! h/ x' @2 t( u5 ?安装Nginx和ModSecurity依赖包
7 u7 e% p5 H! D0 v2 SCentos/RHEL* R4 t, j1 b+ B- N, y& E0 b
" `" G: q9 G# M7 K
! h8 @9 |, _: B, w$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel, s( L e& f$ p
Ubuntu/Debian
. b4 h7 J0 r( r! b7 a9 c
, {2 _! C1 c2 m3 s
: ^. g- ?& R! P4 a; F$ 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+ e8 L+ I* R8 f2 T. z) d5 a0 O
编译安装ModSecurity6 H. W" x; x# ?8 S( O7 h/ Z2 K
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
9 H$ V( D& S! q+ ]! Z! ?" ~" z) q. {, F6 u% h( \1 H
' [- R9 Z" D( O; @, F l
方法一:编译为Nginx静态模块
5 g& E& Y; _# V" L# L- G
" o3 Q) ^2 Z+ b( q- k3 e4 ? A7 u5 Z/ C) e$ m, m
编译为独立模块(modsecurity-2.9.1)0 n- k; m5 j% L5 \5 R7 N7 I
$ tar xzvf modsecurity-2.9.1.tar.gz3 Y+ s0 @; m l1 i9 b$ |* R; V
$ cd modsecurity-2.9.1/
- h7 K3 c8 ~- a4 r, [- t6 M, {9 j$ ./autogen.sh
+ ] i4 u0 I( }2 X& @- G$ ./configure --enable-standalone-module --disable-mlogc! {0 r3 z. ?# F# N" ?8 G
$ make" p" d s6 ^/ a5 ]
编译安装Nginx并添加ModSecurity模块
" c' o- `7 U, h# I$ G' h% p$ tar xzvf nginx-1.9.2.tar.gz, B# j: }; T2 N B8 l( t& ?5 [7 p
$ cd nginx-1.9.2
/ k7 s6 r q/ h3 x$ ^2 x5 R$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
6 m9 I$ F. h2 N* q& F' ^2 {# w$ make && make install
1 j% a- t8 a8 o5 E- e d, B' f" L z方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
$ U% P, r, _1 u) q4 a ?" d1 h# B- j, Y, E2 r/ i
4 E7 z y6 X/ a" x& ?5 w编译LibModSecurity(modsecurity-3.0)
& o. Q" H( }! z7 u% `9 ` ^+ i$ cd /root) S8 {6 S1 h9 Y' m! T
$ git clone https://github.com/SpiderLabs/ModSecurity5 n) j) I, ?& @% G7 V6 ~% [
$ cd ModSecurity
2 e! a) D8 ]# ]. B$ git checkout -b v3/master origin/v3/master
* d0 R4 q4 f; y, s: R$ sh build.sh
6 a0 A; n/ ~# f* S/ `" }; U$ git submodule init
- u* R; V, K& S, F" v h$ git submodule update
J) c, Q& e5 Y% k$ ./configure
, O+ T7 J {7 }6 y$ make
: p4 F) p; i* k0 \$ make install, y' N7 \7 ^1 a( L9 `- l$ c1 f
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。2 |2 _; {3 J" w; r
# [/ y8 t& W5 y
/ L H; e2 a. b, s$ ls /usr/local/modsecurity/lib9 ?% e; u3 m, p9 D( K
libmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0
; b' [# k1 U/ y编译安装Nginx并添加ModSecurity-Nginx Connector模块' B# @' h8 K% H
使用ModSecurity-Nginx模块来连接LibModSecurity
3 N' r) h4 o( ^7 |! c: s& O+ E A( G% f0 j9 ^
m2 a) N) r: b7 q; D$ cd /root" U- f y/ {" s" D: h- r
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx, u! ] p5 Z/ r) f' V1 o/ K+ \: H
$ tar xzvf nginx-1.9.2.tar.gz$ ?$ Y# n/ a: Q( Y3 ]
$ cd nginx-1.9.2# S; I p9 U; E/ r* T4 ~; o
$ ./configure --add-module=/root/modsecurity-nginx7 R9 Y. I2 V9 s, k2 |4 t) F
$ make
3 Z; d E6 ], n% A+ d5 H$ make && make install: H s& `; ^% d. x& a
添加OWASP规则6 E* u1 |7 E( |8 N9 `- \2 {
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
1 r5 g% S1 m: X# U6 B
1 a) v/ W+ j2 m) n( |: r
: a& q5 d; n( O0 w% f下载OWASP规则并生成配置文件
- x) m0 M9 F! A& q0 i! |$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
: W' E6 z! a% @$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/* y! j& D/ R0 A) O( R
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
$ ^- Y( h" W$ }% ]0 ^/ ^" q! R$ cp crs-setup.conf.example crs-setup.conf4 @' u+ v+ ~1 [ \; o0 I' |
配置OWASP规则4 g3 y, g2 }# {3 f0 Q$ V: C
编辑crs-setup.conf文件
& ^& p. J/ {. }$ Q# p, c: K6 e5 |5 ]- q: g( \% V, b2 T
4 J$ i: T. k( v7 {) U) |
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf9 J- t( ~8 H5 {$ H; n* R8 u, e7 S4 o
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf- D1 t, c' z" n
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf4 ~7 Z3 V, ]& I7 D7 h' c3 p
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf1 i+ g" k1 S: B; R2 i2 w3 D" |0 H3 S$ G
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
! E% g/ P6 g; A7 u+ @
! A) S! I3 o- D3 n9 G5 o
& l1 K& D7 @3 a启用ModSecurity模块和CRS规则
- o" Y0 z; a- B( ^0 M" f% b" L复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
( _8 a6 M) E* P. t. I4 V
; _6 q9 _; p! s) X6 m1 Q, [% Y. ]6 F4 E1 w( {
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。# l" l* E( W: A8 v4 ^: f
% y. [0 V/ m3 |) Q" T% q/ o% N2 Y) J) e+ _* }
$ cd /root/modsecurity-2.9.1/7 l2 A( q @' i
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
; V6 z, `3 R2 A$ cp unicode.mapping /usr/local/nginx/conf/
7 N- y2 X0 Y# X将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。" U9 w( b- Z1 C, P) [5 ]
2 ~) e5 I$ M4 I3 p
7 h7 c! b* T( L( }0 f0 q$ vim /usr/local/nginx/conf/modsecurity.conf$ Z P3 p8 J0 u: G" i' ?
SecRuleEngine On
$ ?8 M- x( I( F7 `, eModSecurity中几个常用配置说明:
3 v- |5 _$ J2 a! Y6 w3 K+ w
! Y5 d, A. l8 N2 Z/ A0 ]! p% k9 x3 H- h5 a% \6 j
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。, Y. p2 Y+ D _; D4 k0 ]
; l+ ? Z d. _
! `! h) @2 ?2 x0 o2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。: J' J* Y d5 ^" i$ \
7 f) Y( O5 o; R. p4 @) @/ j2 H/ h) q {: P0 ~; p( y+ {
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。2 p) {. X. y" Q- | R+ n9 u+ Q: L# d
/ W7 {) l* H7 o4 Q$ }
: r0 j8 \8 s( c3 c1 _) ~# j
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
9 S: E9 A( n; o8 @1 B* B/ A% [
) G* e4 ]$ c% b" R- i
3 }0 |% e2 g2 w$ N% `, r% Q在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
7 x; i/ ]7 ~+ \2 V& v x* t: s1 _; r, X# R9 v( d0 m
2 r/ G1 o% Y* ?: e! u' ]1 `+ y
3.x版本CRS; b8 }) I2 @: a1 s& l3 K
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
|, q! {6 A. x9 A! S% e8 b# 生成例外排除请求的配置文件) D% [9 U }/ _4 P2 S. i6 U& b% ]" R9 R7 s
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf7 B4 M. V% \, G; R( w! Z
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
* \0 b2 A' [, x, D2 c8 G1 v$ cp rules/*.data /usr/local/nginx/conf
% }7 @; G7 M2 a, r* V为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
% x7 N q. Y/ A, l0 L6 V) i9 E. j: n% p) x2 c5 C
) G j3 F0 t& n' _4 R
$ vim /usr/local/nginx/conf/modsec_includes.conf
& V9 S: E$ {) Z8 E& f6 U
7 |# V' j' T3 D! H' T+ g w' {2 \" z[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
% B i1 C7 ?$ u. ~4 b) w2 O# d+ k
2 c% q4 B5 F+ r$ L* G- S注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
4 \, q1 [' t! v: [' \, Q- e( E
6 ^7 | o8 Y" U; h& O8 x8 J4 }# b
, _" ]' {- z+ K# Z5 \$ J$ z配置Nginx支持Modsecurity
4 e/ ]/ W4 W1 v. q, E启用Modsecurity% }9 C. R- l: ~' M* ]
使用静态模块加载的配置方法; c1 r& W: h/ w( _, Y" W
在需要启用Modsecurity的主机的location下面加入下面两行即可:
: F4 z* C3 k% d% p& J+ P; u* O8 k$ \
. E0 I0 \. ~7 p1 o9 v+ W( W* r1 n7 |2 m0 x
ModSecurityEnabled on;0 v3 l$ t1 }! F
ModSecurityConfig modsec_includes.conf;( x( J7 h8 s" r" ]6 U
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
+ Q; b. r" H/ n& y/ t+ [8 j& q1 {9 v: [) K3 t* n% ~
+ P/ h9 {% O6 N y# Y! C$ vim /usr/local/nginx/conf/nginx.conf
R7 Z7 `0 n- X' |! Y' q5 L- q! d1 r9 A2 C( k# v6 o c" f
+ t I, p" Y- @* n8 u/ vserver {7 I$ _8 g, p5 i9 b" ?: U1 y
listen 80;5 w g# V2 R4 E T# x* M5 K
server_name example.com;
" i; `* Y4 E8 a0 L) V. g* }8 b L$ d0 {3 ^* Q
+ u$ A: [* y% l; q0 V location / {
) [$ N1 R1 f2 \6 o- b1 E+ `- [ ModSecurityEnabled on;
3 I7 s1 f0 k* ?+ @ ModSecurityConfig modsec_includes.conf;$ D+ b% m$ F0 _% f1 E/ @) h
root html;) J) r* T+ v3 Q" d1 ?
index index.html index.htm;
4 ]( }" E9 A0 K( q# R }
0 A1 u, p: Z8 R1 z% F* x* A2 U}2 }/ P1 y$ q$ w4 W$ P! v5 ?
使用动态模块加载的配置方法* }, [4 r! H2 z2 A+ ~& z4 i5 I
在需要启用Modsecurity的主机的location下面加入下面两行即可:* M8 |2 T! t9 ?7 E; G0 @. j+ q$ Q4 O
9 e" I& v @- Z. ?, M
) J( ^* B' U5 C
modsecurity on;
% P; Q2 p2 l+ Lmodsecurity_rules_file modsec_includes.conf;* o0 o% W6 g; Z8 q
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。- S \. w3 u% o! ^6 {
7 Y- C. W0 w A6 {3 \+ @; J6 R; s
$ vim /usr/local/nginx/conf/nginx.conf+ F8 }4 h Q) |: B% f6 ~) V5 G
5 d" e5 v) |% p
2 z" b: g2 g( S& O& N; Dserver {6 S) s( C6 J* k9 |
listen 80;
/ b) N4 Y* m; f% u. M server_name localhost mike.hi-linux.com;, F, j" q; w1 D6 @4 M
access_log /var/log/nginx/yourdomain.log;
& h& p/ S8 q2 w2 Q3 r- r5 U0 ~4 |( ~% Q% r. C1 W7 y0 J# g# ^# U( c; p
+ E4 E$ r. t( ]+ [* E
location / {; k8 o8 ]9 A- H3 w: K
q; `2 Q6 F" D6 G9 q1 L
4 z& B: ], f# k modsecurity on;
) l* h/ K5 R% K3 } modsecurity_rules_file modsec_includes.conf;
' C. J3 ?9 }& i' {: Y root html;1 [# N, Q" _6 I0 C I4 ]2 g/ v0 H- c
index index.html index.htm;" ]7 A. b) C: G1 D
}: D( g( |& G8 ^5 ]6 [; V
}
4 K; g6 `& M6 g8 K验证Nginx配置文件
. p3 K1 e- ~# l# @; S$ /usr/local/nginx/sbin/nginx -t
- p6 ]! U0 W d) }nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok2 L9 X7 h) y( ^. u6 O
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
7 P1 }# h1 X( G0 {启动Nginx5 o& n2 ?$ K7 @
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf. Y) W+ o$ b5 s0 |. C7 y
- u. f7 D' Q1 y, ]* \测试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能够战胜更多复杂/未知/混淆的攻击模式。
% C5 J; P! @* g4 z" P* | |