找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 9992|回复: 0

利用ModSecurity在Nginx上构建WAF

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

" x$ `0 \% s2 b: X
# X. H/ J$ ]; I7 b: f% O在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
) B& ~7 M6 h: i
1 u4 _" A5 X. q+ f6 l& G7 _/ a: K! E# I  N0 X: p3 n3 t
什么是ModSecurity" D7 W* K4 [. u7 [( u  N
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。' S( Y% m4 \* e9 k

0 d  V7 o; N2 }; ?8 l" Z8 P3 a3 v& S9 M: ^
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。, `. p) B% L% T8 n5 X( p
( s/ ?7 L! X. q/ R, d7 `

( `; v, q3 Z5 @ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。, \+ g- m2 r' t
, k; J! ^! Z. h! H, V& f! u. j

* b) W- N) u! u  }4 D7 @3 Y官网: https://www.modsecurity.org/
8 h& i& E; ^! @6 Q9 j4 W- k7 V- f1 X; [% ?; C3 z
, r6 k1 W/ }) U7 q( a) c; {! y
什么是OWASP CRS8 o" }1 H% q- x4 w% ^  N  S3 u
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。6 k3 W4 r4 U2 `* L# e
2 j) e. F% z" s  x2 h8 x% H

5 A5 @* u# i2 B5 eModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
9 U- W2 [8 x( \. c* O; T! e8 s6 _& c8 t% H; e
$ P6 T7 x) z* V" y8 [! B& _3 \. q
HTTP Protection(HTTP防御)9 L$ k2 ?0 j6 S( e
HTTP协议和本地定义使用的detectsviolations策略。
% v; h8 L1 `/ Q; j/ f2 S
+ G1 y- i$ v5 ~$ H/ s* k( O1 u+ n
Real-time Blacklist Lookups(实时黑名单查询)+ J. u0 S0 ~( s
利用第三方IP名单。9 z' |' a# }$ q  f; o

+ y  a- g( J2 }* A
! v. p. y' P/ k( PHTTP Denial of Service Protections(HTTP的拒绝服务保护)
8 b9 e. w( V9 s3 A. k9 u5 [; D防御HTTP的洪水攻击和HTTP Dos攻击。/ M. k. s4 C& V

( S. L4 ^8 g0 P' t( O5 d6 Z
2 t/ g" P# ^: c2 L% T5 xCommon Web Attacks Protection(常见的Web攻击防护)% t% ^  v/ Z* [0 D- o
检测常见的Web应用程序的安全攻击。
% F& d  z  X* k7 V& i- l
  E: R7 w8 p" @! ]. l0 |1 }; k5 ]. u+ Y0 L$ y; B. l# k- o
Automation Detection(自动化检测)
; e5 s) N( v! @7 k检测机器人,爬虫,扫描仪和其他表面恶意活动。
5 L* ]$ M) R6 o& i* l+ x1 P, K4 V/ G  H" m6 Q9 g
  ?8 V; Z# s# M& {5 J* _" D
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)) R1 s* ^) ~! |" I6 J
检测通过Web应用程序上传的恶意文件。+ c4 A! b+ o2 }/ ^% ~" `7 U
( u. x! Q% Z+ K. [: c8 Q
( k) Q' W  [4 T2 N0 S/ @
Tracking Sensitive Data(跟踪敏感数据)$ B- `: [2 @7 {5 @& n
信用卡通道的使用,并阻止泄漏。3 k; c% p. X; W! ?2 r

7 g8 D  _$ f: w0 Y8 }/ i5 o: y3 B. K  |2 \, A6 N
Trojan Protection(木马防护)
2 a+ }7 F! P$ I+ e$ a. D检测访问木马。2 \4 N; Q1 P3 ?4 R% _: j; k

0 |2 N4 c- k  d; J9 `, z
' t6 J9 H% C4 F! Q. I; K) M2 IIdentification of Application Defects(应用程序缺陷的鉴定)" r9 Z1 v. m7 G: a5 L* }
检测应用程序的错误配置警报。" z3 o% Z" T& _$ G9 f  X2 w

. F, Y. ^& `8 e" v) Z3 V: G" M" H+ o: Q" O4 p* ]
Error Detection and Hiding(错误检测和隐藏)) B4 g3 i: q6 P5 U
检测伪装服务器发送错误消息。+ x2 Z, B$ L+ }8 V
0 n! m- s& O( R

: G# O; }8 U! L6 a/ d% c安装ModSecurity- j( n2 x! D. M2 I+ N! U
软件基础环境准备$ E. a/ D: n7 `
下载对应软件包$ [0 ]6 k$ a* a& v7 S9 Q$ g
$ cd /root
7 u- P, a6 i, v# {6 _$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
) L) |, R, q; n- N8 c3 m; i! 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
2 ?& w; y7 a$ ^! c安装Nginx和ModSecurity依赖包/ o2 f! a$ P' m
Centos/RHEL
& O! W1 n  E* f$ T6 R. q) |" S6 H1 l# J7 O3 T
+ k0 Z+ h# i6 p" W# I1 U
$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel3 D* W& b5 X5 v* |4 L/ }
Ubuntu/Debian
4 F, a, n& f0 G9 x0 t& n, y. o) V, k8 `! h# q
6 e, b6 t; E) h
$ 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
+ a4 u' K3 J1 g! ^% R0 S. F编译安装ModSecurity
8 h9 g) a% Q8 l' T$ `Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
1 \# B  N* s* l2 h: n5 K' y2 Y: s# b: d* d

  |7 ^) {9 x4 i: e7 a# G" k方法一:编译为Nginx静态模块
5 ~1 R' Z& r0 V
1 @% S/ j+ ^) n. k% O9 _
$ Q4 ?. ]  h9 {1 V$ f6 r# ]编译为独立模块(modsecurity-2.9.1)) k/ U( r7 D8 _8 |5 F% V$ d
$ tar xzvf modsecurity-2.9.1.tar.gz
1 P* z* h4 P7 {( X$ C9 h. X) b$ cd modsecurity-2.9.1/1 v! k) Y8 Y, g' l7 w
$ ./autogen.sh- j9 _2 m6 P6 S- v0 v
$ ./configure --enable-standalone-module --disable-mlogc
" H  M' a0 ^" u+ b$ make! X$ D% v! n+ j  W& P6 g) y* X
编译安装Nginx并添加ModSecurity模块. |4 ^: ^. J4 r. b6 Y, m
$ tar xzvf nginx-1.9.2.tar.gz% o3 ^; z5 j% j+ D! \. _$ e5 `
$ cd nginx-1.9.2' A: E# ^  |& F4 \8 K0 @: F9 S8 E
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
4 f5 q0 @" P: x$ B$ make && make install, o0 k  ~; @: E5 \0 h
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块+ c: P* B9 z! j) `  M7 o

