找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 9945|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。, G" m' s1 \6 A2 U
- k/ s; }7 G' a/ N& D
* N2 L1 H7 Z4 ]$ ?( `* w0 H) r6 [5 {- `
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。, ?/ {8 n; H$ `# q- j
3 z) _# {  V! O# \. W$ v

. p4 E+ q4 l, I$ L" g什么是ModSecurity
9 y& r% H' |$ S; V+ E- f; aModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
: S  d0 Z: ^& L+ o! T7 U, n1 h" j8 r' u3 T
! M& @  W  W1 G" _7 x& S
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
6 E1 H1 K2 r, t: F; M! J0 Z4 f- b! G3 J" l* {" Z8 [7 l7 L% n4 }3 k
/ d$ N# M3 Q+ u4 u
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
) f- F* x! Z, o% I( z' V+ D
3 ~8 `2 ]& s, p, O) C" y3 c+ a3 x: I# Z
官网: https://www.modsecurity.org/- V: [/ N" S% f- a9 \+ T: F
1 x) G; `# E0 [+ A* v: ~

1 y1 b; d! }: |0 b1 ~3 k& x什么是OWASP CRS' K2 A6 D. l+ X$ e6 `/ @) k
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
1 H" d/ ~8 N# f+ T# Q/ w
8 ]) [$ q1 W& O. R( A( k; i. @* O' j" c/ J
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
0 k" D  ~& @1 q' Q
7 `3 w' V, A; t: }& ^7 @5 J7 `* z/ K( h! M1 ^  D( E
HTTP Protection(HTTP防御)) q% e2 C, A6 \" @5 }  ^) `
HTTP协议和本地定义使用的detectsviolations策略。
( }2 K/ H: P/ R& V6 E9 K3 E
% T- D. X, ]% P+ J  B2 s# F& |  D6 S) \4 ?* h  I
Real-time Blacklist Lookups(实时黑名单查询)  h; s- Z" ?8 [" T% Y% S( g
利用第三方IP名单。4 A4 y: N6 @7 T3 w& }; b- \$ q) o
& a$ O! h) D1 H- f# ?( d& x

" @0 t' W) N( j: EHTTP Denial of Service Protections(HTTP的拒绝服务保护)
* V, x! C0 A3 C' u" ~; G防御HTTP的洪水攻击和HTTP Dos攻击。
5 t( f1 U! |9 ~, ^' u# @# E6 m1 s, t# {5 a

0 ]% u# x, k' e( p1 o2 }' n7 hCommon Web Attacks Protection(常见的Web攻击防护)
: A! M: c. G) c$ H; f检测常见的Web应用程序的安全攻击。
2 v$ Y9 g: ~! x' x& L% F4 X" f0 D/ C4 T5 J, F
4 O) K- d5 s3 ~( p% x5 {# d" m8 A
Automation Detection(自动化检测)5 m7 b. w  M+ {- k1 |
检测机器人,爬虫,扫描仪和其他表面恶意活动。
! ~) E& I. @8 L, c; Z6 k9 i9 W* ^$ s* h) k' g  T8 t
+ V3 v! j$ p& Y; L# x
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)
- [# [. Q' n& E- s( E/ H& F检测通过Web应用程序上传的恶意文件。
' H. |" c% T9 w* r; w/ R% t9 b$ q
0 |6 p7 X1 g3 p6 v
7 z7 |/ G6 `' L( T; qTracking Sensitive Data(跟踪敏感数据)
( `" b/ }- E3 D0 l; H" K信用卡通道的使用,并阻止泄漏。3 }/ u9 l9 a% l" O1 y! e3 }  i5 N
1 Z% t# ~7 r, ?# F$ H

* t* y7 Z5 }8 Y' a* V4 NTrojan Protection(木马防护)" W- A" P! {- _8 t
检测访问木马。) w4 A" P8 S8 ?2 Y+ v2 J

  ~& H' ~# [/ E$ i# I$ t9 ]5 \; o) M9 m3 V
