ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
+ w |: T0 i4 t* T( ~+ h# g+ x
) Y0 O' h! i3 [: X/ l! x: t: c+ p" c- A0 x+ {6 P/ y& v8 e$ Q
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
. p' S6 L9 c7 D: ?: I; _$ I4 g
2 K' x/ W, l& P5 m' u) q' L! k/ d- S& ]4 ^* }
什么是ModSecurity! l8 ]. e1 {; p4 W3 _* J- B, K
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
5 ]/ J! ]+ a1 ]! T. N |& H6 {; B- G x
* a2 N" n$ ~. M8 @2 J, t5 s: l! ~+ ~' a
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
3 r: B! L/ g0 t9 y4 |) u' {6 U$ q `$ [: @4 G4 K4 @
9 ]% _- C/ h) k- c8 _; [0 [
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。) g' n& P: V3 g
y- o$ l) r% i/ S5 C# t& D+ R
8 w/ t! ^5 T; M$ ]1 T. }官网: https://www.modsecurity.org/
# w' ]/ J7 c2 I3 u$ M. b3 E( o- z8 b( a2 V+ H
1 i/ K" o4 s* e; |3 F' }- R0 _/ c什么是OWASP CRS
. _$ t# a& `& e4 @OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。' c5 G5 r4 m9 O
8 o8 ~4 ~: I9 y1 G6 m1 w: K
0 l6 ^! T/ |3 O* n( n; B+ KModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。8 t# F6 K0 w; C( H1 v7 @3 A9 g2 n
9 @. y' V5 B$ C! P+ n' w! y! m4 z9 ~
) j* B/ V* \* q4 _+ }HTTP Protection(HTTP防御)6 d1 N8 S5 W& a5 t
HTTP协议和本地定义使用的detectsviolations策略。" I6 c' h6 h9 _2 z2 \
6 C! O* ^0 z, C: e) `
6 `9 n1 j' B% N: W8 U3 hReal-time Blacklist Lookups(实时黑名单查询)
1 H' z( i! [: H! \# v: }利用第三方IP名单。
8 N# X& ~6 n6 K/ }! k- l' Q; g
& z) A" N! J8 Q- o* b
4 V9 g8 W! \0 BHTTP Denial of Service Protections(HTTP的拒绝服务保护)2 G, E$ q$ r/ @ S# {8 i1 A, x
防御HTTP的洪水攻击和HTTP Dos攻击。4 M3 `6 ~) r6 Q% r! E; x8 L
+ S4 Q) l3 b& S% D; }4 V/ v
- U& j' K. g4 }0 A/ iCommon Web Attacks Protection(常见的Web攻击防护)
( F" v. q" n& n: y1 s: a9 x' c0 d检测常见的Web应用程序的安全攻击。
E3 E" ~+ R+ r/ Z5 r% D) }/ ]. x1 Q3 i7 Y% r- U
' J( Y2 A$ q5 z8 \ y- w6 C
Automation Detection(自动化检测)
8 O. Z: ~! ~2 X" {检测机器人,爬虫,扫描仪和其他表面恶意活动。
2 z/ R3 p9 ?. }+ K6 G- a5 X n& f& p" L: E6 ?
" {& [6 M- [' \: \Integration with AV Scanning for File Uploads(文件上传防病毒扫描), j' H' ]" ~8 s5 j' _' r
检测通过Web应用程序上传的恶意文件。
9 i3 {) G0 O7 V3 ]3 S+ y5 f/ G1 V% [7 C* G8 E, R3 |2 R* t V
" Y' o, E" I4 d& }, ~. l$ \Tracking Sensitive Data(跟踪敏感数据)
r+ f0 e: K5 v! |% g" T信用卡通道的使用,并阻止泄漏。
+ C. p P' W; e! `: S# {+ U4 N' H1 V4 {0 |: i' q4 Y% I- p- z
# i; v) x: S( S: _Trojan Protection(木马防护), g* E" I1 U+ X. W! s! ^ k
检测访问木马。5 D$ h, N- B- ?* V6 }
' c2 } R/ I' k, N- M) @' V' w1 h2 J6 \8 r8 s9 Z! k6 L# }) ~. J
Identification of Application Defects(应用程序缺陷的鉴定)7 R/ L7 Q( E- g
检测应用程序的错误配置警报。( D: d+ R0 W* q& G+ x( U2 }! o' q
* v9 Y( I! |& O. ?& L/ f$ p" q: t) p) w' u# h# v+ l4 Z0 @: Y% L
Error Detection and Hiding(错误检测和隐藏)
' s. H+ h: A- B2 N0 x, ]检测伪装服务器发送错误消息。
9 |4 o! W. S3 _4 F# p# R5 D& e. f2 r3 g
! Z X( z; p0 \# C% w安装ModSecurity6 w7 Z7 n% v& ?' ^; e( {1 \
软件基础环境准备! Q: P% W9 I, E/ U1 y) g v2 G* o
下载对应软件包
8 b6 F) Q: S' ^$ cd /root
T# m8 H' V7 w4 n3 H0 u' ^$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
, s, Y% T9 E" H0 e, ^9 o1 T$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz
# ~8 B' }4 u- k9 Z+ a安装Nginx和ModSecurity依赖包
3 R0 p3 z* r1 j) P/ |Centos/RHEL6 ~) Q5 `% E' ~' L
4 _ A) c7 p8 E& P. A
+ b& \0 M1 o& O# m. e) P2 M
$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
) u& [; M6 x4 bUbuntu/Debian. z% l' x2 c0 v/ `6 t3 K* [
4 I4 M3 i! n. R
G# c* }+ M# ?+ w: h9 S) B$ 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
8 }8 |' E2 L4 \, s6 g1 q$ s6 e0 c5 W编译安装ModSecurity
7 r/ H( Z- \6 b8 a' q# y; fNginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。/ \% @5 T1 i& P8 {' `5 b
6 E* ]1 r6 r \! H$ w, `
; `( B5 l! [' p9 Y2 M# x方法一:编译为Nginx静态模块
& t* W" V7 }8 A: R" O$ V7 {
7 k+ V1 ^ K" ~5 e: R6 y* \0 U- N9 r
编译为独立模块(modsecurity-2.9.1)
& Z! h0 p0 \8 A$ tar xzvf modsecurity-2.9.1.tar.gz
4 a' j9 W1 Y# Z& |& g g6 K+ l$ cd modsecurity-2.9.1/
) h5 T$ ^, K" w+ [% }2 r0 h. e$ ./autogen.sh
+ E$ x3 M# Q( R* q. h3 {$ ./configure --enable-standalone-module --disable-mlogc' u. a: i+ T8 ?( `3 d* [
$ make
3 d6 i# H9 L) b3 z3 @编译安装Nginx并添加ModSecurity模块0 S' K3 F) O# o* {6 d+ v
$ tar xzvf nginx-1.9.2.tar.gz1 z7 h; K4 p0 H6 U7 o2 @( g$ d
$ cd nginx-1.9.2
; f; z2 K0 \2 C( L, _* t% `- t$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
3 {1 w+ F* K- l. d( I. z$ make && make install
& j( I5 K+ v- S) Q3 ~方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
+ Z. u9 k- n1 r& S7 o( N7 ^* U" [2 J5 \' p# W1 e e1 Q& B
) o0 g, n2 B1 m$ \; \编译LibModSecurity(modsecurity-3.0). `9 q$ o# Z# D
$ cd /root5 u5 q8 ]6 Z# L) x( k: `
$ git clone https://github.com/SpiderLabs/ModSecurity1 {/ y* g3 G9 `& f v; [' N
$ cd ModSecurity
9 k4 V7 \; s: j9 H8 [$ git checkout -b v3/master origin/v3/master: r# g% @. s( V/ F" s
$ sh build.sh
9 t; k# X8 R: q u$ git submodule init. E2 G+ ?- ~! x; z: B" H* v
$ git submodule update
8 h. i/ C, F' h2 p$ ./configure( n P; \5 _6 N+ M
$ make
0 w1 y1 Y( {8 g( C$ make install2 ~% i* N$ A8 o9 R' f. o9 T, x
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
/ ~! y/ X7 ^( ^$ x! s" J4 p* U
/ B2 d. t; F4 \) \+ X: x5 ]' y# k' c$ O1 H& g; b, I
$ ls /usr/local/modsecurity/lib
* n$ M3 r( V' ?. F& E" h, B0 [libmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0
: S0 Z4 `0 ~1 k) `, i. {编译安装Nginx并添加ModSecurity-Nginx Connector模块
; g9 V) H( r/ V0 k1 d7 D8 s6 o使用ModSecurity-Nginx模块来连接LibModSecurity; | ^) Y0 ] E/ G, p7 T
4 H! H# v8 G4 \. n7 T' M$ h8 b& z( f* `" x! Q
$ cd /root
* |; Z6 c: [6 h4 g6 j8 d) U' a3 _5 X$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
4 w3 _, B/ K0 ~: ^# q2 A" i/ X; J' J$ tar xzvf nginx-1.9.2.tar.gz: @' T `* [) d, I& ^5 I7 G
$ cd nginx-1.9.2/ z( E. k" u( e' C% {+ y4 Y6 N
$ ./configure --add-module=/root/modsecurity-nginx
N1 G# p7 D# P" V r; V" I$ make- T! O$ A" l( d. n
$ make && make install( x; w% d0 V5 `" l4 w: q
添加OWASP规则/ h3 f% T, P9 b
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
# J2 w5 }" E, L* Q) ?# p4 H* |
* H# ]1 a( i& |4 Y! j+ N5 G# J$ {1 W2 X1 ~$ j. Z# G
下载OWASP规则并生成配置文件
: y0 w: b) b- B+ Z! B9 ]$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
- C% p3 Z! j# \ T: a! p$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/
8 a& f$ z, V& @3 G4 i2 a2 r( S$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
6 E! j/ n$ I, s( O* a) R$ cp crs-setup.conf.example crs-setup.conf! f) ~& e& U) j# _3 g6 Y9 p
配置OWASP规则
7 v. A: y7 k7 @* U编辑crs-setup.conf文件
0 v/ o1 v! X3 N( p# \* x0 Q& y7 b: h. Z# I/ k
( |8 D! h, ?. x$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf1 c/ n0 m% ^/ Q
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
3 x$ t3 S0 T; V* e8 i2 j; r# [$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
1 p/ z- \! ?+ r/ X6 @! E$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
# n. S4 y& M/ n" J" `0 B默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。8 f% r p! z/ \0 d" X, Z
0 R/ Z" h2 l" D }, z& c
* b+ ]5 E. F; z7 G9 h4 ^; i2 Q
启用ModSecurity模块和CRS规则
7 I; _# C! ]' d( M1 b复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
+ B+ e7 G2 W- R* z% i& c8 E
; s* F5 q7 z& ~
! E n% R+ J* Pmodsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。, r+ O7 v5 Q9 @
: k' Z4 }: p3 p1 V: t
; C8 \0 `3 Z4 s. ~$ cd /root/modsecurity-2.9.1/- X" `. ^$ ^4 P$ U: T3 V
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf - D9 m: [7 _ ?* P$ W, w
$ cp unicode.mapping /usr/local/nginx/conf/
" C; V+ E; S) Q4 O将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
# Q3 ]. b' ~7 P7 [/ ^" f) T
' L3 v' B" q6 P# c- w: T; P/ @3 o6 t+ O
$ vim /usr/local/nginx/conf/modsecurity.conf
' S; A0 A: V5 f! w& h' E# NSecRuleEngine On
' ^$ r8 [2 i8 ~5 _ModSecurity中几个常用配置说明:: w7 L' B/ s: A4 a; D& O
9 [7 D1 j0 r7 U
: ]; x# n* L, u S7 ]/ K1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
, p4 u1 m, c. q/ o0 m8 u: Y, u! W' [2 w! N5 }$ W
6 \9 G$ Q! X1 q/ B, u/ |3 Q2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
* w9 g7 V$ `9 J& O
2 `! S0 X0 y. P P; D1 {: i- \( I6 _7 S$ j4 \
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
q _% b8 l, W& ^ @
! X6 o! y0 P) _6 @2 w6 O
& E7 `5 }/ [7 ~1 ?2 y, c" D1 ~4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
, x5 v0 v6 e0 F |4 z! ?
. s1 k @; M" u1 m( t) ~9 S! W
% u% y( E/ m. Q+ K! l在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
7 I- M. j) \! l! Q5 Y8 U9 K# a1 f* v
5 ^! K# N0 e$ ?, H. ?3.x版本CRS
( |3 ?/ a3 y) v7 ?. l) U; d$ \$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
& V* W" o, J J# 生成例外排除请求的配置文件
1 v$ G" ~! [" h( t2 g& C4 ]$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
# o8 [9 h/ P1 r9 Z5 V$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf* w5 _! k! R9 \& ~
$ cp rules/*.data /usr/local/nginx/conf1 T1 u6 U+ W* a4 W5 Y8 y B' w
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
( M/ R _7 P" v! Q3 N) u5 `8 }: _) @2 ]
4 D* s# ~7 L) ~3 v' x$ vim /usr/local/nginx/conf/modsec_includes.conf" m9 e4 M7 q; P# p0 T, M. {1 J" l u2 N
4 H! T+ d. ]1 o2 k9 {) D1 N# G[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 , H; ~6 F' R: w
: ?! j/ ]; M* [0 C7 d9 c9 c
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。: d! s6 Y1 e9 a9 z3 A6 J- r
+ A2 s3 ~( e& ?2 C
( j( E1 h, J6 G7 I; G配置Nginx支持Modsecurity
. \3 K V6 ^5 L/ t" E* n启用Modsecurity
' B, l0 J5 k( w7 k' B使用静态模块加载的配置方法
, s6 t; `8 f- S( W2 B! E4 _在需要启用Modsecurity的主机的location下面加入下面两行即可:# r+ _- \5 g; n _
# ]$ m* B/ D# `4 x8 Y8 a; H' |
ModSecurityEnabled on;! n# j0 t: }" b5 H4 Y5 ?
ModSecurityConfig modsec_includes.conf;
& W6 j5 i! s# _/ g* v0 F修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。% E4 d* j/ `% g. B. u6 \1 b) b, A
: d! J) S) n# R2 v
9 A3 {2 f7 r+ |( d ]
$ vim /usr/local/nginx/conf/nginx.conf
0 n! ?' Y2 j( S3 s# ~7 M
8 H) w' F+ x! ]3 {6 w t6 A- W; w7 R6 M# X+ Z0 W
server {
+ O& P% L+ V7 R# ~ G) |9 f& V listen 80;
5 u9 C8 R' s V t4 F1 |2 `3 J4 y server_name example.com;' U, g5 g3 R/ K3 Y: ~
6 j7 N9 A3 j( c
# W( B& z8 f3 H2 \( G7 t# t0 p location / {0 k1 p- @ n+ }& C: U
ModSecurityEnabled on;
3 n2 A9 ]8 G+ H" u( S% D ModSecurityConfig modsec_includes.conf;: g, V- N: f: d4 p: n% \
root html;' f ~4 u4 @( l; x9 ]5 B0 f
index index.html index.htm;
' o" a" Q# Q2 d$ v; N* N }; [" Q) K' O5 p; {
}
" A. t5 e( ^5 P; h( S% ?$ M) X使用动态模块加载的配置方法/ @/ a& m( m9 X
在需要启用Modsecurity的主机的location下面加入下面两行即可:( A3 y, j2 K* q9 H. l/ e
' ]* E! n$ D( I, D6 I# m
y4 v" q( x8 d- M# W7 O9 xmodsecurity on;8 |# S% b. l0 T8 ? r
modsecurity_rules_file modsec_includes.conf;
* V6 H V+ s: f4 A( y修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
1 v' t5 k) [+ b. w6 I
0 U( w0 _8 D& C" X
! k+ ~- n$ C) g8 g$ vim /usr/local/nginx/conf/nginx.conf
; \# ^8 D: q8 Y5 V+ {5 y- k' Z' a2 ^; F2 A
6 @& ^, _- l3 L/ G) Qserver {+ d- V* Y+ v0 D# b @& x& i/ B9 k
listen 80;) x5 |9 H8 w$ c0 y4 A; C$ p* G0 z! w
server_name localhost mike.hi-linux.com;, l" q1 y& }- d$ ]4 B d/ }5 r; r
access_log /var/log/nginx/yourdomain.log;
- K8 c7 `% ^: j( T( ~0 d" b( i3 S4 m5 a# h
3 O9 J" Z. q5 E- Q; E6 M$ J4 @
location / {
: ~- U% t$ l9 W5 ?: _/ x7 Z4 W; j( Q4 U- ], W
+ L: J& o5 r1 y6 f
modsecurity on;! ~8 [! J; ~6 ~0 Y
modsecurity_rules_file modsec_includes.conf;
8 v% I3 `" i, @/ y+ }: B root html;; N. v, j R" |! \! x
index index.html index.htm;
" P, s+ a2 |5 L}
. A8 ^3 m- j$ S2 `) i) ?# `}4 ^3 u7 ~! ^1 r- t1 k
验证Nginx配置文件
% H0 p# ^4 z2 I, B4 z6 c$ /usr/local/nginx/sbin/nginx -t7 X$ d l( X% R' n5 a
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok1 Q2 ]! e% L* T+ E' q1 \- Q
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful9 B) @8 d6 g( E9 Y
启动Nginx
5 u. O! e( o1 I# c8 [; W$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf/ e1 V9 l) A9 M, T, |7 W
2 H. ]8 p1 e4 E1 ]6 ?
测试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能够战胜更多复杂/未知/混淆的攻击模式。
* ?# I w! T. R6 D' K: a& L |