ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。/ v- l4 |3 y, D) [/ n6 k
! W2 }& t. F, b7 N
6 S$ j3 s6 J* o* L5 n) S0 k: K( d在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。4 V) l9 }9 u7 I
1 U @1 f/ [; ?# p6 h( F: [0 o, f( _$ M
" ?, R8 s5 ]# W. C5 o; V什么是ModSecurity/ g: [4 u5 l0 B7 B4 y( d$ U
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
) Z- {& K+ D6 E! V* d+ m- f- b" B [. X& B( F r) j' M [9 X
$ ~( J3 N# r7 U# \8 WModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
8 ~6 w0 ]7 L# d" ^' T2 {* h' ^$ u7 B- M
. p4 I7 Q/ T( Q7 T( L4 ]0 _& }: f6 I) r5 |
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
J4 F, X" y1 F7 |! A0 A0 a$ K4 B# T( ^' ]
+ k/ a+ A1 n- E* Q1 V& |. ^/ Y+ t
官网: https://www.modsecurity.org/
$ \4 ]4 G3 U8 ? J# e; S
4 w6 H* C# n0 S" l& z' J2 N+ S) Y, @- ~4 f) c" }( |4 G7 t1 {
什么是OWASP CRS3 J* ?. C) p- }1 R/ ]- c6 p
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。2 g0 y- x. i% q+ ^7 p+ X
: v3 |( m( P2 z- T- B8 l
+ T0 _0 S8 M8 Z$ f: f7 U5 J
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
# g5 c) P. g. T/ x' _( w' ]. d2 L3 J( ]# }3 i0 g2 R3 ?
$ x* N2 J7 k. _7 r8 mHTTP Protection(HTTP防御)" ?2 g" E5 W& `# y
HTTP协议和本地定义使用的detectsviolations策略。$ l7 h7 h2 c' \$ l" Y+ s
9 A" g$ u a0 U& n
' f. \& c4 n8 l( L- iReal-time Blacklist Lookups(实时黑名单查询)$ F( N H$ `+ v" Z
利用第三方IP名单。
# |. }8 d( M S. B" Q8 f8 P! k( L' F3 W
7 _& C. K+ n7 K6 O1 m0 x
HTTP Denial of Service Protections(HTTP的拒绝服务保护). S7 [; n y5 s/ \
防御HTTP的洪水攻击和HTTP Dos攻击。
& \1 Q% X1 \0 T; T/ B
% _* j/ M6 A* v( m+ @ T/ n% o/ F& g; H: _" O5 h/ ?. M
Common Web Attacks Protection(常见的Web攻击防护)$ w! X! q6 }2 u+ l; d, t
检测常见的Web应用程序的安全攻击。/ x9 J* a* F8 o4 k# D0 f9 g) i$ R* a
6 q( U8 e" v F' k$ E8 ]0 D
* c& u. W: x/ K; ^( s MAutomation Detection(自动化检测)
/ t9 ]/ S& {* \- [2 e+ L检测机器人,爬虫,扫描仪和其他表面恶意活动。! X0 P$ k" r$ [
9 ?; l' X6 u! ^/ n
! z5 d: z1 M; o0 k/ HIntegration with AV Scanning for File Uploads(文件上传防病毒扫描)
6 q2 q2 P4 P* g+ w1 G检测通过Web应用程序上传的恶意文件。
) T: G# j; j1 g7 I
6 i: ^' f' |/ z+ o8 _% f: m. V, P, Y' J
Tracking Sensitive Data(跟踪敏感数据). ^6 D2 M! {% q% ^9 _
信用卡通道的使用,并阻止泄漏。
$ `( s4 `# S. J) u+ E% E9 G
- [1 j4 {2 s2 I F- D
2 \! l' T1 `: L7 C# w1 mTrojan Protection(木马防护); I' e! W1 l% J/ N. T8 q3 f
检测访问木马。
7 n$ O0 A* B- G4 o8 X! s) t% W
9 D( t6 @1 _; `5 S( `. P! x& E% k. q7 ~: k {
Identification of Application Defects(应用程序缺陷的鉴定)
( P! u: L5 |% Q+ s6 w检测应用程序的错误配置警报。
% O* ?$ M! G+ _
, s8 x' f, m* J* X) x- O% Z
, q5 o5 C5 m a: s2 ]Error Detection and Hiding(错误检测和隐藏)8 K7 c% l. n6 B+ }6 e3 X
检测伪装服务器发送错误消息。; |; U7 y. y, w# ?
( p' O) z8 e6 X8 |2 `. J! z
+ u7 F* T' Z' b! ?2 a9 }
安装ModSecurity
" p# B/ `+ R& a5 ?% C! ^! z软件基础环境准备/ }; f- V. I; q7 [- n% F) O
下载对应软件包( O& A: S1 p5 p% o w
$ cd /root3 }1 g+ U9 p. x4 C
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'% H. W& X6 e! y8 |2 l
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz
* v% j( [4 g; O% i* B B安装Nginx和ModSecurity依赖包
& p- ]! X- J0 F, N- z9 bCentos/RHEL
7 }* ]6 L3 B* H. }6 E+ q
9 W O# X/ p9 w5 d' s& `& V& Z1 s( h2 f4 m/ S: p! W
$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
/ Z3 x3 Z6 A: f0 N2 bUbuntu/Debian
- p, k# @4 o% V7 k l! N S% c4 `# y0 O3 F
* m. E0 c4 q9 ]2 ?7 X$ 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 m4 n! X$ O
编译安装ModSecurity
+ @; Z# r' j- t- s+ ANginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。$ A9 e8 F/ @, d8 n1 W, V' h
4 S( H* Y& }5 C+ R* S, Q( j3 O
) V' ]3 N3 P9 I
方法一:编译为Nginx静态模块
6 N% ? j" k8 m4 ]/ n( T2 M% E7 |2 q; c+ N5 E" w
- \) V3 G) a% ^: Y! ]/ ]/ X编译为独立模块(modsecurity-2.9.1)
+ Y, }8 m' Z0 E# |7 a% a$ tar xzvf modsecurity-2.9.1.tar.gz
9 v7 l+ s: R# `0 \$ cd modsecurity-2.9.1/
$ K0 f9 t" ^5 P$ ./autogen.sh
* K- v) }) H* f l( `9 H& s- b" Q% O$ ./configure --enable-standalone-module --disable-mlogc+ E3 |+ O# S# z1 m8 K5 F9 R
$ make8 |* _9 Z7 K) j: _5 q
编译安装Nginx并添加ModSecurity模块
) Q: c: D# y; r+ z7 V$ tar xzvf nginx-1.9.2.tar.gz" R; g# p' m3 Q
$ cd nginx-1.9.2
L9 V t% I1 m& n- L9 E( Y7 b$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
& l4 f( [: k, E& C+ b' ~( i4 w8 {$ make && make install
) C% l/ _2 H# |) M% I, g. V方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
( m" C. R n2 G8 S/ t: K( h, L V/ t, V1 v+ R
) z$ J5 E8 q7 O/ L
编译LibModSecurity(modsecurity-3.0)
% F* q( H b( U& e m2 ~$ cd /root2 D1 B# E: |- R( D' ^8 |* N8 R
$ git clone https://github.com/SpiderLabs/ModSecurity
% a8 _+ y: b& @$ E6 l( T4 N$ cd ModSecurity4 }' \- [( a, t1 t% L
$ git checkout -b v3/master origin/v3/master
" g$ q5 X( V1 [: A" Q3 X$ sh build.sh
) ?* `. a: R# [8 B4 r$ git submodule init
, ]+ S9 z) H2 t1 z$ git submodule update
1 ~7 ?( b& |! A, y( `$ ./configure1 \# p8 R( _ d7 S5 @& g1 i) @
$ make6 \/ K, ]' ]7 ?. y. W- k5 h
$ make install
$ v$ f% j- z1 M+ W% tLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。) P1 x: ?2 v4 g/ X
+ @# s- A; ?% I7 j- z
+ N8 q: v/ s$ J' K" Y, B1 ?$ ls /usr/local/modsecurity/lib1 ?( Z7 k7 A0 G2 l
libmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0. L. C# H( G3 M+ }
编译安装Nginx并添加ModSecurity-Nginx Connector模块0 M L% P; ~1 r4 N) c: J8 Z
使用ModSecurity-Nginx模块来连接LibModSecurity
8 y# f9 N# I; |* o+ I Y8 @3 O/ [8 q
/ t% }" n# \2 U. T/ \: U% v
$ cd /root4 W! V" V$ [+ a+ @
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
- K8 W( R4 |- D; k( p2 n) C$ tar xzvf nginx-1.9.2.tar.gz
6 X, Y; d0 V6 S8 Z5 D2 k# V$ cd nginx-1.9.2% A r8 ]# h- [ W2 k! f. w
$ ./configure --add-module=/root/modsecurity-nginx
- ^6 ?4 _( o! ~, N+ e+ H$ make& P, O2 t% d) D+ Y4 f
$ make && make install# h! h) \& m3 l- X
添加OWASP规则
3 j* B5 z- r" g9 g X- @ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
/ n- @& p* q' \: p& p& \3 x6 A
/ Z5 l& U; {: d# f$ E* T2 V k3 X
6 e3 {9 Y+ j2 L4 c& F下载OWASP规则并生成配置文件( J9 l0 F- b* g2 q0 J
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git- {/ {* q# H5 s% }
$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/% F. }% _' U) O2 {* P. D7 a
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs# X# d6 }# I0 B6 ?2 ?+ K! M
$ cp crs-setup.conf.example crs-setup.conf. `6 ?. r: E8 B
配置OWASP规则9 v0 h2 t& `! a; E# F5 L
编辑crs-setup.conf文件! M; L0 m9 n- E2 K! }7 j
$ W* V i+ V& M8 R8 R
7 U) X. r& ~/ f- q$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
* M4 p8 h7 t# D$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf3 }( G8 K8 B b7 d
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
9 Q) v* A$ y3 W6 y8 H$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf9 J9 k+ S; J( U! O6 e4 c
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。" S* j2 O/ z+ q) G. a: O- f
/ t4 J, T( T# B2 b
* }( k0 L- O: m
启用ModSecurity模块和CRS规则
) A( v2 k4 `% J; \3 s复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
; {# F' q- v! ^
8 b" l$ o9 \/ d3 m1 _! f9 v; g0 Y$ f( g4 y `" a. y# g/ K
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
" U# t0 N0 E* o( ~3 N2 d
( p. j: B k! z
! _9 _( l' F4 D* ]- ~$ cd /root/modsecurity-2.9.1/& L) r" _7 a; O4 O. X3 R# A
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf / z+ |- `# o- \; C3 I. V4 A. ^
$ cp unicode.mapping /usr/local/nginx/conf/. a( Q3 c/ `6 ^; G. [8 a5 n# ~8 M
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
: F( y8 G( X; p! T+ G$ U, A$ ]& C" _: e7 Y/ v, V
8 M+ Q# { t5 k$ vim /usr/local/nginx/conf/modsecurity.conf
6 {6 _& v9 R6 KSecRuleEngine On
. `# x; u# j% J/ ?; q: PModSecurity中几个常用配置说明:: O/ C! q2 k7 s2 |. `) _
& m+ P* P/ x3 n2 J/ y% u* k7 b3 `, i( ^1 H# c, z
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
0 D( U7 c# A# O( N
& z- I. }! O! N {! c! U# B/ s+ O: i
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
$ H% {( w- ^& T6 B, ^& I
% w% u/ r4 T9 ~4 |2 P# G+ J9 ?/ R% p% A' d$ J \
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。 K, P% {3 X) |! x+ E5 _& F) _
6 _; C! q* d! y9 m
' E/ E! k& ?4 ]# l3 x% R. d! R
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
3 {, r% r9 r, u( T4 E7 }7 ^; C
4 z. e/ s7 b+ H% B5 Q# Q' A0 H+ I: x( l( T# |
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
5 v* Z( U) z8 c: o. z% G. j& M' I: d5 L9 h; m- X# n
. g3 I: S7 |! W: ^3.x版本CRS* ^7 ]+ v' h/ }6 W: r
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
: G( M9 H3 j7 S- l# 生成例外排除请求的配置文件
( I6 [/ P$ S( @2 O$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf' f: V7 Z' T$ [/ X, M
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
1 L4 C6 v3 |0 x0 N9 d; Z7 z( ]: h$ cp rules/*.data /usr/local/nginx/conf& J& C, c5 c# Z1 P' F! U& h
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
9 G& A* k8 O0 ?' P9 q$ S' P! c- t h! z! }- N9 z
" E4 X0 t/ C+ u, }
$ vim /usr/local/nginx/conf/modsec_includes.conf7 K' ~! ~/ k5 l
6 e7 f* _" E1 K; R3 k. t# G' R0 ?
[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 + }! T/ x8 V7 ? ^4 M
# x2 ]' v1 F8 A8 G2 I注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
! y7 C, |' C2 U/ i1 w# s' @, ^: M# |, V. Z; \- {
[- M- r! H+ P& a配置Nginx支持Modsecurity" Q( a- s) Q/ i8 z* G5 m+ S& E) {
启用Modsecurity0 l5 K u2 v8 E) f! h
使用静态模块加载的配置方法
3 }' y% b8 G$ V% K; ?在需要启用Modsecurity的主机的location下面加入下面两行即可:
( o1 I% w8 F# {$ ^8 S0 U4 `
8 z9 E, u# R4 `; q4 a v6 K6 w0 U' D' S2 f+ a+ g$ s$ w' U
ModSecurityEnabled on;8 n' B. Y/ w4 u6 U ?0 m) r
ModSecurityConfig modsec_includes.conf;
6 u. u3 b7 O0 A4 c* f+ v修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
) @+ x- _3 e. g1 L% ^3 e5 Q: x, c7 K! p2 T5 h$ B" x
0 I. R7 w- v& `) l: m: Q: x$ vim /usr/local/nginx/conf/nginx.conf$ u( m; h0 h0 l9 T
( m9 Y; n# [4 A" K( H4 L9 \4 q8 N/ K4 T+ x( ]$ g
server {
4 A$ q) J$ ~- y1 m7 U0 E% X7 n listen 80;
0 `$ G3 {. T* k. q7 l N) L" v2 @ server_name example.com;
( c% R5 [* _' x2 f; ^0 S3 c% }1 _" J
& g- h8 |% G; ^& p/ E4 s# ^
# E# W U, K( S8 q1 _ location / {
0 a0 F% w9 g( {2 I$ M ModSecurityEnabled on;
1 v; |8 }- u. `$ U ModSecurityConfig modsec_includes.conf;
- s) ?7 a; m- {5 L6 x8 E& t- I, ? root html;
- ~" c$ _1 w1 ] index index.html index.htm;
- Y9 w2 m, M9 A' h. ~! X- e }' z2 ~" z$ y6 `! r* g. K S
}
z0 m, Q: E- j6 A, ?9 S# \使用动态模块加载的配置方法
2 t: r- H( ]# W& o在需要启用Modsecurity的主机的location下面加入下面两行即可:
9 u3 C3 i1 c2 G! R6 L! m
% W* U$ F2 G# L. J0 a7 y
4 b$ `3 z3 L8 v/ f, u4 Q+ _' I3 Amodsecurity on;
/ D/ Z% I: ?9 ]: gmodsecurity_rules_file modsec_includes.conf;+ V9 G# V) P, t( @/ A2 Y+ V3 V
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
$ O4 Y9 I4 d5 \4 c1 ]- Z5 q4 R( F% P1 R; m- I% O6 `. m
5 }% q4 L* T4 }# i
$ vim /usr/local/nginx/conf/nginx.conf
* X0 s& R1 \) E$ E# h
0 o' }3 K$ f9 y" i
: |: J1 p. y1 B" C0 K# ]3 i3 t" xserver {
' s! U/ u9 {9 h7 ^$ P p' X listen 80;
4 ~: |3 x$ p; K' s2 b server_name localhost mike.hi-linux.com;4 |' n& @0 r4 U0 b6 B; f
access_log /var/log/nginx/yourdomain.log;
; @: Q+ J4 d/ X# P. x
* Y6 v, y/ l! J
2 X: p% _0 B- o' f: x* P% L3 g- s location / {3 l! d; n, V4 ]
& D8 ^2 Z, w6 f
6 i6 U7 p" C! T! G& T; t( K% F modsecurity on;: o [7 K n/ R" }) N. f& E2 ^
modsecurity_rules_file modsec_includes.conf;
& t- [0 w5 W c8 ? root html;- U7 G5 n8 T, C. J7 Z2 K$ v
index index.html index.htm;
- z! Y! X' X3 J5 w5 o9 _8 x8 C}6 U. q# T/ b# G" L4 ~
}
6 J* i5 c y, ~2 y8 L$ f- M验证Nginx配置文件
7 s- F0 _' G1 d( o% c$ /usr/local/nginx/sbin/nginx -t
) o& k1 ~4 C }) t0 t* D" c; Onginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok2 b* I4 p8 y& B& e. T
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
* _/ _: W4 }5 O* y启动Nginx
) ^) `) x9 s& R* M: F$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf. H8 O$ q( O- Y) ]
2 d3 O: B! l, H2 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能够战胜更多复杂/未知/混淆的攻击模式。 2 F+ B$ a, R( W) q; H! K+ O
|