找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11499|回复: 0

利用ModSecurity在Nginx上构建WAF

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

1 `1 f* D8 |' k' f, K5 V1 z1 X2 \' C4 v3 z( f
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
/ y$ J" r% [) l- k. G& k
! n, r/ ~2 t" k" C& x  o' z& k5 j" G7 h3 \3 }# ^7 A/ K$ b
什么是ModSecurity
) y2 G* W5 s0 T" F# q/ l  RModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
5 x; Q, f9 x& c8 A+ H4 g. i* [5 y: s- l8 J

. I* j$ b& T% vModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。& |  x% s; P5 R( l: s
' h$ `; k1 C3 C+ S& I+ l; y
) X- n, z7 L% o! M5 {3 f% b* `
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。! `$ v  r" ?% L" m: \
9 y% u; A  H! i# I

7 t3 V( z" S& k! K; G' }) s; D官网: https://www.modsecurity.org/% o- x" R$ J9 @5 N1 b/ v: V

  C+ l$ G" V8 B
7 Q7 q" j8 {$ W什么是OWASP CRS# k3 B" I$ a( M4 U- K& d; L
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
4 N7 S. I8 N' A& ^) I, `' T: ~- |+ S/ V

9 g! o3 l7 b% O3 MModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。  s% A4 e3 e& q; p" ]

" n& h; y9 ?: H; ?, k% p0 d- v
: Z, x' c( K* hHTTP Protection(HTTP防御)
5 {& z9 o" L/ ^) H, i5 l9 IHTTP协议和本地定义使用的detectsviolations策略。5 k# X3 o7 a5 T) ?2 |
: K) [) D" h. s- o
, `3 Y. F) C$ y( j
Real-time Blacklist Lookups(实时黑名单查询)3 M- R, v5 `/ g+ h2 D
利用第三方IP名单。
2 O  V1 h0 i% U% }: G# N7 K7 j: x
, e' g; e2 K& @. l
3 h& I) N8 z- W" A; bHTTP Denial of Service Protections(HTTP的拒绝服务保护)
7 z0 @' Y6 V# x* K' a1 ]- R: T* i防御HTTP的洪水攻击和HTTP Dos攻击。
" `4 R" V. Q# X0 K
1 Q. ?3 i( W7 g' k4 U, F& b) v/ i% X  p& d& K1 d& ?
Common Web Attacks Protection(常见的Web攻击防护)
2 \. r$ x$ j$ I7 x7 [检测常见的Web应用程序的安全攻击。1 T  b1 Y. D" y% v. a$ t
' I- G* ~5 U7 j& X+ O
- I4 A3 i! S5 B& r1 Q
Automation Detection(自动化检测)
& P3 d+ I$ V& F检测机器人,爬虫,扫描仪和其他表面恶意活动。; y; n: P5 h( O9 H  x

1 _- F+ \# W% I6 d/ v  O+ @
, [. i2 f' L9 t* s/ FIntegration with AV Scanning for File Uploads(文件上传防病毒扫描), u" G! \- W1 O1 f$ `
检测通过Web应用程序上传的恶意文件。
+ r/ ~1 `5 B- `; M8 q$ z) X4 v3 V5 y  M1 a8 B* K
! r; @8 Z# |0 R2 c  ?5 P6 S
Tracking Sensitive Data(跟踪敏感数据)
, k9 D# _1 [5 V+ ^. |信用卡通道的使用,并阻止泄漏。1 M/ ^# s  I; g  L$ A" t

" @" q2 Q# [1 X" [9 Y/ _
9 D3 S- t) t! k2 e1 F6 dTrojan Protection(木马防护)
, V/ I4 r! U1 J检测访问木马。4 U- Y6 \: q% `
6 N. L! b& r, b

) r) J4 ], ~+ J  G2 l  d9 F. `Identification of Application Defects(应用程序缺陷的鉴定)
. @; i# U* O/ c: U# R' Z/ \0 v& f检测应用程序的错误配置警报。7 K  }/ q6 e9 y0 [; Y( V1 k

+ n) }; N" N( m, ^& v' I: H- {4 |& D$ {
Error Detection and Hiding(错误检测和隐藏)+ d9 S2 U; o: E& a1 X* }! L/ }1 R
检测伪装服务器发送错误消息。" x* w6 u; i3 W$ x

