ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
% G6 p( h7 @% a. O/ z
. {: O) J% `7 Q& b2 L
/ x* C+ |/ h/ g% N' R/ T8 g) M% B在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
/ S2 V% ?6 Z+ T9 ]# d& h" l6 `- m4 t8 e; ?$ D0 w- c6 t1 r
; l$ |2 e. \1 _7 V3 L6 U什么是ModSecurity8 C: i6 f! m& j" Z
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。6 ] z+ p" g R4 k
8 a/ g- d8 R0 ~+ T( |0 T% x" {( o. z; ~
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。# z- t2 Z I% R5 T! a
- k# X S$ w0 x$ }! ]2 a+ s6 w k3 r
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。, a8 `# s2 T4 G0 ^; B' `1 t: R
0 n( h2 s9 `% ]7 F, [
% `! L1 [+ z( E
官网: https://www.modsecurity.org/6 S3 }7 j+ z" J5 M3 e% ]: A6 m
; ? v3 J3 J( b5 T( o" T* i, r N1 |# J/ E) e7 a# d
什么是OWASP CRS! Z7 w ^9 C+ {, h5 Z6 ?
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
8 B8 }- [; J: r0 C; i; j x4 H( {- \) c$ L
! i4 P8 Q" p! r( s3 C0 |7 TModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
' `6 `; @9 z) r9 d U" G& O) k1 B' H! V- l9 u# X
, q- c7 F* {4 F, r2 E
HTTP Protection(HTTP防御): l# e' s4 T$ j& P& W4 f4 K( z" d$ r: _
HTTP协议和本地定义使用的detectsviolations策略。
6 N% p5 u; ?; N {0 u* {
6 w* B m0 N0 ?$ W* V5 F' {/ j$ V; r, ~4 C
Real-time Blacklist Lookups(实时黑名单查询)1 T" K G# ^( _. h
利用第三方IP名单。$ g/ K& ?. ?1 {: ]) q0 Z
* \* |1 w% M+ Y, @
8 M& F& _% i' a: ^6 O3 V/ e5 wHTTP Denial of Service Protections(HTTP的拒绝服务保护)4 h2 |1 O0 |( _+ d
防御HTTP的洪水攻击和HTTP Dos攻击。' t. W, ^& Q7 M8 _- A
, `, W m" P5 ?& P- y$ K( H( Z
% Y/ d& ?/ z6 {( BCommon Web Attacks Protection(常见的Web攻击防护)
3 h: [1 h4 Q$ @4 O检测常见的Web应用程序的安全攻击。! Y. t% \- v- i: V0 y. w
! L6 I2 R$ e' U/ J
/ I6 G" {; @* h; d) m; _
Automation Detection(自动化检测)/ K |6 i# F8 q" o5 s% `
检测机器人,爬虫,扫描仪和其他表面恶意活动。- ^9 y$ s; V* P% h2 V" W, p1 G
; P: k- |( v/ U5 K6 j3 c3 p7 V. O
9 |1 P1 C) \0 e
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)
3 J& {9 _0 T- }! F检测通过Web应用程序上传的恶意文件。
, ?2 B5 p4 K* y- X; k* y+ r# ~0 F# U! O: A& H
, j- e, O) V8 H- S
Tracking Sensitive Data(跟踪敏感数据)7 j/ O% O& o n4 ^, q, h
信用卡通道的使用,并阻止泄漏。4 Y! B! W* Q; |3 ~
K, Q% ~5 c& x2 N6 u$ H* [! ?
- ~* A5 ^8 g0 C* l# p! }Trojan Protection(木马防护)
D' Q/ P# q' |检测访问木马。/ ~7 O8 q/ ]3 R" S$ \$ [' l
9 I$ ?9 S" y! _
7 _( s3 K. @, V2 G# V3 ^Identification of Application Defects(应用程序缺陷的鉴定)
$ F( x- q. o0 A3 l检测应用程序的错误配置警报。* x7 r! o3 F. u+ {6 ?
3 J2 \* u1 c; T0 G8 v. p! I/ O/ l& B% g$ I
Error Detection and Hiding(错误检测和隐藏)2 r* E" }) M7 x) p, R+ J
检测伪装服务器发送错误消息。# g1 Z- {, U6 T4 r7 `
) \9 f5 Z! s0 {* l* F6 e, g: P2 z( ~" q: ]9 m; Z
安装ModSecurity
$ J/ X: @1 Y9 r; _) I; ^8 q. e+ w软件基础环境准备
4 m* l3 s- A" h# w# Y3 Q7 S |下载对应软件包( d4 x" `6 U* q
$ cd /root% }. h. m* t, V. }1 p4 u! Q$ Q) X
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'& H; a+ I& d8 r
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz
+ A/ p/ b0 I' H& u- o安装Nginx和ModSecurity依赖包
2 t F5 p) h S/ j3 K0 U+ t$ ZCentos/RHEL
m/ n" k. M8 i6 k D& S. p n
* ~0 k. T7 n; {; A. j! y8 B: k1 z* H5 ^2 f7 B3 _( L' M' w% K; @, T
$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel. L2 m N% ]+ Z( J, p: i6 }
Ubuntu/Debian
$ v# u4 P" b: `9 b, A3 j# s4 ^ C, Q. v6 a' B. F3 o/ j( S' f
+ m: n, u) h! g- Z7 Y/ K$ 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
5 G/ u" g$ _2 g- i6 c# e6 b) G1 \编译安装ModSecurity; o9 o8 W( a8 e
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。* B: T4 Q# ^! a8 z, h' n `2 ^$ B
, s4 X5 x5 {, X: Q0 C
1 q4 a: G5 D+ u& g5 `1 e方法一:编译为Nginx静态模块
% V1 l) N* }( K m7 B/ `
8 }2 e( j' {5 ]! z& I+ n6 t. D% L. X2 ?/ R6 l
编译为独立模块(modsecurity-2.9.1)
1 P/ P& K# d( [" I$ tar xzvf modsecurity-2.9.1.tar.gz
, P0 Q. R, Z8 |# N/ x( o% u" S$ cd modsecurity-2.9.1/) J$ Q& a! L0 G
$ ./autogen.sh
0 [, u* y/ ^: \4 O' Q3 i$ ./configure --enable-standalone-module --disable-mlogc# S) ?1 l: U7 ^. p$ y9 f9 U, I" G
$ make
3 w+ o% a. g( W" {+ `! o0 q) \编译安装Nginx并添加ModSecurity模块# p$ Q. i$ |! i4 [- n
$ tar xzvf nginx-1.9.2.tar.gz
0 X: K6 M) b& G' }4 u$ cd nginx-1.9.2: m$ G; h+ H3 a1 ?2 T! \/ z; `
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
# k5 G b) p' ~' O3 W! S: i1 ]" V; ^$ make && make install: d) N3 U+ J# t* f
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
: k Q+ H2 J4 w7 r- i' _" _4 [4 X2 ~, b
, Z4 W" b. H; \% z7 F" S% ]8 H, H! r. z
编译LibModSecurity(modsecurity-3.0)4 X% j0 `3 s! d5 W9 ?! T3 f }( |
$ cd /root
. M+ ?; ]9 e* {$ git clone https://github.com/SpiderLabs/ModSecurity
. ^6 J1 j% L1 g: [( ?! \$ cd ModSecurity9 y3 z2 `( ]- t; Q+ N
$ git checkout -b v3/master origin/v3/master9 y+ ^ {5 T1 F6 Y1 U7 ^% U4 q: D
$ sh build.sh
0 ]- X! W5 n2 U/ x4 C$ git submodule init
$ a/ m3 e2 J8 i1 u6 S& b) U$ git submodule update$ \+ |/ O( U5 Q+ \; x8 h2 U
$ ./configure9 s; J$ a' `1 V/ M2 U/ x! K
$ make! D8 N, r0 G6 {9 L, Z6 n: J
$ make install% f! f. ]' E, B X+ O# z6 H* d
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
% h# J5 Z0 J$ i" N/ r& g% U3 [" _- U( f! F" z9 d
$ m/ u' |, {. p$ T4 i' Y4 L+ ~& ?
$ ls /usr/local/modsecurity/lib/ U# }2 f) m3 ?+ _
libmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.00 B1 O) S ~% D6 E
编译安装Nginx并添加ModSecurity-Nginx Connector模块% l: S% O k. r- g! e
使用ModSecurity-Nginx模块来连接LibModSecurity& U7 r2 c4 G& [' `, g
1 ^. x y7 w: A. I( ?; `
8 w: K4 \. s' P$ cd /root
" d0 Z: d6 H3 H" |7 S3 I7 g$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
$ F1 y0 C1 ?; O$ tar xzvf nginx-1.9.2.tar.gz
; I& b6 o. r! E7 e# Y e$ cd nginx-1.9.2. W2 \9 z" O4 |
$ ./configure --add-module=/root/modsecurity-nginx
1 k$ J$ p* D N" ~! ? h5 j% c$ make# ~# l* D5 g- e* a; v; ]5 s8 d
$ make && make install
6 j; P- m6 F# x! e6 @+ h3 \ k/ ?9 x/ E! @添加OWASP规则
3 }) P/ F1 H2 d0 m# d _( ZModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
6 s1 l. W+ F7 }+ D0 @ g; V
3 b9 D! b9 ?, v/ ~! o
0 r6 D1 z2 t$ `3 ^0 Z/ i% O下载OWASP规则并生成配置文件 j" G* n/ ^2 Q' Q) ~ W* R
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
0 E1 q7 `2 ?6 L1 F: B7 d9 u0 [$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/
. u. j/ q0 e5 B* x# l# q6 l$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
" R6 `/ v- O" E6 S3 b( u$ cp crs-setup.conf.example crs-setup.conf- R. i% g! ?3 e6 o$ C) W) D3 M
配置OWASP规则- f' l4 x: e8 q! A3 _
编辑crs-setup.conf文件
! ?! z. n$ W2 U$ E; V
* x: E8 ?7 ]& E3 M
8 i% V5 Q* R& B: m9 w0 l0 q# k# r$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf( T; Z/ V) A+ p- C+ j
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
- x8 J9 B1 _; w% i k* e+ s; F$ m$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf. q1 W+ i9 N% i8 s! g+ U# ?) d! |
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf9 k0 f6 A: a9 F# Q7 C6 d
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。, ^( u( g' s7 l1 r8 y1 z' Q/ Z# b
6 k& h4 s+ \6 d' Z \& ~4 y. o( m+ `6 ]
. i A+ }% A4 Q& p
启用ModSecurity模块和CRS规则
R% G6 _$ V( C K" A' J复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。3 @* C, f. c2 X; f) f
( X" E+ O( p% ]. M' q6 {5 j- I
: _* U( W1 k! M$ {/ f2 ~modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。, P- ]/ c8 m- n z
& O% @+ [: S% S- q2 U
: E( R! h: s4 A# ? V$ cd /root/modsecurity-2.9.1/
' d0 ?1 M7 }1 w& e$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
# |+ G1 R* i$ m. P$ f" ~7 g$ cp unicode.mapping /usr/local/nginx/conf/
/ }9 ]! V+ b5 a' L) c$ O. H Z将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。0 y5 M. \$ m; }
# [" R. v1 f& n8 o$ \
, Y2 n1 a9 |2 f1 Z! `$ vim /usr/local/nginx/conf/modsecurity.conf
( k. ]1 ^7 d; `( e! _, PSecRuleEngine On# x& P2 l y" u' K. j% x0 {2 Q0 X0 n
ModSecurity中几个常用配置说明: i! z2 a. X- i8 H# q4 @
9 w/ n6 z+ N. @/ k" H, Q' }2 X g
& E2 G0 j* ]9 d" ? u7 r1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。 m5 g4 L8 A4 ~. Z& z
+ y) t* d6 {8 ^/ m
$ K) t& |5 n' U
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。4 p2 V1 F; k; y
- K% Y3 e2 G& q8 ]
" A7 }- g) J8 G4 D/ h; w3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。- m1 j% j9 M, Q2 m
, x8 S; g8 P i' t! i( p
6 d/ z( e6 w3 D% p
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。$ E/ d7 A: w, b+ s' k, N
. H) z; F: H8 K, Q' l# t* Q2 [
9 }, n6 Y1 z& x在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
( `* D7 w( y0 L* Z( p: G( D" u! W
, t- S0 `8 D- h) A# a
3.x版本CRS' I* F# U" X. r" z' j8 N6 Q# L
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs2 O6 `- W( Y4 @% q- ]5 f6 Y
# 生成例外排除请求的配置文件
* ~) p6 K+ Y. x! t b$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
; J: L: b: @: \3 v- f$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
" Y' f+ V/ h/ F s7 T$ cp rules/*.data /usr/local/nginx/conf
( K% K" y! [" r为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。) i! l! g" M4 R/ W9 G" b) Y/ P
) e0 P3 F" e2 @- `7 K$ ]9 F# {1 X- E
: D! u& E0 {$ w: e$ vim /usr/local/nginx/conf/modsec_includes.conf/ `2 g- ?# l4 c2 h3 S6 ]
+ }' W& }; `+ ^' e- u& a[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 @1 O. R0 N3 \# Y; n4 i- ]- @6 j1 Z$ W8 ?9 d& j/ M
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
# ?. P( {; t6 i$ w, s9 I5 \, V6 q% n+ G
! T+ `% C( n0 ?8 }' z0 |配置Nginx支持Modsecurity* F$ t0 I+ u: c
启用Modsecurity0 e- m" d* `; L I+ H
使用静态模块加载的配置方法
_; s y2 L2 k$ Z7 {. Q! a在需要启用Modsecurity的主机的location下面加入下面两行即可:$ s8 F/ G, x' F" ]7 c" a) B
* \" N9 \' o( d$ `0 N0 d0 w
9 u1 ~! i, r+ g7 ^: EModSecurityEnabled on;1 Z- [7 J) C* n, N' P
ModSecurityConfig modsec_includes.conf;: p* | Y9 k8 q" p) b0 U5 |
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。& h9 x- ?/ Y$ s0 ]
5 G. k9 s- h7 M' S+ K' L' c* w4 ]1 l0 L- R
$ vim /usr/local/nginx/conf/nginx.conf6 C; }+ G U3 V* K8 u& g
; }6 F3 `; z, x( k9 j9 W8 V
7 \& ^/ U9 r6 T. M! t
server {/ j, E+ D. L) m. C5 @, _
listen 80;
0 A) |4 A/ ~7 F' M! _( J server_name example.com;
# b# Z) K' C2 a, V' X; y% z% q& J# J/ m# @9 }3 i
3 r; y5 B; }* L D) X, n3 x
location / {
+ G9 H! X6 S% A" ~. K; O ModSecurityEnabled on;
5 d) ]( H( P2 v& Q3 Z' {! R ModSecurityConfig modsec_includes.conf;
" z7 W1 p( r+ g( [9 k root html;
9 I( r$ J' ?% r6 }0 k. v index index.html index.htm;
; c4 _# E0 {# b }
. s* r/ l! j" L2 t}
7 i' X! I0 a! ^0 @1 e6 d+ s6 o使用动态模块加载的配置方法
9 z8 i0 _! f# U- H9 M6 g在需要启用Modsecurity的主机的location下面加入下面两行即可:1 E) x5 E& c9 w3 P3 ~
- m A9 ~( ?* @& o2 G. O" j1 L/ N
2 C$ ~8 ^3 W' Lmodsecurity on;
4 B+ k/ K: c/ D Imodsecurity_rules_file modsec_includes.conf;0 H- F2 L0 Z: F7 ^9 x0 J
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
5 |5 h# e8 r7 q: V n4 c8 p) \4 ?; z# U, j5 X M; e
" J$ l2 r) u1 ?6 I
$ vim /usr/local/nginx/conf/nginx.conf
% b1 ~( j$ t1 |% p0 i O
& l+ Y0 A) [( X' b0 z
; [: d: V! d. j Hserver {
0 p4 x8 @" Q9 \3 ^, a listen 80;
& r# |; O6 b8 `5 y5 K b' M$ }% C server_name localhost mike.hi-linux.com;
- X+ \ j1 w' ^8 _8 U& u, Z access_log /var/log/nginx/yourdomain.log;) K4 t7 l5 H3 @- u) p& `
) R7 }, R, ]: ~; b: W7 s) n
, a: m8 j8 m% T+ F9 ] location / {
) c' F% M/ n# D7 q0 [4 Z
8 w+ c: P X% h2 U# u3 _& T# L
0 z$ N" M- A' K% L3 E% T/ s modsecurity on;
5 R9 g( |! o$ x5 T# W+ x) o modsecurity_rules_file modsec_includes.conf; c2 K& @+ c5 V
root html;9 B& B+ U. S- `6 u6 P
index index.html index.htm;3 E9 g) z/ l6 C/ k
}1 T* ?% j' R: l, I: t0 k" {
}) c, l4 Q/ }$ c7 R8 |7 G# i
验证Nginx配置文件/ X5 k5 W! m% A# X2 ^% Q/ D
$ /usr/local/nginx/sbin/nginx -t# a- K8 y4 |( D# @
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok P- [! i4 K# e3 K
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful# d! D: T% ?4 U# s( ]
启动Nginx
4 N7 a. K# ?2 |6 k3 D$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf `! l% U4 B% h; D7 y
7 ^6 z9 R; w2 J# 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能够战胜更多复杂/未知/混淆的攻击模式。
6 n% o6 c4 }) s( ~5 ~6 { |