Identification of Application Defects(应用程序缺陷的鉴定)
' `6 i, \) N2 Z, n! Z! c  K检测应用程序的错误配置警报。
$ o* b; Y- h6 i( Q* W
9 @5 s4 J/ z" M6 [& W/ z! ]0 T% b' h  X" u
Error Detection and Hiding(错误检测和隐藏)1 g* j6 l4 G8 F0 f  s/ S2 W) @
检测伪装服务器发送错误消息。
0 R" H* g5 T9 o0 B% w0 Y1 t0 \
0 @) A( X; ^9 q" S: C; N) C9 m' g/ E$ R
安装ModSecurity8 P. J# g! ^( ^+ F# I
软件基础环境准备: r$ f. V$ X; O8 K3 e8 R8 t
下载对应软件包
9 M' g+ {6 F: M: @1 i$ cd /root
& v- D) R3 P+ B" m4 ~$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
& Q2 ?0 j! S; ?9 z* T3 k$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz
2 Z; f; x# L$ h% t  @+ t& n  K安装Nginx和ModSecurity依赖包5 }( D  ?0 [% A3 n- |  ~! d  C& c
Centos/RHEL/ w+ I" E* \" r$ t

# ^/ u: M8 g3 A% Z4 P, i& c. n; e9 D: {6 M
$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
0 x5 l: i7 G  x; H' I+ D" jUbuntu/Debian% N5 Q, P, x$ d+ R
6 t2 F5 Z, K) O) u, Y6 J
  `3 h: t5 V# E2 O
$ 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
& p* E% U: H) h2 R% w编译安装ModSecurity
! G  v! ?9 Q' \7 uNginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
* f9 _$ L- Y0 R* l, f* y" D$ y% A# e& Z% y

, D0 n! B' j5 R9 b; J! [! S) t方法一:编译为Nginx静态模块
1 e9 l! L$ A- _! t) j  A
1 l4 B$ C6 B. [0 ~, W9 s4 n, J0 D. h! Z0 g6 P- f8 d
编译为独立模块(modsecurity-2.9.1)! c6 C5 h) U' Z. ?* F& v5 w
$ tar xzvf modsecurity-2.9.1.tar.gz( g8 I6 Z' y- H* }. {+ o' p
$ cd modsecurity-2.9.1/) L- k! O9 c+ S# p
$ ./autogen.sh# v3 w, t% g$ X+ w; P& z
$ ./configure --enable-standalone-module --disable-mlogc5 u- \9 |# n+ G& a0 @
$ make
3 p; u6 X, i% r编译安装Nginx并添加ModSecurity模块. Y( C/ X+ P+ d% \2 n
$ tar xzvf nginx-1.9.2.tar.gz6 R+ q5 W; t+ J
$ cd nginx-1.9.2' }/ {: V- `) o8 g. u; e9 X: T* _
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/1 `, e: }& g. }. `  M. q
$ make && make install
% F/ l$ I# T& w/ E( ]2 ^方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
# f1 w' l+ ~0 w/ {% d' d$ j% @! b( C6 V  X
% k7 b7 @4 A/ A4 K% [8 B* {: @! ]
编译LibModSecurity(modsecurity-3.0)# X" r' t" I! R( q
$ cd /root- \0 j3 R8 p6 z9 P+ B% y
$ git clone https://github.com/SpiderLabs/ModSecurity
" K& u; }0 t* E" x) g5 x$ cd ModSecurity3 F7 g' L# X7 L, o$ N
$ git checkout -b v3/master origin/v3/master7 k8 h/ o' \7 J% ?: H4 O2 T) P& F
$ sh build.sh
5 K; d/ p6 J$ F' P$ git submodule init* G$ m5 M! a, R7 G/ u
$ git submodule update
9 {* I) V) ~6 X  i$ ./configure9 U/ h9 S$ W0 Y' ]4 {
$ make
+ Y0 @- e: N1 R- `5 b4 M4 J$ make install7 |& W& D# u+ m7 l  U, y% m
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
& x! {8 O# d( h; c! L7 O/ `$ p7 C6 P( W* w, |
% h! J- i6 ?: R# j$ p' E/ ?) Z
$ ls /usr/local/modsecurity/lib
; |6 X4 y+ ^, o4 }" Dlibmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.0* j$ a1 a2 Q. R# L! ^
编译安装Nginx并添加ModSecurity-Nginx Connector模块
" R" F3 o* m; Q$ I/ l使用ModSecurity-Nginx模块来连接LibModSecurity! K- r- G2 U; G5 d% c