5 c5 q" j" |6 \* Q
7 f9 ^" Q4 |8 b6 g  V! s. u/ G安装ModSecurity! Z, m( A# n8 ]) K. |+ `/ m
软件基础环境准备
8 N' J6 |/ K9 r) X下载对应软件包; Y& k$ _. x/ V0 L, ^4 B# K7 i
$ cd /root7 F$ Z) h4 ?7 _" V
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
4 g. R8 t, p& {" }. P7 L" w$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz
, ]  T' a1 ?) T/ o" C* Y9 y安装Nginx和ModSecurity依赖包
- |1 {( r8 a' `1 z- O7 `* {Centos/RHEL0 a4 E; z4 {9 M0 w) P
7 Z" {& P' ?; V

7 [7 Y& x2 _0 j1 c! j# R# h; M4 k$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel( X7 y; o3 V& i+ Y& r
Ubuntu/Debian
' Y0 h$ @$ k& Q& b& C4 u; a
4 j7 z- [- B; N; T; M. u, v) l) I3 n& t2 g8 S3 d; J; k# p+ t6 o% 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) p" [, s$ Q/ M+ Q: {# B4 ~
编译安装ModSecurity9 B+ q3 p* n2 f. p3 T) O
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
7 a* b/ Q8 e! c. R0 {) L0 T# |
; A% M' ]. z% b, {, ]
0 X3 N& X5 d- n! w2 [# B! \1 T' W方法一:编译为Nginx静态模块1 {( {* {  B! ^3 @

; Y9 ^$ ~( T2 H9 }3 v) m* h* N: y, H
编译为独立模块(modsecurity-2.9.1). r- u+ E/ F" ]
$ tar xzvf modsecurity-2.9.1.tar.gz
4 h6 V$ u0 @, l# F0 K" X2 [$ cd modsecurity-2.9.1/
8 G& z8 s' l0 O# b- D7 `7 O0 A$ ./autogen.sh6 [* Y6 y0 }) m
$ ./configure --enable-standalone-module --disable-mlogc' i+ N7 w( I  C' q: I* R& A: D
$ make
5 L2 G7 W, P+ H编译安装Nginx并添加ModSecurity模块
1 R! O( ^3 p5 |6 ^1 F; U  D/ O$ tar xzvf nginx-1.9.2.tar.gz7 A) e3 a3 g0 y* k- {
$ cd nginx-1.9.22 v: _1 `0 n: r6 e( p; I* B2 S
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
/ V' T: G( k) p" L7 v/ ]8 }$ make && make install7 H# Z6 N  @. I6 k+ M- {. ~
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块: ]9 I) D5 P5 e/ z6 c7 w
  o! S2 E/ q2 V0 U! y$ h

+ J5 y" t+ p' T) I6 G编译LibModSecurity(modsecurity-3.0)
: ~& T' K( A) i1 G4 d$ cd /root% k9 K. A8 C* ?: P2 m0 A* u$ G
$ git clone https://github.com/SpiderLabs/ModSecurity0 P# {# v7 W* |0 S9 k
$ cd ModSecurity$ B) k& i1 |* |' A. Q- z
$ git checkout -b v3/master origin/v3/master. N0 E6 i1 V4 D* p
$ sh build.sh- b! ~" ]! g7 w' X, Z
$ git submodule init  K6 W9 G6 l1 ^0 U" q8 h  F3 @* {
$ git submodule update6 Z1 P- @  b1 X& e* E! n/ P
$ ./configure
% ?2 d( G( E% `$ make0 |' P8 t7 R% m% ]* F3 b6 L
$ make install) k4 k  Q. i8 f) i
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。' P+ x5 e+ b$ {/ H- c: j! ~8 k