7 J/ \. v' A1 i% g5 |: b
% I- O5 c; _% n" G: `编译LibModSecurity(modsecurity-3.0)/ y3 O# c" j! q" o7 v2 G7 g- @8 V5 F0 A! G
$ cd /root6 P9 Z0 u2 y6 d0 T4 |( G- ~
$ git clone https://github.com/SpiderLabs/ModSecurity
9 F/ c+ m8 |) G2 j. J$ cd ModSecurity
3 n9 ?- l! S3 o0 s$ git checkout -b v3/master origin/v3/master
2 E. D: u1 k6 B( ^$ sh build.sh
& O- I$ ?9 l5 ?, w) }$ git submodule init9 v( l4 [, L5 ]& ?% l* H4 `
$ git submodule update. }0 L/ X4 u- O$ P$ \, |2 @  A
$ ./configure
# W. g# P' N5 m- z1 z$ make9 a+ `7 `/ g. Q3 O+ d& I, g; i1 P
$ make install
/ e! S2 N# ?" P+ ^5 Y+ _( wLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
8 o9 r- f: q; J
" l8 P+ J* t# e% N/ K; I  x. y$ B% G' N6 D* Y; ^% d
$ ls /usr/local/modsecurity/lib
9 h2 m  E0 G0 u5 ?  f+ V$ b" r! mlibmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.0
* c9 K- @6 Y  U; c; q2 A* U编译安装Nginx并添加ModSecurity-Nginx Connector模块# d3 X3 A/ ?2 |5 A: I
使用ModSecurity-Nginx模块来连接LibModSecurity
$ Z; A) h  s. ^  G1 \, j. L9 R9 [6 ?! @3 E5 r9 C& W0 P
! x9 B+ a1 F& k) S
$ cd /root
. e4 A/ t: t* |9 Y, v$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
2 w  K7 _9 ]3 e: f' q3 t$ tar xzvf nginx-1.9.2.tar.gz
0 g1 ?8 W6 ], o& a' M$ cd nginx-1.9.2
( g! n/ M8 ]' A4 q) ?6 ]$ ./configure --add-module=/root/modsecurity-nginx
6 o0 r- J  E" e" G! z; h$ make" n9 N4 A( B- R- Y( w7 B
$ make && make install  m" ]3 A2 V# ?( G
添加OWASP规则
) y9 [2 v0 F5 X: C: kModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。6 G/ F: y" @% o( [( Z& y' k
3 f. V3 G# P- V) R! j" P
. m  a. S4 ?- h( [6 x) c1 n
下载OWASP规则并生成配置文件. e) D7 [* f5 T
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git6 ~! A+ r5 J) N. s/ ?# A! ~0 [
$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/
  j8 W- o! g& C1 B% r' ^$ {: r$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
/ n- P: X6 N/ y$ cp crs-setup.conf.example  crs-setup.conf
7 g/ L* o4 s& b8 K$ \配置OWASP规则
. z5 M  @, s5 f! p- W$ F( l( i1 g& J编辑crs-setup.conf文件
& K3 `, U  N5 y, b% O
% w% ]  W1 u% a, L9 l3 q  v* p( _: ^% \' }% x( y* l/ d: D
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
4 C3 \! F0 @) u" s$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf# e. {8 K" {2 L6 V* x$ E: S
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf/ a6 J" d$ o$ B; R) w, ~8 s
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf- l. C4 S3 V4 p! P* x
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。3 R0 T0 [6 U# w8 l. p$ p$ @2 H# f

" |- A( g' g2 _1 |5 w% [6 F% x% g
: z  |0 ^) a6 Y7 ]启用ModSecurity模块和CRS规则2 t4 _$ K& m" K" {5 L* n$ z
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。' g) ]# z  I. P. }, a6 O

, N2 h- O  N6 U  K! F
3 ^- u. c3 c, r( D) X1 ?' |modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。: G2 k+ ]* d; W5 m1 Z4 X1 d$ y8 z
" W& _) G4 c, N* ^" _$ j5 Y/ ]) T
8 x6 C2 L9 v( y" s0 [& n: ^
$ cd /root/modsecurity-2.9.1/
' ]+ t# m6 v2 E$ F$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  6 {4 f7 S6 P$ u5 U) S4 ]% P
$ cp unicode.mapping  /usr/local/nginx/conf/
/ S7 C( q. T+ N将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。" _% }; q0 ], T2 Y0 t. F
" H$ m- j+ @" Z3 f0 Y
9 q# c, s6 P8 ^" [
$ vim /usr/local/nginx/conf/modsecurity.conf0 ]" r8 K) n0 f& J" g
SecRuleEngine On3 y' A' T) I0 f; r+ _9 x
ModSecurity中几个常用配置说明:
/ N6 l% B0 p5 m) L2 n  m( M1 Z/ I
4 g& q: I& Q" C
& u% C( \* E" {: @/ p1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。4 {6 _1 e/ Z! R0 F+ O: [5 E
$ j, B# A! G+ S: j- p. H5 M, u
5 T- W1 P6 z& a
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。7 r& k  D1 h! e+ `9 N

7 u2 q6 [+ m* A, I: v
5 D9 y6 M8 ?1 A! k. X" L3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。+ t. [* S" }4 R  L0 ^9 d8 y0 K

4 T! \$ ~& j- |" f0 A
. O. Q7 b9 P+ N/ i) O4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
0 d! x' t! a5 K  `2 X+ y- K" {
7 D  `5 Y" o3 \# X+ T' H4 Q# o& H2 I: o. D" q* T0 d
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。- U; `% @6 _% i/ w
8 N( }- _( B2 x; _- @

% X1 g5 O4 c5 K  b/ f( a3.x版本CRS4 K- @( J' s  k0 C
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs7 i) j, A( [/ B* N2 ~8 T
# 生成例外排除请求的配置文件
  E0 O2 t6 `1 e0 r: E$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
' G5 t, H8 o. d# ]  e6 |$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf; N/ s, v( q' R# j
$ cp rules/*.data /usr/local/nginx/conf
6 S# `; [7 C9 v( P为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
4 P) {: U; O+ L* [
/ O  _; H" x  a' l; y+ f8 X. a
. ^' r  h! u( X) @) w$ r: ~$ vim /usr/local/nginx/conf/modsec_includes.conf
: M# w) ]* R4 @% B& v8 e" n) V, P. I, n
[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
0 m5 x$ {6 {+ Y' @/ w- a, j

. q% |, H& d) u( _注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。9 n# [4 F0 u- X4 p
  a. I: p4 W% g( ~/ C

- t/ y# Y) L0 _$ e6 J( @+ i! z: j配置Nginx支持Modsecurity- g; p( C) O  |$ s. U
启用Modsecurity  x: ~# y5 o6 b# Q- z$ e
使用静态模块加载的配置方法1 C7 U. U4 ]0 h& {; ~/ b) {4 c: ~: W' b
在需要启用Modsecurity的主机的location下面加入下面两行即可:# m: i9 Z/ m' e
' S4 U5 z+ g8 p6 W" ?! j+ E, T; t
+ d# ?1 b2 G9 B0 a7 n
ModSecurityEnabled on;0 Y3 u$ ~4 v  z0 z  m% ]
ModSecurityConfig modsec_includes.conf;7 K! d( _; D2 d, u
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
$ B  |# u/ F2 A2 s0 c4 H. S3 B( q2 J6 \2 l% n

: k4 N9 @+ H6 J# k- R6 L, ~$ vim /usr/local/nginx/conf/nginx.conf
. o9 {$ p, J: c1 {3 m9 t/ y" n0 l9 Z2 _/ p) r0 J
6 D; a- o! I0 X' w' d& Q8 P; \
server {
: M  b0 F" d0 Y' W0 J( a2 D  listen       80;
; B& u( G+ r8 r* {# {' V& b) L' v8 S  server_name  example.com;
0 Q. I, @: l# f2 {# E5 q% y( l1 U8 E3 o6 u- T8 Z6 G8 J1 U; Z
6 U7 k+ c5 N9 i7 m5 u6 h/ P
  location / {2 h/ `3 \" R* d% N8 `! c
    ModSecurityEnabled on;
- `9 ^" U9 r. K! ~2 l1 ?% t    ModSecurityConfig modsec_includes.conf;
9 Z2 c# j+ {7 H* U( _9 W( L: D' |    root   html;( y! B$ y. F, l( {
    index  index.html index.htm;( g- [( C9 |  z  _8 v
  }
1 h* j4 Y0 B( R! x0 y2 N2 ]+ v2 u7 |+ u2 Y}
) D3 k; e  k# h. u6 y8 |使用动态模块加载的配置方法
) x# P  X8 V  \& J8 ]. q% m在需要启用Modsecurity的主机的location下面加入下面两行即可:5 j0 c  w$ H) p) y( n3 ?

1 S  m1 Y  H+ J* _4 v: w; o/ W( l! V' V2 o
+ Q/ P( P1 |' Hmodsecurity on;
1 S* J* c. ]" M  Zmodsecurity_rules_file modsec_includes.conf;9 U; G) P7 m4 D: m7 J
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。1 ^2 f6 C' K& |; s/ s4 f- I. |
) t- D8 x' k; a4 `8 [
# I& f. d- f6 ]7 [, g- ]
$ vim /usr/local/nginx/conf/nginx.conf
& A( A& B$ F* W  _& ~" I& B1 X- F* ?1 m3 A& [
2 S) X6 I! b3 g$ H4 `" \
server {
* f1 y! K+ e/ u$ ?% E% C) e6 v3 l0 F  E  listen  80;& L. c( ?: _+ G' M% ~* [7 H3 s; G
  server_name localhost mike.hi-linux.com;) p+ n+ h7 D, e; Z
  access_log /var/log/nginx/yourdomain.log;
8 U! E  }5 o& e; h/ Y' i3 a( P
2 T+ ^: h9 r/ F& f9 F3 D5 Q+ A* F3 g* A; p2 A' w
  location / {: i. X! W/ K, R" _4 z/ t

8 S. q$ X8 |0 p* M6 s& G  |- K9 Y' g: `$ L0 f
  modsecurity on;
# L% m' d, j) i1 r2 w' n  modsecurity_rules_file modsec_includes.conf;
, I7 `% F; R  h' m9 k  root   html;& K& I0 @. ~& f6 D1 ]4 X( S
  index  index.html index.htm;
- j2 T. ?# Y1 }6 W0 V# B! `; P4 b}
' I$ k) z! l% V5 w4 ~' h3 d+ }& R}
" o+ c# f' `" E! Z+ X  O0 F验证Nginx配置文件! A7 J: E9 O+ B- I: V" f
$ /usr/local/nginx/sbin/nginx -t2 \" w. q$ Z9 R1 O
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok& V) d# l+ q; U: `5 q& K% I1 r
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
" v7 R4 d; ?  u2 J2 g启动Nginx. Z7 o& s, T% I# t& ^; t; o
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf9 k; N3 [& v' ^/ R: Q& X

3 b) {& E* c$ C4 F. c1 n4 d

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

. i' F. ]! H3 ]! Z

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-1-20 15:04 , Processed in 0.041081 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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