找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 10920|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。$ n8 J, I6 `5 X! [" }0 v6 m$ P* j
$ u4 e+ S2 Q8 P5 x1 Z
! H' k5 T' Y& f6 J6 V7 i
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。8 F: _( s) s  K( |& `$ W& W4 [& v: z5 x

$ s/ c. T2 X, Q
. x# _: X) U8 f6 ^什么是ModSecurity, \' L( i2 F( V" p0 p, z
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
6 W6 A, }7 {, v; v% m, Z" l* a
+ u& A5 Z+ f0 X( k
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
. d/ w4 n' S9 @- m+ H" L- @- x, J: h

; l3 i* {7 ]" r: B9 d1 H" ~, Q  AModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
4 v" M9 x1 f3 Y; I
1 f2 h) }8 V5 E7 p8 y- d; n" Q- s/ e1 x' y/ [- C+ p# V
官网: https://www.modsecurity.org/7 J/ c% ]' t) G% O! N* P! m
2 z$ t5 z4 L1 C9 x  f8 n( g, N

, U9 L# a" J2 g什么是OWASP CRS% g2 h9 J- a& _6 g; n
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
& a# s7 T  z: x# k1 V- }, Y+ W6 X6 k& w0 d

! }4 n, l$ P" i$ m* m1 ZModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。+ P: W1 g2 c2 f9 X1 W- \+ C
" H. C- R0 k* I* ~/ `/ [
* |" V, x$ h) H( ~6 g
HTTP Protection(HTTP防御)! [* P& A' U  J3 A
HTTP协议和本地定义使用的detectsviolations策略。& l/ A- E4 }3 X
3 n$ m2 f9 J8 O. p( A7 j9 `2 c

0 i1 w, Y6 G. _) k: O4 U+ VReal-time Blacklist Lookups(实时黑名单查询)
, \+ P5 P! T* p& V% g. ]: s利用第三方IP名单。2 H, r0 J" l( z9 A

" G  E& `; ^: }* L
. ~0 g, c: ?9 x: K4 |HTTP Denial of Service Protections(HTTP的拒绝服务保护)
' I$ j$ l5 {8 D* M0 G6 k防御HTTP的洪水攻击和HTTP Dos攻击。
( L5 \6 x. T6 A: @# j
  B3 S9 w+ n4 i5 W  _8 u  P: B
8 Y- a. G! N  [7 z. ~5 _, OCommon Web Attacks Protection(常见的Web攻击防护). L% a6 V" C! e* X$ b7 ?. U
检测常见的Web应用程序的安全攻击。
' U# _) Y2 r8 F) @' H. k, t" |& }  ^" c. C
+ a2 r( K7 o$ u" A& E$ z; c2 g
Automation Detection(自动化检测)$ y6 |. U  l3 K6 A
检测机器人,爬虫,扫描仪和其他表面恶意活动。, v! n  `; V' x% D5 ~

2 v( ]' w( _" n5 ~; ]; \: y4 o' A2 L" h/ F& M
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)
; ]$ Z+ Z: X. Q& \# [检测通过Web应用程序上传的恶意文件。# J  V$ u4 E1 `3 M& Q3 A

/ f1 n. Q5 [: i. H0 }( R  P0 }+ s. s% M) {0 C* k' G: H
Tracking Sensitive Data(跟踪敏感数据)6 s/ ]* S) K& l3 D. h' j. @6 q: Q
信用卡通道的使用,并阻止泄漏。- G: n0 w& {( @, f/ E

/ G1 ~' S0 J& J; W
9 \& C9 o# o& G. a( Z. kTrojan Protection(木马防护)8 |: z, q' B! ?1 |% R3 S. r, r. x
检测访问木马。
; g4 k. o: S: }! |% Z2 [5 ~' |  W  E! R" e7 G1 B* M) E
* U5 ]) z8 y) O: X+ p
Identification of Application Defects(应用程序缺陷的鉴定)
: [# _( H' D  y% r检测应用程序的错误配置警报。3 O6 ~) ?! K& t# ^1 `3 r% n9 ?
0 S" D4 O, x0 i3 [0 T- C
: P- F# ?, E* @9 t% ^+ C
Error Detection and Hiding(错误检测和隐藏)3 |7 y% T4 j. c) [
检测伪装服务器发送错误消息。
4 n  d0 b" ^! g" Y5 \& Y* G) p- q. a5 u# N, |4 K! V- [3 @
) K* W( x5 j9 f5 _8 C9 Q
安装ModSecurity' D& y- {! a! @; }
软件基础环境准备( |1 ?$ w$ q/ y. L' p
下载对应软件包; _$ z$ o$ D, \) g9 h. s9 X
$ cd /root! D  n5 u) T7 r/ N
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'+ h( s7 v8 H; |: x* R% M. V& `
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz8 |9 b# Y& W5 N* Z, u0 @
安装Nginx和ModSecurity依赖包: d! h" l/ K: F: k% j
Centos/RHEL) d& h2 S& P8 ?& Y

