找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 12159|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
' m8 f0 W) e( R, r; ]
7 P2 g/ l9 |8 H
" w7 X5 C5 L1 x, E, x* S2 S在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
1 K1 x5 e, H: H4 s% U. }0 g1 S: I! Z' |4 \
- H3 o, Q  E$ L2 [( v
什么是ModSecurity% M, K2 m, G" L: i& k
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。% B  s) `/ W4 M3 E

+ C! T8 Y0 L2 d- l, Q7 M6 o4 \+ |- O- V
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
+ G. ]. b2 y& T$ e$ B5 _5 y5 `/ @$ u! K
$ E- D2 x0 M6 X' z4 K
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。- U1 ^, ?2 s- n( ]( z
$ T7 m0 g# B" p# k2 Q. c5 k

8 ~& e$ X: K9 f1 A& z/ m8 J官网: https://www.modsecurity.org/
! B7 ~, P6 ^: t! e) P2 M6 V% [! F
+ x& J' t( e* J. n
什么是OWASP CRS9 ^: x+ V. i2 \: t1 U' q
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
+ N( L+ o: `/ W$ j! d) k% l
& [) j1 j7 z, ?( Q, l+ G- ~2 \5 I% [5 B$ ]) }; p( p) F
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
! }1 `7 L! _5 R9 F$ H8 Z/ H9 e# ^5 T

7 t7 f6 G1 N" |& G$ F0 lHTTP Protection(HTTP防御)
% ^: j$ ^* ^8 {. wHTTP协议和本地定义使用的detectsviolations策略。7 o7 [. [6 H) @
7 B' @' ^" }1 _  }6 @+ M2 F

/ C9 b; d6 v; j8 `Real-time Blacklist Lookups(实时黑名单查询)7 i! V  v0 @: E) Q& {% {) _3 M
利用第三方IP名单。
5 d/ g5 C% Z# T4 b; C9 ~) N# f" @. S( p4 c: A& r/ o
% A4 `, ]& X" `2 e! ^
HTTP Denial of Service Protections(HTTP的拒绝服务保护), P9 n+ y, h) C6 m: w$ K
防御HTTP的洪水攻击和HTTP Dos攻击。
+ v& c& E4 ?  @6 l5 F$ b, U( Q" o' y6 S* T& b
$ ?5 l+ P/ V. k3 y5 d1 ~) y( }
Common Web Attacks Protection(常见的Web攻击防护)
9 Z8 ]+ A1 V/ ~) g9 O检测常见的Web应用程序的安全攻击。' K9 M! T$ H& U4 k

! D+ T; B) h3 p+ `* W9 O- M. N6 |
Automation Detection(自动化检测)2 P7 i1 s3 a5 f, M" B/ e1 u' F
检测机器人,爬虫,扫描仪和其他表面恶意活动。. ~+ ~- B+ l' L* j3 \* E

0 h! F& s4 d3 w- w$ L) A
- G. {1 S  J, k7 r) p, v5 G* mIntegration with AV Scanning for File Uploads(文件上传防病毒扫描)
# C6 }  y" O1 {7 ~/ r% u* j- `1 c检测通过Web应用程序上传的恶意文件。
5 ~7 S8 c, K9 u% @5 a$ h. i- K2 ^* j3 z9 h2 |$ y

