ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。* h- a8 o c( r% Y3 w/ x
& D5 I: [$ N; y* D: w5 g: k; Z' B, E! \ }3 R
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
) K; H( V& }" d" V; H3 H
+ x; H4 M5 D8 ?+ ]) r/ L5 }0 J4 i2 F$ j
什么是ModSecurity2 c% ^7 _8 [5 C3 O) E
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。0 P9 F# K# t5 }! A% n# [4 n. _/ p
9 U9 O9 \# m1 N
" w5 W, d0 U9 [0 V! _
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。- q0 r( Q& C5 Z
$ u' E; c3 c+ |' c
, C1 F9 e4 Y$ @- [! iModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。: W% X3 a- Q8 R! p! L( |0 k: ^
$ G/ E2 |8 j- f7 M& z' S7 Z- i
6 I. \1 x5 \2 V# Z5 D$ i& |官网: https://www.modsecurity.org/* D& i" \! _2 L* ]* g9 f
3 V0 X& m7 @. w6 b# r/ S) n
5 u# c- R/ R1 i& b+ d& W什么是OWASP CRS
' n6 ?; ^, L4 k* T/ z9 O" pOWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。: ~0 C8 _) S7 C1 {) Y0 X
, Q( N* J$ \# z
, _( d. S& X X
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。0 M, }- n+ X& ~, T
, L7 g# b a5 @) t3 G
# J8 P% [7 L& a6 }+ OHTTP Protection(HTTP防御)
" h. Z5 C8 ?; t( ZHTTP协议和本地定义使用的detectsviolations策略。0 o# V8 r0 d" B' T6 |4 h6 ~
# g% f+ @7 B+ V& A) Y, p- H
* t0 {4 f9 |) N. FReal-time Blacklist Lookups(实时黑名单查询)' n8 r. V" C$ N& w6 P/ ~
利用第三方IP名单。
& V5 G: a) ~7 w. s; m" w
" _3 o5 U9 [& d9 s: W) ?& ~9 S* B8 C9 w1 K6 ?
HTTP Denial of Service Protections(HTTP的拒绝服务保护); q& F0 R J/ @/ ~5 w0 {- c+ D. e. M
防御HTTP的洪水攻击和HTTP Dos攻击。; V0 {4 P# H8 G* q: L
7 q* w! z, \ u& I; R' K. Y* l6 t" ?* B% q+ L
Common Web Attacks Protection(常见的Web攻击防护)4 r' p3 k' P, g
检测常见的Web应用程序的安全攻击。
5 L9 ?# E" ]$ M* ]) ^, D* m- F, n
0 m; G# t% ~+ q, j
Automation Detection(自动化检测)
" U/ s5 T1 ?" t" v检测机器人,爬虫,扫描仪和其他表面恶意活动。
: W7 p$ {! K. M" |3 R8 V
; X7 X1 y2 v4 n
$ A' Z7 l. o2 x, rIntegration with AV Scanning for File Uploads(文件上传防病毒扫描)
& r: @) f- y- \8 r# A/ q* I检测通过Web应用程序上传的恶意文件。
' ^, {# T2 A3 u- M k
: a F+ M1 l, }. o8 s, R& r b3 \: P' v. `: N
Tracking Sensitive Data(跟踪敏感数据)
! ?3 |6 ~+ B: y- j, B: ~, y! v. x信用卡通道的使用,并阻止泄漏。
' p! L/ |6 x) Z0 @% X' A' w6 ?6 S8 l1 H
; o0 b2 }! f9 b6 WTrojan Protection(木马防护)6 V! ^! { S2 r2 `
检测访问木马。- b3 Z2 ?$ ?1 l! f1 i1 \
8 `8 I+ v" h6 b+ ~
1 k* h9 l: `/ x5 k' dIdentification of Application Defects(应用程序缺陷的鉴定)
4 y, _+ h: X! Y, M* x3 h8 D检测应用程序的错误配置警报。4 t/ c1 e; c. h. \
! R- S, T( Y1 ?; H$ L
' B* p: n+ O/ R' E" @" SError Detection and Hiding(错误检测和隐藏)
4 ]( Y) k9 l( R1 \4 ] K检测伪装服务器发送错误消息。& i" l0 e9 O' O) J- M; w; Q
% _) B6 n( o3 u
5 T& g' G8 I* G. Q9 g安装ModSecurity
B6 g, J0 v! M, V( n9 p软件基础环境准备: J. |1 b) o& `$ y$ ~
下载对应软件包# }8 I7 q2 W3 C5 K& a
$ cd /root4 T7 U V) {5 @8 s. b n, p& s- u
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz': e. {; x) ^5 A) Y
$ 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 K1 T S0 o4 s) k' {安装Nginx和ModSecurity依赖包( M( P3 x3 H, ^
Centos/RHEL
|4 t- s1 F; l* F; M) x4 I
9 @! M* }3 x8 A b3 c# J6 K; d* [' X- f& C! x* ?- u
$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel( K; U* S! K6 r' Z9 Q( V
Ubuntu/Debian) z. g; ~! h0 J9 `
2 V M% h$ h3 W. n5 @
1 z, x- F3 v7 I: 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' a6 I3 n! Z& Q. W7 W8 W8 h6 _1 W
编译安装ModSecurity
i) u- J. J8 E& e7 HNginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。% P7 h. `9 t! R# L: Z, L- r
3 r$ B& j+ |' z% ^0 ?) N! O
$ L/ K6 M2 N4 L8 q) H, k/ |0 m
方法一:编译为Nginx静态模块
" y, i* g) h6 V d
; {% X( K9 ?7 G* d! h0 _8 E1 Z6 @, {: M9 ?0 E5 [' E
编译为独立模块(modsecurity-2.9.1)2 G6 o/ D8 I" P& Y5 O
$ tar xzvf modsecurity-2.9.1.tar.gz9 X3 V# o) @* Y/ t/ `, L& w9 a
$ cd modsecurity-2.9.1/0 O8 j2 Y/ ]9 J6 f* h( m8 F9 T0 f; H
$ ./autogen.sh
" L; p* S% L) A. \$ ./configure --enable-standalone-module --disable-mlogc; a' ~3 B& j( }( U J: |# j' ^
$ make
; D& l* _ q) j$ \7 u编译安装Nginx并添加ModSecurity模块0 O c# ?7 h2 r
$ tar xzvf nginx-1.9.2.tar.gz9 h* I' A* }. r0 j) e% C
$ cd nginx-1.9.2
( Z/ ^& ] d' Q0 M$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
% J, v8 @1 @: \( x" W$ make && make install9 J+ [9 a1 f8 B# l
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块7 ~+ O" G& ]9 A- u$ m; W
, `9 y9 F# Z( X V5 F7 ~3 Y; ]% X' R( t% A) c% [1 Y% G
编译LibModSecurity(modsecurity-3.0)
" x& \( ~1 T% Y2 f& N% q( [$ cd /root, a. [) x4 N- k0 N
$ git clone https://github.com/SpiderLabs/ModSecurity
/ D9 \, Q- v5 n2 W- m" w$ cd ModSecurity/ E( t: v' W* P
$ git checkout -b v3/master origin/v3/master
4 Z0 o1 R: Z. P( |; P3 w5 [) z$ sh build.sh
+ d) q2 ^) n& a) f& T) s$ git submodule init' c9 T1 }; N1 t* h
$ git submodule update* r' v1 s9 v( j" V) S' V0 ]
$ ./configure6 K; g" J2 s5 x; F7 u& z+ I
$ make! C4 ^6 \1 a1 B" Q4 J" x
$ make install
d$ ^9 D- `8 r7 YLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
9 V- V( m' R0 F' R, b. D' `4 w5 T! @
0 S( \2 Z X: O2 k# ~, `* C1 t5 o: m* `
$ ls /usr/local/modsecurity/lib5 b9 N( t& _* s) ?' O7 y8 K+ q& W
libmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0! v b: i: N' P
编译安装Nginx并添加ModSecurity-Nginx Connector模块
: i2 P& T' t9 U4 A) t9 J3 f使用ModSecurity-Nginx模块来连接LibModSecurity5 a* u. L! w; y) i0 L8 a
* G4 \0 f0 e7 X! V+ q9 ~
. ]! l$ ~" [7 \1 c
$ cd /root1 g) S, c4 S6 `3 X
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx W& E' M6 m" w! F4 T; c
$ tar xzvf nginx-1.9.2.tar.gz
8 C h. q+ G! o) L6 n$ cd nginx-1.9.20 I9 `6 k/ Z4 v% G; w& L; O
$ ./configure --add-module=/root/modsecurity-nginx
9 P6 s# b' h7 w( T$ make
: k& }; m2 E. Y1 G, ^8 _' M9 K$ make && make install
$ k# _7 U3 n% l4 F ?! B! t添加OWASP规则
! M3 Z5 k q" [/ ?; \; B" R+ \ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。 t+ ?& r3 h7 h e- O' i$ {
! I/ W& ?9 P! y6 h" F# Q# }) z" {2 ^, p# Q/ m7 `+ x. i
下载OWASP规则并生成配置文件
& f; g+ ~* k0 ?7 K* R$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
# B4 q2 q' I' t, }! Q6 `$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/
: c! K+ S- j' c1 u! u$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
: c5 ~- R: b( X% f& E$ cp crs-setup.conf.example crs-setup.conf
: j' r" x# @7 }: e7 f( u配置OWASP规则
% v; t; g1 ?+ _9 U5 _$ }4 s编辑crs-setup.conf文件
: p) \% a. [" o( A/ H& j2 y9 ?" T7 p" d. ^! z5 x$ O7 }
* N3 O _# v6 a* y/ R
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf% M' \# L# F/ Q( E' b
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf9 _5 H: s: S- S0 `
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
4 P# ]6 F N, }' X; p) i8 q9 w% _$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
! n9 Z, |% u' j% {5 j3 E4 Z默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
j# B* j7 w8 K) a1 @9 \. L% U0 W( h) Q# I& W; @
! B. S$ Y5 @7 f启用ModSecurity模块和CRS规则# n1 \ z6 J; | @( I. }5 k
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。8 b3 T5 S" ^- R; y
3 M& G4 a* e3 y! y
' v- k* V/ k" o) U8 l8 |* l% Dmodsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
" [7 A) r8 E% I6 @5 B6 U; o( {, i. S: C
. T' B: w! P0 s% b& u) [$ cd /root/modsecurity-2.9.1/' f0 f) d# C% z9 N
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
$ O4 l+ [5 I6 b" m \8 Z& V$ cp unicode.mapping /usr/local/nginx/conf/5 r5 I: N3 e$ n4 {
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。6 H# J) F. [% c1 a, t/ I
$ o. {' Q1 @) I7 e- e8 q7 e) ?
& Y: B% I/ z: E+ t) f$ vim /usr/local/nginx/conf/modsecurity.conf( ]( b5 T# x' X& C% V/ b
SecRuleEngine On
+ j+ ]9 y; ^; ~- gModSecurity中几个常用配置说明:
+ y J( P7 s& n3 `4 y
j0 X) F* g: V0 r/ C
# |* |7 Q2 f& G; a v1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
& Y3 i: I) a# X1 ~! Z# [1 w1 a2 I4 i- k# Z |2 k7 w% a
. ^0 R* Z" X/ Y$ I
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。6 b2 W8 N7 n- R' b' a- [3 R
5 g3 x+ v& N' X, C% L5 X( d' B' q7 r6 j& h3 F6 D7 t1 ?
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。! S. X5 o) B$ Z4 H* @# J" c5 _
0 e# n5 z( c& o! S+ a5 W2 I& `0 `2 h, l5 N7 g: b( W# P* |
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。- B& ~" F4 w, T; R
: O# c R# B l
0 Q& i* [% |, P! R- u1 R
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。 \6 u+ S9 i1 L" ~. t
7 e; U" x* N' i2 x
5 F" e0 G5 q! z
3.x版本CRS" U( T( |( y6 X! {+ A
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
8 X/ P( R! n# y2 I7 H# 生成例外排除请求的配置文件+ a Y8 ^- F8 S6 p) P$ X9 W1 t, \ }
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
1 ` d" {3 `- v: B* F$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
5 Z+ }7 Q( @9 }1 m- E% s3 ~3 _$ cp rules/*.data /usr/local/nginx/conf
/ K! p1 p; O+ C. a, q为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。+ T7 d# A* X4 Z$ @
( I' W; X5 z" Y, f& f
1 P1 F, n: J) C: Y2 m, h$ vim /usr/local/nginx/conf/modsec_includes.conf
, A! K; A/ P2 y' t$ k+ s$ s- D- f0 x
[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
' h6 ~3 K" u' I, |
! F; L- O" N$ z) G注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
; c, u2 S) Y: s* W' T: E' V/ y6 u; s# a$ j# d4 X; d9 _! t
8 B0 w8 E$ H& C- p+ q3 {; q
配置Nginx支持Modsecurity
$ ]. z' [0 J9 z% p4 G5 S启用Modsecurity9 ?9 ?7 W& T1 a ^# t' M
使用静态模块加载的配置方法
: d; p3 f# t# J% |在需要启用Modsecurity的主机的location下面加入下面两行即可:. M4 {, a$ ^7 T$ Z) ?5 _) s
F M. w" E" j
0 G5 Q0 u5 |0 _7 zModSecurityEnabled on;
9 M" x5 P! U# T8 ^. N: DModSecurityConfig modsec_includes.conf;4 u' O# T) Z3 r/ l& q; Z' B$ f
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
; ?' ^1 G. W% r
; [* c! S8 j6 @" ^% J
- X7 u& [7 J+ i: I3 r$ vim /usr/local/nginx/conf/nginx.conf# Y; ~. D$ K; o, q
4 U! s: f. l8 M6 u+ t! E1 v, D+ O+ M6 ~& ~5 f
server {
" n2 T/ ^5 L/ v! ]5 v( P! C( H- S listen 80;" A" W! t L" v, o4 L2 Q1 ?! F
server_name example.com;
+ f/ d* I. e# }8 ^4 v' _* w
# x( e0 B3 ]( m" p7 U6 `8 V, ~0 @$ g) ]
location / {
! |1 G- i& X) j+ X/ B: l ModSecurityEnabled on;
" V# _) S# Q M& k, p) L ModSecurityConfig modsec_includes.conf;9 E# R( f6 Z- s8 [$ w4 W
root html;
6 D) M) d: J5 h5 G {, h+ ? index index.html index.htm;
* p) S7 J7 b o. s* \$ ] }
2 V$ g) N1 e9 F8 P: _}
% w; p! ^0 P" P5 Y" m使用动态模块加载的配置方法9 [+ d; d7 U) X2 _( z- k3 H4 w9 e
在需要启用Modsecurity的主机的location下面加入下面两行即可: B% X& g' q8 i' `, R2 q8 X
$ P4 C8 R: V7 G* D
2 K& J, G. h8 C$ l3 _% }
modsecurity on;
d$ B4 L2 w3 ]3 A2 imodsecurity_rules_file modsec_includes.conf;
4 }. O7 @5 Y; l8 g修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
0 N. J! z4 @8 J; Q# E
& o1 Q( U/ f' {& O6 E9 y8 C2 ~. }3 W
: {4 a+ C4 j8 z2 o. q2 V& o% k$ vim /usr/local/nginx/conf/nginx.conf$ h: M$ K) R ?: s$ n6 }; f1 n
4 d* p# J3 w5 H4 x* x0 M
2 w7 Y3 B/ l7 Y5 K9 l7 Mserver {! j2 U) r( N/ E; M/ P' ]
listen 80;" m8 X$ Q0 c9 b- K& b5 @: Y' B, |: B
server_name localhost mike.hi-linux.com;
8 X( m2 {0 M5 X# L2 E access_log /var/log/nginx/yourdomain.log; ?( ^9 s9 t4 F" T
6 |4 c3 ]/ H: z; A; s( o+ F, E/ ]" \- ^! d. {) | L6 g
location / {
7 _$ v% a/ v. |% w3 G! e- R* T" y' Z& `) f- M
1 ?2 }! k8 F) M; D+ w0 U modsecurity on;8 j- ? U: k, Q& u
modsecurity_rules_file modsec_includes.conf;0 C: m% F. ?/ n# B
root html;/ E& x1 R% t2 r0 t" Q
index index.html index.htm;
- g6 X( ~# p( `: {/ o}
; Y6 P' U4 H) v A}
: I3 }9 R3 f/ s0 H \$ U. h/ W验证Nginx配置文件( G: w3 ^% a' w& v
$ /usr/local/nginx/sbin/nginx -t3 o" O! c: |% g1 Q
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok8 _! Q6 i8 e& Z9 r; x
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
8 c( @. g; a7 b+ i+ t( I) K启动Nginx
) O: a0 \/ N0 z' Q' B$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf4 J+ I. r) f! @# m
+ [; m! R! \5 O, z( p测试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能够战胜更多复杂/未知/混淆的攻击模式。 - ]9 r7 c# d7 i3 A% M+ x
|