找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 12397|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。/ ~9 t# A, A5 u- M9 j6 o" w
1 ~9 _7 G, L: u6 _
& y7 G' {4 p0 I, z3 L( d+ _
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
! P/ C! E1 q" t+ Z, @1 \" h! D9 i" k( Z3 ^' e" ]8 z8 d( Y
& u1 L: g7 n( J4 }; e$ Z: D- o
什么是ModSecurity  @' X/ V0 O% p% f' q6 t6 j
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。8 {9 r) i3 [* {3 b

! w/ I) y0 H! }0 h; M  M% @) N. P- l3 y3 v6 O) p9 \3 P# _
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
7 P) N% @; |- X7 @  l# Y- D) ^/ o" c$ R" x, G

- a6 M$ u1 G$ \& j/ f& bModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
" @+ y% K% Q# ~* t6 w$ v' F  I7 h/ K$ l
: P- Y- V+ q+ i  t/ I2 B
官网: https://www.modsecurity.org/
2 f$ w& C  g% [) A) M, H7 L" ^% W* I4 j1 B( t! j
- k6 m6 u0 }  c; F1 A
什么是OWASP CRS1 p7 F" a: C( S4 s# e* e
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。: B5 P9 N" J; @1 a+ Y
# ~8 k8 F. N1 ^6 |9 q
4 s' z4 a" q2 |$ |/ @* `' }+ L
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
8 ?' f( o) y( h  a$ w" y& ?% \* [( M. n* B' a# _' O
" Y0 O6 V3 Z4 b6 h5 w! C
HTTP Protection(HTTP防御)
# |$ t. [1 W4 g0 p+ q9 kHTTP协议和本地定义使用的detectsviolations策略。, ^) w' b# n" n$ A9 z2 @6 H