5 F4 n4 [5 p4 ]9 ~" m5 k- QTracking Sensitive Data(跟踪敏感数据)
% q' v( B1 s$ w* R: n, X信用卡通道的使用,并阻止泄漏。
' v4 i- t0 h; m* p. N6 I) V
2 K# _( g4 e  t9 R& w% Z" R! H/ R. P; O
Trojan Protection(木马防护)+ B8 T$ m4 I) y+ w. H* b8 f
检测访问木马。
6 t. ^2 y. Y3 D0 [3 L$ t) `2 ]" m/ j) ?+ Z
3 c' J2 U. w! w6 I" k) f+ p
Identification of Application Defects(应用程序缺陷的鉴定)
2 [: ^" A7 ^1 j4 h检测应用程序的错误配置警报。
, c) F  B! T) M: g. e$ C
. R0 {! p% W0 `8 d
$ x* G8 I* @6 K# G( m& L9 FError Detection and Hiding(错误检测和隐藏)( n, _# w0 r) ~  R5 H
检测伪装服务器发送错误消息。
  v, \$ [# h  j6 s8 H/ P+ |+ |% U( z: j0 n* z" ~
4 D( o6 A5 B! C" i; t& R* z& \/ |
安装ModSecurity0 c& \# Q7 \1 Z/ d
软件基础环境准备* ]$ j' o& Z- e  d
下载对应软件包: A+ a. C9 y1 k
$ cd /root# i/ Y" d' m) }0 ~  v
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'- j7 @( ]; @+ s; d/ 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
1 Y9 h4 T# w9 \1 B; j- l安装Nginx和ModSecurity依赖包
( u5 S3 {: Q6 S9 {, \3 kCentos/RHEL1 c  Q+ u  I: n2 D" h' M8 a3 |; v

  e4 J5 Q, J3 H- f% ^- R
; A! e% C: X: ?( S) d3 q3 ]) E$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel" _2 R5 }& Z: `9 s
Ubuntu/Debian
/ j( M# _# }* k" y( E* [0 T+ R, O% W7 {# n6 G4 ^

$ ~  O" \/ \8 B1 u" h5 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" F% J  p; f$ }4 l; O" }  q' g. N; j
编译安装ModSecurity
% z1 p7 j8 p9 m0 S* x: s$ p% {! ]Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
& P8 o9 B$ w. F$ h9 h4 D. E. F# \) i9 S( I3 w- l
/ Z) c8 Y9 M  m
方法一:编译为Nginx静态模块6 Q3 ]& [% p; h/ y: E1 Q' D

2 N8 z) W; @. o, [, Y/ z5 V
% I( r: @1 Y0 z$ c  t, L6 \8 R编译为独立模块(modsecurity-2.9.1)
( K. k  p- H+ X6 w. ]; ^. H+ X$ tar xzvf modsecurity-2.9.1.tar.gz
" `# h, U+ l* A7 C  h$ cd modsecurity-2.9.1/' I7 P( I2 C$ Z
$ ./autogen.sh
0 C" A; f) v7 R! q$ ./configure --enable-standalone-module --disable-mlogc3 Z1 N3 N! Q- d# q  \/ o* m" `. G
$ make
& h2 c8 d5 ]1 _' h编译安装Nginx并添加ModSecurity模块
, q( `. q" [* W$ N: m0 n$ tar xzvf nginx-1.9.2.tar.gz+ E3 W- |3 [* ~  ~
$ cd nginx-1.9.2$ J0 ]" n" K; c* g% r! n/ q1 X) g
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
3 U! w, ^( I# ?  D3 _8 V$ make && make install
/ O& j% E6 p2 ]/ L/ B" A方法二:编译通过ModSecurity-Nginx Connector加载的动态模块7 Y, Y2 t9 I* F3 @" D) D6 \

