找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 9803|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。! ?& b5 i7 W5 \) C8 J
( o9 y8 @* f3 _3 Y2 V( D' u) I. A
  G. T8 s. V2 Q0 m( P( r& W
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。- F5 C4 J& Z1 |1 u6 D6 }
; X& ]& i9 ?8 o, {9 I" c

- p, W: P/ n4 n0 a& w4 P什么是ModSecurity) k; x) b  H+ v6 m5 y$ x
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。! ^0 p. N" ]  {" o2 B" Y/ ]" e: \
* z# A( {' \# V4 C

6 t7 l  @; V" x1 gModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
5 F! r6 b* S# _9 U7 g  J9 M6 |5 A
, r7 Y/ l- z2 c9 e
6 [' ]1 ?& G" ?1 j( }8 P' a: P  qModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。( o- C$ s2 ?/ ]1 G8 i' T, g
1 |8 b  R+ U* J% \+ k

& h2 h3 t% G" C$ [/ _8 ~+ o官网: https://www.modsecurity.org/  N- ?" I6 K5 E8 r
& U# Z9 Z) F" }, M& u% E# r
+ v: Q- y/ X/ D# L) g. @& s
什么是OWASP CRS/ E5 O+ P) u- I7 N% H4 H9 ?1 v5 w6 v/ w
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。2 d  @% `) Y4 j, n
) B" j' o" {+ @  X( d- K
: ^1 o+ o8 W% K9 i" x
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。8 Y% B, b$ X# {0 S% w/ p

. i9 t) N, i- \. `0 L0 a/ H3 ^  H! g8 }) F0 ?: {9 z! k3 g' ^: ?
HTTP Protection(HTTP防御)
# j! ?5 g( g5 O: k; Q% ~" r2 t3 DHTTP协议和本地定义使用的detectsviolations策略。
* M- T2 o% a0 f. n4 H0 C+ o
$ j3 b; L" D, [9 T' Y, M6 F9 |1 a& c
; ?2 P' ~5 y8 j: p; q% a7 Y8 o9 N: ^Real-time Blacklist Lookups(实时黑名单查询)6 I9 Z8 s# y3 I* M
利用第三方IP名单。: W) Q2 Z- {; G! |8 ~: l

& w0 \" n7 I% l9 ?3 P! j6 N; C4 h% s% T5 R6 N/ O# j3 d  v
HTTP Denial of Service Protections(HTTP的拒绝服务保护)
% w7 g- V3 K' D防御HTTP的洪水攻击和HTTP Dos攻击。' H; D- W2 e- p; w+ U
  q4 b4 ]8 _1 Y+ H0 V
7 a8 i: Z6 H1 G8 j
Common Web Attacks Protection(常见的Web攻击防护)
& H( y+ k" n2 z& Y检测常见的Web应用程序的安全攻击。
  X- }- }1 G% |6 b1 [$ T) Q" E
