ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。4 h$ p W3 Z2 x+ s
- v, c3 E% {: D2 i; O# C
/ Y$ b: V8 k& I# U' \- A在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。( W* L5 |6 T( y Q4 Q; k' Y
# G% ~7 i8 {' C% m( Z J+ A/ n
; d, `8 s( e6 E8 p& @6 k
什么是ModSecurity1 T; q/ R, |& y9 W. I& Q! b
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。6 n8 s* h5 X$ j, o; o+ A
3 s3 [: H$ ^" \# y6 y
+ t8 a9 G* }. n9 v/ W
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
; R3 |* J7 t( d( y3 d
3 P1 G* e/ P- ?0 ?7 A: V- z" t& L' h4 }0 `- S; z
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
@+ ^" y, v2 R* Y/ B+ l
4 G, o( ~2 {% c$ S1 r) q G; y
* h; f" ]/ n# d$ h# o4 b Y官网: https://www.modsecurity.org/( c% f9 o7 m: N) t- R. Z/ o
$ C" b, Z; k( l8 j
5 S! M% f6 p( y7 m, q+ \0 B& [什么是OWASP CRS; [! _' V% N; b/ p# p, W
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。& _: f1 v6 `5 f* R+ y. U( K7 W
0 e7 m# Z8 p4 J. O
0 }9 w& r3 d* V: `+ H lModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。+ W2 u. J1 k0 R4 b0 {; k2 [3 u% X
8 _ q4 m6 {; }1 ^5 i: Q# X& K+ ~1 }
HTTP Protection(HTTP防御)( G; m3 ]4 d) k) J2 j) Z
HTTP协议和本地定义使用的detectsviolations策略。6 _2 i" U9 U0 \/ f4 Q$ N
6 i9 {% t; {4 V% x
/ W. b+ }/ T' W% K* g+ y. T. JReal-time Blacklist Lookups(实时黑名单查询)
! n' a6 O9 ?" i/ r F3 T* e: r: p利用第三方IP名单。
0 G1 n. h; w h% y a+ E0 q) p
& D# p+ B/ J% Q& G
! K* _( G4 ?! G, i0 K- _# p8 ZHTTP Denial of Service Protections(HTTP的拒绝服务保护)
0 [, \" T5 o( _8 H0 g5 V防御HTTP的洪水攻击和HTTP Dos攻击。
- f# e. b! O( Z9 I
+ n$ m& }7 N7 a6 y/ Z5 H
& ^, a8 t M% o6 F$ L6 B. Y2 cCommon Web Attacks Protection(常见的Web攻击防护): R' E% U' p: {0 @- T$ e' i
检测常见的Web应用程序的安全攻击。1 a [# r4 z' ]; m2 ]& c
$ f. ~) L+ x7 b! {: n U' p# w
' t$ E4 s7 K" ^" |1 Q- ~. O! g+ `Automation Detection(自动化检测)0 y" S: s. M1 c
检测机器人,爬虫,扫描仪和其他表面恶意活动。8 t( K3 Z$ {$ `! H& F1 Z
! f }3 I% C! U) {6 K, f- b; F$ T
! S6 \ e" Z; d
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)
: b6 t7 S0 }7 k6 X. |检测通过Web应用程序上传的恶意文件。
+ g6 X% H* T2 m
/ }( R/ t6 ~6 z3 y4 n4 P } U. S/ |& u5 _2 W) r0 j# R
Tracking Sensitive Data(跟踪敏感数据)
: r( z" o& y% w信用卡通道的使用,并阻止泄漏。5 \% C4 V; @0 ~6 J* p- I
2 _! a, f8 B: p* m' W- p; }. p9 @
8 ^) P& l- ~# J. d+ K
Trojan Protection(木马防护)( x( Q8 l$ \6 p$ [4 i/ R
检测访问木马。4 C9 i6 w1 r: Z2 a' [6 f, B4 j/ H& {
. \# j# [+ H& T% ~
* R# `* o! ^5 ~; @0 i7 \7 BIdentification of Application Defects(应用程序缺陷的鉴定)
; O" Q9 z$ D. T- I检测应用程序的错误配置警报。' b }6 ?; k/ w+ l" v8 B
V2 `1 F5 J) H5 P* ?4 L# p4 a! A' m+ {$ R
Error Detection and Hiding(错误检测和隐藏)% m1 ~* s: y+ ?& ~) V( c# Z6 w
检测伪装服务器发送错误消息。" q, Q- D) f- Y% y. V
+ a+ J- r; ]% C# V4 o% |9 S. G$ Q& H! y( R1 o( s% F
安装ModSecurity
0 G/ E0 K6 j& [+ l6 o: l1 C软件基础环境准备
% ^) h- z& h8 c1 f' a下载对应软件包
2 o, ^; U" C9 R0 D$ cd /root
5 |, Z6 v$ g" O8 K( S% S$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'' ]! j0 B6 F" G1 f* J
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz7 z& A9 A' q/ [1 U* [1 \
安装Nginx和ModSecurity依赖包8 y: J& w ^+ y5 @: }* C
Centos/RHEL
% x1 B b% s% ]
& u1 n, L4 e9 l
- r* R' Y+ |) Q' u$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
$ v0 f# ^* t% Q! @: U5 W* O: bUbuntu/Debian
+ h" J R; R5 A: X1 @4 u4 R" i
5 Q! {: J* k8 ]. ~
1 M: t; ]% [( L- A, D3 @8 D$ 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
. a5 R* h* _* y8 {编译安装ModSecurity9 H H+ V+ a' k1 B# N
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
* Y1 u1 j" c W
8 ~' F4 G3 e3 f. p" J5 b* n( e3 f
方法一:编译为Nginx静态模块4 {2 r J# {' J* m% G$ ?7 P
: p# J$ f( }; _8 ? D0 F1 l
" j' f- D( N7 y& k1 w/ K编译为独立模块(modsecurity-2.9.1): ]! `% G) w& \8 a3 ?: O
$ tar xzvf modsecurity-2.9.1.tar.gz4 y; J o) a$ H* P( }
$ cd modsecurity-2.9.1/
) j' K; ]8 C8 s' p Y- v$ ./autogen.sh
& u0 y" |0 p2 X$ Y* ]/ [* C; T$ ./configure --enable-standalone-module --disable-mlogc
' Q$ f2 ]/ C, Z5 ~/ S* w1 n$ make
B6 U0 T- |: x. ?% c" V3 \编译安装Nginx并添加ModSecurity模块
; e+ u% }5 ~1 M( C% [" q$ tar xzvf nginx-1.9.2.tar.gz/ A- l1 C! z Q0 j: Z- ~* G
$ cd nginx-1.9.2
4 W) V* I) I$ r0 h$ r$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
3 G$ N9 W. l: X: k( T* f3 `$ make && make install
& g$ Z+ Q( Z* O% k. U4 ^( T! ?6 |方法二:编译通过ModSecurity-Nginx Connector加载的动态模块" T, G( K# P% ], s W
5 \- m2 F$ E- ~2 Z4 x+ ?/ p
" x* G8 u s& B# S" c) F$ C编译LibModSecurity(modsecurity-3.0)
( q( v& G% R% l+ E5 N4 W' K/ [& a- m$ cd /root
7 k5 s$ I7 m6 w6 a5 E' b. h5 ?! {$ git clone https://github.com/SpiderLabs/ModSecurity9 \& k- t. e7 A7 c9 Q. w; ^
$ cd ModSecurity( M! F/ c/ e& g
$ git checkout -b v3/master origin/v3/master) n/ H/ Y, Q) w
$ sh build.sh. D5 Y! ^, y: O
$ git submodule init
7 C0 b! G+ }, W1 H. F# E# @2 }( H5 l$ git submodule update" h% q9 D, u* p, W
$ ./configure& n I+ ?4 O- r4 E9 ~( m
$ make" [/ w1 P' b# K8 t, R1 S
$ make install
4 B$ d. U7 H K- d; NLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
1 ~( i3 c2 n2 B
& |8 O# ]& N0 P" T0 x' ?& G+ f6 }7 ?7 F( V2 D4 v/ D
$ ls /usr/local/modsecurity/lib- t% b) p& S8 w! F& Q7 y
libmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0
% b. p$ f5 y5 ~+ z: k% |编译安装Nginx并添加ModSecurity-Nginx Connector模块
' s5 k) v' a5 s使用ModSecurity-Nginx模块来连接LibModSecurity4 V% g' m7 z1 b5 u7 U, l* H
1 ?1 P* z: C8 O$ }
" a# R# F. P9 f ?8 [$ cd /root+ }; N8 x* k' a( ]% P: s+ X
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx$ L' A; n9 |, X3 t9 W5 J' s
$ tar xzvf nginx-1.9.2.tar.gz7 o! ~$ D6 V B; {* _$ r; Y' o
$ cd nginx-1.9.2
: e& y0 ]4 A" R" B* X" Y* u$ ./configure --add-module=/root/modsecurity-nginx" b3 m. @ M7 b# v8 \6 A" h% w
$ make
7 \2 r0 M& o. K. W8 E( ]# d* q. X6 ~9 `$ make && make install6 l, \/ A3 T/ ]& {& p/ P T; O' i
添加OWASP规则/ U2 R+ P7 X0 B1 K
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
+ D% A) \0 F' X1 q, \) C$ \; E5 d1 c
% l6 B5 h' Y& H( w1 z# k+ o下载OWASP规则并生成配置文件
; z9 Y ` _! o* M/ Z4 B s9 a$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git1 I" y$ ]4 G; i9 X0 F
$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/
, V. n( [6 J. a1 D( D1 D6 |# q1 K$ cd /usr/local/nginx/conf/owasp-modsecurity-crs( P% ~ d! f5 v# Z
$ cp crs-setup.conf.example crs-setup.conf
8 K* Y, f- J/ }8 g配置OWASP规则# z7 v: j1 y3 t7 T8 S# V0 V
编辑crs-setup.conf文件
0 M6 h* B% v' V( e) K/ H( v) T2 }8 @2 Q) H6 o$ t+ ]
4 @% l6 q5 |* J' A2 k& z$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
5 ]+ j, J+ t) Q$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf2 `2 i- M% V2 {" _7 G4 U
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf9 H$ m0 X' n" M5 S7 a3 u! r3 n
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
) h4 v/ ?, T4 o5 s3 f& q/ u默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
3 N! L. R/ R( E( k6 v( a' n' O! p/ P% T* U, ?0 g2 ^( o
3 s$ v7 Y2 R5 j8 M6 |4 G启用ModSecurity模块和CRS规则
# Y9 m: p5 N. g9 A$ \5 |复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
& y1 m2 Z! [/ q& c
5 j D; Y: f( b0 i) \* {+ w1 N
( F/ I6 z" w9 S6 p U6 {modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
/ A2 k- R# h1 r3 h7 @$ K. D5 d% V, K6 x# x/ s1 d
- d B5 B8 i; i% l. g" H
$ cd /root/modsecurity-2.9.1/+ G6 D9 }' R, X
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
* M6 V, z' z9 d5 Q0 ^$ c. \3 O$ cp unicode.mapping /usr/local/nginx/conf/
4 ]/ l' w6 ?- f; p4 ]9 d将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
1 U, g" Z1 l' P; B+ _9 t! @: B
: t* W: z1 U- _: w& x6 }2 }# a/ l+ U n. w }
$ vim /usr/local/nginx/conf/modsecurity.conf
9 C( c6 v, M& c fSecRuleEngine On
" C2 k0 I. N% n( \/ r" [1 v, G- u4 |ModSecurity中几个常用配置说明:2 x9 T; |, {* b J0 s
: p; t6 r: o& y5 L, Q1 ~
! o- P' w0 |# B4 s# |1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。# ]% g" l' a0 q; ?3 V- }
: B8 u! V: ~5 {& |. ]" ^2 K
" q0 o4 J9 F- s4 k. x. @# m! u; ]0 Q5 K
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
: g g; B2 F, _
5 w1 \; H) G! ^8 Y( n, H1 u& F& N5 H2 G6 q3 Z2 |2 i, h
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。$ V: i$ [6 M# O4 u4 Q) U
9 ?" o! l* Q0 p2 l, W# v; r2 c
* R/ X" c4 W s; S) h( m) T4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
- p3 P: l3 ?$ N; ]. M4 @3 M: F# l3 K ]9 ?+ W
0 r) q; d: ?/ N9 D在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。5 F8 C$ h# L1 r: X3 ]& I
p, Z3 ^9 |/ w5 b
6 N/ u8 O' e/ T6 W" P' u3.x版本CRS2 o* P, M3 ^" l/ j3 M, q# V9 M) ~
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs2 t) [1 K$ t% g
# 生成例外排除请求的配置文件
" u; ~+ x6 A* s8 u$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
0 z, y8 e$ J2 C' b& s# p$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
4 h1 f i$ R. r6 k" A1 I$ cp rules/*.data /usr/local/nginx/conf; N2 f# Z" b) M0 q7 m
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
0 R! ?, q3 c& @6 s: ~' L$ B5 K" w2 e4 r
3 ?) D; G! D$ _+ A3 d. ^! v) ^( @4 s$ vim /usr/local/nginx/conf/modsec_includes.conf }5 P2 k2 I z( L, V& e( D
; {) U" y1 t0 F) |[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 * u) p( D& c- w" G! e% h6 Q5 f
! u% r& h0 b+ e) Y5 Z+ ]注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。6 ~5 g2 _6 G3 I) U# w
8 }5 P" G6 F, L6 g' _! ~& G% \ {6 z8 m) W' j" t+ B
配置Nginx支持Modsecurity
& A c, I7 C5 o8 c& U! K7 q启用Modsecurity
, H+ b$ V. Y, B使用静态模块加载的配置方法) P9 y9 z$ \6 d' S$ @
在需要启用Modsecurity的主机的location下面加入下面两行即可:# B M( [/ |* h& Q, N- \
; z1 m j0 m$ p5 r. }
8 r7 |' f1 i, b- W5 mModSecurityEnabled on;
2 q! ~0 G" g/ \# B6 V& f1 n: H) qModSecurityConfig modsec_includes.conf;' u, k; I) I# z T" a3 A5 A
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
0 e6 ?9 n# Q, I \( ~# _/ M- t0 o- F& n/ v
+ {" W4 t, x: Y' N
3 v# m' M( P/ ^% b% x$ vim /usr/local/nginx/conf/nginx.conf
) s7 \9 d2 P. j+ x; I
, T) N+ p& ~# f# }( Z9 K( j i! x I+ L( @ A; C4 Z
server {. `8 g3 k& Y) |7 G
listen 80;
$ k2 m. m% [- g2 o) C* W server_name example.com;% `/ Z) c9 i! @! i
8 L- M! q3 i! N* j$ c# G' p1 h/ _9 |% @/ T
location / {/ ~9 _9 @' E+ ^) i* i
ModSecurityEnabled on;
+ b& e1 U' h- a% M1 ^ ModSecurityConfig modsec_includes.conf;+ u0 o j$ r2 \5 b/ \' o
root html;; \; a3 }$ {7 C
index index.html index.htm;! p0 x; f! x* D, P' t: [* G
}; W- b( ^- B( w# S5 f% n
}& T( t0 e* L6 M! y' ~# ~1 t
使用动态模块加载的配置方法5 |9 A# ^6 m+ M7 l" l5 F
在需要启用Modsecurity的主机的location下面加入下面两行即可:
& S& [% |0 r e4 R; u4 I( e, G3 P6 z( d; N1 k8 e: O! Q/ P
$ B9 Y7 ~' t! a% {
modsecurity on;
" g( O' |' w0 O3 o0 s W! ymodsecurity_rules_file modsec_includes.conf;
8 M1 v' E! V4 M修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
; X2 q: q# M" p& c( i' k# ]
! Q! K5 R( v+ a9 U
) [: D& |% c8 F" I5 T$ vim /usr/local/nginx/conf/nginx.conf
1 X# N3 ]+ r2 J; x: Q5 P: u. \1 \1 B8 c' Y6 C. h+ j% ?! o
' z# d, j" x: c5 k! z; C
server {
1 C1 u- i/ O/ W. a- U2 ^# Q3 ` listen 80;
% s, L8 M/ h$ ~9 g* }1 { server_name localhost mike.hi-linux.com;
$ _0 R) K# A" x access_log /var/log/nginx/yourdomain.log;
# M2 k2 \3 H0 ]2 x O! P$ u! ], L4 t2 u I1 d0 I
4 b( [$ U/ b/ a: ~3 L% p. r+ ~ location / {
8 U4 B4 q* x8 S. @. n k& G- E/ y+ u' F/ g
' ^) \3 S4 o- K" u# f* g' ~: P modsecurity on;
3 ~* ]% j' H4 E# @# [0 J2 { d9 U modsecurity_rules_file modsec_includes.conf;2 h1 c7 Y) {& _9 N- N& u5 b% h- Q- Y# k
root html;8 G* a' X: g. t+ C
index index.html index.htm;
3 {. v7 c0 }7 B1 A2 \1 S}
% i* z o$ }5 k* w}
+ y7 }* t# N/ z+ h验证Nginx配置文件1 a. [# l' p C: W
$ /usr/local/nginx/sbin/nginx -t6 K- e4 q( G- K# {/ y0 y' u8 U# ]
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
k" n/ ]7 m, G# C9 v9 J' [nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful- J Z" ^* l0 c0 J0 l7 J8 A
启动Nginx6 _/ K* j5 q" X* e
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
6 ~ ^7 A/ ^+ m, U! u7 `9 L9 ~, { ]) U: J! v
测试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能够战胜更多复杂/未知/混淆的攻击模式。 : q( ~4 r" v! ^* Q8 [$ r
|