找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 12791|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。3 k! Q0 s4 m$ J, T

. V+ d" F8 P- F* y% `# Q1 Q% {9 u7 g% [' D
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。- h, G# {6 |* \$ |$ _2 {
/ P5 g( `% H. ?% I) u8 q: O4 `

. e( R, w( I8 g& c0 Y, f什么是ModSecurity
9 S% m' c- u7 E6 UModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。4 B" T7 i, J9 h5 c9 Q/ p$ I

* U/ q  D+ e5 I* ]/ |& d0 [6 C) z. O. Y  l) B) _* j; \
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。  ?9 Z1 v: t( ~. }( v: `
8 H, d' e- R" n" e4 f
/ x( A. C3 i& C3 S8 I$ i3 g
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。; _9 D. g7 w8 }9 X2 G8 a. h

, T" l/ v2 n, c+ ~0 p# c8 @
" N, u; O0 K6 J$ n8 J$ o& A官网: https://www.modsecurity.org/
7 O- \/ D9 x, s, b  `- Q- v; d  P& U

6 x! I0 k$ O. R  l. \3 A7 B# u4 P什么是OWASP CRS( _) S1 O8 n4 P  d' `2 B
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
% e& n/ `& M) n+ l& a3 x3 ?8 Y! E. s1 o- L
! w: Y, g! p. d
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。* Y3 r7 O+ c  E/ Z9 s- D9 _* X
/ v. z! e& A, l7 V% u" J$ H
5 x. w! F& u6 z. o2 T  d/ v
HTTP Protection(HTTP防御)1 o5 u/ g6 C* h! j8 N
HTTP协议和本地定义使用的detectsviolations策略。  K9 x4 o1 n9 y" A
- ~# S/ L) e  j0 F8 A
( T. t/ s3 x  |5 b* {+ j9 O: T
Real-time Blacklist Lookups(实时黑名单查询)
% [. N, Z$ z: U) N5 r! y/ |+ Z利用第三方IP名单。
6 M$ z* W' W4 \! l3 w7 v0 Q6 _) V) h2 P

- `% ^% z0 A2 Q2 o( o- pHTTP Denial of Service Protections(HTTP的拒绝服务保护)/ p# b  P" R& g0 Y
防御HTTP的洪水攻击和HTTP Dos攻击。0 V0 G8 t' w' H- [- \$ N7 }) w

; m5 e5 W* P# J4 Z* q9 ?+ Q7 H: l  ~  d. P7 [) K
Common Web Attacks Protection(常见的Web攻击防护)
1 |# x; K( p0 y- F检测常见的Web应用程序的安全攻击。
: Q9 C7 p' d* V
. J2 T1 Y: H$ [5 Q& Y- L' x
3 \3 w% }/ \! n. E: `Automation Detection(自动化检测)
/ C' [$ Z* e) G5 g' t# {检测机器人,爬虫,扫描仪和其他表面恶意活动。
7 T3 Y. ~; @. @; Z2 S# ?, X
! i, S  l+ _- C2 ?# O8 y& @4 O( X% E2 H$ `. q
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)
% p: M. S- K8 O) J+ o; p: E检测通过Web应用程序上传的恶意文件。# E& n& {* Z" y6 b/ A" d

' x! b$ O5 g8 r1 n* {5 m% u1 }, W9 ]' N0 ]5 G+ y6 S
Tracking Sensitive Data(跟踪敏感数据)
1 {& d) {" c& y  D信用卡通道的使用,并阻止泄漏。
. M9 F' G$ }+ M0 {2 d% p! }$ ^2 x
0 ]/ h4 u. ~+ ~& N  n  f# b% m6 ?- l6 _) m7 _) y
Trojan Protection(木马防护)
4 q8 L2 O3 t3 o0 `2 X检测访问木马。4 O# X* G# j0 v* }" Z
! E5 j$ z9 e" \: t0 Y
* [- J* r1 K( u+ ]1 p0 S3 [
Identification of Application Defects(应用程序缺陷的鉴定)
5 {) n( u5 h1 f检测应用程序的错误配置警报。' d  k  a* I9 m- O2 U% M) e3 E- d
; V% _  Y3 T. Y2 H3 G+ c% Y" O

) L( e  P9 G, k" N3 P$ d$ }Error Detection and Hiding(错误检测和隐藏)
! U; m. \" Z2 s. c  ~: v% K- E检测伪装服务器发送错误消息。: \# ]$ c+ w# Q! y$ s6 Y/ e

" k( S1 C4 f& g% o* N! e* B  h
, c( b  G4 Z5 l) ~$ y, N安装ModSecurity) [, s0 w2 a& L, X
软件基础环境准备
  h) |! h. ]: F( O: G下载对应软件包
! l; N  {; _$ A5 E$ K- [+ ~: g# X: W$ cd /root1 U* Q  F! U8 K! ?
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
7 `; f% J3 X+ J. c' a- {2 T$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz
' ~# w- }; D+ n0 Y* B安装Nginx和ModSecurity依赖包
" X- y' D  G  ]* U. Y  F6 PCentos/RHEL
0 T' a+ L( Y+ |: V. E& p+ ~, l% x$ E6 |7 g, B$ d  i& ?  h5 V

