ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
+ f N7 z; K$ X+ _5 F
' Q" h5 l, k$ g/ [7 g) D4 B, u3 T+ Z/ O: z& I, _
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。' W5 ?7 f$ O6 _9 S5 c1 w3 w
3 r3 C1 m- k( \ e! |6 w
" ]/ @) C. d; P' n2 x什么是ModSecurity. H. E% b A2 `% I
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
) ]- t2 j- {, @; q" A' y+ ?6 ^) {0 ~, i }% D
9 v) t$ `9 P- s2 O% H% ?* K$ i
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
3 z: R3 A4 l; G# C2 O+ `9 d5 I1 y1 k
# O1 f+ R6 y8 a) `3 l4 i2 q
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。4 r8 [' {' Z0 R" N8 L# O n
! u) U+ E' ?/ I. u( v) n C8 c
: L( F+ Z$ I Q! X5 @
官网: https://www.modsecurity.org/1 ?6 d7 n# U: C {0 A
% K! }3 N7 Z# e* [
- s5 K+ W$ o" V' @$ ^什么是OWASP CRS. n5 K5 I' S/ I3 x% ^4 P
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。' Z. N) o1 F' l" ~
7 B% n' a* s. D- Y' [" D
2 p% A4 ^4 `* f, g; sModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
* U6 k( p% R# z" \
3 B0 f9 Z: \# f+ R) U& A3 w9 F
& q2 Z/ K& H" v1 OHTTP Protection(HTTP防御); y4 x9 i1 p @$ J
HTTP协议和本地定义使用的detectsviolations策略。8 y+ U/ u( w# K2 \
6 l1 v. E' P3 n7 m
0 ?. e4 B( k# B$ x+ Z% QReal-time Blacklist Lookups(实时黑名单查询) s n# ~0 w# S* h
利用第三方IP名单。5 M/ n0 |; G9 n% R
; |, V; h/ U J) t
0 h2 r1 B: l- n$ L/ yHTTP Denial of Service Protections(HTTP的拒绝服务保护)# L! q( Z \/ D% p" S* y3 \" I
防御HTTP的洪水攻击和HTTP Dos攻击。9 L- W2 | v, D4 X0 v$ j
% U( _7 b! @- L# C9 S0 P
" T6 a' ]) L9 p6 ]$ V) F0 H
Common Web Attacks Protection(常见的Web攻击防护)' K; A# Z5 G- N! W
检测常见的Web应用程序的安全攻击。
+ y1 \+ M! M ?( U* R8 \% g/ w
* C, l ]8 {* R3 J, @1 q' {$ `, Y$ Q s2 E
Automation Detection(自动化检测)' Y m5 f& K2 b: h9 F
检测机器人,爬虫,扫描仪和其他表面恶意活动。5 M4 j& A( s7 E% O6 i6 ^
. G) q4 E. ?8 g3 X1 W7 O8 h0 Q. ]
N2 A/ ]$ ?/ fIntegration with AV Scanning for File Uploads(文件上传防病毒扫描)
) B. Q; d# C3 C# n0 _* C/ n/ Z, z# T4 n检测通过Web应用程序上传的恶意文件。
6 x+ z! F% \1 W% b
# S: y- v) y2 L! D# h1 y( D9 I* d7 Q
Tracking Sensitive Data(跟踪敏感数据)- `4 r3 H# _4 a+ \- O$ F$ e! Q
信用卡通道的使用,并阻止泄漏。) E. J4 h0 A: ]% n% ~+ x
! n8 G- a5 i4 g. Y" X4 t& W
+ K& L$ F+ E3 N1 I/ z
Trojan Protection(木马防护)' H: S% ?7 d+ A: |# K) v0 d
检测访问木马。
7 ~4 Y! Y. {0 S1 s( {
4 Q. t5 }. ~4 q* L! i; \4 u1 V: q+ A! E- Y# j6 M
Identification of Application Defects(应用程序缺陷的鉴定)2 E- w$ M) _* _
检测应用程序的错误配置警报。
- ~* i4 T1 _) Y% C: T1 t/ ]1 q s$ c
& b) [) w% c' z+ Y% S. g, m5 {
0 {. {% Z! S; ~ `Error Detection and Hiding(错误检测和隐藏)* h* t5 v, H! @
检测伪装服务器发送错误消息。
4 F1 L, e v/ Y/ J6 u: ^3 T: J* a" \8 K( j; Z' n
1 U3 F# u5 P9 A5 P& [安装ModSecurity
5 ~" g7 `0 q! l6 J t+ o软件基础环境准备7 u, H0 ?% V; v
下载对应软件包9 h0 I% l- \) G' G8 m6 ~
$ cd /root
% G0 J9 }2 {- u. F* \! f* T; |$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
$ {! T) f3 C5 \ s" Y$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz$ L$ V* ^8 S6 S+ u9 t: s
安装Nginx和ModSecurity依赖包
; f( \8 y, H0 u) W! ]Centos/RHEL+ o' x8 a+ E0 Z
2 i; Z3 Q: U; o8 [$ H* U) G7 F5 E& v
$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
5 T: \6 ?7 g' LUbuntu/Debian% E/ i. |6 ]. m+ ~3 o& r+ z
- Z) r9 `/ \) b* v: a; |. C @% E; \& p
$ 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
3 L G+ v5 b: M+ i编译安装ModSecurity8 l- A: h# s) ~
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。+ C+ |( D- W! ~0 K
& Y4 [$ K* a. p9 A% l. }- k/ k- e9 g7 v, I
方法一:编译为Nginx静态模块
9 H$ T: |1 W: M2 W9 Z# m6 ^( e7 m9 d! z7 \( O
1 b; ~) l/ Z: B/ d0 x: Q编译为独立模块(modsecurity-2.9.1)! c" F5 E1 }: h' y
$ tar xzvf modsecurity-2.9.1.tar.gz q, S% [, o2 e7 v
$ cd modsecurity-2.9.1/
2 ?( S- g5 Z V$ ./autogen.sh
. o- Z# q# s: w) Q4 G; U$ ./configure --enable-standalone-module --disable-mlogc/ C% i* L" ~% J* x* e
$ make
7 Z8 k1 t6 v, u. y4 S; y编译安装Nginx并添加ModSecurity模块
$ J9 X: {3 H, L+ T9 D \* d$ tar xzvf nginx-1.9.2.tar.gz# Y3 D) w6 N' A" I7 F' m0 k* n
$ cd nginx-1.9.2
4 j& C% S! j3 D; ?* w' T$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
3 H) A8 L, C' m% f$ make && make install2 O+ H1 n$ o' A- x" S
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块" v( x* J& r( x1 c! `/ ]. J% D
0 ~$ e% b: B2 t& V
c& ?2 h& \' J' g编译LibModSecurity(modsecurity-3.0)8 n% r( K Y, H/ X) E/ B7 R1 {; O" h
$ cd /root4 F f: a+ {+ J% R
$ git clone https://github.com/SpiderLabs/ModSecurity
. o4 a2 E$ G) G( j6 `9 k$ cd ModSecurity/ q1 }- D8 V' b1 E! ~( ?
$ git checkout -b v3/master origin/v3/master
+ U& D6 V; Z; ?: O$ sh build.sh' q$ p' y9 |1 _5 l
$ git submodule init9 g: }. o r" U) ^3 h
$ git submodule update/ l, W6 N2 S p# \2 J
$ ./configure
4 y- e# W( m! U$ |0 W$ make
: C: v+ ^1 K5 ?1 N4 {3 N$ make install
: Z# P) x& x& e6 ALibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。3 k8 `4 ~5 \, l) O
4 k5 m8 a7 J1 u; n
+ D3 M5 B7 b: e) L6 r5 l$ ls /usr/local/modsecurity/lib
& ]; S/ D _- l3 X0 ]2 q6 U! hlibmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.07 l8 @, v3 R: o6 V% M! X V( j6 t
编译安装Nginx并添加ModSecurity-Nginx Connector模块
5 H0 d: L3 [& J* ]9 z使用ModSecurity-Nginx模块来连接LibModSecurity
* w! r9 G) y( h) c- d8 `' |
' n% j5 x1 t- J% p, f6 p$ o
3 K. _4 \4 n# W$ O$ cd /root# h% o) A; o) e H K
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx: I$ R9 v2 z, e8 K& W# p
$ tar xzvf nginx-1.9.2.tar.gz( E2 e2 J" I* z7 |+ i$ ~
$ cd nginx-1.9.2
8 \% T1 d8 h8 u8 w3 e$ ./configure --add-module=/root/modsecurity-nginx
0 Q. `) e, n( \, B4 ~$ make
- x) I! Q/ u( Y1 f, X% x$ make && make install
- h1 c( `" G% d( S7 z" J添加OWASP规则% R! b! ?$ V* l+ A# k' |. I
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
5 s6 y }( }% S. j5 Y2 ]
% C! Z ]/ ~$ [% M1 \7 L* x& o8 i9 h7 i1 L
下载OWASP规则并生成配置文件
8 i" L ] L+ t: l$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git3 k2 M* F. `, W' i2 |# p$ d! C' M, l
$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/5 C9 ?4 \& V2 v* _1 Q& `
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs- s/ E7 t' H% _7 [ h( l
$ cp crs-setup.conf.example crs-setup.conf
: k! Q* R+ Y5 y1 l配置OWASP规则6 \& Q2 q0 O8 {6 h: X
编辑crs-setup.conf文件; z W! H# N: b
2 y: m& X+ z- N" x- a4 M
3 H5 w1 i2 F" ^0 v6 E3 g$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
7 n6 [$ c$ d/ T7 k6 ?8 S# }$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
" t D0 J' ?. y3 Z$ E0 }2 n$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf1 C0 U, W. J$ a7 A
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf) `7 D' Q4 A8 a# r, j# Y0 B+ p, [0 ?& [
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
. ]7 B. p/ {5 k3 X8 c N5 t4 x$ `: r& Z- Z
0 V5 o/ P4 U' Z. m1 f+ B启用ModSecurity模块和CRS规则% Q/ e0 m# K- q1 |2 \- S- Y
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
1 N) _9 ~7 g$ r# w5 g) c# `4 c) e. }& R+ }: R4 }- ^2 M
! z$ B/ \5 L. C& t3 _! i
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。5 O0 o) H. T4 Z7 Q" x" o
. Y6 M) l* `, ]$ b7 W$ H x
: m3 |6 @# q. {, h: `$ g* X8 v$ cd /root/modsecurity-2.9.1/
) x2 I) v6 I3 [% j: v5 N- O$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
- W C. `' G" ^- g* v$ cp unicode.mapping /usr/local/nginx/conf/5 z8 y( }( w' e& }5 P5 r
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。; J. R' Z! j' ?7 P+ @0 i' u2 [
! e+ G8 g- @0 L; W- b
- Q' v7 Q. R, P. O0 }$ vim /usr/local/nginx/conf/modsecurity.conf
1 r. P; b2 B6 tSecRuleEngine On0 Z. Q' A' D, ~9 W- j6 U. @$ K# F
ModSecurity中几个常用配置说明:
* z4 ^( ^6 {- X. ^3 X" D
& W4 y8 B2 W* z! f' l" B
. s( G' r* r6 |- K: y/ A' O1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
0 Y1 y( j9 T- T: X0 Z5 l9 ^- A6 k6 C( t) ]6 [3 q
$ A# F6 o( o# L# e
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。" z) Q5 R( X+ `7 N# h" ^) }' p
+ |% Y6 b$ B* C9 C
6 r' o' |- x7 f- x3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
! v# Y* n/ Y8 ~; [2 m! \( f) v1 e' J I' j$ w
6 O3 {: K7 O1 V5 X9 t$ @* C% `6 ^4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
6 O& Y: H9 R) k0 L- A" {5 g% U( a8 X+ k: E' V9 H
( x! S2 E A" N, V
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。 F% U* X1 I6 \. X. ]) s
# H* t$ s- Q0 s( i( A, l
: `$ O9 ^9 J& \. }- s: w, l0 F8 Q3.x版本CRS
9 A! n5 N7 |9 h, J7 E4 }$ cd /usr/local/nginx/conf/owasp-modsecurity-crs5 }- }0 Z2 C" i8 o+ Z
# 生成例外排除请求的配置文件; F& F$ k2 m3 A+ @9 M
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
- m( i7 ]: o2 y% k# K2 R8 v- k$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
) W+ _* d& v9 J. f* b) H6 x$ cp rules/*.data /usr/local/nginx/conf! i6 b) V2 W6 _- ^6 w4 M
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。8 \5 W7 B B$ y) k9 j" }0 E9 [
/ L3 L5 a7 B) k& a' g+ j7 u6 w; P2 h$ P" M
$ vim /usr/local/nginx/conf/modsec_includes.conf' q& h4 Q3 H+ l J
$ N+ i3 R3 m7 Z0 _+ d2 C. Q$ d
[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 4 _. r6 ]4 K: g6 Q1 }3 l
9 @- w4 {6 A' }& l. {
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
$ F+ M' E1 l, U% B* a! B+ L' P$ v, k$ ~. H/ }
7 t3 v. o* e0 q: X" L' a' H
配置Nginx支持Modsecurity
/ \: f( J& x) D0 B启用Modsecurity
2 P$ q9 z% }& O6 v使用静态模块加载的配置方法0 R. v7 v& S8 G1 c
在需要启用Modsecurity的主机的location下面加入下面两行即可:- F0 p5 O' o" J! p; ]% O
+ I: M* @4 j, ?; Q
; Y+ G5 S( i9 @' K* k( i" oModSecurityEnabled on;
; C, Q; a4 J3 m: T6 x# T- s) IModSecurityConfig modsec_includes.conf;
& e6 T' R/ L3 v! b7 {8 c修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
; J( B4 g: e$ F3 o* @1 }& {# ~) n) T7 J; m) P; M- \
6 L/ E& {) C* u4 u$ vim /usr/local/nginx/conf/nginx.conf g ?. v/ A* n, e$ a% c6 F
. `9 N0 v; {$ Y# X4 b6 S# |/ @- T: e; m' z7 x& j
server {% a5 @. K5 I3 O
listen 80;
- j) v7 I+ M m7 f server_name example.com;* M3 O( E+ Y$ s7 Y' [- R1 d
" U7 |6 }8 a) u) m. F, N! O! q- m, v7 o
location / {$ y. \' \2 ]; X- @" Y4 h6 {) `. F! ?
ModSecurityEnabled on;
# ^9 s/ P) G2 l j ModSecurityConfig modsec_includes.conf;
4 z% L% t) e2 z1 S, K7 ^0 z0 I root html;
+ i" G* m5 `, Y index index.html index.htm;% L, a" J2 g$ Y. C B
}
3 M) G1 b% @& o6 g) {) }2 _/ L1 C}
& j/ x9 L* I( |, M2 g" t使用动态模块加载的配置方法
, H( m, A$ g' N \4 B5 q在需要启用Modsecurity的主机的location下面加入下面两行即可: [/ S& D% U2 X# \$ G1 d, ]% C
4 _3 }4 O L$ L3 c0 W) t
/ f$ h3 ]: m5 |4 Jmodsecurity on;; p: e4 c0 S& H. |5 n
modsecurity_rules_file modsec_includes.conf;; L7 o7 O% a% V
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
. t" C3 I" U1 q8 {$ c* V+ Q* m: H! L
7 i! @* \. X/ L9 r& i- J/ c4 g7 Z
$ vim /usr/local/nginx/conf/nginx.conf
; {1 F. g5 ^5 t' D+ c* _* b. |# [4 W7 H+ L& f
" ~( u; _1 t1 I- Yserver {
$ ?! z1 [! x6 i4 ]: p/ {! P2 { listen 80;
( i, E; k$ Q& S- U8 A server_name localhost mike.hi-linux.com;
! W" d: v: ~( B( A1 U* m& I. V; S/ s access_log /var/log/nginx/yourdomain.log;
H! G0 x3 n s5 m" w
" Q4 }9 f3 e1 v. l2 O. K# X/ {
, {7 v3 ~4 h1 M3 [: Y) E' I8 N location / {+ t' i; a7 g# ^7 ~
7 n- m9 q% z5 V2 [* Y' R. d" f, V6 L2 ]' j
modsecurity on;
. \1 m* T% D8 o" v& j7 t7 } modsecurity_rules_file modsec_includes.conf;
/ ~) z. i7 a# }. @- l( G+ l7 k root html;6 [5 K) B" z$ X8 t6 Z1 [0 ~
index index.html index.htm;, c% D9 n# M# N4 I* k1 I
}/ p; T7 D' v; y6 B4 G
}
8 w* z& {! N! Y" H: J9 x) }验证Nginx配置文件- N z" a( x7 S) Y
$ /usr/local/nginx/sbin/nginx -t
. z/ q6 Q; |' w, Vnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
+ B) `5 Q0 o- N9 {2 B" X$ w, |nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful8 q5 m2 l% @3 V# U+ Y# T: y$ n/ u
启动Nginx% I9 ~, u6 B# L; D$ x. b
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf: S- S/ `, ?; e N$ K& R
5 M4 _% p9 i+ Y% d0 b6 ~" g0 |! Z
测试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 s* B+ f3 t/ { ~- t& N
|