; ?# E, X4 p) q9 y1 r5 K, M; b) D! A' m$ N' ~' O) O
$ cd /root
; {, Z3 U* s- K/ `3 C6 i/ E$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
& }' e6 u" L8 f5 A7 n$ tar xzvf nginx-1.9.2.tar.gz9 S) ^  s# W, `- a
$ cd nginx-1.9.2
& {7 W* a! B& k1 E8 D9 P8 y0 _: b$ ./configure --add-module=/root/modsecurity-nginx" ~2 B+ @  C# M" X, r$ k3 t
$ make- n0 O) w5 m$ u
$ make && make install# z/ B( z9 u! C2 b7 t1 `; X
添加OWASP规则
) o$ U( Y2 W0 z9 GModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
" @9 ]# O; |% d' t! I) h+ a3 R5 ^% l- N* q2 I& c9 r# G

7 c& h) |& e7 K% p: z: K+ \! H" j0 |下载OWASP规则并生成配置文件
7 r  M1 ~' w  J8 g! r/ v5 U) l$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git$ S* R  v( [+ U9 A
$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/
0 |0 \% w3 C9 l: m9 M0 }% `$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
) D4 K* w' y/ E  O+ P; T( j( t' @$ cp crs-setup.conf.example  crs-setup.conf3 j7 d/ O9 B* P2 ]
配置OWASP规则
; F' r8 ]6 T  O0 X编辑crs-setup.conf文件
* q( j. F. L% o" V* T' n5 U) I
& [  r# ?; L' C; ?2 I9 X/ f
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
- G5 _5 W5 A6 g1 _$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
4 \9 l5 K" M3 ]' s$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
4 |! \, {1 M5 A3 ]$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf4 H' @2 z; v9 Q5 j' l9 v9 V  {
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
7 x: A) D0 K" x, E' T( H+ i, h1 |) k2 T

5 Y% b+ N" h$ O! {; x: C/ S启用ModSecurity模块和CRS规则- ~2 b: a# D5 {1 }3 A5 y
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
( Q& d. I  m+ O' t6 @8 p. l7 [( e5 E+ d
) s4 L! N7 U+ W2 H3 k
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。$ K4 Y: J; X+ ^4 s: _; [- o

! B' N: o* O' ], C
  r  ^# \5 m  h$ cd /root/modsecurity-2.9.1/
' u8 \! a9 g3 k4 h( r9 _$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  
. k# L0 h" s( ^! c$ cp unicode.mapping  /usr/local/nginx/conf/" E, A7 K. s; A! F) o' G
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。; ?" t, h9 V1 M

3 z4 d1 h4 m3 s' b9 N, w" K. {( N5 L
3 C) |$ q7 V+ B9 r8 Y- B$ vim /usr/local/nginx/conf/modsecurity.conf6 ^- _" }, R8 s& d5 S
SecRuleEngine On
& R- @# n/ u, J/ SModSecurity中几个常用配置说明:  x1 I% _8 g- g0 z7 E! Y

$ G3 q) o# D: i1 G
% ?2 u* G9 t7 E* q2 ^4 E1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。! m5 h( u) \* ?) M4 u) a! _9 W
& _" x0 \7 `5 ^6 }
$ t( |# {, t; k+ c+ f; D8 h
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
2 w6 q1 s1 V* `- e7 M6 b1 X4 q/ Q+ d( h* D
! M7 u: Y  D, m5 f% }' I
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
& L  m, P5 Q# u9 P5 s
7 V0 X5 f; Z$ n) Q' N# w+ K2 U! I9 ]. o2 C
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。5 v7 }! f! }* u9 ]  I

7 [( Q! r4 G0 R/ N' b
& \/ v' S( X& \# |: n. Q在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。7 |0 d6 T5 p7 K: l
7 n  B: t: c# M9 e" l

: W0 Q* k9 t1 C" G; ?3.x版本CRS
2 Y8 `. k. R$ |0 v  S8 X. g3 N# z$ cd /usr/local/nginx/conf/owasp-modsecurity-crs: W9 s* N9 S9 X6 u1 _  \7 h
# 生成例外排除请求的配置文件5 D0 r( T9 C0 l. ]
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf: a! ~  m) f1 C! ?. `, J
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf7 A4 f9 Y$ |0 O3 I
$ cp rules/*.data /usr/local/nginx/conf+ o. n% a( i+ q! k- v
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
* U0 n# k) C7 P8 i( R; g6 _  n1 C& z4 N" M) Q" x# `9 ^3 V
- V( {) R/ r/ ]# y
$ vim /usr/local/nginx/conf/modsec_includes.conf
/ ]# P1 R/ Y9 J2 Q) c9 g- w1 r' Q
9 O/ L2 j$ ~7 D/ O# 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

