ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
* u# e& g& C+ ]0 x! U# O( H, X: i7 U" k" }# j( U& f
8 N3 S9 N( Z: X8 R4 b# Q% |0 D
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。- G% T# E% H) V+ l, h
7 N1 q P$ d! H+ ~
0 G, b( F; S6 n( t* P3 Q什么是ModSecurity5 H" G( ]. w: B4 f6 w" Q* X4 R
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
1 q+ ?: O4 |1 ~( p% t. W7 Y; t B% c, ^ v3 ~
' u, }% U$ q) q2 w" [1 w
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。8 x+ u) Y2 n. w1 P6 Y. A4 G6 Y- B
: H. j# z! }- H; g# U) G* Y# f% _3 S4 Z; I. [1 ]
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
9 `" M$ y5 `7 Q
- D# _& V. Q# \% S A6 P3 M( o/ v
官网: https://www.modsecurity.org/8 Q( m( w5 M# c' i, ?& e
C# c! H7 `, v$ M% H2 \( d. i5 {' w3 X; h5 K- Y* Q' E
什么是OWASP CRS
5 K& \8 j9 D: V, v t, v! JOWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
$ U+ C# P3 `1 S( v. J6 e3 \- ^
2 w; R i% L1 L+ M7 }
- |3 ]6 F( v/ v& TModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
& x/ s) C1 F& z- I/ t( `# L
9 Y& i' v/ y; @# Q l7 v
; u3 v5 x$ ]! b p3 k1 ]: c; N6 AHTTP Protection(HTTP防御)
2 R. r5 W# a1 O( [. F& W* R% QHTTP协议和本地定义使用的detectsviolations策略。
6 g7 M A0 }4 M' _9 Y' u3 O) y4 _9 k+ \5 D. Q6 B2 o1 n
$ k8 P, G. @5 |Real-time Blacklist Lookups(实时黑名单查询)
) `9 U* M8 _, P) {利用第三方IP名单。
" H+ Q7 g* N. e# [$ r9 i) L7 m E& }7 j7 a+ ]
2 z$ d2 C& c! R, m
HTTP Denial of Service Protections(HTTP的拒绝服务保护)
: ]' ] Z6 Q0 I D+ q( R0 p6 x防御HTTP的洪水攻击和HTTP Dos攻击。# g8 H' u( J2 d" s
+ d' g* F" h6 c
! Z) a+ g( S- @" d% fCommon Web Attacks Protection(常见的Web攻击防护)
% i9 o, ~% w# e# }2 K1 H检测常见的Web应用程序的安全攻击。* _: _6 m5 A' c7 H9 A1 r
+ q% W0 i# B; _' q# a& ]* O
2 ?/ G* C; H, O' u7 s5 NAutomation Detection(自动化检测)
+ S% c: s3 ?- F8 E4 Q" D% y检测机器人,爬虫,扫描仪和其他表面恶意活动。
3 U6 U% V5 M+ \% y9 k8 P8 S- B# q3 z7 M6 d- Y& w8 B
5 j% b7 }* `" E$ nIntegration with AV Scanning for File Uploads(文件上传防病毒扫描)1 v# U( _9 l1 Y9 i% v5 K
检测通过Web应用程序上传的恶意文件。7 {0 X% r: n/ W6 E, |1 s
* a0 @7 @# |( `; i d7 e1 ^
$ A- E! W$ `0 V9 @
Tracking Sensitive Data(跟踪敏感数据)
0 Q* E: c6 z% S* ]$ w- y# y8 N5 \信用卡通道的使用,并阻止泄漏。
- z! }0 [& S# a) p4 S: S. p2 ?9 m* g4 w. O" z8 b4 [+ ~( Z
t6 E2 n$ `2 u$ S& }" Z$ |4 ~Trojan Protection(木马防护)% M$ S# V2 A3 X4 T& ~, Q& V
检测访问木马。
% j4 Z4 V+ h) X: S; d" x
( z. x5 o2 \& g- X2 i4 `) I7 }& v. T) v7 q8 H! n
Identification of Application Defects(应用程序缺陷的鉴定)* P. [- G- B( `, y4 x$ b- D
检测应用程序的错误配置警报。- s& r; C8 ?- `$ i; J: ?$ ]! ^% s
% _( U' G4 y' S4 y& A
5 e; f$ l H8 }( Y$ o6 i& [Error Detection and Hiding(错误检测和隐藏)0 y0 t2 l' I `" a2 K
检测伪装服务器发送错误消息。! v% ~* M1 _9 p1 e7 m1 d" m8 r
; j% S0 x0 C& M( A
2 [ S7 ~) e4 S安装ModSecurity
8 q2 i2 C9 w: w, F$ k% Q软件基础环境准备
8 S) w8 U9 _9 h! o& M下载对应软件包
" \5 n1 L4 k }; B3 \+ ?$ cd /root" f- F3 y1 n1 F# b" {& T# u
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'5 O6 H% y! Z5 t' K$ F/ g
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz& X% f2 Q4 u) Z- O! [, i A
安装Nginx和ModSecurity依赖包& \' ]5 K ^ h, ^. n
Centos/RHEL
( l. P. q* w! @/ K4 y- F3 M6 ]; N1 |: z
1 g \+ ^8 v/ O' @; p6 Q$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
1 d1 K. [. d% F# n3 o. cUbuntu/Debian
" n: x2 ?% V4 O6 P0 _* }3 N, b2 _
2 I8 d1 J5 y M" P) I' o
$ 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* [: {+ x3 M1 t- x- x
编译安装ModSecurity0 \: q+ f: W( p& f( y% \+ Z
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
# G9 ]8 s) V( h3 @% Q3 \9 t; O
) E( h* x0 K% C
7 }% S$ ?" g: |1 n: K% A* f方法一:编译为Nginx静态模块% d( {& f1 z6 T7 a
. g2 u- f* b" @
/ {6 I5 V+ o# M( t2 Z编译为独立模块(modsecurity-2.9.1)9 L" ~: U( w* _7 j$ }' c3 n) a
$ tar xzvf modsecurity-2.9.1.tar.gz
, c7 `% z/ V; e: y# B/ }: s- a$ cd modsecurity-2.9.1/" ?7 r1 t) r* t! S
$ ./autogen.sh
" h! m: T% \$ Q( \3 F$ ./configure --enable-standalone-module --disable-mlogc Q- p) z3 P2 K) L8 P, U
$ make
( Q( q! p9 U7 L. b1 F0 [" x编译安装Nginx并添加ModSecurity模块8 n' {+ f- B. e% Y1 g$ F; |2 n3 L
$ tar xzvf nginx-1.9.2.tar.gz& |$ B" f1 m: H: R q* m# s+ }
$ cd nginx-1.9.2, D9 c! i& }7 y
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/ h0 r0 F# [; I2 {- {
$ make && make install
1 Q) Z7 S; r' |( y; q方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
. Q0 q: n# ^7 {- {1 w/ g$ l' E( q+ Z+ {: |, F9 k
% L- I6 _6 t3 j5 z4 @编译LibModSecurity(modsecurity-3.0)
2 S9 K( t" i, @$ B) E, R$ cd /root
' m. }% r0 j- D/ ^9 |$ git clone https://github.com/SpiderLabs/ModSecurity
( H |& f$ f5 v7 ^# m3 z L$ cd ModSecurity
4 n& Z" A! o/ b. L+ c$ git checkout -b v3/master origin/v3/master
5 \' H2 V0 q: [+ C$ sh build.sh
) [7 g5 b, d5 N: D9 T9 ]" f, t$ git submodule init# P; B3 v+ A5 |& [( U0 D
$ git submodule update0 R; h2 u7 F6 p1 {, k
$ ./configure% N8 R. g: H+ Z5 t7 A9 a- K
$ make5 J. F2 q1 C- f4 j2 m! R
$ make install* L: l9 a' e5 ^3 F( X' u
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
9 Q2 @# ~ s& I1 P8 u0 k
* J, w8 G' A7 G7 ?" w# y7 A' r5 K- j3 i& K# j
$ ls /usr/local/modsecurity/lib
$ ~2 i( P* E2 \0 n& F0 z6 J6 S N2 Flibmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.03 e ~6 s7 B6 S* | e5 `5 y
编译安装Nginx并添加ModSecurity-Nginx Connector模块
2 }! m6 T& W9 T5 j+ W) }5 t, X使用ModSecurity-Nginx模块来连接LibModSecurity) @5 w t$ @4 Y: N4 o% H
( a# V+ ^0 u6 \* h7 j
+ m4 ?$ z8 N3 o4 U& e/ T
$ cd /root
+ z2 V0 V* X: L1 |8 h* v7 A$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
- a$ s; J; R0 I( {5 N! e6 G6 ~3 X1 w$ tar xzvf nginx-1.9.2.tar.gz
8 x9 M2 E$ v. [: Z$ cd nginx-1.9.2% \4 m. W2 \/ [) O0 X6 Z: n* H
$ ./configure --add-module=/root/modsecurity-nginx' M$ X! d9 S" S u2 U7 P
$ make# J6 K7 {1 M0 ]* Q5 f# g6 n
$ make && make install
1 c. O) x, l5 A添加OWASP规则. a9 B& V8 A! @$ g2 w. G
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
% }6 a; a2 {; y ]# G( J* K. y! @8 g3 }- k" N# ^
' f5 N7 Q2 o$ z" g
下载OWASP规则并生成配置文件
4 v5 T: G7 T8 f& ^1 R& Z$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git) H& B$ ]" Y5 D, X: ]/ O
$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/; g; u& ?0 k8 N* F. {
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs- H) S% B4 P1 e6 x2 t5 G
$ cp crs-setup.conf.example crs-setup.conf8 Y- C+ t$ B# a0 \
配置OWASP规则
- Q7 @" G2 E0 K0 _. I编辑crs-setup.conf文件
* \3 ]* q/ }2 k: n8 X3 s8 I( z; `8 Z8 F! C2 h. |: B N8 V( S
0 Z8 b6 F$ x) l& V8 I) e$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
: t8 |% @# s3 W! }1 A$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
0 L& M+ ]' N: ]- D r. i8 Z- h$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
$ p- b" G Q+ ~# |. E M$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
: r% }& i, I" }: f% s' J7 m) z默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。' F6 W4 c# _5 B0 ^. q. g: }
( Z$ s: n& Q4 e+ Z& g$ c: c
& q2 }: K. U! z1 I启用ModSecurity模块和CRS规则% V1 P% F7 D! Y4 s) Y8 r" ^8 P! }
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。8 E; d7 A9 u' y5 k# R
" \8 ]+ [- ]$ `
" b0 d4 N# r1 q1 M! g! ^$ f9 @modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
3 g0 |6 j9 m: l
. D6 s2 n0 Q1 N2 d4 I% ]1 [. ?3 m# u2 ]) V n3 m% W9 F
$ cd /root/modsecurity-2.9.1/
8 K2 Y6 w9 w0 O$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
1 X) j. R) k) Y2 J8 ~ @$ v$ cp unicode.mapping /usr/local/nginx/conf/
9 W$ \# _5 |6 {/ M7 N' u/ |+ M# q将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
: y W+ \' Q% Y. K/ R# q- Q
# }+ o: F4 N Q# q$ g- `4 F) T0 {$ z! m/ w) l5 w. x
$ vim /usr/local/nginx/conf/modsecurity.conf
# X( ~, j. R& j F p6 {SecRuleEngine On( g- o( ]. u) N8 c! l$ l9 H T
ModSecurity中几个常用配置说明:
+ Y" c2 a9 R1 p0 j: q: B/ M/ {" V% x
& |/ M, P, S N. |( j" M; ^
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
3 |2 ]$ C3 G+ K: _5 V/ X" {' H2 i, s4 `: O V0 N4 ^
; h- ^1 ^7 N! r8 n6 F) \- e y" q
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。8 b6 ^* n( A! e$ g
& |; D- i- r1 T! X, `9 l
/ l0 T( O/ G$ F; ?6 X7 E6 r
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。, K7 V* L7 ^/ q6 Y* h4 a* Y
% ^# J0 p* ?0 ]3 j: G
) ^( F( t7 H* L" ]: C0 r4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。) |9 p0 ?. U* w: Z% r8 `! }+ ]
- q1 x% e9 [1 I( k% r; u3 j* q# ~ b6 f0 W
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。7 j r0 q" _6 u% Z' ], L: w; b
I; T* p1 V2 L) Q l4 `2 z( _
8 H9 I& A- U" X8 F+ P3.x版本CRS" I3 o. }9 ~% e
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
. Y9 K- ~3 f1 P6 K9 }$ Y/ a! }# 生成例外排除请求的配置文件+ h: L a* e6 ^% n' N8 ^( i% s
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf j% k1 a- _7 y4 I
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
. }/ Y( W: a5 S5 F) I, H$ cp rules/*.data /usr/local/nginx/conf+ ]2 G, i2 U1 q7 W( J
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。0 j* w! r( d( a2 n6 Q9 Y
: A( Y p( v* X- z% K
; u* `% _, [: u O% y5 O
$ vim /usr/local/nginx/conf/modsec_includes.conf
' H9 d1 Y4 }/ i' z; r4 b0 m$ z" ?7 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 & ]: Y. f" _* e$ Q; Q% M
0 j. s0 z. w# T# q, ~6 }: u: Z
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
% m8 L2 p5 @: S T
* K) i {. X8 ]! A
% V* v, q5 ~/ A1 x配置Nginx支持Modsecurity
, l1 x$ Z* b0 M4 K3 N/ }" k启用Modsecurity
, U, ^$ S( z3 K使用静态模块加载的配置方法3 B$ |( [( u8 `0 u# H3 H/ |
在需要启用Modsecurity的主机的location下面加入下面两行即可:
' I( ?& d; S- L; e! a$ P) S7 Y
% ^) `+ ?$ Z0 J% Z. |) Z- @& |/ L3 |2 s
ModSecurityEnabled on; _1 t. }2 y3 |: P
ModSecurityConfig modsec_includes.conf;7 s3 X R2 p' w
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。; B+ `; e: d: ` K
0 s4 G* Q% A9 O9 f8 i) ?# u' ?3 r9 G2 L8 Q5 N! A9 V& `
$ vim /usr/local/nginx/conf/nginx.conf
* F* s2 Q' S* x, ^7 {* ?+ `" @" r" v3 b; c$ m y! ^) }
/ V3 R" i. M& Iserver {' `/ o. n5 ]: ] Y* \2 e# o
listen 80;
. d5 E) \- J1 j! B% H! m ~ server_name example.com;
' J$ Q9 Y, P/ H
) I8 I b# Y. u9 R6 Q# w
) K5 I7 e$ C" v& e/ h& @ location / {
" {' @. A9 U8 _* p ModSecurityEnabled on;
% d, ~+ y& |5 ^8 ]1 L% G& z ModSecurityConfig modsec_includes.conf;* w0 R. S* t4 y' n3 L
root html;* h0 T+ r, h1 \
index index.html index.htm;1 u# c5 ` u) T" I
}3 Q! u& ?- y( q6 t" k* A9 _
} L& p) o3 r( q, r0 E' t9 D( R
使用动态模块加载的配置方法, Y1 w0 R3 e' l
在需要启用Modsecurity的主机的location下面加入下面两行即可:% T0 m! w* _- E6 U
9 J4 b& z* ]; N+ O2 ^/ B' j
& Q4 R( o5 U. V( M- A( bmodsecurity on;: l" { T( [3 ~+ P; D" k
modsecurity_rules_file modsec_includes.conf;
, F1 s3 C" H! s0 s/ I修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。4 W& B8 A/ `, ?8 M
; V; C6 f8 S. u x" D; s" [( Z
$ vim /usr/local/nginx/conf/nginx.conf6 N* @2 I2 U$ U) L% z* h) W1 i
3 D9 k' E$ e" ], o8 I; K+ }/ P
" a" t5 v* c8 M* P, qserver {: T6 i; v. c/ I/ K% v0 r) W
listen 80;# j, r# n: A5 l
server_name localhost mike.hi-linux.com;
) {+ V1 h @3 \# L1 p access_log /var/log/nginx/yourdomain.log;
* \- t$ }+ U; a: ^ e6 \1 \9 ^/ u l$ A+ ]. V2 P; J- U2 t
0 F& o+ E t& }( q. S+ v% w" D location / {4 ^2 \& e! S/ G/ I9 I
. \1 c! C6 v# A1 H2 @% Q. M# @$ E: O4 K# g
modsecurity on;
5 r1 A4 n7 {! W1 A* B; \+ X modsecurity_rules_file modsec_includes.conf;
; ^5 \5 R& V n' `, B1 Y; c* F root html;) D" U4 ~. e* I n% E. m- Z# r
index index.html index.htm;: R7 j1 e$ c w+ n: x w7 [: r
}$ P, V/ `+ a: Z+ o4 E
}
6 N; p# C; T1 w: a- l) I验证Nginx配置文件
. g8 L/ M' T( o B$ /usr/local/nginx/sbin/nginx -t
7 @! _( m: @ j$ B; }" F3 nnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
* A; W; H) Y7 n0 j& Q1 [nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
E* x+ p) m# o6 g7 z, H4 `启动Nginx! s$ G1 [8 a) \* Q0 Z
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf6 `/ m* p* r5 L& H( j. p; G
4 `& W4 w3 J6 k& u+ ?, O- x9 h测试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& p2 p6 X1 d |