5 h9 m( ~& E0 m4 B9 p+ Z
2 `$ J5 k6 }: I. k6 X+ o8 F编译LibModSecurity(modsecurity-3.0)
, s9 _5 a# ?6 V. n% ^$ cd /root8 {1 l2 n3 E; x* C( |7 ?3 }# O  q# ~! g
$ git clone https://github.com/SpiderLabs/ModSecurity
; l; Q# S3 W9 i& q3 X7 e$ cd ModSecurity- e& d6 t" A$ d* n* r2 \4 r! ?
$ git checkout -b v3/master origin/v3/master
" P9 h, s- h  r5 b* Q$ sh build.sh4 \9 x, A  k! X# B1 T
$ git submodule init
$ D9 t/ M% W! C" {% z+ X$ git submodule update
) E* V' n: }+ @( U( m9 Q$ ./configure3 ]$ q/ x2 ~& O, t9 }. \+ K: N' U6 `' I
$ make
" N; i. |4 y% h; g$ make install
! ~' a' L7 F! [4 I3 B1 T) \LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
# }) y( N* o0 G% f! B' p& `  S  |+ q1 @9 t  t
1 ^! X2 L5 b, Z! ^( r
$ ls /usr/local/modsecurity/lib
) B9 m3 q# z, I$ w0 B: U3 }libmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.08 G) E. i; E( @
编译安装Nginx并添加ModSecurity-Nginx Connector模块1 G. b# B7 M$ v+ w# N4 v/ @
使用ModSecurity-Nginx模块来连接LibModSecurity
( g' B6 J5 b; ~) r/ Z; E. `, }
+ O" j+ A% u: Q% V# J( z3 t7 Y8 H6 [  g. k
$ cd /root' ~( {3 ^8 f7 E" n3 k- N
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
2 \) g5 y1 m* S$ tar xzvf nginx-1.9.2.tar.gz
4 q7 I- R" _8 K' z$ cd nginx-1.9.2' f3 }8 R3 G* P, v
$ ./configure --add-module=/root/modsecurity-nginx
3 v, q: _# D9 l$ make
2 U+ k6 M/ E1 R- ?7 Q( T1 i0 G- z$ make && make install& Y' M  i* h2 Z; m- z2 h
添加OWASP规则
. |3 M* I3 B2 p7 n; PModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
) k1 Z" I5 Z% k, p+ T; d
9 i& M2 T( [6 @! t
  f& `) v+ P1 ?! ]& D, [  @2 u: _下载OWASP规则并生成配置文件
" Q& q, W( p$ K+ |) T5 |9 M$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
9 o8 V! C' i* N$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/
2 D7 i3 Z- n+ ?$ cd /usr/local/nginx/conf/owasp-modsecurity-crs; W  _- |' k% i3 t/ `/ z2 X, q" Z9 k
$ cp crs-setup.conf.example  crs-setup.conf
) J, \; g  E( A( t配置OWASP规则
3 G# W8 B* ]) p& S0 @) r编辑crs-setup.conf文件2 G+ r/ ?# |0 P- g2 m( T

& p' N* Q/ l: k: K
; S7 K3 e0 g& c- `/ X6 C$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf. E5 F  i5 f7 e5 j# V
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
& q0 D6 K& q: A  f2 f3 h9 t$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
9 X' E# T, \& E' ?+ z5 T$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf& A7 d4 ~, e7 x$ n/ x6 R' h
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
/ S8 k+ m3 Q4 x1 i' t7 z; z# k, g' p; i7 p+ a" ~! @) ]
" A* D# _* _/ m* U
启用ModSecurity模块和CRS规则: C% s7 M5 c* \3 A: D
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
" L4 i3 G; u3 Y0 g
( {& @6 d% J' `+ M# I, M  q: W) Q- z+ j% |
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。1 ?2 f) J' m4 a! P- p
4 s4 H+ W. j8 z( e$ A$ F7 P7 g

: G3 ?1 {2 x2 I$ f" H4 E  z$ cd /root/modsecurity-2.9.1/- t" G6 c4 ~+ t1 v" b; M
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  ' h% s; t+ |8 e) {  h
$ cp unicode.mapping  /usr/local/nginx/conf/
5 o5 g/ @# S/ l, v将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。9 D0 [. t5 ?2 b6 W) ?# d) k
. c$ A5 H+ h" z
/ ~/ t6 |& j8 X% [
$ vim /usr/local/nginx/conf/modsecurity.conf
2 k; B" k7 A( C; a# _0 d  gSecRuleEngine On
6 L0 V3 Y" x7 M3 aModSecurity中几个常用配置说明:
  o& l& q3 s5 E* T  {9 ^. D0 Y  K, _- \% A7 D

+ p9 o7 D# L, w8 k* t* r9 e( Q! A1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
2 b* i% ^' u1 J7 f6 K6 z
2 h  a4 [' V( j. S( X
# p' V* c1 J( A2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
  e# L( |2 l  b/ V' R& x% K
, q; \1 b" i/ N* @. F4 X' h& |2 z. t, E
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
# b8 @1 F8 h$ J5 z' ~1 ]1 ]0 U% x2 d- ?

5 f3 F; D, O1 w6 {0 P4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
( c1 v/ c: ?+ N# E! ], ~1 s5 @7 L# Q5 {( _) k1 [4 t0 T

3 B2 e& q. e8 c) G% k1 m0 c在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。8 y& y6 p! \( n  _5 e% m
7 y" _9 D" w) S$ Z/ x4 l% {$ \
( M/ Q! h7 f- l
3.x版本CRS% D8 r4 Q6 f9 f+ T7 m4 i
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs7 G/ O, w" s( l" e. j; c# Y8 B1 t  K
# 生成例外排除请求的配置文件7 p7 z" Q: T9 F, S' G" m; \
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf+ O- C/ j: @3 H
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf" L1 H4 `- j- w, z/ \  w
$ cp rules/*.data /usr/local/nginx/conf
2 `7 R* f8 D/ Z2 Q7 P- x为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
5 r5 a6 T2 E8 i' H5 i" ]# j
- q' E. x1 |; W2 T# Z& _/ C8 T$ g  J0 {
) a5 ^) O/ l2 e' r- ?5 }" A' L$ vim /usr/local/nginx/conf/modsec_includes.conf  U1 U& }* q+ I5 h* P3 l

8 F) Y! \; }# _5 b7 _  L& g4 G$ U
[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

9 ?3 J( o  V7 A; r( ]( N, h* z. I* `! W
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。$ O: V  f" A6 u- s# j
/ f2 }" O, t, s1 g( U1 x+ k

; k2 E; S  [7 }- v. a配置Nginx支持Modsecurity
2 n' I9 g+ ]6 ?& e启用Modsecurity# Q% n4 i% s# Z% B" t; d# ]
使用静态模块加载的配置方法) x$ B7 r; K4 g8 @+ i9 o
在需要启用Modsecurity的主机的location下面加入下面两行即可:
; J8 M: U# }. D9 B6 `- H' l0 O; h6 o1 K& w

; u: n5 R' d8 s- jModSecurityEnabled on;+ j6 a& F, ?) D$ F) R7 }5 C& }
ModSecurityConfig modsec_includes.conf;
- U7 p, Y7 n6 P% K9 h) r8 @修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
  R, |3 P0 }  }. d& w; m9 M5 u2 P1 K( v3 w( ?, Z9 E1 n% \
8 p& M9 P4 i7 u0 S) z" q% b
$ vim /usr/local/nginx/conf/nginx.conf
9 _1 q- V% [8 [1 r7 m* w
' c: z  n( A* V7 B% }! g8 y8 \6 d% b# g6 @
server {
$ t  s' K3 u5 G, R+ E, Z; a. E+ \  listen       80;6 z8 n8 {0 f8 D5 E5 y/ d( q& h
  server_name  example.com;
; x6 w6 E: W- W" K4 F7 X  G& D8 @3 G2 K9 L* @6 j, l

4 B3 Y8 l( @0 A' L( z  location / {/ f5 f1 V% B$ G7 |$ k% f9 D
    ModSecurityEnabled on;. E% F& c0 v# B% k3 e* z
    ModSecurityConfig modsec_includes.conf;$ O& f7 u- G) @: G7 c; W
    root   html;0 J6 o: l# I4 v* s% Q$ |
    index  index.html index.htm;
% D5 k: Y* ~2 F  Q& A5 o1 o  }5 G3 O+ a! T6 y* v
}! p9 [4 m2 G0 {
使用动态模块加载的配置方法, |0 }1 m2 d9 s* `5 M
在需要启用Modsecurity的主机的location下面加入下面两行即可:
) S/ C+ ?* I! R
2 `9 g1 d6 G* a+ D8 t% {$ L
  {  e: C7 E4 o0 }( |# }( a: fmodsecurity on;! ]: A. q- }; v3 E
modsecurity_rules_file modsec_includes.conf;# @* o+ V) A6 u5 p7 S- O
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
9 j9 P2 ?1 O* ^6 U; p3 i6 G* \( s% l" d" e- q
( R9 o) O- L5 O. x$ b2 J
$ vim /usr/local/nginx/conf/nginx.conf+ r, y5 {' u- \+ C& C) L+ j

6 t! Q, Q' Q: y. E$ l+ [# X% \1 a6 N
server {  A$ o; B& P. N/ N! j
  listen  80;: N9 v4 F! f) P0 @4 d- D
  server_name localhost mike.hi-linux.com;: N: @8 u% x' |/ o+ f) C. k
  access_log /var/log/nginx/yourdomain.log;
8 S) O8 N* W! J$ g) a6 X/ e' x
# |/ L+ j2 i0 v" y! o
. v7 }$ h3 ?0 S8 j  location / {7 ]9 z; p* K, C; T% E3 N& [9 S  J
3 ], {2 g5 X  D. ]: `
- Y3 R: m8 q% X  n9 |$ `- a
  modsecurity on;$ o0 O$ u& ?9 g. j
  modsecurity_rules_file modsec_includes.conf;
: u# S7 b& g; [9 K  root   html;7 G" C: r& Q6 Q% x
  index  index.html index.htm;9 A2 K4 z  C/ }# L0 ?/ N5 ?
}* M: b+ z& i6 _, _$ w
}3 Q' g; A, ^7 V
验证Nginx配置文件$ S; }1 R' t: }' {7 J. M
$ /usr/local/nginx/sbin/nginx -t0 M* {0 |3 f2 Q4 D- m9 U
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
- p2 {4 p5 M% {+ fnginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful9 e1 w0 _$ k$ B: ~% h# z9 @$ B) U
启动Nginx8 H$ `* o( v$ }# {, x0 Z0 A
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf0 i7 {9 H# T- @! V+ C' o/ g

3 n# r, L! J2 [* [7 U: 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能够战胜更多复杂/未知/混淆的攻击模式。

, n3 ^$ F! [- Z

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-8-23 15:41 , Processed in 0.084792 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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