& ?) b+ ^: b# m1 R$ E  b! n  E( V
) ^& e5 E! f# P0 B- u7 J$ g2 qAutomation Detection(自动化检测)
, u. D9 ^. [% g% G  [) Q7 f7 o3 f检测机器人,爬虫,扫描仪和其他表面恶意活动。3 E$ |' l) `2 x9 `# a6 h7 {& L, f. e

& T4 g: i. X6 s4 g# t' @9 ]/ \: ^& Z1 J9 Q
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)
0 I: b5 t8 u6 |( P2 a检测通过Web应用程序上传的恶意文件。5 T- F3 c  D4 V1 X8 s& W0 u6 f: f

) L6 x% |* M( [0 P& B8 a" `
# p4 ]# f8 P6 j+ ]  R  OTracking Sensitive Data(跟踪敏感数据)
" `) n; Z+ A7 G信用卡通道的使用,并阻止泄漏。6 O9 j  V6 b0 d0 w, W3 g1 @
4 A/ Z1 W1 {% A1 x& M
/ x9 o9 H2 H* P
Trojan Protection(木马防护)( o5 f; C! r4 N+ I( k& Z1 f
检测访问木马。5 I' D" A  |; n# n0 U

2 c" ^0 _( l% k' u
9 {' x! }) B6 z) zIdentification of Application Defects(应用程序缺陷的鉴定); O/ S# p) C- r& ?  r
检测应用程序的错误配置警报。) h' i; K% g, `' R; Z& G. U! \8 @

5 I- N! E7 H- F& I: j7 u5 \2 f+ H
Error Detection and Hiding(错误检测和隐藏)
4 x. [$ E/ M  F* B检测伪装服务器发送错误消息。* X% j9 K4 m$ T1 Z$ V8 e5 E
+ J$ F6 l) J& N' \4 a2 [

0 Z6 M  p4 k; y6 l1 A" e4 L安装ModSecurity- X% h' J+ a3 Y
软件基础环境准备+ f6 Q- D0 q& w6 n( H
下载对应软件包& {7 Q, g5 Q5 v0 T( m) w
$ cd /root
/ K- v" G; }0 _. i7 Q# \& J$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz', H/ L7 l5 }- B- p* O5 M& H3 l' j
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz6 v3 S/ \* U4 m& k" w$ W: f4 ]9 h
安装Nginx和ModSecurity依赖包
: C7 `8 u1 T! ?# o# VCentos/RHEL+ ^! Z9 q# W% o

2 @0 d  y7 s; h5 m5 w! n/ J& U& H  W8 l5 B1 I
$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
! s( q1 @  I, @( U. }# U+ k, Y; r5 I0 F/ BUbuntu/Debian
1 D5 U5 ?( `# f( E
5 Y: H' {, @" Q8 ]5 r: B
1 J$ t# u2 P7 z8 r( p6 w9 A$ 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# {5 e( C$ E1 k; t+ t" D
编译安装ModSecurity8 z% I1 c+ P. S* p
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
0 |; A- G. ^+ R7 n# U, I3 e, W$ D  \; d) Y  j4 e$ o( }

8 R# U" p$ X. ^6 }方法一:编译为Nginx静态模块, v  Q3 I2 z7 D$ |

/ |, F5 \7 D( y; \* e
! c; }8 F6 `/ Y7 P编译为独立模块(modsecurity-2.9.1)
0 A6 @- r4 \% g' i; J$ tar xzvf modsecurity-2.9.1.tar.gz
" Y; ~; _6 T4 ?- x: ]0 q- W$ cd modsecurity-2.9.1/( f- `5 Z$ o8 z- g* t7 [
$ ./autogen.sh5 H* \' T- w4 {/ Y" q) g0 e2 J3 v
$ ./configure --enable-standalone-module --disable-mlogc* I& P% W6 `. a/ @% Q
$ make
" _  F" m1 C5 l0 e+ T. l编译安装Nginx并添加ModSecurity模块% d( D3 [6 X" [: d
$ tar xzvf nginx-1.9.2.tar.gz
9 u5 b; e1 o) ~4 }1 I, k4 L* ^$ cd nginx-1.9.2
, n- ?+ i6 W0 _" i9 _4 O# n5 f$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
; @1 Q) K$ @; t7 N6 m6 F' o$ make && make install
' \. W, J; r. K! j& M" d, P. o方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
/ e2 ]5 ?% ?8 ?' L4 B, e$ I
: u' m2 u5 Q# {) H
6 `6 U0 i3 U  Q9 k( Y! L9 `编译LibModSecurity(modsecurity-3.0)
  M& \5 W, G2 Z$ cd /root
- T3 F; H0 K/ Z% O; d: u" c* C0 t$ git clone https://github.com/SpiderLabs/ModSecurity) I0 {% Q1 U) c+ f/ a4 y! ?
$ cd ModSecurity6 T3 z* U0 M3 R* s9 o
$ git checkout -b v3/master origin/v3/master
  w7 ^) f% z' |  ]$ sh build.sh4 O3 W/ ~2 i" `* P) D6 s* d
$ git submodule init
5 u2 ]' P2 |/ ?. H$ git submodule update
3 N+ C. v& @8 m$ ./configure: Y, p) r. ?: u1 J& G6 f( d& p) r
$ make1 ?# w2 U, g" h( C' S  a' h4 B
$ make install
, A: K: z; ]6 O9 [- `2 |LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。0 \2 a2 `0 R1 o; g' P4 ]! h" x" M' s
! Y& j) u, l+ V& e8 B- s

% e5 O8 i4 P4 K' L" `7 D$ ls /usr/local/modsecurity/lib
$ ^8 v( E$ Q: ulibmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.0
" f- t% k# C% Q编译安装Nginx并添加ModSecurity-Nginx Connector模块% W! A9 Y" q- F2 p
使用ModSecurity-Nginx模块来连接LibModSecurity% Y& q$ v( s+ L1 H3 o

* a- ^6 T2 ~9 V& L! D
( I: P, x& V  V2 B( G$ cd /root
- E2 C! U* Y& [5 R4 R$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
: s, i! V2 L" L# _& ]$ tar xzvf nginx-1.9.2.tar.gz$ V' @( g/ T2 o7 I+ v1 o; @1 K
$ cd nginx-1.9.2
4 Y& @# q6 a( y! t! H( u$ ./configure --add-module=/root/modsecurity-nginx
6 v2 X( w; q9 d3 |* A8 j0 C$ make
0 }6 y% L6 R9 v- u2 m( v$ make && make install
9 D* i) ]' V$ e5 {- z添加OWASP规则" J" x$ J$ D$ f* b% _7 x1 ^. \7 r
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。+ c) E6 p) b7 a
/ d% g# c; M. b# P$ \3 f: ]) _, w

: [0 E2 Q- _1 M下载OWASP规则并生成配置文件6 P; C9 @, h/ G$ ?
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git' m$ u* O9 i7 ^& I
$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/( E' s3 f6 t; v* f" R# C
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs8 O0 Y3 `) `" v
$ cp crs-setup.conf.example  crs-setup.conf: f* f0 y8 j- ?- u% y  Z
配置OWASP规则1 c( T$ C  D" W, Y. W
编辑crs-setup.conf文件
- [- {$ ?$ ~: U. O8 U* a2 `/ D# ?) o3 F) Z' ]4 N; M* j

8 f0 b" K7 y3 d$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf( f0 y2 j# k0 u% M" n* z
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
8 A: x( b: G/ o$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
6 O9 D" @; I" F$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf1 o' q/ E! E! ^4 O; @, t0 W2 q! m
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。2 ?, Y' Y* p. w. R0 J" V
# ~. r9 R, G/ T6 [( o
; F) v+ v- k0 k; L- D
启用ModSecurity模块和CRS规则# ~" l( ^" O& V# `0 z8 Z1 j4 T
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
  ?% C4 n5 o; ~- p( I5 m3 p
* |0 k% ?- j/ @0 ~/ H
: o' X- ?6 }: G9 c& E( T1 Omodsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
: h; t) T4 l6 t/ y
+ `* z7 l. ?4 t; T3 ^  K+ C' h: c
1 `$ Q" |& G9 r' Z* @1 S$ cd /root/modsecurity-2.9.1/
7 z# y) \0 ^. N- ~' |0 F+ i7 h$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  
& y! o0 q4 h+ u; I9 D$ cp unicode.mapping  /usr/local/nginx/conf/
  |  ^, y' O  ?, `将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
% y: F+ _* D3 M/ m- r  z! @3 ]* }, J

9 F+ P( d% Y; d$ vim /usr/local/nginx/conf/modsecurity.conf
, f3 v( L3 l# V! h% u/ ^" lSecRuleEngine On5 B8 G$ E, N% U% N) \6 w' e$ y
ModSecurity中几个常用配置说明:$ W; _9 G" f: W9 F5 y- z, S
6 V' s1 k  ]/ O
9 S3 \, c7 u- w8 Z( d
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。/ B7 a, i, S; M4 K) n* O- s) K
4 L) S8 \: V) V, o1 ~
8 X) J/ M7 W* H/ s3 f0 g! d! x* K
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。$ z  Z2 J1 o$ H
7 c! |3 e, x* s% J9 L  T
0 I9 a+ p4 K$ m1 C
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。5 k' X, @; e' Y+ y. K
* G1 z& G) v/ q7 i+ V/ u
, _, K0 B1 i8 l5 Q0 @
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。$ H& [# P! Y0 {  q6 i! G
! g, N$ ]0 A7 R2 A1 G% `

( `( g5 ]8 r' I1 L: o2 N1 D在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
3 w' M1 l: h7 J7 t* X
% ^6 ?% p7 u* k! W" w
! b7 e7 I# C; `% }7 n- F$ c3.x版本CRS
4 j7 J1 r. d$ z$ w$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
" n5 g: m" J' {1 q3 D( d. a5 |7 x# 生成例外排除请求的配置文件
& ^" p. B7 u) S5 j6 V# f1 J$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf6 b8 X/ u0 w+ d' W5 O( X
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
, I9 }; x* V" B$ cp rules/*.data /usr/local/nginx/conf
2 d: ^8 q" j+ _* r为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
' J0 _- C6 L! {1 K. k* a+ w
2 D9 f' W  I2 b" U
# U" R" a7 ~3 g/ A4 ?: y' [  ~7 V6 p$ vim /usr/local/nginx/conf/modsec_includes.conf
- v$ L, \% J' {1 ]0 @* o
5 Y9 D: M7 s9 Y0 C
[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

# Y' k. q, p: o+ v! G' e
- G) t& ^  w) z. x: C注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。9 }- Z! x0 V  M9 H  f" V: x

4 t) S( ?% N  p# |# }4 x! I) z0 g5 @2 n
配置Nginx支持Modsecurity
, A( U& x% N. i5 ?5 M8 v9 H启用Modsecurity
* q, P1 D) [) r% [使用静态模块加载的配置方法
0 Z- T! W- C* G8 w' i在需要启用Modsecurity的主机的location下面加入下面两行即可:
( S3 s. D/ }! f9 g, w0 h- Y- w2 W! K" R! ^
3 i: d  a2 L. k2 t$ y
ModSecurityEnabled on;
3 b, _1 B; c  j0 z2 G! A# gModSecurityConfig modsec_includes.conf;
* C- [# b5 h) p; N4 ?修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。* D) p- e% f7 M0 Q# o" }) S, W

+ M# a2 b0 F- T' r" N+ R) v2 z$ X9 S. C
$ vim /usr/local/nginx/conf/nginx.conf4 r. @" C; I* `$ H/ B

0 X8 k8 E8 u* v" ?" _. ]; }
4 G/ o- W2 y/ e6 B1 N8 U9 G5 Yserver {
2 d9 S" v) q# c: Y' K  a' x) D" U  listen       80;
( H) l! V+ [# N8 T+ H& D' l  server_name  example.com;0 z4 t% z- B5 }' h" z9 _+ K- \
! L6 H$ V' @2 M& `9 _

+ t% z5 f% Y$ T# {! e  D8 |) V  location / {
8 P# `3 q$ v, J. y  r* K+ @    ModSecurityEnabled on;" S8 G6 L: i. Z' |' ~
    ModSecurityConfig modsec_includes.conf;6 e% g6 I" @8 y5 y2 V' b7 M8 ]
    root   html;2 w) j3 Z5 [& v' X$ m
    index  index.html index.htm;# I" k8 X, Y' x/ P% j6 P
  }8 W2 O) W* g1 }0 t# w7 f1 r
}
  N- I# c9 b9 S使用动态模块加载的配置方法1 S! _' J! I0 y$ @
在需要启用Modsecurity的主机的location下面加入下面两行即可:
8 k& F1 l* g" M" F+ }3 p4 b% r' c1 F- `. f$ X; H
3 o$ p: `( }: k! d/ n  y8 s* j
modsecurity on;
+ q- H6 f/ F) G% h: v+ [( W1 @modsecurity_rules_file modsec_includes.conf;" e  E3 d9 U! c
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
- t% A# z" }: i( M
9 ]7 y1 [- l# R1 G1 D0 k6 L9 ?" m1 U" [
$ vim /usr/local/nginx/conf/nginx.conf0 p* j, e4 {1 q1 r3 ?0 I6 U

" J+ z- a. ?& B$ j9 M6 m4 N" z; Y4 a* B
server {3 j$ ~! y2 V5 t
  listen  80;+ S" h5 N* t3 _' k  ?4 @
  server_name localhost mike.hi-linux.com;2 D- N+ |2 \: {4 w# ]: ^) Y
  access_log /var/log/nginx/yourdomain.log;& B- G2 J7 J" a+ c: }$ o# w

; D- U8 g  \+ x
& @! M9 L+ |6 w( A( ~# Y  location / {
6 @% w! X6 W2 {$ l3 F8 \! m' w9 n0 R3 O7 L- Z% x) _8 k+ |5 W

: z. ?" V) N4 b5 g3 e  modsecurity on;7 }# d. E6 ]8 n% ?8 g' f
  modsecurity_rules_file modsec_includes.conf;9 D- y: q( B7 x9 Z
  root   html;# F" G9 }" A' ]. Q- \3 ~
  index  index.html index.htm;1 P* L# [% D; j4 y0 x! j, x
}
( c% Z) {( I* }' R}' e# O: P! C" o/ r3 _+ y. t
验证Nginx配置文件
9 B- Y# |3 V  |+ d4 B# o  ^' X9 }$ /usr/local/nginx/sbin/nginx -t
% f5 z* r: B7 U$ d5 Q% |nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok  J7 N7 A, f* `7 E% o* }4 K
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
' I* k7 E7 O  E# _2 V# e8 Y1 w( P启动Nginx
# d$ l3 v- D. ^% k$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
; L: _. ~: y- j
0 q0 }# ~4 X3 D) b5 r* v5 O

测试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.log

Modsecurity主要是规则验证(验证已知漏洞),Nginx下还有另一个功能强大的WAF模块Naxsi。Naxsi最大特点是可以设置学习模式,抓取您的网站产生必要的白名单,以避免误报!Naxsi不依赖于预先定义的签名,Naxsi能够战胜更多复杂/未知/混淆的攻击模式。

/ _% Q& p8 ^$ t6 v+ N( e

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|第一站论坛 ( 蜀ICP备06004864号-6 )

GMT+8, 2025-12-25 17:51 , Processed in 0.051392 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表