ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
# B6 j3 v9 ^% t% k7 d, E, Z3 H' k, I) ]) q" @
: K" t: W2 [) }# D' ~& O' U4 ^
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
+ P7 y/ b' @* a. S ^$ h8 s) F
+ \" V8 |- _" b2 S1 x- R' r( e8 E7 d1 R9 _! u4 V' L
什么是ModSecurity
0 x" d5 b4 D" g8 [8 d% ~ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。# [' p0 c! K8 S. m* \3 K- @! s
) X9 k! U$ a8 G
& I& {' I' x/ L: Z9 J* g$ QModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
/ x; S- J- A1 m/ v p
7 D2 c( L( f9 ]& o: J
$ Y* f! e S; ]% Z5 Y [$ ^2 Y' mModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
# F, [' e, \# H5 G
. k* q* ^; T/ M, J0 Z$ p2 N7 ]$ d
官网: https://www.modsecurity.org/ K, M( Z* w8 E: V- P8 L5 I
* |0 ` j0 d! O5 j7 A4 |: I
5 K" L" ~1 i w+ i) G什么是OWASP CRS$ \! M" x* ^+ P* x$ P1 I
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。9 G8 N0 D# D) `" k: `8 Q
; E6 m8 L# |( L) w
* {. I" x; X2 q- e8 u* PModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
: n! E8 Z; X$ g$ G+ V
4 E8 H2 B8 E1 k B+ e! _6 e! D( L V4 u( I
HTTP Protection(HTTP防御)
! H3 ^! C2 c4 S- u& IHTTP协议和本地定义使用的detectsviolations策略。
+ g2 _; c- p; e- T2 [5 N" z, Y V
/ X2 G" l/ Q& J
' D: j2 a! V: QReal-time Blacklist Lookups(实时黑名单查询)
+ e8 N7 M2 h' e+ A& p6 b0 p Y利用第三方IP名单。/ h4 l, q( B3 P. L
. _% T+ N+ T" {4 _9 P/ \+ o/ E1 P8 o$ c% B, A& b) d
HTTP Denial of Service Protections(HTTP的拒绝服务保护)6 _/ Q6 D# M) X9 A3 T" b, k
防御HTTP的洪水攻击和HTTP Dos攻击。
6 X4 w* f( |5 L& w7 Z; x# P
- D% J0 s: F, B. @. I4 Q5 P" i% t+ a, X! t4 V- l
Common Web Attacks Protection(常见的Web攻击防护)
- s: f$ b3 n8 P9 g/ |1 o7 C检测常见的Web应用程序的安全攻击。
% a- F$ a7 I8 F( U7 e
5 }# b* C4 Q$ x9 D+ P! l6 T9 W# p. \* O2 R" y, j
Automation Detection(自动化检测): ^# e* O- q3 A, S
检测机器人,爬虫,扫描仪和其他表面恶意活动。# O" m$ d0 j; R- d" }& Y* j- @0 o
. L8 R7 s- K2 S- t% \, H) y0 d4 x' W9 Y, v7 p( G4 U9 }
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)
& A6 Y# r! D4 l* _5 b. @. T检测通过Web应用程序上传的恶意文件。* `1 }+ x2 D6 X$ v' i6 t
$ [3 b& Q' l" T0 @! ~1 l- N$ |* g0 k4 W
Tracking Sensitive Data(跟踪敏感数据); S/ E+ s9 I4 F
信用卡通道的使用,并阻止泄漏。
' p; u8 `" b4 I' G9 s$ b1 l* ~8 M0 M! l/ X
' U5 a' z5 }# ]6 dTrojan Protection(木马防护)# L- |/ `+ [; }" X3 z
检测访问木马。
2 `6 D7 K, k* Z) p: S3 B: U, d' I8 ]6 I6 y, B& ]
( T2 k0 t+ |: s i8 Z8 h
Identification of Application Defects(应用程序缺陷的鉴定)
8 ?1 |9 d! r( { i! Z* Y7 E检测应用程序的错误配置警报。
3 N4 l! w3 }: H3 m' f8 Y% \1 N7 @4 c6 S+ X9 }2 s! a' ~( n
0 c; v; D0 r9 Y j% nError Detection and Hiding(错误检测和隐藏): f' i/ P4 n% t7 Q
检测伪装服务器发送错误消息。
3 C/ E& s9 V! o! [! |7 G) f, A- C4 D$ }
4 T1 m' Z0 w2 i( L0 k0 T) D安装ModSecurity9 X9 B, ?9 K0 W& B
软件基础环境准备
9 y$ q f9 I7 p% ^& |' }7 M下载对应软件包
: | Y. p" G- a$ cd /root
2 j0 H% g8 J: d9 g" x/ N' g0 e$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'5 c) I Z& U7 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
) }% K$ ^5 U3 t) r* ^+ X$ M; A/ E安装Nginx和ModSecurity依赖包& m; b4 C/ }8 T
Centos/RHEL5 q( y* c6 ]$ w* B6 v* x; S
4 E) K* m# U+ n, h& D
% F2 n& k2 J$ E! O! _
$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel: b- [3 U8 |: _6 i3 d
Ubuntu/Debian7 q: F( x. n g/ v
0 v: A1 m# D& U9 Z" g
2 ]! q' e+ {0 p, }7 p! S) a$ 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) H0 g- h( y, g
编译安装ModSecurity$ Q7 ~- y( N2 w( q( {! c
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
! E0 E+ ], E ^1 j" l ]' M* p1 o* t1 F; |0 \$ s
8 t9 k8 H! b u! L2 \# z! S
方法一:编译为Nginx静态模块
' C% v) [# ?" T( f
5 ]+ t* c7 ~8 \7 U# I4 ^ N8 W; t
编译为独立模块(modsecurity-2.9.1)
6 P5 R& j6 c' {$ K0 [) e$ tar xzvf modsecurity-2.9.1.tar.gz8 Q) a6 v! k7 n3 Z
$ cd modsecurity-2.9.1/4 p/ A9 A! E) ?4 M* L9 f
$ ./autogen.sh
/ j3 m% V k# w$ @# x$ ./configure --enable-standalone-module --disable-mlogc1 u" b% @0 m( N4 @7 k6 k# |* X6 S
$ make
* H: |. R# C- F; W7 Z- N* ]( z; V编译安装Nginx并添加ModSecurity模块1 z; Y8 ~9 O$ z7 o% |
$ tar xzvf nginx-1.9.2.tar.gz3 ^" o1 A( D# D; Z; Z
$ cd nginx-1.9.2( r4 Z: C1 X- u" V! G- M' v
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/) b3 E4 x: A+ O& ^8 ]
$ make && make install4 h- \2 ?; K5 h, J& [" L2 @& [
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块* `# R# N, @2 }. Y! ]
% S5 e2 T* V& k: f, n4 ]( ^7 X$ V% \0 q9 }) {1 N( y
编译LibModSecurity(modsecurity-3.0)7 P" M* U- K% C9 I6 X5 X1 v2 x5 e
$ cd /root9 v; Z/ Q ~. b6 X
$ git clone https://github.com/SpiderLabs/ModSecurity# i9 X3 E% f9 R* S
$ cd ModSecurity
" }9 a6 A d0 L: [0 c2 ~. i$ git checkout -b v3/master origin/v3/master
, I! O* a* J& j$ w9 M! T; B' t$ sh build.sh
9 }( L9 ?* o, P/ L9 O5 R5 P$ git submodule init
# ^4 M* d- R- g" A$ git submodule update
. @- v- [4 Z) p8 E% S6 @5 v$ ./configure$ G( g) U6 z/ L) ^( r- N; ?+ E4 R
$ make6 ^% v( y- _! h# v8 M
$ make install! k! w; W, v2 E, a: L4 \" |
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。$ w5 T7 x4 |/ r& I
( F/ N" J* Q/ R1 T8 Z- a/ V
# q2 Z; J* B6 c) s$ ls /usr/local/modsecurity/lib
9 `( l' a3 w- S1 a' P3 B N: ^2 @, [libmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0$ h3 a7 n) m, _6 ?
编译安装Nginx并添加ModSecurity-Nginx Connector模块0 E9 ]. A! z6 q f/ }
使用ModSecurity-Nginx模块来连接LibModSecurity
, v7 m& v" `' C, k0 ]: q" ` Q4 F ` ]" p Y2 {- U
; _1 L6 v$ f* p- r, s! p: }$ cd /root
0 @' C0 ]- B T9 p4 w3 b- y$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx: G0 ]( r1 w1 k5 g- c: O" B7 P
$ tar xzvf nginx-1.9.2.tar.gz
( `+ {4 A5 [7 K' y$ cd nginx-1.9.26 Q* X! @' f9 n( K0 W
$ ./configure --add-module=/root/modsecurity-nginx5 |, e) |1 b; c) K( |
$ make. `! f W- r7 v: p
$ make && make install; g6 U8 h& L# s5 R: X) u& {: v$ C
添加OWASP规则* m+ \0 h2 J6 ]" V' [! ?
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。/ J1 `+ u" F& \( {: n1 a$ p: J
. n- S; Q I& {
6 n5 n6 P4 c9 g
下载OWASP规则并生成配置文件
% W1 S$ m% T4 p5 B4 W/ Z$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git2 o# ?5 f( H6 X! T
$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/: n7 e6 v, d B
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs, }0 Q0 t- k8 a( t4 @4 E" d
$ cp crs-setup.conf.example crs-setup.conf! o0 f2 R7 a; l+ @
配置OWASP规则
/ S; ?( Y9 x- b, _7 Z编辑crs-setup.conf文件
( `1 g( H) v- `, N0 E8 c# i9 a* ^( z
0 ~$ O7 U, d5 A( P% D# m h4 z# P
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
4 N" _6 r9 [: P$ W, r7 _$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf8 Y, m, C9 t+ J' N7 b
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf% X1 d8 R3 J: B y- z& v% k
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
/ K/ u9 J6 P# X! t. x' |9 n" h1 t# n默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
3 v$ K" Q# Y# ^# Y# c7 j, L5 Z* t6 _. c7 p; M! v. W5 H Q
8 O k+ F9 S) ^0 i启用ModSecurity模块和CRS规则
9 a- F* @& T* O5 I7 Z; k' N/ `复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
1 ~! Z* e$ h3 Y# [* Q3 ]4 z5 ^$ x( h* z: l' W6 I* L
) D' O/ K" O* X, v& Lmodsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
0 u0 N# ]9 e4 k* L9 E; e! |3 |1 ~/ Q( J- \4 n0 S
+ e1 ~ y+ v6 O X' M& j# _$ cd /root/modsecurity-2.9.1/
/ d. c4 n z; t6 W) }& I$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf " u9 b# u/ { k6 J
$ cp unicode.mapping /usr/local/nginx/conf/
% y$ i" q0 R% w8 j u" K% P& o将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
+ M3 h* Q- w! ]6 i' A0 I9 |
, f6 x% s" S. | A, n" a) I# U' r
q6 N9 H$ n; j+ @$ vim /usr/local/nginx/conf/modsecurity.conf
8 x |7 m7 q! m. r9 ~. OSecRuleEngine On
: L* k! n& O; L* aModSecurity中几个常用配置说明:. k9 O) A& d0 L3 C( M0 J0 I/ [! z
$ W" V% i( N- ~! D; D: `" y( j+ n; t& Q5 {' [' y$ v
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。0 |6 p+ a1 I+ s
$ {1 e4 P% i O W/ t
4 ]6 s) b m" l& M! M/ s1 L( K0 u2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
1 s, u2 ` J5 j% ^( A, w" L" x, k, Y: D c) D* |& A
. Q1 S I1 ~) \: l8 `3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。 T8 v1 C& n5 v1 l% \" w
9 F, K" }/ P" A+ q: g" _
+ b! L2 O/ o8 S. q5 p `+ _
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
{; [2 Q3 e# N! }" y o, O" r* n. R8 ~$ [$ \3 P' c
: G/ y6 Y1 X7 s) H5 x1 r4 H
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。2 k! }8 U5 Q) J2 A# e* }. R+ J; R
T1 t, {/ H8 d' i/ A* n
. ] |$ v$ Z; ~& @
3.x版本CRS+ Y& W- ]; `% ?) l* c+ j( e' c
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
: ~6 L; K. v# |- S# q. e# 生成例外排除请求的配置文件8 Q( Q) K+ U* X* W8 t
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf" p8 e0 k5 Z2 r+ Q( f0 i1 o
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
8 k5 ~" I7 |5 ]( H; s- @: u$ cp rules/*.data /usr/local/nginx/conf9 g, D# M& e& `! E' K _$ U
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
) m' \& q9 D9 G# X
3 T; m( G" [( L% \+ c j3 ]: A7 M' ^7 m
$ vim /usr/local/nginx/conf/modsec_includes.conf
# C1 h' q9 g* m6 Q4 g/ L3 S; I1 s6 m$ D/ X: b. |9 x
[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 7 L4 ? F- \/ i1 _
) ?7 R! v5 R4 P. a1 q& l6 I5 w
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。* y, w9 \1 _* u! x% Y( ]
( f1 {3 }9 F, e1 X8 L
! \" g1 F- Y* b配置Nginx支持Modsecurity- o1 t9 r1 e2 N: J2 X, _
启用Modsecurity- x) C+ L9 F* m0 M
使用静态模块加载的配置方法 k4 f* {6 N' A' N9 a B8 J
在需要启用Modsecurity的主机的location下面加入下面两行即可:5 W$ c! i) o: K9 Z9 g$ m
8 r4 W8 J" G5 r& N7 u9 J1 q! ^3 R# ?
ModSecurityEnabled on;
* f3 n( S' @& M' ~' RModSecurityConfig modsec_includes.conf;$ s; r$ t/ [, Y3 d7 R6 e7 N. E
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。9 ]3 x+ {. x# p* B; C
& }9 ^) P: M$ k2 Z. ^
# d7 `' K0 T$ Y7 u! w3 Y9 \$ vim /usr/local/nginx/conf/nginx.conf: ~. D4 U9 v6 ^3 b
' x2 P$ J9 w& u! Z+ c
. h) f5 i4 Z: b- E4 o( \server {" V! @) l) c* p% M8 S& l
listen 80;
% X7 i! V: C4 V8 B! b: P0 ~. x server_name example.com;. m- M. H+ D3 J3 C
2 i. r0 T! K' H+ M
* e5 p# p1 U! B( n/ J location / {
5 d1 v) P% ^9 m ModSecurityEnabled on;8 a3 F* n1 h' d& @7 V9 }, x
ModSecurityConfig modsec_includes.conf;
) t7 |; B& P; B3 l2 s root html;
; v* c. t" A5 G$ y' Z/ m [ index index.html index.htm;
. I9 w5 Q' q* ]2 _( S/ s% u }( I0 [( M) V: @! }
}3 q0 _! ~# L% _
使用动态模块加载的配置方法& g3 t' J7 L- @( v D e- ^. k
在需要启用Modsecurity的主机的location下面加入下面两行即可:
' j4 f$ s+ T9 C* J: J" W* P9 Q8 z6 D! g2 u& K
% W& H: g- p$ h& Z7 x% Lmodsecurity on;: L& O' I8 b, u
modsecurity_rules_file modsec_includes.conf;2 a& D" H. r; x4 T
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。' j. o+ T2 ]7 @8 u1 u
8 A$ b% ^# l& ^# z9 h2 I) }9 d* L) A7 I7 y6 @: n) [3 d, v! n; B6 ?' ~
$ vim /usr/local/nginx/conf/nginx.conf
& L* z) Z2 ]8 i7 ?
! x# W: U$ T' j' I6 E$ \/ u; T4 p. M4 B3 @$ G
server {6 ^; Q m% q, o% w% o& H
listen 80;
) d6 Y& J! }8 l8 v. D server_name localhost mike.hi-linux.com;; }2 y. Y2 Q. x- n
access_log /var/log/nginx/yourdomain.log;% E! s3 x( o7 r2 L
! ^" m1 Y4 a0 }7 \, b' i; x0 P7 M
* k: l9 G) }+ M% |, x4 e) ` Y% c location / {% x4 Y+ n9 f4 v* r" C. C) x
- J$ |& _0 n- H+ d# M8 k5 e
9 |* q) V3 e) y5 z/ G3 l5 h3 F
modsecurity on;. A, w5 {' ?! i1 l! G$ Q; _: B
modsecurity_rules_file modsec_includes.conf;1 [5 H$ R: i- Z! a
root html;
$ u$ Q: u3 G0 h& F9 i index index.html index.htm;
2 U% n5 ~3 j# `# }. v5 N}0 C* S( P! o$ v/ J
}3 p t' A8 @9 x7 _: b
验证Nginx配置文件0 V% E2 ~/ r, m
$ /usr/local/nginx/sbin/nginx -t
# {0 n$ U8 D. F$ G: Wnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok0 ^. o. ^/ X. d3 w4 t) k
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
& J* ?# ?0 h) n) @! m启动Nginx( }- K% \/ K% `5 T$ ~1 `/ o1 \
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf+ E! p/ Q# J/ }: _
8 X# k4 s" Q5 G% q, ?测试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能够战胜更多复杂/未知/混淆的攻击模式。 d/ k$ k% ~" Z# y
|