' t, e, |+ F# E$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
4 g) d* J( ~) P1 z0 y7 S4 {! d8 FUbuntu/Debian, @7 g; r1 X# Z5 `
9 h0 [- S& U5 r0 [( ^- f5 f6 N
, N! Z* I) Y# P: _2 i( t+ q5 n7 T
$ 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- J# p3 g' d% ~4 R6 p+ H. e
编译安装ModSecurity3 J+ P# i! ~2 [
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。. o7 b. W+ Z$ W" K! ~% J

7 m- {$ r7 c; v& |) _( r- R' n) x$ o# P" R* q) }
方法一:编译为Nginx静态模块+ B! s0 F4 B; q  Y! T7 v( c& R% V

$ b( [/ ]7 h0 Y' H3 `  h% \8 \# y& v+ }
编译为独立模块(modsecurity-2.9.1)
2 H: c" v, r; J$ i, Y! g$ tar xzvf modsecurity-2.9.1.tar.gz* V+ N( G; |/ N% I
$ cd modsecurity-2.9.1/6 v6 X2 k3 G3 H: A/ b# |( ~
$ ./autogen.sh: K5 t( c1 n. z9 V6 X& w
$ ./configure --enable-standalone-module --disable-mlogc1 g' e% {* o- [2 L8 f0 ~
$ make  W/ H$ g4 F& R% j, l* O
编译安装Nginx并添加ModSecurity模块
: Y' T1 h7 j4 H7 {0 _' L8 ~' s$ tar xzvf nginx-1.9.2.tar.gz
* j$ }( k& L( H) H) _2 P) r- U$ cd nginx-1.9.2
- J4 @* x! o3 D: y7 b0 o. V0 }$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/) A7 E* D8 `/ k
$ make && make install4 A" x- Z% F0 e
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
- N$ W4 n) P  S2 }/ v
5 c# e$ [! E- U8 C5 D! ~
, j  O( i3 P7 \8 Z) U编译LibModSecurity(modsecurity-3.0)2 E  ]0 O6 n; M" v' c
$ cd /root
" {$ {' l. o& [$ git clone https://github.com/SpiderLabs/ModSecurity& ^% E, u" ]1 m. M% c0 ]
$ cd ModSecurity
3 f6 }/ ^6 {$ z* c; @+ z$ q3 a$ git checkout -b v3/master origin/v3/master
" ?3 ?% B4 p+ G8 Y' k/ K$ sh build.sh
) k  P/ V/ }- f4 Q0 q  C$ git submodule init
) u) ^5 I. P5 [" l% v) [* Z$ git submodule update% a4 b2 @: W, X. k
$ ./configure5 `6 N/ v' y% M3 Y( f3 Y8 y
$ make
( I% A) P( d/ z0 w+ {4 D& p, z$ make install$ h( h2 j( Z. S' u4 N$ F
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。2 @1 l9 C$ J; a8 v

9 m7 z6 \# Q7 }6 R
" x. p& j5 i) _+ j$ ls /usr/local/modsecurity/lib
- j0 u: K9 R) a+ |5 [  Wlibmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.0
) C  M7 P0 {- @. N" O* |& F, b2 @编译安装Nginx并添加ModSecurity-Nginx Connector模块! O# _# B! L. o1 c+ t" d5 z
使用ModSecurity-Nginx模块来连接LibModSecurity. N/ B" D2 ~+ e

" b4 j. b: i1 ~
- A4 h: N! y$ ?' @$ v$ cd /root- P+ x1 J, m4 f
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx/ ]; m: Q% _6 N/ ]: U. }  C
$ tar xzvf nginx-1.9.2.tar.gz$ Z- p6 {( S5 [0 B1 f; R/ F
$ cd nginx-1.9.2
9 {/ {4 x3 @) k/ O) ~$ ./configure --add-module=/root/modsecurity-nginx1 e1 K# {. ?! _& M1 ^  V. }
$ make
5 U4 d, x; L7 m$ t2 a* a$ make && make install
# g! H: ?8 ~( Y; B$ o+ m+ P添加OWASP规则
7 U9 k# g) k7 i: s, _. q' L7 jModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
0 w0 a" ]& ?6 _% I' Q& x- B1 K/ G

- H2 t5 o: U5 ^/ z2 k7 N' w6 s下载OWASP规则并生成配置文件2 e3 p( b* B" ^) o/ G. H7 s6 R  q
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git4 J% j7 I* ]9 K6 y. J$ p" ^/ b
$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/7 N$ w- M3 d; Z  _
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
' S# [1 o$ G: c( A; h$ cp crs-setup.conf.example  crs-setup.conf& b9 S+ I$ e" i+ J8 Y1 Q6 W
配置OWASP规则! j: Z/ N+ d) ~, |2 t( k0 f8 B
编辑crs-setup.conf文件
' @; {& r, x  A  r! V. x
8 f. c* ^4 V& d* U  U" M+ P, M3 ^* X( |! I8 Q
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
2 E- T, E; j/ Y( s& A$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf  ^1 C. r" d0 ]+ g4 I/ n8 ~, }4 G
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
4 c6 \# i) Y$ G3 n, P) Q$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf" W- e* W/ ?$ U/ j4 z4 l! R
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
, d$ [) n0 z  t. C+ W8 M5 F
( ?9 h6 v$ \& X8 s2 a' @( V! O6 o# S( d9 h& l% ]! [  M1 C
启用ModSecurity模块和CRS规则
8 O! s0 {/ G- c2 p0 ?  z* t复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
- W* q1 S% r/ n  Q/ w1 k4 s  z4 x4 K/ D/ [' d  p" R5 s8 h

' L* T* V, ?: R0 Dmodsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
8 }, T% F' F& S+ f  B8 [
1 U9 a! {2 ~2 ~6 C  e
+ Q. V7 e. I9 F0 }6 O$ cd /root/modsecurity-2.9.1/7 U, x$ [" ]# f% o1 z
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  
- \6 e" ~# K5 r/ C- S$ cp unicode.mapping  /usr/local/nginx/conf/+ P% n, Z" _' p0 b. e* a' I3 [
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
% r4 {/ [0 \- n4 w8 R
8 n9 {! h* ]6 j- M( [' W4 e/ X2 ~/ ]- b- u" r
$ vim /usr/local/nginx/conf/modsecurity.conf8 y& a" e; ^4 a$ y
SecRuleEngine On  K8 E7 i3 Q) I8 V8 ]" l9 \
ModSecurity中几个常用配置说明:4 p. ?8 e" s: o& O( O7 F
( o3 ~' Q7 Q8 H% S7 O8 ~; m2 y! E
6 {  ^: u) C7 ?3 J* N9 G
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。4 |8 P' K, g- J

2 s2 q; ]1 G  o& \/ {; A) c! i
7 }  x- l8 e, s9 z5 T6 w+ |; `6 ]2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
6 e4 I* |: f) E6 z2 C: v7 o! m  m
9 s3 L, g2 g* X1 @7 [
& {$ R- Z7 ^  q: \; U) r3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
+ j' v$ B, f8 R3 V4 q2 a; X! ^: ?/ d, Q. t2 Q6 l$ M( M4 [

- p8 h: d+ i( j- h. J' x2 j7 A4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。- A, ?  M4 m0 v; [

( a+ W6 e' @- Z$ r+ w5 _  \4 I1 M: h! v7 k+ M) K- m
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
% ^( f4 h* {; T5 j1 P, B; E3 f' o& V1 Z$ V4 j7 u: @

! ~1 M# L7 q4 q4 E- h, M7 ~3.x版本CRS) {; A3 u- A' W8 g
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs; k: d7 \% v" }- g
# 生成例外排除请求的配置文件3 s2 [' W0 C! m% g/ G
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
2 r9 m, v& P% \( L! _$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf+ C- O7 L" \* J9 S. n' q! `
$ cp rules/*.data /usr/local/nginx/conf
6 S- H# O7 s  F% S9 L6 d  w3 w为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
" w* L; ]5 s/ ], e) q- e+ l( x$ F! {& X
% G; x8 O& ~; P1 t2 x- B0 r" Y& V
$ vim /usr/local/nginx/conf/modsec_includes.conf" a3 |' U# O/ C

& x( G# W  ?  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
/ I0 x, t% y* s

& u& I$ a* n8 @9 W" r, m注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。: ^! Y6 b8 B* k, t2 ^

8 K6 R8 N4 g' B5 Z' q/ Q  t' D1 I3 h  N- |& O8 F
配置Nginx支持Modsecurity/ i# p/ @# ]: N+ U7 p, H
启用Modsecurity
8 `: J5 X+ W6 B5 I使用静态模块加载的配置方法
. b+ L  P3 @& E& }1 `在需要启用Modsecurity的主机的location下面加入下面两行即可:1 l! J6 s& T& W' O9 ~/ g+ o

" o4 g! @& W! x& O& @5 E# [7 m( A/ J# Q
ModSecurityEnabled on;
* L& l, G( o7 y* M4 FModSecurityConfig modsec_includes.conf;& }# a6 m! p3 h
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。; a+ y5 z8 s  C& _8 I( o7 T

4 ~' [/ s/ |( i
" l/ s5 d8 L3 H! }$ vim /usr/local/nginx/conf/nginx.conf$ O, h- m/ y8 @& g
& ]) r4 Z1 `1 g' P4 f9 G2 J
  ^  d8 o, q/ c
server {
& _* I" m5 r6 ?$ D  listen       80;
! e- T9 _4 }2 ]9 B3 H: [  server_name  example.com;- E& K8 H' k( {4 e  a+ Z1 ?3 V. R

5 }2 \; y/ J, F# g: t* b( p" @& j3 s! N: Q/ W# J
  location / {
  t3 w  x. e% p) j$ J; b# \0 I5 t    ModSecurityEnabled on;
. s7 d4 k2 [0 q- z" P# p    ModSecurityConfig modsec_includes.conf;
  _$ D# z8 G0 L4 B9 c, m# m    root   html;
0 L) O0 ~0 S, k, H$ ^8 w    index  index.html index.htm;
$ ]" x7 m; a4 q  \- X- g+ B0 }6 q  }
. s4 Q3 U& @- x7 l- U6 i}0 f" X2 A: v- k& ]
使用动态模块加载的配置方法  R2 s+ h! q& O7 m9 Q
在需要启用Modsecurity的主机的location下面加入下面两行即可:; \: e& x  n" u5 P2 @- t1 D9 ~

- b4 \6 s, _! O: e$ @
2 A( a! g" U& y$ H+ ]modsecurity on;. \4 d, j& |+ m
modsecurity_rules_file modsec_includes.conf;
8 O+ a$ L4 N0 O5 c' k( F修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。# y5 _8 g* n6 K  k# j4 c/ g+ ]. Q, @

, a( |& G, R# W( m% ^# ?5 X8 X/ x* ~' w7 F* I- y
$ vim /usr/local/nginx/conf/nginx.conf) ]; ~7 m( n- }4 s% Y" q! ~

% Q$ O1 x, B1 f$ q
) {6 r% P' S' U6 S3 S) d. b4 W& jserver {7 u) g7 ^$ g* Z& s- R6 b( P
  listen  80;
9 R3 ?* u; H/ }. h  server_name localhost mike.hi-linux.com;+ D; h- D8 A# u
  access_log /var/log/nginx/yourdomain.log;
# u7 s" z3 D8 H1 y# _& c' y% E( g# t; L
+ C8 z. H. {" ~. _) i- y: S( P
  location / {7 T, z) i1 [3 [

2 T% F! b3 h8 x. J! X' K7 o/ [
+ [3 N- s4 e' S4 j- X9 [, P  modsecurity on;
' d+ t) z" P+ f4 F+ m% T: c6 P7 T5 [  modsecurity_rules_file modsec_includes.conf;& G8 U* `( ?! j! d3 t" z# d$ m+ D
  root   html;9 r, q" m/ @! d4 L- n$ M4 O9 \$ d' r
  index  index.html index.htm;
0 j4 c$ j% p3 R. d" E* M9 w}3 `3 N9 m& i% w% z; t2 J' f1 z
}
8 |* Q2 D2 g3 t: z, H+ t2 a验证Nginx配置文件1 ?$ ?+ v+ @- d. a
$ /usr/local/nginx/sbin/nginx -t# p: f8 v( Z6 }* o1 p2 K
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
/ H8 ]1 l: U$ x: f9 g$ ^, @) Fnginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful4 J3 U( \* {" Y6 w# k
启动Nginx- D8 ]( I9 Z( w* t4 D: ]4 P* o
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf# z% P: s& V  s6 [( k7 |
+ D$ o2 P6 h( ]. Q/ g

测试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能够战胜更多复杂/未知/混淆的攻击模式。


1 g; X' i$ X2 u2 h3 h

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-11-15 19:06 , Processed in 0.054038 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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