# u2 W( n* J7 K& }# \; O( R5 o1 [
$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel8 t6 T8 @3 `" Z
Ubuntu/Debian
: x5 l5 [8 j9 e" Y& C/ C- v% Y% h: N0 |5 H5 O
+ p6 y1 M; M: Z0 l, e
$ 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++-dev8 c/ Z) t9 }# H* f; @; o. {
编译安装ModSecurity
) S3 ^+ j4 y8 T2 d. q0 n0 Y: yNginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。- _  z4 k' v6 s. z3 O- S
4 k2 J4 `8 d1 i4 ]# U

( w- }# I* h/ {# a5 r方法一:编译为Nginx静态模块
. ~6 H4 m( n2 p& p
( o$ ~) Y' N' c* A1 X2 @: l
% y9 U9 f: Y1 Q2 A3 O  d编译为独立模块(modsecurity-2.9.1)+ K  o8 q6 M; m
$ tar xzvf modsecurity-2.9.1.tar.gz
- v! _( c: \# g# m3 u$ cd modsecurity-2.9.1/
, g3 |; H/ f% Y1 ?% k, k$ ./autogen.sh7 a! @% T. V! c" p- L9 X1 K
$ ./configure --enable-standalone-module --disable-mlogc1 b8 F# h- H9 p" {5 j6 S- D
$ make5 t5 q( J* Y/ z: @* ~
编译安装Nginx并添加ModSecurity模块, }* t% R: N1 {, \
$ tar xzvf nginx-1.9.2.tar.gz
. P1 j, T, h1 }$ cd nginx-1.9.29 ~' I* H% H* z. P
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/5 v3 C; t: t0 {5 q0 m$ h( R
$ make && make install; L" R+ q7 L6 g9 ]& }4 t5 Z
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
) v" u9 n1 G3 j) V$ D3 S# J" `4 ?7 `5 T. u+ c  S
1 L/ r$ a0 A* U! }1 u
编译LibModSecurity(modsecurity-3.0)8 K% j( m) s. l) B8 e2 `
$ cd /root
  [) Q- O6 `0 n5 }$ git clone https://github.com/SpiderLabs/ModSecurity