, u& p" d3 N) t$ {% _) S$ {- p* C* u: Q7 s# p8 }; H& F* P
$ ls /usr/local/modsecurity/lib' E* C) K4 @/ f' P( ?# O
libmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.0
8 b( \- u, x+ R; z编译安装Nginx并添加ModSecurity-Nginx Connector模块- ?* ~9 [* g1 f* X! K% m; o+ g( A
使用ModSecurity-Nginx模块来连接LibModSecurity
) I! U: ?. V1 H; l1 \3 g/ {+ U
9 t3 A/ @* C) G% t4 m
) q' L6 Q' h  P: m$ cd /root
% m% g7 c7 p" N) w# X& w" D9 O$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx3 u7 o, s$ E( ~  s; t. K, ^7 ]3 [1 A, t
$ tar xzvf nginx-1.9.2.tar.gz  ^4 O; \7 \( ?; [4 H
$ cd nginx-1.9.2
5 @7 @$ Z! W: N* Z7 ^# E% z$ X# X$ ./configure --add-module=/root/modsecurity-nginx8 P( {+ z7 Q# S4 `8 |* P: P& \* q0 }
$ make
6 F; c; c! a2 F. @' C9 Q( R$ make && make install% J% @' G" b& w7 M3 x# P3 c; q& S
添加OWASP规则# z4 k* |( E) D* }3 C$ s
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
- G2 m6 i' B& W. ?8 q5 l4 L( {4 ~- \' t  p

2 o6 r; H* Z" z4 b* k下载OWASP规则并生成配置文件$ \9 [% q6 b/ m5 [; q
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git' }+ }; P3 e& [" y9 W5 \
$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/0 t: [' d* R! a0 J  O) p
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
) T, m5 U; o' e0 t$ cp crs-setup.conf.example  crs-setup.conf8 A5 n: z. [7 `6 u. V
配置OWASP规则9 E; R! |# W2 W& c
编辑crs-setup.conf文件* J6 ]- t' @2 M2 `

& y6 _1 E$ Y2 J# c1 G! I+ X8 Z9 P+ O7 a6 L* J$ G8 k6 e. i
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf! z$ r- x* q, |' N& ]. U
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
+ X( ^/ T6 _3 j! W; o' P4 z$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf) D$ u1 @% u2 T! Y3 g4 g6 i' L
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
9 i) ^( |! y( k* I( G; J; Q& Z, m  [默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
- l- `0 Q5 x8 p  F" y
( k, M* O5 F" Y
$ L# r" T6 p3 k" s+ W8 y6 \) H- }启用ModSecurity模块和CRS规则
0 H7 I, j! n  l: @: n; p4 c' W复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。- Y8 v  H. p% z& D
1 @# D2 M8 _* z0 u

- b  M' @1 Y7 Omodsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
  o2 A3 v" ?9 j% m  `& w+ B; L! p* g$ r9 m/ k
: E+ v# B# A$ m1 _
$ cd /root/modsecurity-2.9.1/
7 j( W  P4 E+ A, I2 {$ ?% U5 w# d1 _$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  
( R( S9 [( B8 l$ cp unicode.mapping  /usr/local/nginx/conf/
: Q6 z8 G: A2 ^  [- T& e2 }4 v4 j将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
2 o6 I0 f5 w( f$ Y6 q2 @
; J2 k$ K2 @, C0 J4 y  q
4 ^7 `/ Y- t; t+ }( r/ s5 ]$ vim /usr/local/nginx/conf/modsecurity.conf
6 g" i- G" u7 @9 M; i" t# JSecRuleEngine On6 D* T+ t2 v: P+ e
ModSecurity中几个常用配置说明:
* k$ u0 i2 a9 f/ k' S0 D; A" C
# E4 |( ~" O1 }
$ J: o0 p8 k! t: b' ?1 s1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
1 n  P& f( v3 U. |' j. Z/ ^
/ y/ ?/ X7 ]' c! G
7 d. r5 m( n0 u$ W5 T$ ?, X+ l0 g2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。/ G4 F4 p+ t& _5 W' E

* L+ h7 h" |5 _8 s2 [2 \9 ], ?# z5 S  q1 |- S7 V* ^
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
7 z2 S1 I$ c1 U6 S' N" ~: Q5 M
0 `7 e2 }- j+ m% ]. g- E; \. U$ F2 j* r3 z6 \0 N& M& w4 v
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。* M' |  I# e  E' R6 ]& P+ x7 \" R

7 d8 G2 t# h' ^! e* s* X! {$ f* z3 H" I& X- w
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
7 [0 Q6 [1 o6 _+ A* q1 X2 Y) J8 \/ d0 E, m, {7 `

3 \4 Y" ]# P3 I' q0 A! F+ o3.x版本CRS
3 I; `( m, j: D/ v$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
! e/ M, f0 }; v% x( a# 生成例外排除请求的配置文件# p+ h3 k5 e" t
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
  C7 F2 O/ y2 \% I8 r7 |- |* X' S1 u$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf% T6 Y6 x: I( b5 S8 f) m- U
$ cp rules/*.data /usr/local/nginx/conf! }! z( C( |% ~2 q
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。0 K# p$ D9 \  F% |6 m* c4 L: p

; N1 ^$ S% i" j+ u7 Z( ^
0 U- P& Y& N0 k; r! N; D; H$ vim /usr/local/nginx/conf/modsec_includes.conf7 z# ^  K% C  L5 ^: F( z. y- N

5 a# m* G9 ]- r/ M% s
[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

! j+ ^/ |, O1 V8 w: ?0 n
+ S. l3 f. o" j2 `) w0 A注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。# \% u) U3 }. T+ g9 K

8 B: h2 \$ }  j* t3 o. j; U& H5 N. g: a% H$ k3 m! t# ~: f
配置Nginx支持Modsecurity8 X( `" w# Q, _6 w7 q. o+ g6 ?
启用Modsecurity
/ B$ r; ]" a1 N0 K1 ]使用静态模块加载的配置方法
, R* Z, U( c+ z. z$ q在需要启用Modsecurity的主机的location下面加入下面两行即可:
) _8 Y" U' d+ ?3 C$ u4 k; F$ z: R8 ^- B; m( P

$ B6 P+ A& G. i/ |' w6 \ModSecurityEnabled on;% L' t* x" @: l/ E; g% i
ModSecurityConfig modsec_includes.conf;  i$ ^" ~, e0 W" y3 N
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。, E$ f) e8 m' Y

, @" F; P% e& A- u. t0 A% F, }, Q$ k* N# h! H# g& n  x, C+ g  l
$ vim /usr/local/nginx/conf/nginx.conf5 P& X' }$ j. E& g3 G5 `

; P, P& ^0 c+ W$ G# g$ [' N! f  X: |# y$ E+ ~: e8 X( V  |
server {
% W3 d: L! f) L. F% @$ ^8 y  listen       80;  ^; a) i6 v8 ~' _" a% p
  server_name  example.com;
" K/ F9 l" c' Q; z) V5 q# M8 I4 y# r- R4 A

2 {+ ]& y0 ]. ~" E% t  location / {% q3 r" Y( o$ u' D
    ModSecurityEnabled on;
) A: ~$ v+ k) C8 U9 n$ A; U    ModSecurityConfig modsec_includes.conf;
* s6 g4 f- D& |* b8 n    root   html;$ y; y- G4 G# M+ v/ ~" O1 [
    index  index.html index.htm;
) _. C3 K9 l  K; [2 f2 W" {  }' X" A2 B9 \4 B0 o8 y# }
}
2 }8 b* V5 q0 N使用动态模块加载的配置方法- \) v; ~* y7 U5 a. |, H
在需要启用Modsecurity的主机的location下面加入下面两行即可:& U8 n8 U* V  ~

. N7 x4 h7 {6 y9 Y  \' x' P) C5 e* J6 `+ N  b( x9 U- V* }' s
modsecurity on;
# X8 ]  d; ^$ [1 c+ x; N0 {* Qmodsecurity_rules_file modsec_includes.conf;! \( D& `8 b* s1 x  Z
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
7 s8 U" g9 A1 a) D- s5 ]
6 n9 ]) @6 O: Q$ I- k; n$ k
( j6 N4 I) g* i0 f2 v5 {( X* X$ vim /usr/local/nginx/conf/nginx.conf
7 K& J9 s6 f" t, A2 J5 S8 W" ?( |3 c( W9 t* N6 r- c2 s8 x* M
2 a6 P  y& d/ l9 c/ H
server {
5 G0 R6 S" L/ b: \: z  listen  80;/ G( e; X/ y' N, t, }2 |
  server_name localhost mike.hi-linux.com;4 q5 G% y* V% V( L; B  q
  access_log /var/log/nginx/yourdomain.log;
% a+ ]- g5 ?# T$ A# `1 I+ M2 o) m( ?4 Z5 R! E/ j- \

* v% H- l0 a/ A* b  location / {2 O/ W4 a1 {) O+ @9 `- M# t5 w

& U, J& P+ r; F% ~: l/ O+ W- y
8 a* @! N! r& n4 \: V  modsecurity on;! b! h' t, H8 l
  modsecurity_rules_file modsec_includes.conf;
' K8 A: U/ d" H  root   html;
7 Q# }) c( O- r# |, c  index  index.html index.htm;/ o( c7 ^  y3 \5 _
}
3 y0 |, z& V: U. h/ V}) W, d9 P5 s  s. ?3 y7 Y. g3 Q
验证Nginx配置文件9 V" t. l. F" n: ?
$ /usr/local/nginx/sbin/nginx -t
) l. m4 [3 k2 d( P( \: n4 Y$ dnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
' t4 U4 o) `% J2 H, l+ X- Dnginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful) F6 r/ \9 M# f% x$ I
启动Nginx) d( `# X! f0 n' }
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
6 y' `/ s8 L) v4 {* F" @7 o0 \5 \8 B( w$ B

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

6 H! @9 Y! M; Y( M+ M0 q

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-6-17 16:46 , Processed in 0.074614 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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