ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。* M1 f# [4 q& V# P7 E$ B
; S! I" q3 q" k9 L+ b3 D. c9 s# T3 o5 M8 Z: U- j6 a
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。5 j L6 ]9 ]# A; a' c
6 f+ x. I, r6 }" O, r: P5 i
" K3 f" y) Z3 @
什么是ModSecurity
6 \! A) U/ I1 k; E4 rModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。. S4 F$ H, _' C5 f# o
$ Z$ Y: K* y) p* P Z" K6 X; h
: D6 {2 r8 `9 G/ c7 C2 n
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
* l" ~$ q+ T& x. ^3 m/ t- Q- u$ s/ J
# ~. z' ?5 k: k8 g) EModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
5 W5 M& E8 `& l: C, r
; s4 I$ i6 b5 ]3 E6 H; Q+ ?2 \; W p* r- q7 a' Y9 r. J2 r+ ~
官网: https://www.modsecurity.org// \# I$ d' N7 C1 I$ d
- p. k/ }" |% k/ S% b5 v
: [- P7 u3 z9 F4 r p# ]' k; M$ ^" ?. o什么是OWASP CRS9 }+ t; j0 z2 r8 s X2 \5 `
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
x4 A* n, s* ~" x& ?0 C0 k) _% E- ? a4 _5 \' P; J$ u
* }5 o2 `) T: d, K/ V! Q7 \ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。4 W( S5 i, d7 H
* v2 b( G: S: I( H* [3 ^
, e6 y N: C4 L5 LHTTP Protection(HTTP防御)
' E+ T# t# X8 \" I4 [2 w# XHTTP协议和本地定义使用的detectsviolations策略。
, H: c8 R' j7 X# h. P# K" C
8 {8 y! P/ W1 _- B: |) V2 [
2 c3 _# T4 Y, ^& f" b8 \6 wReal-time Blacklist Lookups(实时黑名单查询)
, g' Z7 [8 Q+ [0 [利用第三方IP名单。2 V, z! n# ]9 @6 `9 R4 H3 f
1 P& R9 O( ~# a4 K
6 ~* N* T# X8 }: z: w
HTTP Denial of Service Protections(HTTP的拒绝服务保护)& l2 r5 r7 p+ u% l$ p; c2 Q8 h1 J/ T
防御HTTP的洪水攻击和HTTP Dos攻击。2 o! g5 U0 w9 B: D' ?# |0 [( J
: D* X: y7 V: k4 A4 e3 f$ p* T
+ W/ X: I& a, t0 z; ^# q' F, T& g( sCommon Web Attacks Protection(常见的Web攻击防护)$ B t, F' i$ F9 k: c$ ^- C
检测常见的Web应用程序的安全攻击。6 \# S+ w6 [% B8 B" y4 p6 A0 v; }
! e' _) ~- }+ z5 W4 v- A
/ \) ~) }: \; \3 Y7 W% P% z
Automation Detection(自动化检测) [4 z, x; Z& M: P* p: l
检测机器人,爬虫,扫描仪和其他表面恶意活动。
8 i& _3 h, j) F# @3 g9 ~
2 a9 ?3 ^+ h0 n1 I; n, h) T
; M7 y& F2 i7 L' wIntegration with AV Scanning for File Uploads(文件上传防病毒扫描)9 ?% x, h$ ?) y0 N: K K0 d1 r/ }7 e
检测通过Web应用程序上传的恶意文件。
) h7 R4 o! G' a( {4 C/ s% R! N( l3 p; R9 t! ^7 L
% f# X5 O3 |5 z" l) v
Tracking Sensitive Data(跟踪敏感数据)
# B5 _0 d3 K* y( Z信用卡通道的使用,并阻止泄漏。
0 \, u, G0 x; O3 Q! g( R' |. J. v2 E* _) \" m. w
" {9 u3 ]1 {. t* C! d$ m$ p! ^6 U- c
Trojan Protection(木马防护)
8 Y$ u0 R- @, _* ?' k/ x检测访问木马。1 Y6 d! \2 q/ F6 @7 K5 d N5 D0 N
* t+ F1 M& c6 d8 W) [. h2 v
3 u9 P1 b' K: n: F
Identification of Application Defects(应用程序缺陷的鉴定)
0 y* i2 L# T5 d& m检测应用程序的错误配置警报。; k7 [( R4 x) L, R
0 l0 f0 d' P" W( s0 C$ {+ W k
3 @' \5 f# @5 P1 j5 i8 ?* O3 }- R9 [Error Detection and Hiding(错误检测和隐藏)9 C7 q% O' T. j" d1 o( s' x" I8 x+ C
检测伪装服务器发送错误消息。; K- g A: W) w6 |3 `- u4 N
. L3 W! w% `. X( X5 \
2 ?9 @+ B. k$ L( @安装ModSecurity
8 H1 C [. a9 ~7 P8 @; v软件基础环境准备8 c; G! u: o4 S2 k3 C2 ^/ }" s* @
下载对应软件包8 d2 }& F' i; S. i6 t/ m
$ cd /root
! i# E3 W5 _4 v" k$ W$ b0 V: m$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
# Y- O# e2 o" l: z; E" i$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz
6 c( i$ U2 e/ y6 B+ [1 d安装Nginx和ModSecurity依赖包+ C5 r1 ~' a/ P% o2 O: B% x
Centos/RHEL1 v' \& V; L0 v3 H9 z0 f& q
/ y* e* X/ n3 O- S
4 d! U1 N% M+ y1 R$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
. I8 l4 j/ W5 }/ yUbuntu/Debian
& O& O4 c! ?" T) U4 U: ]
7 w; |0 J. w; a$ y
# e) G; h: X# d. q7 r! S$ 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; E' g4 c `. f) y" k* L5 g
编译安装ModSecurity
- p& A8 u& `" ]7 sNginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
/ [) ]# |% t" t1 ]: \0 _ l# v8 Z% m$ t- J5 Z9 f
: q" c" S0 t: p' `; `方法一:编译为Nginx静态模块/ c' L# O$ R2 S
2 Y7 \- H1 H3 P V3 A1 j7 E
n* K; ~* A- U% \编译为独立模块(modsecurity-2.9.1)
1 D7 g: ^7 h1 W3 L$ tar xzvf modsecurity-2.9.1.tar.gz; V; B2 ]6 b8 W! F8 K5 L5 q
$ cd modsecurity-2.9.1/+ n( |4 V' M+ o2 I I! N
$ ./autogen.sh1 o1 U* C) F( ]7 V
$ ./configure --enable-standalone-module --disable-mlogc
0 V1 ^ L, D( ~3 _. P, U$ make( Y. B. ]# u ~# k! N/ i
编译安装Nginx并添加ModSecurity模块
3 P& N: R+ f" z6 ]/ u) L* m y& i7 x$ tar xzvf nginx-1.9.2.tar.gz0 C Y, ^9 d- W& N1 z1 G& F& @
$ cd nginx-1.9.24 T; _( w. o# l$ ~( K. g, i
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/& O9 C4 Y7 ]4 Y" j
$ make && make install" R3 ]! G) K0 {5 P0 }) J
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
, I3 ?4 ]! f9 Q! m; F. L
4 X; i4 h. c. P3 N2 Q/ `
2 ~( q$ N) N* L& O$ X' f0 {编译LibModSecurity(modsecurity-3.0)
' Q% @- g4 K8 t% R$ cd /root
% c/ y! U+ X! x7 G `$ git clone https://github.com/SpiderLabs/ModSecurity
/ Q- a" ` U1 ~- f% L$ cd ModSecurity, E2 F* I, N5 F4 Z4 d
$ git checkout -b v3/master origin/v3/master v/ Z6 D/ G8 l6 U3 g7 n- E! C
$ sh build.sh
0 {( s6 O0 ?( x1 C) A$ git submodule init2 K8 y- n5 r5 l+ p
$ git submodule update# j1 T/ b. h# T3 O* P# f
$ ./configure
" e }4 _8 X p8 F0 Q( i0 T, ^% j& x$ make! @- V9 q. v3 _/ ?
$ make install+ X: a* P4 L9 L# _! r$ P0 |1 K
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。5 P; Q$ H) {% |; D5 Q7 y
* C- m# U. n- f2 ?
0 x! H; S" B/ S0 S* d$ ls /usr/local/modsecurity/lib9 f8 O' ?: J! r3 {. J
libmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0
+ _5 A% T8 B( j+ c编译安装Nginx并添加ModSecurity-Nginx Connector模块4 n4 @( @ t% ]
使用ModSecurity-Nginx模块来连接LibModSecurity$ {) b! b0 x5 O. C
! J! L o6 Z! y
& H. c3 L( k# f8 c! L4 i
$ cd /root
7 x% Y7 ^2 e( s c" b3 o$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
( j" S! q$ B. L* n6 S" R, W$ tar xzvf nginx-1.9.2.tar.gz
- [, \* G) [* x9 T, H# F$ cd nginx-1.9.25 H( o5 _( \; J. S3 [
$ ./configure --add-module=/root/modsecurity-nginx
1 W. {% u M. g; ~$ make
% X* N5 E% M* e: k& U# Z1 B* ?$ make && make install
, e) h$ d5 A8 U$ d1 w添加OWASP规则! c! l( ]8 a# T/ V5 M
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。& H* D" u/ A* |. w& g
) m; M# h$ w& d/ Q- F
: w4 @5 H4 ]: T$ ?5 l. P下载OWASP规则并生成配置文件' o8 }- |3 Q) f0 W! o
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
- Y8 c7 Y1 u) K- F) G2 t8 M$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf// t" Y& }1 L" }' p5 K( F
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
5 l( M- X0 w4 S; s2 Z# g$ cp crs-setup.conf.example crs-setup.conf2 ` ]4 n, q; E. b3 i
配置OWASP规则+ ?; a4 R( U3 H- r
编辑crs-setup.conf文件
1 |; o/ t8 ~* j* k5 ^# J! v) w
0 p: }: _. O$ T. C* Z) M) @, _4 B7 Q& I! i. d6 i8 o3 I
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
. m% f: `; e0 V8 u; M9 d$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf+ W$ ]3 a4 J3 [& X
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
4 ~5 `' w( [2 Q# I6 M- y" }7 s$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
& G4 R- u5 Y( Q; k0 Z; A$ o默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。, z8 u* W# w- ^. C2 |
i/ w( ^6 N0 ?. q
; _# }! H& B2 J. f# M启用ModSecurity模块和CRS规则
7 f/ S# `4 f" z, m* ?% p复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
: t1 Q2 F }) y( y( b8 U: j! c w# t1 v( b# E, S) T1 {9 Q* d
4 g* j; y8 s8 C) f
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
4 z+ s: [( N9 {4 s% q3 ~" P- G/ R& }$ E
, p7 r N& B6 Y4 g$ cd /root/modsecurity-2.9.1/# |: c) ?4 I' D( Q
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf 6 j. w0 k, M( z0 v; Q( A% s
$ cp unicode.mapping /usr/local/nginx/conf/
' j! x8 e# l: `; H; `5 U+ F7 ?$ }将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
+ S, U) y3 F7 ~- w# C/ f E7 U7 x' x9 \4 P3 ] L) X: {
' i% c7 r" F4 w7 {4 k2 o( V
$ vim /usr/local/nginx/conf/modsecurity.conf5 b/ G2 i1 Q4 C/ {. ]
SecRuleEngine On
8 F0 D* X" R/ N6 i u7 a; s" OModSecurity中几个常用配置说明:
6 v* q5 d( l, \- B/ ]
9 M, a* P+ a0 u5 e0 V' }
3 {* D' V- i# x) E" p; b( R- H8 A1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。% ~, x5 Q' U+ T% I
! h. S7 u7 B& h
* M, h1 p3 w; j) Z
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。% Y! U' }. P- r( y, z9 E4 {
1 p# k( j9 ?1 T% `8 [2 l& e
7 s7 \! k. B; H! H: x( o
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。 d% s, E+ M' s, z) c& b
; M0 K$ _4 m$ P' q7 F# ~# D
; I! Z0 \1 x( @3 p* _) B" y/ x$ P
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。3 h6 f" x; a9 S9 f
. _1 Q- ^8 q4 A9 R& P2 ?
( \& F, u& d0 f8 J% Q- j4 ^在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。3 `1 l* u( Y+ v4 X" L1 {- g3 R
8 D5 W7 ?: t: M" @& @
- j( ^. K H9 J, Z' l* Y! q/ B3.x版本CRS9 \; Y# ]$ `, R& K- x5 I& {
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
1 u# G, q% a. Z# 生成例外排除请求的配置文件1 U9 r9 [, b# V) i! S" Z" Y; m) q
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf7 F7 _! e( K, A/ m5 M2 _( \5 n
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf" I6 J5 N+ i$ n) A, D
$ cp rules/*.data /usr/local/nginx/conf8 [& [ a- j" u7 }( b# s, u
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。" @3 I7 R! y: S! n) [
) v- B" [( p+ T( G
) S3 I2 Y) Q' d- W$ vim /usr/local/nginx/conf/modsec_includes.conf
" Q u1 ^" Y7 r5 `* v1 t. \9 Q
! ~$ A3 M. o! ~9 r[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
9 H, w* D5 i2 R6 S- y; a
. G% Y4 N% c0 T' Y, h; w2 h4 v0 N, `) J, I注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
9 x( r( n# I* C( I6 j) H- a7 C8 `5 t% n$ L2 k2 F% M9 K& a1 }
9 X2 Z) U( U% e' b( C) X9 f* f: m: |+ g配置Nginx支持Modsecurity
, Z4 @4 w1 U1 i3 \启用Modsecurity6 p4 f4 R% \( \1 u) R- Z, J5 i, d
使用静态模块加载的配置方法* Z7 v4 K: R G2 S) s( P
在需要启用Modsecurity的主机的location下面加入下面两行即可:
( D$ W$ J% w6 S' g* X5 \
: f2 n( w7 y. H% J
8 Y- ?2 ]3 f7 u% JModSecurityEnabled on;) @: Z# q7 B( X: _. ]# ~( }1 q- {
ModSecurityConfig modsec_includes.conf;. G7 h4 {; C+ ?1 A% W
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。5 U8 |6 `- a/ c8 F1 c/ e1 B
9 j) ]4 I: j! ~' H" i+ c8 `* s% F
( j( C$ q. ?* B; n$ vim /usr/local/nginx/conf/nginx.conf) P& i' c9 X, e2 h- d- x' r) C* M( _
& {# `% ?* K& { R
$ s6 @( e _5 ]
server {
( V0 l; M# _5 ~; H. K! \ listen 80;
2 D. i B* P3 q& B, W( K8 Y server_name example.com;9 P" N6 \* Z) H& D
& k0 T3 Z8 n5 ^ W. W& Z6 V/ p* F5 J2 i$ A/ Y
location / {
! ]8 I( _) |* O: \- A3 a4 A# n ModSecurityEnabled on;: t7 p) a# H3 N! q
ModSecurityConfig modsec_includes.conf;& P3 Q) e: y( I, f5 G
root html;5 A2 l- D: O4 U; e4 j5 {' j0 }/ ]
index index.html index.htm;
1 q G$ Y' w7 E# {8 f# h; v6 F }
1 \0 U" M! D( k+ q}
0 X4 X" c4 {4 n3 i# r使用动态模块加载的配置方法+ n8 B; t. O& D8 ~
在需要启用Modsecurity的主机的location下面加入下面两行即可:; J2 Z& y8 q. L/ _
, `3 O {4 R: W# Z2 f
z+ ^* l. ]4 l$ i* |& b- |; r( l8 cmodsecurity on;
, U: Y1 Q2 T2 {" E! Kmodsecurity_rules_file modsec_includes.conf;
+ V* c5 X2 K, E1 p$ X# a修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
. Z( n; f/ c! O, _" D* Z3 k; G! u
- r2 n- E7 q- o
$ vim /usr/local/nginx/conf/nginx.conf
( k; f6 \0 x9 {' _1 @3 u
' i+ K8 h$ q. W8 I* k% z* k$ O' g* q( D c! u6 p% a' H# b
server {
0 r# F- Q4 `/ T9 N; j, b listen 80;
3 Z5 \% P* L7 U8 t9 f server_name localhost mike.hi-linux.com;" \0 r2 A9 M9 C5 v/ F
access_log /var/log/nginx/yourdomain.log;
2 k5 h6 L7 `* z5 y7 G: }, M# s% [: {1 V# H+ V" A
0 a8 ~; x3 V4 F, h( O location / {. E- T3 p* J7 g8 |$ `0 q9 P
% Y/ v- O9 k& q$ W/ r
9 k# i8 K. l; f" z$ t
modsecurity on;8 F v+ d# D4 @ x8 m
modsecurity_rules_file modsec_includes.conf;8 D5 N# U( V' ^/ N
root html;: V, B+ \6 a6 d; w% H
index index.html index.htm;& g; e4 |- T5 A" E
}& h, m1 M0 |5 p H/ V
}
$ k/ V* I; L6 i6 _2 \( h: f验证Nginx配置文件6 H8 A* L; D1 M- n4 T5 v) y7 Z
$ /usr/local/nginx/sbin/nginx -t m) w0 p% n8 ~8 s* @
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok& d- _0 v$ c L* x
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
& O: ?: `/ @7 p$ p# K5 e* D; y, `* v启动Nginx
! Y0 v% Y+ Z8 V$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
9 ?" ~! G' _* c: j9 k" t
4 H* U& r/ k8 C% P8 |测试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能够战胜更多复杂/未知/混淆的攻击模式。
/ P4 n8 q% C4 A+ a |