5 u' d$ |) M# `+ E1 ~$ cd ModSecurity
4 l# B& F6 ^4 B8 O, \9 s0 c$ git checkout -b v3/master origin/v3/master
* K6 h3 a* ?: R+ _$ sh build.sh6 r$ J" A9 e8 s, X& ~1 |" F
$ git submodule init2 R/ y; `: a- o+ }$ o$ q
$ git submodule update
- j# _! O2 m5 o) M4 D: m$ ./configure; z! ?4 S; t. k, C
$ make
$ l: }, R4 e; J( B) V$ make install, [8 C, i, j0 e! U/ R, B
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。" m% ]1 n: H- ~  X9 s5 ^

  P% h- C  l5 E0 p+ S4 @# p1 M) s- |( u' d' X0 f! ^, O+ [/ Q8 u
$ ls /usr/local/modsecurity/lib
1 I' {  M5 x0 M) t( ?libmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.0
/ N% F, H: A" k' x2 F' G) T; {9 J' x3 |编译安装Nginx并添加ModSecurity-Nginx Connector模块
+ g' N" X+ Z$ \使用ModSecurity-Nginx模块来连接LibModSecurity+ u# e/ g. H  }2 K# C0 y* J4 [
$ m4 r+ ]0 e$ u' l# v* y

: x! X$ D9 z' B; ?$ cd /root. S5 h3 _# s( S; I( W& ^; M
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx# R9 @- A& n# C* C5 E1 W/ z+ j
$ tar xzvf nginx-1.9.2.tar.gz8 c" d; _8 n/ d' Z) A
$ cd nginx-1.9.28 _6 H) p  w* n& [6 K& B# O- `
$ ./configure --add-module=/root/modsecurity-nginx
: c: k* ]% t' W6 Q6 \$ make$ B. r8 p, M1 G$ r8 K1 s
$ make && make install
4 N2 Y& u+ [  D0 x, c1 w# \2 I添加OWASP规则
( U- K6 i6 ]0 R' R; c  E3 h  fModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
' @  t4 w* v( I
% G$ ~$ {' y' V7 V$ t4 D
0 c2 h3 t% S1 ]" a下载OWASP规则并生成配置文件3 m" y7 S9 g! ?" q  v
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
. m) ?6 Q* M! G6 C+ d$ z$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/
5 k' ?. b- \6 Z  ^/ }) b$ cd /usr/local/nginx/conf/owasp-modsecurity-crs  m4 \) R" y8 \* c. @7 e
$ cp crs-setup.conf.example  crs-setup.conf
8 Y# Y0 Z) Q& _2 B, f- L: a/ M配置OWASP规则$ v' U$ o0 L8 `" M
编辑crs-setup.conf文件
& D' \$ t' \* h2 x; L' z; u# w- ?% ~$ s9 c) M

) V2 N1 m. \+ R" r$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
+ N' N0 Y8 i/ E3 Z4 V0 y8 s7 H$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
! D" m, J, k% Q  P$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
$ [/ I/ p* X/ N/ h$ J$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
4 a+ ]4 O3 o% C; O5 g5 o默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
7 e4 `3 N- m) W( K8 m
: j7 T" C" k  ]' f3 m2 j/ Z3 J/ I8 x% L6 r+ d5 T
启用ModSecurity模块和CRS规则
) a1 ?4 L5 c& X9 M" D, e1 |7 L复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
2 a, k3 w0 g9 Z/ H9 c- a, [, X% a
& P  q; ^4 I: D4 a' W- {& [1 V: q5 N
2 e( H+ f5 o8 o3 h1 b2 Lmodsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。& _, c7 \+ j5 D1 Q. X! w- s

+ c# s0 r3 y4 A, c: x$ y3 S
7 a- Z5 B% y3 d9 m3 o) n$ cd /root/modsecurity-2.9.1/
+ \2 C) x* s$ }! d: `7 u$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  
1 D5 Y* }. D+ j! @6 x- \$ cp unicode.mapping  /usr/local/nginx/conf/
8 a) E! ]$ k8 C9 @将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
# Q; C2 h5 ]- ]
$ s9 n: d, d  Y& e
" D) {9 ?8 P: b! @. A$ vim /usr/local/nginx/conf/modsecurity.conf: R* ^, u* c* t1 y9 D+ T0 M. S+ C
SecRuleEngine On0 Y$ v% ?- y! N* M+ V- R3 v" x0 O
ModSecurity中几个常用配置说明:
: _( ~! T: N! s: ^; x' N" I
8 u3 F- i, ]6 A  t- r1 t
4 w5 J/ m; b$ @1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。) f/ x+ G% I* Z  Z, [6 H3 s! Z
7 `8 b- ~# y; r1 |0 g( z- y

" f! p* B- H9 O1 T' F+ W2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。2 `( k! F5 F- Z/ m* _* E
$ ^) A; J+ e! I' t1 g7 f1 M

( `  W; S2 Z& b$ L% J; ~3 H3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
2 H0 V$ H! L( n( M; R' m- H( ^" q
! ]9 T4 G( w  e; W4 h
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
; y2 e  n+ g$ l
( b" Z, _. a5 h8 {3 j) z
( o! q6 _* p6 w5 {  C5 [. R在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。& d  ], {* Y7 s& ?9 k) r
5 E( R; \% r' o8 k: [" ~# b$ s

; b& Z4 J$ l. C' Z3 ^9 f3.x版本CRS: h0 Y3 B3 @: X+ _: {- r
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
. ~  }# F" u) J) g! s# U# 生成例外排除请求的配置文件
) l5 S8 l$ N4 f$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
* F+ p+ U6 C5 ]) E$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf2 @$ h3 z) K2 x" m9 P3 t  o# R
$ cp rules/*.data /usr/local/nginx/conf8 \, p3 p8 H( P, T( N/ P
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。4 [$ R( B7 a. r- `+ l
8 K0 t: x2 Q) Z7 t$ ]) {0 h
$ I, ^7 {3 y) c2 x
$ vim /usr/local/nginx/conf/modsec_includes.conf2 {9 m) t4 O6 H$ r% j1 d

( \) S4 V/ v, c$ k; X0 H% L: J
[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

  u0 D: s" ?; \; n: Z- x- v  i& X" K& r1 i, s! n
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
  y3 ]! G' n% o: X. A( s; M2 s8 t# v6 B
& S5 I, q# @: F, p
配置Nginx支持Modsecurity2 `5 F: d& F" f0 l9 a) S/ U
启用Modsecurity
- Z, v" X5 g* E1 J使用静态模块加载的配置方法
4 z8 c8 O1 O; b5 H在需要启用Modsecurity的主机的location下面加入下面两行即可:
* x0 R, n- r# @  x* n7 u9 R
3 e  J, x& D7 y  z* P5 ]: G5 ^2 Y; l( U2 E) {* \% w9 }
ModSecurityEnabled on;
) V  Y( w3 ^; R2 `9 {& ^ModSecurityConfig modsec_includes.conf;! [+ l' n& C4 Y8 t1 D
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。. v3 ^7 Z, Y( V/ \8 n5 W
9 B7 k, w* O) V1 j2 U! W# G
, f+ Z8 I  y( l: E4 a
$ vim /usr/local/nginx/conf/nginx.conf
' s$ r3 ^7 g+ r+ _: p9 m2 P% Q3 \# S+ y  F$ P

' M& E0 m% r' L& u4 \+ L! Zserver {
$ @4 K* l0 o" ^7 K  listen       80;
  L3 r; I* Q+ S% x- s! Y2 H5 S  server_name  example.com;
3 w$ r: k. Y% U1 p0 v' f* l' J" l+ x  M1 C" ~

$ l) s* M0 a! {+ _. T3 y9 L& B( ~& A% B  location / {
) U: n, H2 h# e    ModSecurityEnabled on;+ a' y# Z, ]* Q7 g
    ModSecurityConfig modsec_includes.conf;7 W2 B- ]6 E3 b
    root   html;
/ j$ w- b- U' M+ {5 ^3 g, V    index  index.html index.htm;4 }; Y: Y* k) M1 v* Z1 e& G
  }8 T, [% F' d2 a# P3 c
}6 K6 G# g  Y* Q4 ]. F" J! ]
使用动态模块加载的配置方法; h2 u' c/ L* k- j4 A0 f2 Y
在需要启用Modsecurity的主机的location下面加入下面两行即可:6 g: `" j- U' ?$ W: b8 q6 r
8 d" B! b  @5 I8 g, e2 i4 z8 F6 l" v

0 ~& }/ U' S% K: u+ i+ V+ G" o4 Qmodsecurity on;
7 x! s/ R/ c) K4 t$ T0 Y' bmodsecurity_rules_file modsec_includes.conf;
2 n4 W9 M* \/ G% ~; H* N  K修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
9 W7 h2 e# |! j2 K( g' l, v! i. G  _7 ^

& {  J* C* ]+ A+ s  f6 H5 E5 i$ vim /usr/local/nginx/conf/nginx.conf, j, t1 r+ R$ G1 Y6 ]& M' I9 m

- T5 I- U) C" ?; |) t# C1 ~7 ^# O# B' |
server {
5 h3 Q6 J# s7 S/ |" q  listen  80;; d: L2 v0 z7 G+ n" W8 i
  server_name localhost mike.hi-linux.com;
1 D* r4 ]. u" u; H- M$ H; I8 x- a1 ?  access_log /var/log/nginx/yourdomain.log;
% w5 M. V4 p% I0 K# U* ]/ j0 D- W+ ^0 I( F2 l

/ E8 Z5 k7 _' M# P$ |- U  location / {2 J4 B: f+ V. w- i1 _! \
" D# C! G. q1 B/ o8 k
+ U; ^' J1 D# V: z/ e( A
  modsecurity on;
& v/ p& V3 t& ~7 I7 D# b  modsecurity_rules_file modsec_includes.conf;
& d2 Z$ R/ Y; O! u/ ]  root   html;
* ]( s( X, G. o3 ]2 o3 q  index  index.html index.htm;# `$ y5 Q$ e% p# i# L7 m
}: Z; H* C2 R$ J; f1 P& l
}
. Z2 W8 n* d$ e/ H验证Nginx配置文件
0 R( l) o0 K& l3 L+ B: o$ /usr/local/nginx/sbin/nginx -t! b8 }% _; a5 E6 z  |4 m0 ?
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
! f" e6 O& r+ r' i. k+ Knginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful/ D8 W+ C% }9 o8 w" e' ~5 ]( u/ r
启动Nginx
) U& |" m: ?: a% m: `$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf4 }) g. S4 ~3 M; j3 f6 n9 Y1 n7 [
! H* o4 u2 c# w9 Q7 p; \4 E- e

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


# d, r4 ]% `  @0 k, L. c7 z

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-4-23 18:44 , Processed in 0.077391 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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