/ J; v' Z  ^' G5 r5 ^1 T6 @! h1 V2 Z; u: z) }" f
Real-time Blacklist Lookups(实时黑名单查询)
/ m/ o7 v1 W' N2 ?利用第三方IP名单。
: d/ M1 J7 G) B
, c( ~) K3 d4 b- a" U
- z; Z+ i, ?/ ^2 x* z6 c! D( NHTTP Denial of Service Protections(HTTP的拒绝服务保护)
# q. c% d2 D' |$ b  p- L/ ]3 }防御HTTP的洪水攻击和HTTP Dos攻击。) e! d' V% ?; O3 w- f  Z

- x6 a( g. d3 D! D- e( S0 C
" Z: {0 D% @2 l- b" o* g5 |Common Web Attacks Protection(常见的Web攻击防护)
9 W$ @6 r0 N/ z  O; d+ Q7 K检测常见的Web应用程序的安全攻击。
6 f6 r6 f2 U2 |, E4 @* T/ Z  x# ?, Y2 W
- q# p& X1 n" K4 d: L
- A1 F, ?8 J8 a( _" f/ n& ZAutomation Detection(自动化检测)( l7 i* U& K, R
检测机器人,爬虫,扫描仪和其他表面恶意活动。
$ `' E4 m+ X; w9 N) d9 V' H- w: j* E9 \

, r" J9 j1 ^; `Integration with AV Scanning for File Uploads(文件上传防病毒扫描)  N2 G# i. W! B6 t/ y* ?! U
检测通过Web应用程序上传的恶意文件。
: b0 u' ~1 ?& j  X9 p& \% u8 v  c) C3 ]$ {4 s; ?
6 r; e& K2 O8 D& t  z. U5 e3 I6 g
Tracking Sensitive Data(跟踪敏感数据)/ {8 L" n: a. E
信用卡通道的使用,并阻止泄漏。
9 x* M" a% t+ I7 {
! t1 c2 ^4 A( R1 q2 t8 L. m# n3 ?" q& x% q/ F
Trojan Protection(木马防护)6 h' O  X0 h7 x) Z' M* R
检测访问木马。
3 H/ |4 G6 o) r3 ]
" I. M/ ]6 e5 D+ @$ T( K
5 \7 B) S6 {7 S4 d. u8 {/ O2 TIdentification of Application Defects(应用程序缺陷的鉴定)* Q, T8 r9 J! @& V6 f7 o8 i+ ?6 k# z' u
检测应用程序的错误配置警报。/ e% z" @0 I, ?5 S! I. ^

* ]2 U: F6 z+ N9 x/ @/ q- e$ m; e
Error Detection and Hiding(错误检测和隐藏)
( s+ u# [( @* M0 b* a1 L* q检测伪装服务器发送错误消息。
  |( z( k0 j( _2 v  v! y1 f
' U& M+ X9 G$ B8 }& Z) m0 {
( O  j% ]" o9 q- U# w( e; m* v# ]安装ModSecurity+ v" _' O  v: s. s2 q, H' M
软件基础环境准备5 p9 r% Y, F2 }6 A, \3 d
下载对应软件包
' w! N# S% L  K$ cd /root
" d9 D& k+ _1 C- Y- B  }$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz') H* h) P- \3 [
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz* C3 W) w. W: r! B; T" K6 u4 E
安装Nginx和ModSecurity依赖包
9 y) }* Q5 u: WCentos/RHEL
. Q1 ~: w( q" v2 h
; R+ ?) s. @( O% I: x+ r- U+ v9 o9 V) Z9 I' @
$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
' H- a) E! c7 K' CUbuntu/Debian% o4 k& g- H4 v# m8 G

# g# n- V% n3 r6 c  ~' z  v
; y6 p& b: ?+ [! H' o& x# |7 Y$ 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) m6 K: G" R6 D" O- x4 g! H1 F! Q3 I
编译安装ModSecurity
# b  P. {7 x6 I! Y7 uNginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
2 f1 e4 m* p# \  u% `+ u& p, s
' {2 u: d0 P; B/ f$ O. E  A0 g1 D( b4 P9 h9 g7 T# b$ R) Y7 C/ L
方法一:编译为Nginx静态模块
) n4 e+ \6 d9 v/ f3 q/ C7 R& {# g4 E& H9 k4 d! B) C% r) t' v; v

; \  B8 V" i( t编译为独立模块(modsecurity-2.9.1)  G; t0 H0 Y2 G' W- p3 [& E
$ tar xzvf modsecurity-2.9.1.tar.gz4 v. ?( D" |/ X6 H# `8 l4 A9 H9 K+ B
$ cd modsecurity-2.9.1/
3 u6 n$ \6 P# P3 g$ ./autogen.sh
) _2 w( V% e! @( F/ R- m$ ./configure --enable-standalone-module --disable-mlogc
  m$ g5 |' S- C8 f! f$ make
' q: b8 k( Q* D% t6 H编译安装Nginx并添加ModSecurity模块
/ F" |2 n# E$ x. J7 L; h9 o$ E, {$ tar xzvf nginx-1.9.2.tar.gz
6 D; j- [" m" ^( t, Z$ cd nginx-1.9.21 K7 J+ P6 Y4 m) M
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
% j+ x. ]9 {& t, m$ make && make install
& M" E0 b0 D, d. u方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
, c: ?8 J( a6 i/ n
2 d) C9 R; F$ j7 D4 `4 @( D5 S5 g3 P4 X0 C
编译LibModSecurity(modsecurity-3.0)
" z9 }% i9 @' Q+ l9 q8 F$ cd /root
. Z; q, e; w- ^9 q+ w" |$ git clone https://github.com/SpiderLabs/ModSecurity5 T. z# x. v. q- n" [
$ cd ModSecurity
/ p4 c+ J) q" G" F5 u6 k) I$ git checkout -b v3/master origin/v3/master
2 z: k  c7 V8 W$ Y" Z* i$ sh build.sh# p; J* E2 M$ Q$ ?  e" a; U
$ git submodule init: j9 `9 q. i# a1 j% c9 H) E: Y) d
$ git submodule update0 S' k# }* o: V; o
$ ./configure
& F6 \: H, y- `3 [$ v  `: u4 g$ make! Y7 g) V! Q0 ]' ^, Z
$ make install# e3 D. ^' [7 S) ?# E
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。" j4 H6 l! @6 J0 R) g% R+ @

$ S" ^# x! a+ F5 n& l' d+ ^( O9 I- v5 R/ k' E$ L( G
$ ls /usr/local/modsecurity/lib+ v! k( T! o6 T! \7 B
libmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.0
/ P6 w# C' h; c6 G编译安装Nginx并添加ModSecurity-Nginx Connector模块
7 P5 \: D$ x8 c& [2 W使用ModSecurity-Nginx模块来连接LibModSecurity
9 x# c. ~+ |" F7 B2 Y9 B' T7 m0 s' y, k5 l( q7 n( {2 I
6 Y- e- G" B7 a8 f( O0 }7 r: `0 ~
$ cd /root
3 w& D1 }. A, W7 t% p6 h; h1 c$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
9 ~: p0 r* `5 p. E  b+ A4 {$ tar xzvf nginx-1.9.2.tar.gz
' B2 m) _/ y  o' S& K$ cd nginx-1.9.2" L" C0 m" c+ r$ F: k* C" Q! m
$ ./configure --add-module=/root/modsecurity-nginx- C! m; ]% u3 d8 s
$ make
0 f4 r6 J  R7 u$ make && make install
2 {6 I* X% h. |添加OWASP规则" D" ~' O# A% m' i* g
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。  x% T- f9 N9 b
  Q, `0 ]* W2 W& s( U! p# _" i* a

# ?" g4 n) c8 ]. N4 B& u" P- K下载OWASP规则并生成配置文件3 x7 R' N! v; C& q4 J
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
0 e8 c, A6 o' k2 K4 O. L& {# F$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/) S1 Y: [& C' r( w8 V0 X
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
0 n4 T+ e( k3 o0 V; Z; e; v1 q$ cp crs-setup.conf.example  crs-setup.conf6 }6 [3 _. p1 f( _7 D, i
配置OWASP规则
% `3 b, S  s8 w9 E# Y5 w" b编辑crs-setup.conf文件
; B! V* t3 K/ r
: U# @& q# j9 D) v" A2 h2 P3 w2 ~, u- f
+ B) h( _- D$ g' K  Q$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf1 P6 L1 b! [( h0 F) c
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
; d  E4 s! ?0 k; ^& I$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf8 j% f& m, F9 N+ Y$ Q; T
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf% K3 U( k. p: z7 g6 r% s
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。( b$ q9 }( S2 ~* x) \7 f

; ^4 @2 C% B0 g# X) v  e% c' M" B. y+ P! y! X
启用ModSecurity模块和CRS规则
7 K! c; G/ d) x& N/ f2 A复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。: o; x0 u& H' T$ f. y# ]. `' F
5 G- @! Y) Y+ Y. |' b

9 _( r) _- Q0 e3 {% l# Tmodsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。0 k2 b6 @! V* W1 h/ c% j

) h) V+ V# V% W* u" b& L4 T4 Z, i  ~: Y- U  L$ u0 D9 D
$ cd /root/modsecurity-2.9.1/
& A* c+ k$ \2 k* g* y$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  - H7 H# W4 j% D7 h5 ?+ u* ]$ \
$ cp unicode.mapping  /usr/local/nginx/conf/2 N: V) i7 J6 [
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。0 s9 A# C, N# _2 u9 O5 B# ?1 V

2 m$ _8 A: b( @( m
. U4 k: I1 |: K  E# J9 y5 `5 K$ vim /usr/local/nginx/conf/modsecurity.conf
* Q$ I. r& P; E9 x, T- eSecRuleEngine On
. K( o8 S' J- k6 L. \) U: V+ ?ModSecurity中几个常用配置说明:
7 b+ i& ]. Y) i# O- d, b5 r9 o
! y5 H9 I7 j! z+ ~% k/ h+ R& W/ H" H( [3 y0 }" u
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。1 W2 L1 F5 ], l' h; R; t/ L5 f& \

6 D- Y) w) D, s# O3 p/ g- n5 a( G( r$ V+ Y. {7 ~: s" h% }
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。% V) i- V  R# h" R$ b

$ R/ G# ^" h- W3 b. f3 @- Z, W4 z% V
# d% g7 [- D/ O0 x3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。$ p4 Z' y2 v- _2 I5 _5 C* l

6 m3 O/ Y( G/ M* t5 X1 n) J. }8 ^2 S" c: l1 y
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。, G$ P8 Q% ]; V: R) n/ c
7 Z: @- P9 [! g0 U8 [0 q8 _
2 [9 i8 O! f0 e6 B. w* h- x. b( P: E1 {
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
: v" o1 U8 y! m  e
; V6 H! |) |; M& B! z* N2 i. U* y3 @1 S8 W9 y/ q
3.x版本CRS" N, x8 i) [9 X' W* x+ z4 I
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs/ }1 k. i' L# q! ]9 a6 _
# 生成例外排除请求的配置文件
8 O' s) L% B6 j+ _% X9 ~$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
! \* v1 h4 n0 W0 N' v4 Z- F$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
6 T& o& j9 F1 b: h2 ]% a9 J$ cp rules/*.data /usr/local/nginx/conf) v8 Y" ?7 B3 q4 `. c- v6 T3 N
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
% I8 e9 |. l8 U; y6 [( C6 D
8 g: G! h2 a" q1 q4 v* Z# v" a
! |8 C0 m: I( u6 ]/ _! V- g$ vim /usr/local/nginx/conf/modsec_includes.conf& A* d2 i. j1 S* p

9 S! i+ b3 x5 h7 F+ N4 k+ [
[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

7 p& I, n( b: K+ n( N
+ B* Q- J) W9 S. r) m( @! t1 r. @% q  c* ?注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。* F; `+ ^5 `) D  m
) {, B) j6 V0 b0 g$ K+ A, p; W4 F1 }# `
' x4 O$ V! C% n( A# `
配置Nginx支持Modsecurity
: q% Y+ ~6 C: Z启用Modsecurity
8 a" X+ U- J$ q4 G使用静态模块加载的配置方法
# t. @2 `& N8 Q- w+ w! ]# K在需要启用Modsecurity的主机的location下面加入下面两行即可:& Z0 Q7 B$ U, J

9 v" U* H* m; d  m3 S9 d) o0 t
) Q7 `7 |8 x, m! R9 AModSecurityEnabled on;
' R$ k9 N; F% [; c+ s/ Q2 T/ _ModSecurityConfig modsec_includes.conf;
# q' J9 ~/ R8 U% ?, g修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。' M; u' I, }& p; l0 c% b
4 m' w# T7 a8 Q1 b! m: X
# `, k3 F0 x* `6 ^  B) X! @
$ vim /usr/local/nginx/conf/nginx.conf' `2 e% i5 D- H

! a- A" w# G7 @$ J. P
2 T/ m7 ~8 ~+ userver {5 H' ?  P6 ?+ r& R, j+ @4 h/ Q
  listen       80;
* y2 g% ~, Q$ |0 p% \5 x2 N  server_name  example.com;8 R) y8 Z/ }/ s+ ?7 t9 J* @
& e0 F- a( {' W' y4 l

  K4 v# z- k3 \% Q. r! a4 ^. L  location / {
2 ~- e8 a* d6 i; w" ^' K    ModSecurityEnabled on;6 r# _# \6 l% \2 Q; G
    ModSecurityConfig modsec_includes.conf;! b. z; T# ?  `. u: I1 l& a$ C
    root   html;0 ~( E7 O) h( X" M1 C5 ?& r
    index  index.html index.htm;
3 O+ F4 p. @8 u  b8 o  }
/ w! F8 O- q1 @! t, A* m; V4 {}# Y: b1 K0 W" _, [3 {( H" q1 ?
使用动态模块加载的配置方法
0 l$ Y8 y5 W( ?4 Z# z( d1 N/ J7 M在需要启用Modsecurity的主机的location下面加入下面两行即可:- p0 N5 D* r, h# M( @
! ~0 \* h% l  V% ]8 r

1 ^6 _0 z# ^, Q6 b! K* ?modsecurity on;- j, O6 B2 F* C/ R3 R; q! y( C
modsecurity_rules_file modsec_includes.conf;9 L3 z# Q5 {" h
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。# ]6 w% t2 i/ m
0 l2 V3 W4 C4 s+ D: m0 ~% k0 ?! N

9 n. X$ G5 e: s! _: D$ vim /usr/local/nginx/conf/nginx.conf
  _% @7 t: Q3 W# }1 S: H
6 \$ F- D% _( r, c: S7 C+ W- J# K( ^2 ~: z
server {0 `  K  @) }9 n! A" k: L. b
  listen  80;
! C3 C1 U5 S8 {. w5 g  server_name localhost mike.hi-linux.com;$ e7 T1 _; q! b) I
  access_log /var/log/nginx/yourdomain.log;0 \' K! B. ~7 R  X% Z; L5 S

: @# W' ]4 [, w1 U0 d+ p6 o" l, z' `) A
  location / {2 m9 L2 R( T& C) Q8 g- H, G4 t1 l

0 D/ S7 N  o5 E6 Z, A+ N% j3 z" U7 q5 U' C& A& |: P! }+ h
  modsecurity on;
+ g+ T/ z5 a) J6 w  modsecurity_rules_file modsec_includes.conf;
9 I% X7 v( g6 O4 c' m, N0 D  root   html;
# J. x* v8 ?/ i2 ~8 e  index  index.html index.htm;
9 v8 M8 B0 w* d}. Z: W: t" h5 S) v
}. Q) S$ I  A3 T1 k( _
验证Nginx配置文件
- T1 X4 \3 v: q1 V2 L/ f$ /usr/local/nginx/sbin/nginx -t
3 @: ~' e, f+ rnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok* r2 ?, Q* F8 }' m
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
' s& M* R! K# a* [9 h启动Nginx8 T+ T2 J; K- ]  ~8 n
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf$ E3 q% }3 j7 @  T8 {* A

5 N/ J3 a8 _" D1 \  e" \. l% Z- I% [

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

! o5 Q2 T7 D6 l  m5 {7 s

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-9-19 17:19 , Processed in 0.099183 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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