ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。* F! g7 S! F7 t* Z7 V
" n3 `9 u0 _' x/ q8 A
0 K/ x# o6 G) x, A6 f在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
4 j6 A3 T. o3 I* N9 T# J. Z+ Z% Y y
" ^8 h3 g$ V. T& z什么是ModSecurity. P, ?# E& P$ _
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
. @& _( | Z) i9 F# X. `
/ v# A7 P- @( U3 J' T3 {
, Z1 O& ?1 Q! ? c" j1 E/ j# PModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。- Q3 t: L( i- [
7 P; t& |, f1 a! n% U* W
2 G2 i9 u9 u; e; ~ _* T& lModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。& Q. Y4 p$ e, p" n
+ j. X% l4 f2 @/ N, }. q: ^ |! A. k9 e- ~2 b& F6 Y6 w+ \( o0 ^
官网: https://www.modsecurity.org/- y2 h5 O: B' T' l* ^, ^
% g q% H' C/ c% z0 e
& {, m1 F- N( \- A+ Q4 p: k V4 T; F什么是OWASP CRS
7 ]1 g" t. `7 w, tOWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
% ^6 h1 L d/ V7 P& U
& Q# m! L- z1 d6 [! H& l/ T
0 Y+ l/ u7 O; G. rModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
. p# u8 o, d/ E) J/ y; x" v0 t# k+ X
$ f8 R7 V: v, s9 XHTTP Protection(HTTP防御)7 K5 V2 W* C" p4 k7 i' ?
HTTP协议和本地定义使用的detectsviolations策略。" p9 J0 V3 v$ H: \3 v
) S5 @/ z- I0 V R9 w" ^9 X9 o! R- M% {8 D
Real-time Blacklist Lookups(实时黑名单查询)
3 i: p+ r+ S' G7 V' O. f9 D1 p7 g6 `利用第三方IP名单。- x: n- L: i5 g" e& j/ m3 Q3 f- |
6 D, k: Q4 L7 l- d1 B
3 I% `1 N. H1 f" V
HTTP Denial of Service Protections(HTTP的拒绝服务保护)
/ n3 ^% E2 W; P- m9 X0 i. ]' E, `防御HTTP的洪水攻击和HTTP Dos攻击。
- H9 O1 k, h6 K4 j
7 s) I3 o. g7 ]# e7 ]. F) I( m
- ]& K* {9 i# s" C* x- @+ d4 H2 xCommon Web Attacks Protection(常见的Web攻击防护)
h. R' U. k) d: y检测常见的Web应用程序的安全攻击。7 S. t, l7 v0 d( @4 U. Y% x
8 [5 L0 c- z7 H' {2 X) @
# W8 j) E) r0 J! NAutomation Detection(自动化检测)% w) w* W% i" _3 L# p. U
检测机器人,爬虫,扫描仪和其他表面恶意活动。3 q" @3 `- x3 c
/ c' ~7 N+ u: Q/ {
$ }3 O3 I! W3 s7 RIntegration with AV Scanning for File Uploads(文件上传防病毒扫描)
( N0 }$ U2 V: E+ K1 v检测通过Web应用程序上传的恶意文件。; z h. _8 j# z; |
/ q. h b/ g, I6 E0 I+ g# F r. P& @2 B8 r$ |
Tracking Sensitive Data(跟踪敏感数据)
T" n' k0 s7 k! W# ^' \" ]: F7 @6 F信用卡通道的使用,并阻止泄漏。/ L9 {* Y8 A$ H
* @. a: I, t, s+ r H( k. W. c, ~6 G3 g3 \/ w
Trojan Protection(木马防护)
9 A# Y( T5 S9 n' ]检测访问木马。4 ]5 [ a1 x& x5 G# P) j8 M# X" ^/ X
, F/ Q! F' v8 C8 D J; ]
; L/ H& H0 n: K- _5 ?Identification of Application Defects(应用程序缺陷的鉴定)" t W! o4 r8 O# i. A4 B+ u
检测应用程序的错误配置警报。
. n5 s. I( A% d9 _: H
- B6 B- q1 m; d5 v) V" S8 k& k4 a2 c
Error Detection and Hiding(错误检测和隐藏)$ Y) s! Z. ]3 n( @& b
检测伪装服务器发送错误消息。
4 } R! y+ d% A/ _) {; q, z
( q( O+ t- U- `& c- A
t/ u0 s; P( g安装ModSecurity: T+ p! g. ]/ v5 G8 X) H, d- a
软件基础环境准备
( ? B# g8 ~5 A/ g2 A下载对应软件包
3 {/ `* }6 W. n9 l; S. b$ cd /root; S. c j: b8 }6 L \- A
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'9 z' y4 n' V. e
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz
& L) Z/ V' |/ U V3 J; P. G. E安装Nginx和ModSecurity依赖包0 I0 I; D4 W2 Q2 s, n9 f/ p1 S
Centos/RHEL
5 _' |& E, T5 x, \/ W: ?: ?7 N. s3 [ n8 g
4 E" r0 r# O. Q: @
$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel+ Q. i6 X" Y; ?/ c
Ubuntu/Debian) k Y; E( k5 M
) C7 S" q K$ }+ q4 j% q; H
1 ]' t1 l- V9 m" L5 a$ [# L) w$ 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
, z/ |! f: y0 s; Y5 j# O3 |1 F' E# K( o编译安装ModSecurity
, t2 i ~; Y- \% xNginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
, f& H; t. I5 g) G6 i6 d- q q6 ?" ?! f. m6 t2 S6 H. ^8 X
8 l: c, T" F5 W- H$ K' l, P% ]3 f
方法一:编译为Nginx静态模块
4 n# {# Q) v e9 m* G
8 W9 g/ E) p0 h+ r4 b8 ~, Z# N( _+ |" B
编译为独立模块(modsecurity-2.9.1)1 x. ?( N' A' N6 \$ v
$ tar xzvf modsecurity-2.9.1.tar.gz- ]- D" P/ }& b' b, Q; c" v
$ cd modsecurity-2.9.1/9 g2 }/ |# h2 z7 _+ O' b2 E6 T3 @8 O( S2 x
$ ./autogen.sh
5 w" Y! Y& |- k \6 F$ ./configure --enable-standalone-module --disable-mlogc
6 `- K3 w$ c( \( P% G( D" w9 N5 ?$ make( c. k7 l/ D# U, _7 S
编译安装Nginx并添加ModSecurity模块; m, q* k$ e6 l
$ tar xzvf nginx-1.9.2.tar.gz
v/ Z' n; H* w$ cd nginx-1.9.2
+ t# r) f& t) R/ D$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
! y4 s6 f1 C: b* j( w$ make && make install: W/ R) N1 V( w# o
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块2 C. v5 T# A- X# |- v, Q0 v
: M3 L/ j0 m3 x8 x, e. l( C4 N( R4 P
编译LibModSecurity(modsecurity-3.0)
$ `: j4 q1 `3 u$ cd /root
`" S+ F4 X* s$ git clone https://github.com/SpiderLabs/ModSecurity1 W2 C$ D7 P* h9 g$ n) h
$ cd ModSecurity2 ]: K; G. u, T# w
$ git checkout -b v3/master origin/v3/master1 w: ]( x2 t1 {
$ sh build.sh! ]: I; B K# [" S% p7 p
$ git submodule init8 o6 H; \2 q, f# ~
$ git submodule update
' G M6 Z2 w3 c# S0 E' K' z2 w3 W/ t* P$ ./configure% v4 o' ?1 e6 [
$ make
/ F. H2 Q/ F2 J8 @8 L$ make install2 M* r$ N0 S; l3 Y
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
: @3 K7 N1 r6 s0 x/ w9 V( {- {4 x
1 j4 k' \1 y" C" I7 n" j! `; _5 L$ L" g8 s1 R
$ ls /usr/local/modsecurity/lib' G* s4 Q/ U/ @. y
libmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.08 y( L, c5 R( a$ {
编译安装Nginx并添加ModSecurity-Nginx Connector模块: w3 c2 p: L1 g7 y8 Y7 F
使用ModSecurity-Nginx模块来连接LibModSecurity
7 l3 y, z& s; e+ F+ j& _3 u3 H6 E& R& O" W+ A! ]
! A9 v# u. M) T; t: s$ cd /root5 R0 j& K2 ^$ W% M+ s( k
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
3 B2 D3 _/ E! B$ tar xzvf nginx-1.9.2.tar.gz
! |, Z2 R( d; G" I. Q/ l$ cd nginx-1.9.2
6 {- A; p0 w# d$ |$ ./configure --add-module=/root/modsecurity-nginx4 |/ J6 C' |% h K
$ make
2 D- |! a2 U0 l% e$ c$ make && make install+ T4 ]3 m( M, m! F7 k7 A- e
添加OWASP规则. o, x! H' t) I8 \
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
% u( u. F$ H) G$ \7 L& p9 i
8 \$ r b Q0 ?" K" ?3 `
( w$ l7 n/ _' x, I3 R下载OWASP规则并生成配置文件( d9 G$ X, y1 s# `, ^: L, `
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
* Q! t- d$ G4 `$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/
! K- b2 l8 Y+ ?& z$ O) m$ cd /usr/local/nginx/conf/owasp-modsecurity-crs6 e6 C8 K- _$ i+ o" i0 P4 w% P$ q6 h
$ cp crs-setup.conf.example crs-setup.conf
' r% g& h t: m4 k配置OWASP规则
+ c. b% x# C9 d编辑crs-setup.conf文件0 n9 K& D0 q& ~2 p* S/ E. U( M" n7 H
" }" ]$ D) j" j/ [+ p) B6 g
" S5 e; m$ j5 h) r/ d( `! J8 K* H$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
: n/ `+ ?7 m: R- e ~$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
& z K! k* c- q. M$ P) S# C$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf; _& D& H' ^' `) P- s# X% l3 z- o
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
8 p( ]9 r1 V+ q/ C" {" K z" s3 J默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。. n' l# d( [0 V; V
+ p$ [( L, [$ S9 Y8 Z" V
, P7 o) a+ {4 A) [9 g2 c `) X- |启用ModSecurity模块和CRS规则
* s$ M- r b$ V: ~复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
8 f( d% t6 ?7 s0 _& I; `+ z; r" j
. m) h& o3 E% a! M( H
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
! j& |2 _0 o l0 ^- M/ r' P/ y$ P( M( D7 w
* S" C; D$ T ~1 e& Z
$ cd /root/modsecurity-2.9.1/6 x- p4 L- O: h3 v0 {
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
' Y+ F: ^- B, V+ b( S: z$ cp unicode.mapping /usr/local/nginx/conf/; d1 H7 M) n: t- M0 s' X$ k
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。( |% l# w! k% ?4 t4 p. \
3 G; X! j1 R; Y/ y
* I# i/ G% X0 ]- D0 Y$ vim /usr/local/nginx/conf/modsecurity.conf
8 P3 b, l: s [0 z& TSecRuleEngine On9 }- e4 C8 u- @ d
ModSecurity中几个常用配置说明:
9 L, J1 M8 g" l2 N" y
* ^* P/ h4 I/ m, `0 C
9 n$ P U: K- O3 X; ~% t) [5 S1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。% r5 z* m2 [) ~: Q ~# t" W% M
: s4 b& ]1 X; E& T, L a/ C( ]$ \
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
$ z W _) N$ \/ v; |# v) ^9 c: Z+ q! a
4 q$ w" D' M: p+ A3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。& N/ X2 g3 |6 q
& @. C) w9 e3 u6 v- `1 o
! A6 m' L* V1 l% G [" q4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。& {6 s& q+ K5 E
# R$ ?9 @, |1 s/ i( z3 q* e' q9 ]- c/ j: R; ~- k9 J
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。. k+ D) D* }) |3 S9 |* P% z
: E1 c0 v) o2 k
& d- J3 A; _# l8 c
3.x版本CRS. t5 Q" J3 L8 u0 E- U
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
0 Z" e' F1 J& @' c6 {" n& p- h; X) [8 v# 生成例外排除请求的配置文件& l3 g9 h. }; B% Y0 e) d. j" a
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf$ ?6 B6 c- ]7 E. T2 b) l
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf9 T- W1 h4 b8 V) G
$ cp rules/*.data /usr/local/nginx/conf
# P; b' _% V$ g, b1 U为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。9 l `, w) \6 C
; h+ _" S- k r: B3 n
/ d! r4 E- L; k$ ^& f8 H, C( O' H$ vim /usr/local/nginx/conf/modsec_includes.conf5 c$ x( F2 }; Z! i
/ H/ s. s/ }- ^: r) w; D6 |[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
% Z) ?- v5 T1 k: ^2 V0 |5 B" a
1 F5 \8 b% m& u, y( q! T注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。' i Q& |, ] P7 w7 z9 n2 D" j/ H+ T
" w' h2 K" i' Y% D% S# ]
/ p1 x2 }8 C: X1 E: J2 o+ K% S" }配置Nginx支持Modsecurity I/ l; c9 b8 K* |2 I) w- F( Y; y+ H
启用Modsecurity5 L0 ^/ h) P5 C4 S2 P& Q
使用静态模块加载的配置方法3 A$ z9 j7 y; m
在需要启用Modsecurity的主机的location下面加入下面两行即可:6 {6 D- o* v* b. y P9 D
! v- M* D/ O% x
7 F0 J3 ~! y% A7 w' bModSecurityEnabled on;
( ]5 Z( n3 a% u5 }4 K; w/ MModSecurityConfig modsec_includes.conf;/ y' P' m3 U5 V( u: J2 p5 m2 x. W# E+ q
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
3 m D% n3 `6 d6 M. c+ i
# T. X' J* Z+ Z/ ~ a, O( r3 t6 T+ O: R3 Z; _) \% \: ?
$ vim /usr/local/nginx/conf/nginx.conf: i+ M. c6 ]2 |$ g7 A
1 H- S0 g- X9 K% X4 y" E- j/ M" i1 I( e d. d
server {0 t2 ^' v e; h) A4 `4 p' ]
listen 80;0 \# Z, ~* P+ @9 ?$ ~1 O$ u
server_name example.com;
5 u, \! V' a6 b& j
8 G2 O3 i- \ F
! X* i) T4 Q& V1 m3 C location / {% W8 }3 g# _! l2 D" |
ModSecurityEnabled on;
|& ]* ~2 O- i, D( s8 q: c8 ] ModSecurityConfig modsec_includes.conf;
9 [2 ]8 \: T* l8 Z9 A$ l root html;
. z7 M3 t/ [3 F+ E" A& E& p index index.html index.htm;- \7 B0 J: r, @5 D; f1 n; S6 T
}
4 \% J! m8 \" o; x}
, |3 r! g4 I2 B0 i使用动态模块加载的配置方法
+ G6 b( o( z, ?0 H0 x3 X. L在需要启用Modsecurity的主机的location下面加入下面两行即可:) c* \, G6 O" C4 x9 V4 H! p
8 S K5 c a5 H. [7 ], i4 V" y3 p. o' X' z0 I
modsecurity on;, X6 H2 f" m2 Q( t% p: V0 Q8 O% L
modsecurity_rules_file modsec_includes.conf;
, |. j" w3 `1 S; T; Q9 p修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。+ |, w) ?) ]) U/ H* l& ~
1 p6 L. x4 ]( e+ X
+ `9 J$ b! O$ W5 u
$ vim /usr/local/nginx/conf/nginx.conf
2 I5 F* A2 j9 H2 P& }7 c- o0 T0 J# H6 v4 `
0 D) y* J1 X! R; }
server {
$ y! o5 N: ^% J9 B0 _. B6 K' K, F' b listen 80;
3 N& d }7 K# v, J8 i( r3 b server_name localhost mike.hi-linux.com;( j- j1 Q m1 r1 ~
access_log /var/log/nginx/yourdomain.log;2 a7 e$ ^4 g$ a. }* G
0 k6 ?6 d8 Z$ C! U3 b! {
5 l+ J& n, N# |, }3 _! r& t location / {
& b" L5 A" i2 o' {+ ~/ f2 X7 C1 b% E6 i5 Q7 K$ G8 e
0 @% {5 J( R4 {5 W. S a$ Y modsecurity on;
, s. D6 T9 t+ I T( e7 S% F& _& _ modsecurity_rules_file modsec_includes.conf;
3 _" W+ n1 y8 D# P) D' O root html;
3 F( r. L" A" d$ N6 y, Q# d index index.html index.htm;
. y, F: a0 U1 z4 Y t}
$ |4 B2 \0 {8 f# A' x1 j; v d}
( \7 q2 t* G' r8 _. \7 G验证Nginx配置文件
( D3 H1 J7 {7 W$ /usr/local/nginx/sbin/nginx -t
: z9 E3 e) I4 ~/ A9 s5 \2 Lnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
3 o% G: A* {1 Y2 S( jnginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
3 j7 F* Z7 b+ k1 A$ \启动Nginx
: d& a" Q" p- h' B; v$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
; M* L$ r$ U) O/ q' D
& V6 I" C8 z1 C1 m测试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能够战胜更多复杂/未知/混淆的攻击模式。 3 h1 H4 O3 M1 Y& X, S
|