ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。8 s, J1 Y$ X+ ~9 V0 `
3 Q8 j, J* \9 O9 r8 X( d4 s* F3 u# I1 ]% Z
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。# A2 G; y3 I: O# ]6 }
$ a1 c: y+ z7 G A$ x
% X$ c, W: w$ k5 C, K什么是ModSecurity6 v2 m" ]7 W6 a0 o$ J
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。2 d, ^+ j2 S; L5 V/ y5 m6 r6 l
' {( U: i% y F( W: M9 Q
. K) V3 T- e& n1 i6 x7 M* W" oModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。! a* k( G' O' d- n* Y7 f' U' K
$ j/ L. X5 x% |& A
$ w( W* }; d9 I/ ^! ` ]2 o. t A# [1 N
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。6 q) w- O, P- k6 k. w! W( w. J5 h
9 N4 b; }2 g& b& ]8 A4 q7 F* u: h% U
官网: https://www.modsecurity.org/
5 v2 D0 [8 r# K! n+ s( L. R. Q6 s3 s( ^* h
0 Z' t3 `5 V* D! n8 i n$ h
什么是OWASP CRS
: [8 y; S$ u* A. _9 n! gOWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。' j1 V X, L( Z# F& z7 p4 `
- o$ _$ n& }. R. C L- o9 ~) O- U6 h
2 d2 }) T& P. l4 \. ^: X8 N
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
7 K c3 s8 f; J
- t( k% @4 x$ H8 S# F
( ]* J: p, A D8 y# }7 mHTTP Protection(HTTP防御)
. G9 f R8 j, q8 |( K8 iHTTP协议和本地定义使用的detectsviolations策略。
$ c: ?1 _+ E2 z& M2 M( `. g0 b! G' B& e8 w' B7 f2 ]
8 a) V7 x& F/ v `1 HReal-time Blacklist Lookups(实时黑名单查询)
9 R6 v1 Y$ ~8 c/ [利用第三方IP名单。: J9 P# T k' m; I0 b0 ]
) W1 i) ~9 o; }5 n/ l. o1 r" V, ^+ q8 Q9 {2 ]0 I& P; I: K
HTTP Denial of Service Protections(HTTP的拒绝服务保护)1 a( c. x7 s) a$ f) H( P8 A
防御HTTP的洪水攻击和HTTP Dos攻击。
f7 N! c$ H+ d2 E9 W3 }7 l3 g y! U# C* P2 ]5 ~
. b9 c0 X& A, x2 H! j
Common Web Attacks Protection(常见的Web攻击防护)8 Y0 \, g7 H# L
检测常见的Web应用程序的安全攻击。
& E; x" r( h+ q; l% X) o
/ S3 r9 e i/ e& Q4 t b9 K6 B8 c/ }! a8 b/ v% v
Automation Detection(自动化检测)
+ y. t9 j0 ^( ]5 c3 G1 J# e! N( L: N检测机器人,爬虫,扫描仪和其他表面恶意活动。
+ u/ g2 t$ m' [+ l
5 h8 Q) [' G/ B* }
/ D; l2 ^7 r' e$ p2 WIntegration with AV Scanning for File Uploads(文件上传防病毒扫描), R( H# S0 N/ ~9 e P5 Z1 ~
检测通过Web应用程序上传的恶意文件。
) S6 X0 X9 i& C2 u/ [+ f/ w- J& Q2 }% d1 `2 G
# S* M8 L/ E4 D$ }6 f% K# y
Tracking Sensitive Data(跟踪敏感数据)' r+ H6 c) @% f" y; D* z
信用卡通道的使用,并阻止泄漏。
+ L' J1 a. ~/ a! n- W P. m: r6 I n, {+ _* A7 c
; k: c' V }1 ]0 i2 JTrojan Protection(木马防护)$ q0 O0 Q" A) ^: S& J: c* [7 ]
检测访问木马。; ^& E, P$ W f
1 f' V" u9 _- {) C' q$ n0 f4 q% R& j* R& Y: j- K: X
Identification of Application Defects(应用程序缺陷的鉴定)8 y2 X0 b9 x( u1 O0 G/ \* k
检测应用程序的错误配置警报。4 n/ l/ R; j# \5 E' n6 Z
. Y/ F4 r- S, m g& K
+ H7 Z3 t, |7 q! H: [. R/ d' l$ VError Detection and Hiding(错误检测和隐藏)
5 ?6 B" E$ L$ F4 t8 E* b6 J检测伪装服务器发送错误消息。
: Q5 L. o+ v% Q1 U T3 a T4 ^: Y7 k# j# T9 b6 m; L* M- b
3 V5 s4 Z1 a- U7 [7 {安装ModSecurity
1 L( r; ]) e$ H" R, R% M软件基础环境准备/ f, H3 [ u8 o: s# W8 h
下载对应软件包
% ~; N% x! w# B @) M3 g0 c! H$ cd /root2 }* e7 H+ z, |, r. }, L4 a
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
! A) ?5 u3 d" m) n$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz
+ q& w* ?2 ?4 T安装Nginx和ModSecurity依赖包
, f) N/ M. i2 [4 }5 BCentos/RHEL6 b: ~ n" O9 ~2 y) N- [
6 t2 ?: d- g: k5 v- ?, y9 E& N7 u) U6 |/ m [+ H- J
$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
# Y9 f( i9 }: F: R9 NUbuntu/Debian+ F; c; I5 E* b$ D) q
5 R+ k1 ^/ h# |
; o- q; ^; _' y! x0 ~
$ 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++-dev2 Z6 |( z6 C5 {! z
编译安装ModSecurity, {5 u0 A8 |$ D: c8 N1 h
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。% p% N% l0 j: O1 [1 j5 ^8 K
1 x# `& F5 T7 \
% y3 C9 V$ E2 x2 V) a. h% M8 _方法一:编译为Nginx静态模块
0 @# w8 j6 w: {* X) E! J0 S* b3 w, E" u4 k0 ]
$ Y C, x' l7 F# r: ]( z, e3 S+ R
编译为独立模块(modsecurity-2.9.1)
8 d! C- R. V/ i7 L9 ~+ K5 C- W$ tar xzvf modsecurity-2.9.1.tar.gz
- s0 m3 g, g+ O/ Z0 X$ cd modsecurity-2.9.1/$ }1 J; W- ]' n( `0 {# A
$ ./autogen.sh/ [# |* c* q8 ^# v
$ ./configure --enable-standalone-module --disable-mlogc2 z( B- S' {7 G& V# y/ s4 [/ Q: H7 _2 {
$ make7 P3 ~ s- @# s2 Q$ p0 E
编译安装Nginx并添加ModSecurity模块
# y( S6 T; L9 ]5 z$ }" x$ tar xzvf nginx-1.9.2.tar.gz1 {7 ~" h9 G. M0 R! x
$ cd nginx-1.9.22 Y7 T+ u7 ]3 P
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity// z/ S! J# A# ?" ^8 R* B
$ make && make install
! z' f+ t, B. [2 ?方法二:编译通过ModSecurity-Nginx Connector加载的动态模块4 D! [/ T/ H& ]! e4 z4 k: {# u
# o* O: C* W! M- ]
+ R/ l9 ~' T& Z- L! p. l0 _编译LibModSecurity(modsecurity-3.0)+ W9 c3 B" g, x6 J
$ cd /root" C$ P. M" o ?- z/ u6 ~4 k& f
$ git clone https://github.com/SpiderLabs/ModSecurity
* A- D, C' c2 h; s4 j. l' W$ cd ModSecurity
3 b+ z( r% i( `$ git checkout -b v3/master origin/v3/master8 G! d! b0 x% j( k5 f) o8 x
$ sh build.sh
5 Q" @6 L) f3 [9 G6 N u' ?" B$ git submodule init
1 o* j2 D. G, h$ M: }4 [$ git submodule update
: `' N& r7 }0 F5 z/ R( o$ ./configure
' [& a3 a# U4 m B$ make
, E* I% q* S( q1 q$ make install
, u7 u; I7 ^1 A4 _- d cLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
% q1 P5 W/ H9 L; j8 Z( }( g! |( x' g
( w" J& e; i/ V' d2 |; ]6 ^
7 @% E6 \0 H5 h4 e$ ls /usr/local/modsecurity/lib" r" F2 @) K7 j% v5 d0 |2 Z1 o
libmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.09 a4 Y# x- d% }; y, S3 v
编译安装Nginx并添加ModSecurity-Nginx Connector模块7 |! |8 }3 k- c7 m$ q
使用ModSecurity-Nginx模块来连接LibModSecurity6 a: k5 F1 I, w1 s4 `( }
! |; O' q8 d0 f: }9 P8 M. j, Z5 x9 U$ g% ^$ @, u
$ cd /root2 Z( ]+ c% G5 Z, a; [/ M: S
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
% S% L' d8 L9 R2 |$ tar xzvf nginx-1.9.2.tar.gz& |+ [" P/ U! |" H' _
$ cd nginx-1.9.2
7 c) C+ I% }0 @/ L) k5 ?$ ./configure --add-module=/root/modsecurity-nginx8 r3 Q* r0 P6 q" H z' ^
$ make
5 h1 d/ e# b& W0 c3 g5 n$ p$ Z# w$ make && make install( Z9 F2 E- \1 e9 L
添加OWASP规则( `! z, r R- g! m, y J8 i8 X
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
* x. i$ }% C, _" H5 a( c# ?! a& K
, k$ M0 B: A3 _7 d% U% v9 _( s. f' R- [
下载OWASP规则并生成配置文件6 H4 C0 ^$ F5 y
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git1 ]. T5 Z8 U& J1 Q' F
$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/* q* y7 ?- U2 g7 {2 P
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs, e; I7 K! S* X
$ cp crs-setup.conf.example crs-setup.conf
- F& e. H; k( W配置OWASP规则. C5 z( W8 @1 J0 L; w
编辑crs-setup.conf文件3 D [, |% h7 E1 M& R3 P' _; R7 m
2 l s7 F2 f+ W+ h8 L& G
- X: M; v+ D0 q/ }! ~& F$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
) Q+ x5 E( g- q$ T' a6 s5 ]$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
8 h0 ]" ^& l( \$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf0 `# @* ?6 P7 f" B
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf8 D$ i' l, g$ U
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。: h' j! P) \$ P! [) {/ q
! [7 F& S+ @. j
- k' Y" b9 ~0 |6 z0 S1 G- b4 j启用ModSecurity模块和CRS规则
, Y' U/ L9 A, f8 @& z复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。4 x* I9 h, l' W B, Q
: T- N7 `" E p1 e
6 H+ M/ p5 ^, h- \modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
1 r; E2 k! e- p, T9 V6 v: r) E$ q- ?
3 S/ O; z5 H: }3 p8 t$ cd /root/modsecurity-2.9.1/5 T |$ w8 T1 p/ g ?5 v2 \
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf t9 D& k7 u& t5 I
$ cp unicode.mapping /usr/local/nginx/conf/
2 w6 k1 m" W p; B, D4 H) G将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。0 N3 r$ `9 T, p- w" ]
1 P) m, n$ i W9 N' @. y
/ n- \2 o1 z# x$ vim /usr/local/nginx/conf/modsecurity.conf |! s: `6 ^6 U; v; ?" _6 H6 ?0 N* N
SecRuleEngine On
" H9 T% H. Q+ {; RModSecurity中几个常用配置说明:
5 E. W; h$ |4 b/ D+ j2 C+ S8 x3 D
; {1 x8 Z0 P3 n' b1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
* j. R7 Y5 m l" _8 o0 T# K8 V5 a- G; D( B& ?6 K( r
+ h! i: h* Q0 x: {/ z8 E( k* C
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
' ~# {( t* P t, c% H0 j u/ @
: w- g+ p/ _9 u6 M' W8 b( ?; Q1 @) O7 Q0 Y( n( A& \
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。5 S! f5 Z9 B$ ?9 i1 `" }9 F% g
9 S% E) E! p) w& {1 D* Q+ J- F$ s* V% T, L& M9 c4 n
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
3 t" M9 w# e) q2 V+ p* x; O& m E! s0 h: v% z& {% t
* f6 c- {! H. G$ E, I
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
4 J' i! ~* {2 ^3 U5 V( L3 a3 \ D) l4 `) ]5 u8 r. M
4 V* E c$ P! j; L* z* N$ b3.x版本CRS
/ {5 y2 H9 \4 ?; h7 F& Y$ cd /usr/local/nginx/conf/owasp-modsecurity-crs. G* @* i( B' Y$ d2 d
# 生成例外排除请求的配置文件
; M% e9 E( |* E/ r0 |$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
. O2 [# W) }9 ]1 c3 ^, G' f/ R$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
+ p6 ] a" |5 } W$ cp rules/*.data /usr/local/nginx/conf
C( U2 M% ]+ u& s! ^/ I为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
0 `3 K; k, N4 g# h
# F5 ?8 E( A. G8 _, P9 I
2 ?0 T7 u9 u- J( x+ ?: t$ vim /usr/local/nginx/conf/modsec_includes.conf5 \7 K" o- {2 T( D# N
( x) v2 F" j& o' @[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 # ^3 }, f* l$ G9 H# T
% @% ~0 C3 u0 `7 R, G% m) n
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
" V1 r- F7 S) w2 h2 B$ f; H S$ H* G; O1 D ^2 Y) z0 t
( j& R* C' b6 p8 b. N" [配置Nginx支持Modsecurity
$ u) i6 ~4 J5 C' f启用Modsecurity
/ X" r5 p7 p! ?7 L1 _- A- ?' R使用静态模块加载的配置方法: j7 D( Z* G" h- A, M/ n/ s$ p
在需要启用Modsecurity的主机的location下面加入下面两行即可:
" u$ E% ~4 x( Q" E8 r& T- l9 \
|6 _& D8 `) |* q. [+ J1 g5 y& C4 b
ModSecurityEnabled on;
8 u7 |5 t0 g2 u/ I5 e, HModSecurityConfig modsec_includes.conf;
9 o2 `3 W2 H* t. N# {: t! g8 D修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
( l/ _- c9 `6 S B/ q
1 t+ `$ L* X! J+ h8 a
$ L. Y* _9 G9 `2 x& F& F2 \; P$ vim /usr/local/nginx/conf/nginx.conf" D0 J- F9 O& Z' X' i' [/ L) w
/ e* f W, F% f$ H* C
/ J# M! y+ q I& A2 p( eserver {0 S" H L& V$ x$ K" E% k
listen 80;+ z; s7 W/ M5 K6 o% q
server_name example.com;# i3 ~/ G* V# [: ?2 E3 |
6 N$ O: K1 Y( h$ c3 D) ]" v
* P0 w6 u0 C( ~9 f! M& E0 }4 S0 l
location / {/ j m) c; f# G
ModSecurityEnabled on;
J1 ]- J5 N7 x3 d1 A2 P9 V2 c, N ModSecurityConfig modsec_includes.conf;! L! l5 F2 s8 o6 `
root html;
$ [& Z7 w- |9 J index index.html index.htm;
3 J6 ~- V6 C# j }
/ c( ]( M; g9 c) }( Z/ k}
$ P4 D) Q( u a/ g6 r使用动态模块加载的配置方法
2 X/ F8 x5 D& m8 l8 I p在需要启用Modsecurity的主机的location下面加入下面两行即可:
/ x4 b2 g! [8 s+ D* `4 d" I; P' \9 y. K
, Y0 i! f( E+ y$ O5 ^, ]1 Q
modsecurity on;( Q1 t7 ]5 J) G# Q9 I% i9 q
modsecurity_rules_file modsec_includes.conf;( a0 K& O" |1 l9 v$ B& M
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
2 J0 N# W' {' N3 x0 P7 q# S8 n& x5 r6 }, B7 H' @$ D6 N6 O; O9 `7 R% k
) o1 w9 v! {! D6 g) O' z; X$ vim /usr/local/nginx/conf/nginx.conf- H5 \& O$ G" J8 u( L! r* Y/ q
# T* s0 C% d+ h9 p7 i' a/ @+ v/ j0 L9 L
server {0 Z+ ?9 }7 G% F3 t/ a0 K
listen 80;
9 h5 I8 H" e- |8 F; m server_name localhost mike.hi-linux.com;
( U ~5 x1 B% q6 f3 e0 Y! _" t access_log /var/log/nginx/yourdomain.log;; s" r$ Z1 k& e/ {5 _( |9 v) U
4 {0 X1 g* G( G& B5 N; r
3 m1 F( z6 }# r- R) d4 F. }7 D location / {7 \4 ^7 B5 S( A& I
. m' p6 M$ b! m
, ?+ ]0 e; o! L4 j! q/ p modsecurity on;
b" b: `# _& Y/ m, s! {6 f modsecurity_rules_file modsec_includes.conf;
" O0 D. e" P; p# C5 H root html;# O# R4 Q! N" l2 k, ]! h
index index.html index.htm;# g H* e9 W- ]/ U
}
1 g; r1 ?' Z- c* F8 d} e0 _7 ^; T+ G3 |& F
验证Nginx配置文件, b- {( G+ t# `
$ /usr/local/nginx/sbin/nginx -t
7 Q- f8 |4 R& c) ~nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
. ~6 y! P, f5 C* D. l# ]nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful! A# n/ V1 ?6 J% E
启动Nginx
$ A5 d$ K! C( d- S1 V' O$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
; x5 |& P+ ?5 [0 \0 g! E
3 p4 D( x2 `4 |) A" i' ?6 ^( D4 B; D测试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能够战胜更多复杂/未知/混淆的攻击模式。
& U. p6 K L: l |