5 K' O& q9 v, c) z3 u1 s% W  P% x7 t  `) X
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
4 i& |/ F( B8 |& J0 o6 G2 n8 ~- g+ X, U) ]1 i+ h
3 w# q0 C2 w1 o4 I; a
配置Nginx支持Modsecurity
: z+ f; V% x* ^9 N! b1 ^" n: |/ u  m. k启用Modsecurity8 ]$ E2 ?8 v' Y1 t5 n9 s
使用静态模块加载的配置方法" g( O8 V- T3 @/ u" F! A
在需要启用Modsecurity的主机的location下面加入下面两行即可:( a; ~% A4 b* B
3 o& S% f2 W% ^9 s$ O5 I
' e* y$ R# u, ?) l5 }; L
ModSecurityEnabled on;- M. M7 J; b! X# R, N2 A- R, W* q" y
ModSecurityConfig modsec_includes.conf;
' |. `9 k2 I  I+ P3 g: S) ~# E6 H修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
  }5 j) g, ^0 J! J
  n) [" @# g4 x: A0 Q1 J" T0 m- E5 ^, A) h( }4 `2 Y
$ vim /usr/local/nginx/conf/nginx.conf5 C4 l% k: {/ D  `& [

; h- j* U) Z! w/ C5 @
# m( e: Z  Z$ x' R, aserver {
1 g/ A# N4 i6 E1 P  listen       80;
, X3 t  B8 x% Y. x/ ~; i4 I$ T  server_name  example.com;  H, n$ {+ P) U9 s

6 b% g% R; ?; p  K; b' K) J3 z4 Q. j4 C2 _
  location / {
  D2 E- d7 h3 W- E    ModSecurityEnabled on;
0 A% y; t  f; z0 ~3 a. O    ModSecurityConfig modsec_includes.conf;8 r- m, j+ C3 j3 i( P; {( y2 k( b; X
    root   html;" ?* V; ~$ p" f3 P/ u
    index  index.html index.htm;
8 I* M% h1 }: _* e8 h4 R9 K, P  }4 C* }; Q- Y( c6 Y
}
  `4 R2 ^0 G3 I) V使用动态模块加载的配置方法
4 \$ q  R) L( k* E在需要启用Modsecurity的主机的location下面加入下面两行即可:
6 R  v8 j# @, z* I* U- g- ~/ b3 z+ _
; e, }! s9 H9 F3 ?3 K
% j3 }0 |- a, p6 _- H0 emodsecurity on;) T8 K6 j- v) e2 R0 B9 o) @. E8 S
modsecurity_rules_file modsec_includes.conf;# H/ C7 Z5 r) O3 r* j2 J# w
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
: @4 t8 s& _' }# r
; |' v" e: z  t' o4 B6 m. a# Y, B( e5 H- Z% u: z
$ vim /usr/local/nginx/conf/nginx.conf  g( L+ F& N! ^

3 t& @7 }# y  Q6 N+ W: m9 ~0 r3 Q7 o$ T! I5 P3 Y6 a/ s
server {: O, G2 t' H! ~' F6 g
  listen  80;, w. k+ R3 }- r, d* e
  server_name localhost mike.hi-linux.com;
5 t+ |4 W* y4 t  S& `  B3 Q- G( Q  access_log /var/log/nginx/yourdomain.log;
& m1 J! x9 A% B6 b9 C9 R6 P4 o6 @/ b( r% h9 G

3 k" C! a2 |5 q6 b" ?  location / {8 l& \- [- g) }/ s0 r$ S* z: C

4 T7 Y% v. e0 O
7 A* D% z) {0 F' w# ]9 P3 B0 f6 ~( x  modsecurity on;& T' s7 i- e) d9 |" {
  modsecurity_rules_file modsec_includes.conf;
2 a) j  q6 g* [& Z" L6 c  root   html;
7 S, D( S! ]. L: [  index  index.html index.htm;  [$ {6 b6 n( i
}
& E6 r  m4 Q) s3 E! z! Q0 u* P}
. ]: O+ P# A  L1 }! k6 W: s9 J9 v- P验证Nginx配置文件
& ]! l/ K) \$ ^$ /usr/local/nginx/sbin/nginx -t5 [% J# M4 R8 P7 M/ ]9 k
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok; L# v- J1 @8 @3 D( i. N# `' U
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful3 {) R4 z+ Z" a6 W
启动Nginx
" K& M# w8 A7 ^+ F( u$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
2 B0 a0 E) L2 B' q
7 V# ~5 N4 E5 w3 U% E: M+ ~- t

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


, h8 i$ I& y: ]0 g% A4 q, p/ o( P

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-1-14 10:00 , Processed in 0.081956 second(s), 31 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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