ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。 m5 }, I, b9 Y) {; _; t, [3 b
/ \5 M) \4 t5 e: o! E) L$ d% }0 O; \* ~8 k' Y" A
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。. F9 e% f1 y8 M; {3 L6 r
% j. g/ @' R' s2 d& Q2 ^
0 C6 G. S' x1 N
什么是ModSecurity2 U. n! ?& }5 U
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。6 [& S7 W$ |% g! K T. `/ l" J
2 p$ k: Y; O/ o9 E9 P7 B7 t1 }- r: C
2 b+ X: M( K/ i9 K8 {ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。' F$ a7 i) \/ S! d7 Q
/ m1 W/ e; a+ a* f! ^' X! E
* W' V, F* p& w6 d$ CModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
& @5 y: n# A- N$ g! ?$ ~
4 Y4 X8 `* l$ _7 a7 C. r0 h
* R7 X. t7 t+ B: A7 ?. a官网: https://www.modsecurity.org/
& {# R* z/ j, y3 N' x' ]9 l( v7 h& n) |# V+ H6 l
1 P: u+ z6 x/ Z( t+ L* O- s什么是OWASP CRS
& e& S2 E, I0 o0 ZOWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。$ A! C2 z; S2 q8 @. F8 N0 Q
0 d b- c+ Z5 T
7 c7 ` V5 B4 p$ c; K# LModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。9 W B$ P+ C$ |1 n' v) |
. t) v- z0 I1 c3 Z$ x- p3 v$ L( F( E/ R
HTTP Protection(HTTP防御)4 Z4 x! x$ e( _+ [) q8 g t4 n
HTTP协议和本地定义使用的detectsviolations策略。) C! j M$ N3 `0 B
- i4 {9 Y% Y# x) `! C& D
G3 p0 W3 N) O1 j+ @
Real-time Blacklist Lookups(实时黑名单查询)) M3 |, }$ B4 b/ r+ i# a& d
利用第三方IP名单。
# O: Y* ]- d5 u% K4 h- W- d: ?2 Y
* C6 ]) L( @. L4 Y7 c/ `& F8 }* T$ `# B+ A, F; U4 J7 L
HTTP Denial of Service Protections(HTTP的拒绝服务保护)& ~6 @3 t9 Q- S
防御HTTP的洪水攻击和HTTP Dos攻击。
. P4 X4 k% ?9 l0 B( f# k! n; T/ X
' ?2 j- w! E* z* b4 [2 i: i3 ^" z8 L& q' Y8 o7 I
Common Web Attacks Protection(常见的Web攻击防护)1 m. ~# Y/ A& f$ }9 {
检测常见的Web应用程序的安全攻击。2 S: l }+ _- H
4 ~7 k# h6 h0 o8 a c! r( O
% j& X# Y. h6 f
Automation Detection(自动化检测)
" j9 K5 U$ z6 f9 |8 p* w检测机器人,爬虫,扫描仪和其他表面恶意活动。5 f' U3 W2 n; y
3 R- a) V6 }- W* E
& H; _$ V6 r5 X- Y) r7 \0 W8 tIntegration with AV Scanning for File Uploads(文件上传防病毒扫描)
- U8 B" _4 t+ i2 I检测通过Web应用程序上传的恶意文件。1 j9 Q: s9 C$ v, \9 p- D5 o& z
( b0 ]0 t6 U; s4 c! h( X. ^7 _3 w$ L: O, h! Z8 Y' `
Tracking Sensitive Data(跟踪敏感数据)) b' ?6 j) @: h! ?' K# ~
信用卡通道的使用,并阻止泄漏。
; R, a6 v( G$ N# }" x/ P
: P1 t7 z3 w, w2 ], N% R
. b! M4 Y0 |( A% H* `3 LTrojan Protection(木马防护)9 i; ]4 n: p' b0 e1 ]1 x+ Q
检测访问木马。
+ T/ H+ e4 N* L {1 N! V( G3 n1 O: l( A: o- J
5 C j( q3 @8 ^7 {$ yIdentification of Application Defects(应用程序缺陷的鉴定)
) }! G! x+ q9 o+ q3 `9 O检测应用程序的错误配置警报。
1 Y/ }- ~* R$ r9 R8 o
! ]+ p' m0 h$ ^5 M+ n, @4 }
' O8 ~9 `6 v! E, D0 Y9 U2 R' j8 cError Detection and Hiding(错误检测和隐藏)7 x$ C8 B, ~! H/ |, @" a* k1 a
检测伪装服务器发送错误消息。; G- C; J" X; x' ` y2 \
7 t# w- d) b# ^- z* I+ D5 \, q0 i' _, M! K* }, r$ }& s& U# c P
安装ModSecurity
, C2 h, ] ?; v/ V( o; j' C3 |( K软件基础环境准备
N3 N( p2 y/ \+ d, w2 c; J# k下载对应软件包2 J5 ~9 {/ t+ J$ X
$ cd /root
" Y6 T+ i5 w7 Y, d3 D0 u* ?$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
2 b8 t. _% i+ d, v! Y& h$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz) ^$ P: A0 P! z
安装Nginx和ModSecurity依赖包
/ E- v* k3 X; _3 UCentos/RHEL
; z/ Q5 s) d" D2 v* t0 Y* V- c8 I) A9 Q# H* o
3 G$ s; D) r! z/ B
$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
, x( u- c) y1 ?# g. oUbuntu/Debian. y8 b( Q" r( W: h
$ t3 Q/ T. @) ]. a# U. I) I3 p5 @0 o+ f4 c0 ^4 U( W1 J, Y3 _
$ 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
& e2 b. Z; _! i# i9 d& J编译安装ModSecurity
2 D) f& z) |0 v; BNginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。; T3 }& P, M) p# K2 {4 \
8 a2 l8 I: |/ c( F+ [# i& H
; e/ r1 Q" x7 r# t/ x! }3 q* r方法一:编译为Nginx静态模块8 w5 Z) @/ _; e! c; D
" L; j! F6 i) N' H3 |0 \
, v9 U" V( a" o1 y' ~: P. S, C
编译为独立模块(modsecurity-2.9.1)
H' r2 y" ?# w, s0 Z$ tar xzvf modsecurity-2.9.1.tar.gz/ C! _% x) p2 B
$ cd modsecurity-2.9.1/& D/ l- T" T0 E5 p. V
$ ./autogen.sh% |5 G. r0 s, R) U5 i3 r
$ ./configure --enable-standalone-module --disable-mlogc
& ~3 [3 B4 A. Q6 b$ make
; S% H. o u7 n0 G% X2 j编译安装Nginx并添加ModSecurity模块: f( x! ~8 w+ Y' |3 c4 V
$ tar xzvf nginx-1.9.2.tar.gz8 w% _7 f& m) a! g0 [
$ cd nginx-1.9.2
7 ^4 g* b* A/ ~# v8 `5 J$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/$ ]7 G1 \/ V: o( \, U. }. I
$ make && make install7 `7 o- d) _- t! z& a
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
; ?- M& s0 m8 A* z8 P+ x" Y6 r) e; z y6 E7 V& x+ Q E0 p" |0 \
% s% m9 }& x- m% c: z; F4 s7 t0 q
编译LibModSecurity(modsecurity-3.0)
, B3 F" r& ?# W" }) r$ cd /root
$ N4 b5 ^: n* `( D& J/ q( [( N$ git clone https://github.com/SpiderLabs/ModSecurity: i, [6 e& u: U* E
$ cd ModSecurity5 Y. _% A9 G b2 t: H$ I8 Z1 o/ j
$ git checkout -b v3/master origin/v3/master
6 Z0 |" h$ _( Z; d1 R3 B6 W$ sh build.sh- u9 Z; B% L8 M9 Y
$ git submodule init
# w" ]1 \: T6 z3 D% C# ^& c$ git submodule update
8 I' E- D5 N9 L/ R) |3 J$ ./configure
' u( l0 Z7 j) T" W0 ?5 M( V# _0 J6 L$ make6 O6 P& z% _- S& K1 w0 a- Y& s3 \
$ make install0 \* Z* |, A" A; ~4 @
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。4 t( f4 K( Y/ f* d% l
& b# W9 \1 m9 j n9 w( W
7 M' r& L2 F( t' C$ ls /usr/local/modsecurity/lib
( w* |1 h2 r) a7 g! }; k# ^libmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0/ T4 m% M4 \/ c# E& t/ Z# W2 d
编译安装Nginx并添加ModSecurity-Nginx Connector模块: x: v: I' V" k
使用ModSecurity-Nginx模块来连接LibModSecurity
& h' `' n, S: r, j# t m5 k5 t E+ O3 L; G4 S5 A
# E) a/ a( z: I& f$ cd /root; j: b3 n( G5 L/ @& N5 W0 q
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx' i8 K1 R9 k& F
$ tar xzvf nginx-1.9.2.tar.gz$ e1 v* E6 M `1 n8 q
$ cd nginx-1.9.2
" Z& u' Z5 e4 H6 e$ ./configure --add-module=/root/modsecurity-nginx+ _8 @7 h `5 _7 g$ S% z
$ make
" c* S- P' Z% [1 `( t+ e! Z$ make && make install
; U2 ?4 M) W+ t5 H# W% H添加OWASP规则0 h+ f2 @# k: t* m B' M8 m
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
9 x3 b1 a4 P/ A0 d y
, f& ~3 w) ~& Z1 ]# U# W. N9 h% V. R
1 g: _6 U- i3 L) j, `+ Z, l/ Z下载OWASP规则并生成配置文件
) ~( e# G4 l% k% f( Q$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
: i6 X! _; N, e; ?$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/4 r% ~# g# B5 t, ]8 ~ s$ u
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
; y2 \/ y' t# i$ cp crs-setup.conf.example crs-setup.conf% T1 |6 \; I7 @+ M8 |
配置OWASP规则
0 I8 }& Z1 ~. X! P- m% ~编辑crs-setup.conf文件
" H. I5 J; S# M6 k; z, m* I
4 J0 G3 ?; \ L7 O" ~8 N* ^4 T, _& C- \6 o; n: y) @4 E
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf$ i: Y* L. {, c. [: y4 J
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf( L% s9 H- x* g' A
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf# m1 C% w7 g$ C( I5 n
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf/ i g! R( \' N- f0 J0 o$ a
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
: g! a- _: J( U: K
; `5 x% _; }$ Z0 s0 ^5 L2 e1 h* [: n
9 s2 L) o2 ?* L0 b* v+ k8 p启用ModSecurity模块和CRS规则! |# r. v5 f5 n2 b* R
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
# {7 ?4 A2 g$ V$ e5 y6 s. f4 h6 c! N; i/ Z2 F
8 D) e% I; l/ ^9 K4 D; A6 ^4 I1 ^
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。4 J: I; Z6 M1 a4 F( }
! h6 j: Y0 ^) C |. I* x. J0 r- l; E+ v9 s# P- q5 ?
$ cd /root/modsecurity-2.9.1/9 y. k6 i" ^1 ]
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
& W/ w1 p( d. s( l- B$ cp unicode.mapping /usr/local/nginx/conf/
& d, e) Y2 T& s. f9 C1 }将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。" y1 E( A3 g: M7 x, @4 @
, o' O1 D0 h* I! U( S
+ ?1 E. L+ b& c- b$ vim /usr/local/nginx/conf/modsecurity.conf" w! n0 x5 G7 k; D4 Z
SecRuleEngine On5 Y. \ ]' W& O% H
ModSecurity中几个常用配置说明:
! }4 c" n1 D$ F8 D! ?5 T/ u, l9 c0 Z# f- n) K
2 p4 |& K/ d) T$ D9 w1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。- s3 @7 R6 U2 J* @) a/ M- ^
: s' v3 f7 e) A. x; M- @
- s. t5 }7 G4 ^5 c, q2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
& `- w* G2 X: v& k8 |5 W) E+ y
+ v8 ?7 W2 z6 s; G4 [* J
0 @4 C% s; N! s$ N: p% b, L2 Q3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。* v8 r& r2 j0 @ e e
1 v7 Z* g/ v/ U: t. e
4 N* b* c. O4 O$ c& k4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
8 Z- u* n* P J% N0 U+ S6 ^& N/ r
" _8 Q1 A9 h% i( l7 d在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
T" J/ r$ l% l# L# G( F& U5 s& p+ z" @$ h1 |- Z* b% g
4 q: h8 d/ Y" P. n3.x版本CRS! _5 K* c& \4 n
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
, _. P% k4 y8 l1 X8 x( p# 生成例外排除请求的配置文件, |& j+ U! y# ]" \
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf0 f. X! R# h$ _% v9 Q8 ]7 ~. g8 R9 Q
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf' g; s6 X7 s) h, x8 k
$ cp rules/*.data /usr/local/nginx/conf
+ v8 B1 U8 ]% Q! p为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
+ t$ G9 ]# b* ^" J) I5 T" t3 r) o8 _0 b M# }, {% @
0 h8 o' i! }- g
$ vim /usr/local/nginx/conf/modsec_includes.conf) h+ J L, d1 @8 x
* \$ r5 Y6 C7 k[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 " b) {" O2 G2 @- W0 `8 w
N- g5 h/ _- Q% |/ X
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
) j. k6 F$ W6 D; O- `' m+ t% n. `$ b* P
# o: O7 c/ k( u配置Nginx支持Modsecurity4 q7 m% F* N) Z4 I1 [1 p
启用Modsecurity
O4 }! Z6 ]5 }5 H! T" Y# e) y使用静态模块加载的配置方法
0 e' n j) g2 |% y在需要启用Modsecurity的主机的location下面加入下面两行即可:& N; s! z+ y% S- Q/ M
$ _ `( p. S6 g
1 l- T* w* q% D" V: _$ F" b
ModSecurityEnabled on;
0 A# e; z/ H0 W; M! z* fModSecurityConfig modsec_includes.conf;
7 M) s4 v' {/ l3 x( r [修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。1 R3 z& X4 b7 T* z( ?, t0 y
( g& b- _$ t& J( I. r' w. U" S3 i, S3 ], K6 v) M3 Y# ?
$ vim /usr/local/nginx/conf/nginx.conf; B/ C5 W4 @7 M' p; e
' z2 p, X( C* @" N6 n8 G
" X0 U) B2 U Hserver {
) T* S y, b/ R c! u* a listen 80;
1 O( E( ~, o- s0 G2 H server_name example.com;
0 l" i- X: l. |6 Y4 U* X3 e5 S5 l% n7 J m
; {3 u J& y( n
location / {* M/ D9 Q* X; G$ k4 a2 G
ModSecurityEnabled on;' W6 C, u [$ j- t
ModSecurityConfig modsec_includes.conf;5 }6 S( j8 Y" [3 t s' e5 }
root html;0 h; W6 K! b% q4 s/ O$ d
index index.html index.htm;4 ?. t/ x# Z* S, ^# i
}4 A' ~ H5 u" I
}6 w: z' u, K( I- P
使用动态模块加载的配置方法
# q& G0 ] L# @7 W7 F在需要启用Modsecurity的主机的location下面加入下面两行即可:. g' j' H6 u$ m$ J0 Z2 o+ @- T7 V
3 E- u t! V a& {- ]& A0 z
7 k v& y# n+ X4 A
modsecurity on;
( d9 G7 k% y ^0 j" N# |8 kmodsecurity_rules_file modsec_includes.conf;
2 A5 `. F6 }0 d. G( T9 {修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。: p; b2 v' g+ T, F
N3 n2 r7 |/ T5 j
" }4 X0 x8 T( m6 z9 Y$ vim /usr/local/nginx/conf/nginx.conf
) S, O5 |% ?% C R' P! A. u; Z0 S: m: J" p4 V
9 v7 v3 y5 |1 |0 _( L; a& r$ v9 d
server {1 D0 I& f+ D6 |
listen 80;# T: R' A, w& D. p* l2 B
server_name localhost mike.hi-linux.com;, [. ]* b( g' O) i; i. g( W' B; w
access_log /var/log/nginx/yourdomain.log;9 l) D( R6 N1 A, ?* o% O
0 Z. p1 ^. h. C4 i! W" V3 I" q- g1 x4 G4 q) {8 `
location / {+ U9 U6 w6 D$ W: A
9 d# \* K H) I$ W( h4 \, w, G4 e w; W( U F, P- p6 z
modsecurity on;% r G$ M q, [' U/ ^/ _7 Q
modsecurity_rules_file modsec_includes.conf;
9 _2 F, d2 | ]4 p root html;; u6 y- b: |. \& o/ z" C! D
index index.html index.htm;
' d, @6 S; M8 j1 K}
$ U/ K6 {4 x4 S1 G# {}2 @0 K, I1 x' \7 |0 }
验证Nginx配置文件
8 r* O( E) ^' J$ /usr/local/nginx/sbin/nginx -t
`- s" C) b E: u3 _nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok6 V& S- P! N; Y- X
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
- |$ t0 C' a( F( {$ \( X启动Nginx6 D3 H3 B3 p4 U6 a! E: V
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
& h. G: l- M5 f& @0 o Q2 {* e# _. W; A9 H, @" r) S
测试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能够战胜更多复杂/未知/混淆的攻击模式。
, O( n9 V* w- w0 m* |0 l |