ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
$ a! ?% ^; s4 `! [! A0 U$ _' b, Q7 `3 O8 D; q
' R1 R: E; V& X8 E
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。7 z8 q# `7 Y' t+ B' y
1 [* J r# H0 G
& Y, v4 R. t5 e. } I2 q
什么是ModSecurity/ p! n! v" _) w& ?6 I9 ?3 v
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
6 B) C! P) Z/ H* E0 s! X) M8 X1 A. M! G; Z- A( Q! J U/ w
7 } I+ `5 L+ @0 i$ P5 }+ v# {
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。7 W; D ]1 z+ U: H' m# s
3 o/ @, k0 l' F! n% x% i- A7 r
5 a3 k" m" h) e6 `
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
8 F/ q, X0 g0 [0 G. l1 U
6 ^. s1 q8 r$ z3 |) d5 T8 |
1 G# t \2 L2 B# K官网: https://www.modsecurity.org/& D1 f" n+ t: W# Y
9 `; g5 w" }+ s% L. ~. v5 x$ a+ q" R. g+ `
什么是OWASP CRS
. ~! k4 }! z3 v6 s, h0 _OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
& f" o- K$ c' c
7 v$ W: q& B: ^/ n$ d) C& p* S5 R: ^0 g/ s
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
1 e! W: |! U' d% x. ]; O) r# W0 V% D, R: }( V3 c7 P/ d
% Z" H) A3 r1 |; R5 b5 x( [# h! K" WHTTP Protection(HTTP防御)5 z; y f( P2 n( P6 }" b
HTTP协议和本地定义使用的detectsviolations策略。% | f8 Q+ p- L- q5 C0 @
2 R5 q9 Y, E z
. M7 o% a, q. h }+ d7 T1 x) V
Real-time Blacklist Lookups(实时黑名单查询)% C: H0 G1 I- \: q& ^% Q
利用第三方IP名单。2 E$ E7 ^% @. [+ W! K) r: f! ^- {
. j7 U+ H7 Q, y4 I( s- a
5 d1 c b: s3 ^/ W# ^. l
HTTP Denial of Service Protections(HTTP的拒绝服务保护)% J% W/ ^* q" j" A( J) r
防御HTTP的洪水攻击和HTTP Dos攻击。" s$ z' ^: f: Y* }/ e$ r
. K; J- `% a% [: o! X" N
* O. o, M0 W i( n) JCommon Web Attacks Protection(常见的Web攻击防护)% r' N) v8 Y% W, X8 L/ }
检测常见的Web应用程序的安全攻击。8 {( M& h; b5 D8 @+ W0 W
6 v/ i# w9 T8 E! N5 ^) m1 ]( R
/ h* G9 c# ? v+ y" h7 nAutomation Detection(自动化检测)# P. a M) e" k; ~% k+ G
检测机器人,爬虫,扫描仪和其他表面恶意活动。; V- T: U- G% ]- y2 Z# y
" D. Q2 h( G: D% X9 W
! J9 W9 a9 a, w% VIntegration with AV Scanning for File Uploads(文件上传防病毒扫描) m1 f. n# a6 M
检测通过Web应用程序上传的恶意文件。* g. L# j2 ?% l0 p! a0 }
% E0 z+ ?0 s! ?3 Z2 q7 Q$ B5 g5 [4 s% G# e/ }, \
Tracking Sensitive Data(跟踪敏感数据)# e5 o+ ~8 [ |# F( x
信用卡通道的使用,并阻止泄漏。% Y4 D& S4 Z5 W, h r0 D
0 V/ p7 k/ D" l# C
Y/ f7 j ^* h5 jTrojan Protection(木马防护)6 ]9 K" K$ s% a) B7 P5 I) H) [. r
检测访问木马。
7 z8 D1 q. F' h+ g% p
) F5 Z8 h' @6 V7 q
, {4 B# H7 R8 r U. CIdentification of Application Defects(应用程序缺陷的鉴定)
, A" x+ f# g# {8 \% M检测应用程序的错误配置警报。$ a# w! Y6 T% b' H# k. o
0 H' _0 f: Y: R+ i$ S7 N
: y+ X, `' Q- d# j" t8 K6 q# I( lError Detection and Hiding(错误检测和隐藏)
8 ^9 J0 G$ \( f( r+ A& E* }检测伪装服务器发送错误消息。2 I/ J5 M& `, N1 u& y% w
" h; _! i, [) C1 R1 ]: J
0 @# M' k3 t& o$ t5 d, E
安装ModSecurity
( W3 r5 @: ]. p9 {: R3 y' I6 I软件基础环境准备
+ Z. G: y; c0 K: }/ R下载对应软件包7 U+ x0 ~0 u2 D. L$ \4 {3 E
$ cd /root
: I) ]# ~+ Q' t4 w" ~' {" t$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
& Z4 N. W- M" B2 F$ k0 W$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz$ D: a8 \& M) ~3 V. p+ e9 [) P
安装Nginx和ModSecurity依赖包5 Z* S- p4 |; J6 i
Centos/RHEL
; Y* |" C, O- |/ ]9 o. ~- \$ c# K6 F+ \" }
$ e3 ?2 Y$ {- q6 E1 q
$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
2 t, ?6 x; M+ u+ aUbuntu/Debian
& f, Q9 `3 R- M$ f
8 G- M( G, i1 m- d$ d. k
- S# P. Y0 U7 m6 e$ 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++-dev7 R9 x! d7 V' Y- _
编译安装ModSecurity1 U, D) s4 x9 j- h; _
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
: p/ `- j' n% D) j% \: A
# I0 t ?# |2 {. V" {2 t. j. i9 _8 t
方法一:编译为Nginx静态模块 B j$ _# w/ O
* G" j; |3 f6 }9 g# `' ?
9 ?0 k! l$ R: Z0 W `- S1 t" ~编译为独立模块(modsecurity-2.9.1)
8 N T$ s& {# e( y% P$ tar xzvf modsecurity-2.9.1.tar.gz
* v- p8 b: P% j7 ?& V* S! p4 S$ cd modsecurity-2.9.1/: S2 O) L( I7 X' f6 \7 L2 H& ]
$ ./autogen.sh
1 ~' \! F8 K: z. A$ ./configure --enable-standalone-module --disable-mlogc' A8 j2 x% b. K r
$ make
7 N% K: K8 A j5 x编译安装Nginx并添加ModSecurity模块
! l) A& D. }. j) ?$ tar xzvf nginx-1.9.2.tar.gz
) i, e, c+ N/ R0 ^3 ^" k$ cd nginx-1.9.2* M3 Z- b% F7 o" N6 N5 R4 Z
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/- p: [$ F" R8 Q" v6 O$ y. @
$ make && make install7 q% {' A: t+ V- G" d4 I
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块* E; c, s/ r7 \% r! z
, n% ?" z2 @$ g; ?! y7 I* t( |0 u y; {& r* H' |. W @
编译LibModSecurity(modsecurity-3.0) i% Z/ `- S; C" s6 ~5 a
$ cd /root p' H" w) M+ y2 z1 W5 @
$ git clone https://github.com/SpiderLabs/ModSecurity
, T- e$ p. V/ O9 V8 r5 Z2 U$ cd ModSecurity
8 e9 V/ c+ X5 v: Z$ git checkout -b v3/master origin/v3/master. ~% W! ?- @# F3 V0 v. r
$ sh build.sh# {0 T- |& x, C* }% m
$ git submodule init+ V9 R4 l6 l) J) G7 E* k
$ git submodule update* [# b: r8 _3 [- W& J
$ ./configure
' c+ t+ { u5 N+ V$ make- R/ m! z/ ]+ Z2 Q# K
$ make install
( U' C: W: i* `3 sLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。* |' x# h% N4 |2 Y; v/ `
/ M. h6 v' Q4 |: s# k
: T3 M J8 r3 h" ~- O$ ls /usr/local/modsecurity/lib
0 {, D4 B- B! _, P# Klibmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0( _) S. h) }) z1 k
编译安装Nginx并添加ModSecurity-Nginx Connector模块
5 y) G& D9 c" l% y5 D2 u$ U使用ModSecurity-Nginx模块来连接LibModSecurity
o* {6 }3 t' ^! t
# e8 v i# P5 Q9 E6 }: C- |- ?, q2 C; y
$ cd /root! G l2 D# u6 G& k
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
9 Z6 x9 r7 O' [. f$ tar xzvf nginx-1.9.2.tar.gz( Q9 h" i3 P1 j- d- L& R
$ cd nginx-1.9.21 r: l- v/ b. W$ z
$ ./configure --add-module=/root/modsecurity-nginx, Z$ F4 s7 [* G/ X) l4 R
$ make
9 f) T7 i0 {1 {6 N: A$ make && make install. K' J% ]) l! y
添加OWASP规则- b6 r3 t8 j' G+ `( i" J( s: M
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
, C7 { P4 N9 D
! o% y/ Y; X3 o% }6 m0 G' A' i- \3 e% G2 \7 y
下载OWASP规则并生成配置文件' p4 f8 l: d3 `# w% c
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git$ {9 T# k# z. M% {6 B3 O
$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/
# F, e4 O: \3 i9 U; @& d6 z$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
& T0 w4 }) Q7 b9 o7 a: n9 Q* n1 m$ cp crs-setup.conf.example crs-setup.conf
: p) `, x) p- I( J# Q配置OWASP规则
3 ~! {; P% Z: d' R5 N7 |7 R% B; M( F% D编辑crs-setup.conf文件- W5 t# w. i' _7 ~4 r5 ]8 G. A
n& \! m- e; M: l+ I# q
2 h p4 x8 v3 R% e B; C" ]$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf$ t T3 t; R+ G! o4 A
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf. \; ]& s* r; }7 V5 {
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
& l; ^: ], E4 }& Y' `' _' g. ~$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf. A- b2 W7 D2 \, u- S
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。# q0 x- P/ n; S H9 j" Y6 f/ z
( y( A5 e* s; L" b
# X% u. l1 e2 y6 K% B( \启用ModSecurity模块和CRS规则- j" a- g9 S0 g" t/ k( o/ q
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。4 }/ G0 M3 {% J( @
/ b8 D8 `. X6 B5 M; L/ n' r, [3 ]
# ]# m! f& s. d* smodsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。* A3 K. T- v1 L+ _
- k$ T5 z' @: `: w" z* u* {/ N
. I$ D* P- H4 Q& z, T# Z! W' C$ cd /root/modsecurity-2.9.1/
% L" w8 `/ t; ^" k0 e0 @$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf ) q$ G& i5 ]' `
$ cp unicode.mapping /usr/local/nginx/conf/9 _- ~% G2 L, {) o6 X
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
( U6 g% G# G: C" n1 l p' p R, W. x% ?# `: ~) d. a! c
1 r ~$ e+ |) i+ e# k. I% q9 T6 |$ vim /usr/local/nginx/conf/modsecurity.conf
& V6 k K: U" k$ G3 Q$ X4 bSecRuleEngine On
1 e! j: ~$ b) J6 a& j2 h# \ModSecurity中几个常用配置说明:
2 E2 P7 f& x' j* M3 G* L/ s/ |" @% d
4 d( n k8 }% [! m7 o4 |, F
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
" r$ F4 j0 ~9 H+ {
9 R k1 B6 g9 E( l& l& F$ Q: ?0 x; }% G
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。; l3 K0 O7 ^& _9 O
& [& G9 L: s1 m
, Z+ F; f0 l" S6 q8 m3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
. I: Y0 m6 S% z$ ?2 Q b
/ r6 i" r( O9 H6 L
# \+ F! ], D/ ? x8 V( V) b8 e4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
9 a* @4 m9 R" ?" Z8 m7 U) Y0 N6 G+ \& i7 N' E5 ~
5 O% Q8 i# [! }, r2 z: \# M6 Q
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
( G# O+ t+ s2 o6 @% |) X% u! \
* G4 ~ ~( P" X+ Q
! @9 X2 q+ k9 w( n) E% W3.x版本CRS$ j- h/ O, G A% }/ m( U& m
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
% W. v6 m E3 O( w8 N# 生成例外排除请求的配置文件- Z Z+ b! k* L% r e5 K" Z0 l
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf& l( C+ [. Y* b% Y
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf. x7 p9 L+ U0 Y: v. r
$ cp rules/*.data /usr/local/nginx/conf
4 C" C7 z) |1 s) [/ C为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
4 z2 w# t. n$ y K0 e3 J; g
% O$ \1 S. ]* I7 s* m+ S- `0 F+ ^
! u8 T0 o+ ?6 R: ?3 ]* x$ F$ vim /usr/local/nginx/conf/modsec_includes.conf5 d; y/ U# x: Y# Z3 |
. N" [, z; k% T( P0 z5 t5 M. e
[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 1 l7 E3 X5 X) Z
9 F' z! C0 D+ M注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
M; P- Q* X! M; a- G' j, Q( N$ B2 i( L. k8 V
0 n8 y5 y+ l) b配置Nginx支持Modsecurity
* p& l$ r% S4 t- a2 d& G启用Modsecurity9 f; n# H' i; b7 i
使用静态模块加载的配置方法 l$ l% Y& M. @& W2 ~
在需要启用Modsecurity的主机的location下面加入下面两行即可:9 b( {- g" j7 P0 s2 o
; d z) G7 i1 N1 C, Z4 Y
2 r+ b* w# T4 ]3 ^5 C- {! rModSecurityEnabled on;* o3 q* G% _9 m! p
ModSecurityConfig modsec_includes.conf;- _! ^- }+ R5 B% m. Y
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
3 \. I- }- P; }4 u& T0 B% ^0 _: S9 S; T# r7 U
2 E% b) J" \: r, v$ vim /usr/local/nginx/conf/nginx.conf
" g* E' l& X( Q1 C2 R1 N' N' ]1 X+ b) y: ^' f
. @" f# f3 I0 g5 gserver {0 Y- K. S9 W0 L. `
listen 80;
+ o6 d) N8 x/ {% j server_name example.com;; f; k5 v# [: }1 N& G
) Q2 i2 i9 c" _0 r3 ~; k6 s
( A3 H/ r( \8 u8 u location / {& W4 P6 B4 `9 J! X* {6 t
ModSecurityEnabled on;
q4 }7 n* o' z1 r! u ModSecurityConfig modsec_includes.conf;
5 e4 n) t# z$ D root html;
6 {, h/ S1 n" P( C, g6 y index index.html index.htm;0 O8 p( F/ w! C/ x: G9 _0 c; z
}
: F( r2 [1 _& I; T' y}. b' C9 w4 v+ x$ W4 q
使用动态模块加载的配置方法& n/ ^% {' l" A _& U9 h/ \
在需要启用Modsecurity的主机的location下面加入下面两行即可:
6 X- i( n6 _- S x+ m! h: ~3 S9 R6 i2 Y
+ {' h6 d4 r* y8 d
modsecurity on;7 t: d1 ^' v" u7 `
modsecurity_rules_file modsec_includes.conf;
$ l+ w% `! l+ C/ s" l6 }2 j, h修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。2 k) g6 E. P& V* h6 M N* s1 F
- N1 j$ G4 I5 L" J. w
9 ?) x+ l3 n3 v. J$ vim /usr/local/nginx/conf/nginx.conf
- }: o# p! M1 Q, q& z. |9 r+ M( l% l
' }7 p4 @( u3 @8 a% z$ z
server {$ G4 _7 Y% s1 b4 C+ e$ W9 A
listen 80;
4 W+ T% D" ~1 j3 Y+ q server_name localhost mike.hi-linux.com;
; ]/ O" F: [3 @( \ access_log /var/log/nginx/yourdomain.log;; V4 b, d9 |, S9 G. d
- _$ j7 }( @) j7 b( {% h% Q+ M& y- O6 [8 { `7 ?$ k7 T- M
location / {% T5 `# ~! k( X6 a- h- U. a, Q4 R
. n. o4 g+ x q' z% M0 x" k7 k
/ {) l; q, l: f9 f+ { modsecurity on;
$ J4 M/ w; \; k7 f7 g7 N modsecurity_rules_file modsec_includes.conf;2 |: ^/ B" y/ \( g/ ?
root html;
0 y, p) W* i, W index index.html index.htm;' u% r/ R8 ^2 W, F4 Z
}" R! p, L1 ^+ E2 |' h
}4 y: P0 O' C2 I# Y
验证Nginx配置文件
9 m' f, Z! H" n$ /usr/local/nginx/sbin/nginx -t
M A8 y- }9 Q3 s& r" U$ m( M) Knginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
. z- R l1 ]0 a3 L7 l: M+ Qnginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
2 Q3 W o) P2 ]5 Z启动Nginx1 {0 L7 n# r% L: P4 m8 R
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf& r' Y$ `: m5 ?; }; }
* @& y& U0 U# T8 S; ^9 G i测试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能够战胜更多复杂/未知/混淆的攻击模式。 * X2 ~- U) u. a( ]4 I, x2 r8 B
|