ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
( h; {' }3 k! o* I" X) K1 p) V" N& x; m: s- W
( ?& a ~4 \3 J* T, u
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
$ K' i" H& j t! H, v6 J3 [
$ q D+ D2 d5 o" ^# n; f9 R" S! [- H0 S" L- w; K& z
什么是ModSecurity
1 _: J5 n( U8 D; P. M7 ^ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。7 K8 r1 P$ d t& W8 D
% i( g9 o+ Z2 f! a% f$ s
) m9 ?) H, \ [4 t# y6 jModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
9 J( a: {) k( W
3 S1 A+ _/ G; I+ H( u/ u* A" y5 o6 q& _, ^
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。5 C& n- n! [/ p! T! d! w
9 h- A, E. q( L
' X) D% k8 \; Q1 _$ v官网: https://www.modsecurity.org/
1 {# m4 D: u$ p: y* P, U. Z% p# X+ I! h* ]9 \- h5 }+ J6 `5 m4 R8 P# t
: ?6 o- V; S; ^7 Z4 z( ^# s
什么是OWASP CRS
% J$ }, d" ~* h4 |. F0 {; V' \OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
' ~4 k- {7 p8 l0 i7 Y' |- z+ u6 u' n, T$ F, r N0 @" l
: N9 r) ~( m9 f' A* W
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。. D9 u. K; F5 Y0 W
# E, C% w& C1 }" T0 I E! `* \
1 [- h( w( H" b" `1 yHTTP Protection(HTTP防御)) S- C* y& t; A0 V) o7 Q
HTTP协议和本地定义使用的detectsviolations策略。
. ?0 }1 J3 N# I) U9 h% H6 V5 u
7 m+ t9 ?% L' q" _0 @% h, R# L% a; t- k9 S
Real-time Blacklist Lookups(实时黑名单查询)
: ^1 @0 d5 {+ t' u& F: o+ W6 ]( e利用第三方IP名单。
0 g( K" p5 n' H# v8 `6 a, }8 K6 X1 _2 L( ^, }
3 \4 a8 Y6 U% M5 o, f& z
HTTP Denial of Service Protections(HTTP的拒绝服务保护)
9 o- J9 C, A7 G3 ~. @0 r( P防御HTTP的洪水攻击和HTTP Dos攻击。
0 M4 o- a* m- p& k' ^- Z9 _
. e7 v, x- C0 X/ C' l7 a1 V
+ v0 Y A5 A- v, U- h$ ^2 S5 GCommon Web Attacks Protection(常见的Web攻击防护)' `- }# L5 H3 Q8 }7 I$ m3 U
检测常见的Web应用程序的安全攻击。 Q6 Z0 z S$ ~- w4 G' Z
) _. S ~4 g( s& q8 R2 g
) |) V. \' ^' i( U- n2 fAutomation Detection(自动化检测)
# n% E2 _/ r" X: u: s7 F; N k检测机器人,爬虫,扫描仪和其他表面恶意活动。# D# @: p. Q% n: L
5 W0 g: R; ?: ?9 P5 E5 n# ~
7 G1 l B: H3 x% ~( \8 W0 U
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)9 [; t' ^ X$ ] Z
检测通过Web应用程序上传的恶意文件。5 M' a4 s3 k# K) f+ y
4 k: h" e# e: @' S8 `0 S
6 E8 M* R4 k7 UTracking Sensitive Data(跟踪敏感数据)
3 c5 ` R% {2 x% l* z2 j信用卡通道的使用,并阻止泄漏。- v* T7 p- D- m* r$ P/ [
9 ~0 S% j4 S$ I: q
, J6 I1 `5 l" t4 B8 w9 Z; J
Trojan Protection(木马防护); f5 b' T5 a1 M$ o+ D. k+ }: g
检测访问木马。
) J- T+ V: M. U3 ?
* \1 g9 `1 n4 G/ a2 t1 [7 u2 U6 f! B1 G% S, D3 O, w3 z% j
Identification of Application Defects(应用程序缺陷的鉴定)3 v% _9 v" j @9 r8 ~; s
检测应用程序的错误配置警报。4 G9 L5 a, k5 r7 l
1 S$ J- X2 Q1 V: p0 y
( k0 E% Y/ C+ G
Error Detection and Hiding(错误检测和隐藏)
; L/ c4 b7 H) Q2 ~9 L检测伪装服务器发送错误消息。
0 z' Y+ [3 A# g
' \5 F( j0 U) W9 R& r% O
! Y! Y; ?0 ~2 d A8 g. w安装ModSecurity
! r- Y0 g6 {. i) k软件基础环境准备
1 |- D' ]3 |% S5 H$ |下载对应软件包. f3 I+ t. g# D7 p% R
$ cd /root7 \4 F1 [! ~( J/ F4 u8 a8 d
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
6 {, h( P0 k3 k: i9 a3 q6 l$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz
4 }' |" k2 v" |3 @安装Nginx和ModSecurity依赖包
! o' j/ }+ w- J( B0 [3 xCentos/RHEL) O* g2 b1 i) E& _" k8 `+ n
8 B5 S- W1 T3 C. B. d7 m6 r2 N& Y
6 I1 g3 Y0 D1 W$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel, o. z [7 S3 H( `, P. a
Ubuntu/Debian
9 h8 M; }0 J8 Z0 Q9 r I) T
$ e" _& r' e2 s4 s2 e) P! K: e$ G5 X- v) V6 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
! `: z" I4 `- Z4 L, y, L+ ` d编译安装ModSecurity
+ T: }0 t: b- d& l; i3 a. rNginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
4 w5 G. Q+ r7 f. A: v% R3 i' k# Z9 ~; S& g
4 n) f0 c% S& B3 ^$ i
方法一:编译为Nginx静态模块6 V" [9 c! c# r7 c: z
9 ^! W. ?! B7 ?4 u
, S' \& E0 w5 M) M3 I. Z编译为独立模块(modsecurity-2.9.1)% b; ~: q. \" k' q; P
$ tar xzvf modsecurity-2.9.1.tar.gz
i* N) w, K# c9 \: a- b$ cd modsecurity-2.9.1/ | [: [, a5 V& `) q
$ ./autogen.sh7 V9 C6 ]% j7 C1 E, Z4 [
$ ./configure --enable-standalone-module --disable-mlogc
6 V; c& Y! P7 a; k$ make
% Q9 H* w/ }/ ]编译安装Nginx并添加ModSecurity模块
1 e3 f0 t) H) A' y/ G$ tar xzvf nginx-1.9.2.tar.gz: q c3 D5 H0 Y) _3 \
$ cd nginx-1.9.2; X) e9 k, |$ Z- ~6 k- b# ~" E) ~
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
/ g+ }" y& ]1 P$ make && make install. _5 |" B% B7 G0 q& O1 a. S
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块6 ^: o9 T2 I, ~: w1 P% o4 f
! u" o. x2 ?' H: K7 S& D. W+ f) ~' Y+ {: X5 O5 t, f- g1 T+ z
编译LibModSecurity(modsecurity-3.0)
$ n' b) u: t* e& d" `4 S: e$ cd /root
- ]' e& P: T* B: F+ D. e4 K$ git clone https://github.com/SpiderLabs/ModSecurity4 i0 h; P7 C: C
$ cd ModSecurity
& e, r3 w2 J# R2 ?$ m$ git checkout -b v3/master origin/v3/master
' G ^( D1 e$ Q. x' s2 g. U$ sh build.sh" r7 O5 q4 F! l! S* D
$ git submodule init
( l5 X2 i6 @6 ~; B7 O, h$ git submodule update. _, A0 h8 k5 J* {- u
$ ./configure
' y6 V! `. Y3 L1 W$ make. H& K# T4 m+ q: N1 `* k4 U8 L
$ make install. U, B! I6 f7 W3 v- H& L
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。0 D( e3 C$ ]. H! ]
' Q% Q% y' _; J; z+ m* r. X: h. Q9 i- }) I9 s# u9 ^# o
$ ls /usr/local/modsecurity/lib
. D, s5 i( M; `5 `- Jlibmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0
. p$ t, ~+ S1 p6 y9 c编译安装Nginx并添加ModSecurity-Nginx Connector模块
" m" ?7 u* x' b9 L使用ModSecurity-Nginx模块来连接LibModSecurity d1 ~+ J+ J4 k4 F' x4 I$ O
) C4 M& n) ~1 h6 K' P2 j. s) b2 l* w) a. q+ @. L
$ cd /root
3 i: u$ b4 ?; T$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
9 M4 ]# Z$ d' r7 v$ tar xzvf nginx-1.9.2.tar.gz2 I, k H! \" m# X/ ?. }" u
$ cd nginx-1.9.2
- u; d5 t& j8 Y$ Z( Q1 Y9 X$ ./configure --add-module=/root/modsecurity-nginx2 G8 ]9 K5 O# N c/ ]
$ make4 t3 c4 b" c4 U
$ make && make install/ v+ z4 j, }& ] V1 L$ H" [9 G
添加OWASP规则2 h7 V8 F) p$ W' {! m
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
# m% r! ~9 k" m* u; [0 `
2 x" G5 J. A& Q5 z& _9 a5 j! m; j! e; M: F9 }% L' \7 G t
下载OWASP规则并生成配置文件$ o4 d' Z2 L, J4 g5 C5 s3 b
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git X+ R! K3 i3 Z$ q8 a
$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/* G( g E1 ~" r7 ]9 Z
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
8 B1 @8 u$ q3 G- U4 A x. o$ cp crs-setup.conf.example crs-setup.conf: X# L, R, \$ n3 m+ ?. y
配置OWASP规则6 Z+ ^% J3 @% y% I, t( O
编辑crs-setup.conf文件) [% Q2 D% m5 ?3 g( N$ G
$ ^ `1 u+ i$ W1 [
' b& W" n+ C) W, U6 f. y( u$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf8 n- K6 m0 `# d
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf( v6 ]/ P1 z6 O6 b: _" ^: u1 D" p `
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf3 n( m" B: k$ V) L' R) w H. \
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
4 j! ^; j! k$ m6 b- L默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。 ^8 G4 G( \- X# G! V; Q
3 E: j: g8 d, m6 {' ]5 {3 x! R
1 _5 Q O) e& P L3 B Q启用ModSecurity模块和CRS规则
) l# |' @5 ?' o8 X* W0 c复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
/ C5 u5 p% A2 g A" L8 |1 r4 q. a+ T' P/ }/ w' m
5 \6 q* M9 h4 m" _( X. I9 L4 C
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。( d+ Y2 H+ r; B& P( z
( i+ A( T- c6 A5 P. o
7 w, A& X5 D7 U/ D h$ cd /root/modsecurity-2.9.1/, j) n4 s b$ q
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf - m$ i4 @$ e# G$ M' j5 n
$ cp unicode.mapping /usr/local/nginx/conf/
3 o1 p c* [. ?# [5 {将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。) O7 _& I4 T" C' k& Q
4 _5 k/ h5 D4 D0 k0 f. f* L
4 Q& H# o. c" z' U
$ vim /usr/local/nginx/conf/modsecurity.conf
' K. L- [5 M; n1 G! w4 z1 _SecRuleEngine On# [% R3 e# S$ b. X2 a# |
ModSecurity中几个常用配置说明:( w, b. h' I' L) k: u8 Q
7 }) A0 P# t; w5 W2 S: P
, e4 l" E8 A2 v0 L1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。# n H; [6 `+ e# C
" o. `4 \, \! B; h6 M3 s, r
* P Z/ n, o9 h8 \2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。4 h) a. Z, @2 A% X
- N6 L- w! c! t2 A: `
4 m% W& p& P- u& f# L- I
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。7 N; P+ I- Y2 \
, C. ~' `" `7 {& H% U
7 \% z/ b' c; n' ]9 \9 u4 q
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
$ v0 Q) k& Q# v* b4 U, ?& m! \
, O1 r% C* M' p) s" T! P
! j0 Y1 C( y& M在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
9 m' s( g5 u* t- B, V9 P2 s; G5 [, I/ \, y- J6 x! m3 _9 _. w- Z
; B: H5 e+ V! Y. b4 J
3.x版本CRS
2 `$ l; Q% ?0 B- D* c" a6 g$ cd /usr/local/nginx/conf/owasp-modsecurity-crs* s2 M4 S3 W( m- W% p2 Z9 p2 e/ ]
# 生成例外排除请求的配置文件" q! c# _/ `4 T& }0 i& l
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf1 x1 U0 C: P+ c- T
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
6 V4 D" U% i% J* p# \+ ]$ cp rules/*.data /usr/local/nginx/conf
9 w3 E: ]) I. v& F! u! D; Y为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
9 `* U/ e9 D4 H+ X: ~+ q
4 A$ W/ s- A3 F: C! {. M$ D( N$ u) o5 g
$ vim /usr/local/nginx/conf/modsec_includes.conf
( ~# z$ q/ q6 y& m: s" e
$ y e% \ J. t# `[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
; q2 }: g, | y0 B" r% k/ p. ]5 l- i3 h( V, [' d9 s' p
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
" {! P. u: t- P! H5 q, m+ E. ^/ o3 ?6 p' v, b& x6 J! v' E }5 H# q
% W( ~) d( ]% f' P) F配置Nginx支持Modsecurity
. E" f' L6 l" U1 ^启用Modsecurity6 O$ y0 P- R$ B# `
使用静态模块加载的配置方法
P7 k) d q* a [4 [在需要启用Modsecurity的主机的location下面加入下面两行即可:
/ U( q4 H$ O* |1 r d+ J
3 _! k# n& X9 y( z d
7 z% Q) O! x" |! ^ w; g* L- e- u1 HModSecurityEnabled on;% {; x5 x" Y5 s# v9 I/ q
ModSecurityConfig modsec_includes.conf;1 V: ]0 L: |' h. T" }- p- o
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。/ p' f' O6 v' k& C& d* E; w
@4 `' B9 A7 {+ F3 Y6 N5 {' E
! P2 D0 L: J8 J$ vim /usr/local/nginx/conf/nginx.conf
4 q, t2 y, d8 `5 H. |+ a* a
! L# A+ H- I* ~4 i
$ h u6 S" {- ]! Z/ V+ kserver {
% e$ K a! F# w( J d$ R! } listen 80;. N+ {2 M1 e9 A6 T; a
server_name example.com;" B4 D8 u2 s. x2 n4 e, Z
y3 k1 H* U1 i7 r5 {
# M0 ~ Y0 m, z
location / {- F' ]6 { c0 ^: A
ModSecurityEnabled on;# {1 L- n! o5 E Y0 I& d
ModSecurityConfig modsec_includes.conf;
& w3 t' ~3 e2 e0 b1 B, { root html; M3 u5 q7 A& z( y" ?/ _
index index.html index.htm;6 ]& ~* t$ Y0 N& h! c
}9 k; s& t( r2 I9 O+ ^
}; |2 l3 [% `: E: v# ]: e* Y1 K
使用动态模块加载的配置方法! @0 G5 e& V% U* |! Y. }, E' I
在需要启用Modsecurity的主机的location下面加入下面两行即可:$ H; C& j- i8 W/ _/ `, D, G
, X8 W# P3 |5 L! J w, z
' p- Z1 J; Y6 w4 O; rmodsecurity on;
1 ] g3 d) e2 Z/ m0 Amodsecurity_rules_file modsec_includes.conf;
0 y& U" }0 n w' @# ?/ G' i修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
! v" N: T2 _/ i8 L0 H* K
# ~+ @; c0 r; r
( M9 k: G* M- V9 V' }4 J. w0 W$ vim /usr/local/nginx/conf/nginx.conf) i z* o7 N& ^0 u
$ W8 @% t( E% M3 P* C
' Q2 \' t* i/ O! gserver {! P- K2 _* u" W& H
listen 80;8 m$ ^( q3 M5 a i2 G, ^; F% K: b
server_name localhost mike.hi-linux.com;
0 x% W. x0 z2 E6 q access_log /var/log/nginx/yourdomain.log;
0 j+ F( |: E+ @# I
% b( y/ Z5 k; N
( c, C+ a. L! ^/ ^3 w( A+ b: Z location / {
5 j U% f. |$ p- K( ] _2 Y- p' n9 e
6 m6 O4 A; A) S9 N } modsecurity on;
! A: s3 F4 S; |% r: a9 @( m modsecurity_rules_file modsec_includes.conf;$ C& p) V8 _' B# e F
root html;2 ~2 a2 j* _9 k/ ?4 m5 N6 b/ d9 h
index index.html index.htm;- A0 I- e g' r: C/ \
}
; n3 H$ q& V* R2 O# Z4 c}5 `, F, I$ T6 j7 `
验证Nginx配置文件! n* I( X" l4 y/ u7 ]& v
$ /usr/local/nginx/sbin/nginx -t
1 u8 ?: Q0 u( n8 s% w% m7 ~6 anginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok; c. d8 }7 E7 z$ K$ W3 ]& ^
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful9 c9 j* c8 l& N
启动Nginx0 I9 l' ], x& Z" f
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
! i" s0 A9 r9 |8 M
: z# o& T9 {9 P" S: g: c测试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能够战胜更多复杂/未知/混淆的攻击模式。
" Y: \6 e; K6 u ~8 \1 Q8 D |