找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 12667|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
3 g; ]" {6 S; _! Z* \7 d3 D/ L/ z( t0 h- u( V

7 B% H7 G" K: Z+ D& d/ x4 k; Q+ U在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。8 b  {5 K/ d7 c+ ]5 y5 J

" c3 J6 b5 ~2 k6 F. P% `. t& d+ e2 Z- \
什么是ModSecurity
3 |' ^3 B3 h9 cModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。' }1 Z5 x. v$ z/ e/ k

6 S$ J5 r  a4 m% R0 k. C" K4 z( I. T/ |4 M. U3 f0 f
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
& G3 Z" g  B& i* E' L) p5 u9 A% b
6 R. }6 k( e& p- _2 o$ _( L* }" w4 e2 S4 k" k+ {
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
( @4 e3 I/ \* j
8 f& @1 [. U6 F' N) N2 g/ g0 p% w0 w' Q" J2 m  u) R+ t
官网: https://www.modsecurity.org/
/ [( y. I) C: u: P( D/ \6 l7 s  e  n, ]7 @; O) _1 Q1 B; T. c
5 r, v. Z. X! E7 p( r" M
什么是OWASP CRS5 J! g7 F3 B  U+ p0 [% Q- B
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
& ^; s- z9 i" N, {' I6 A6 v) ?; ~" n' f/ o0 w. f

" C9 O' T0 Z+ Q9 Q* XModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
' o7 F5 h6 c1 R5 m* J/ h. ~0 h7 h# Q8 H: v6 a, }

  B: l6 @- N- u' b: D% m5 M  g" MHTTP Protection(HTTP防御)
1 n: r) `- C* @. O5 V, S* k7 U+ \( |HTTP协议和本地定义使用的detectsviolations策略。
8 m" b  h" y- L# T7 Y
: T5 z& U# R8 S8 b
: d$ N: u( D  l; s+ g8 r/ EReal-time Blacklist Lookups(实时黑名单查询)
$ J+ s/ ~; L" G' V利用第三方IP名单。. R. Z$ L! q6 W# Q2 p
& W) J; u* c8 [: [
: `$ U/ @- E4 j# O6 q
HTTP Denial of Service Protections(HTTP的拒绝服务保护)7 d" D3 h; ^4 N0 N4 H2 E
防御HTTP的洪水攻击和HTTP Dos攻击。
% L0 K  a+ y& `5 m3 X* ?) _3 S" e: W

8 @( y; d3 b& b% v( j7 u. [% pCommon Web Attacks Protection(常见的Web攻击防护)9 J8 \; r- X3 [
检测常见的Web应用程序的安全攻击。
! r6 x- ~% R9 z; v: L
6 {  w# x1 J0 p6 c/ V; v( g# O5 b( g2 j! W) n) K8 J, ?( W0 I9 }5 I
Automation Detection(自动化检测)3 O/ W' X* {9 O- E) i! L
检测机器人,爬虫,扫描仪和其他表面恶意活动。
( ]* X: \) T% Q, y
! a* d" ^, C! ]8 Q( E! |6 V  }8 f1 G( D  E7 E3 o; s! k/ Y6 ~
Integration with AV Scanning for File Uploads(文件上传防病毒扫描), H6 G' b3 H, m8 c) w5 s+ p9 h
检测通过Web应用程序上传的恶意文件。9 z$ T' ]: ~! f
5 G' ^1 ?3 A0 S8 I7 l

' c1 A2 G/ F+ f: f& e) dTracking Sensitive Data(跟踪敏感数据)8 n5 S- w( u& p. Y1 b* A5 G/ X+ n" {4 ?
信用卡通道的使用,并阻止泄漏。$ ~4 q8 t6 S- ]7 f) [
( w9 a; d7 n8 O: G3 \' g7 Z: S1 k

# R: z4 L% j2 h- M6 d, _6 }Trojan Protection(木马防护)7 \0 I1 v* _( E/ K) ?
检测访问木马。9 H# y: u( L: p; {1 h

# D0 z  w: E0 w# H
) x! J+ K# Y4 @5 S4 M) {Identification of Application Defects(应用程序缺陷的鉴定)
+ D# ?& H  J3 B) K, a) y* f检测应用程序的错误配置警报。3 m' h% I! ?2 O9 L

/ b2 V: I9 d4 s
8 A; R# D1 o# C: a7 QError Detection and Hiding(错误检测和隐藏)
% i3 p1 v. f9 @/ y% L: w% a检测伪装服务器发送错误消息。9 L  S- c9 u7 n( S( G2 Y# _" x

( N1 A+ ~4 r% H# U% ^/ n( l8 I/ b# E) m/ P5 h
安装ModSecurity
' J0 p9 \  g: j& ^! F0 V( v$ G. u9 [软件基础环境准备4 d0 Q4 Y: J; G6 d7 W% `
下载对应软件包$ c7 k& w* J1 L7 e
$ cd /root8 q2 g& V$ ^9 \4 J7 h. D2 F
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
3 U4 I4 W; t3 C' s8 l; H$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz# G5 x, [+ ^4 {  H: y! _
安装Nginx和ModSecurity依赖包
8 \) W* X- W% X8 w5 b/ J* xCentos/RHEL
* j, R0 R; R, t' j  I% O
. W+ l, ~2 r0 Q: m5 M# A" X1 B1 r
" r# `4 {2 ~$ w+ b" R. N$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
) q1 O# t9 K% F& }Ubuntu/Debian
" T  i5 [7 u! N( f$ X8 h! |. a0 U3 ^* k& m" Q0 X: I, B, @3 [9 B8 s
# e$ [6 Q/ R; v6 _$ W0 ^
$ 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! v8 g. f2 o# Y; D6 A
编译安装ModSecurity
' P) F8 r- o" z( ?. q' |- Q$ ~Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
: _# a: A  r: s. z# z5 T3 A
. Z# G; ~4 {1 L& M4 z* S; r
5 T1 J9 a1 n, m. h方法一:编译为Nginx静态模块
3 H# N9 Z) x% J& q5 [( \' l3 I# T1 y  q

- `. a* h5 x: C7 e: r编译为独立模块(modsecurity-2.9.1)
" V6 C! [# j3 j- p5 D1 r& @' W$ tar xzvf modsecurity-2.9.1.tar.gz0 E. i- ~/ c0 y
$ cd modsecurity-2.9.1/# l' G. K( U2 h1 H% H' v  `
$ ./autogen.sh
) {( Q5 R  p, Z1 N$ ./configure --enable-standalone-module --disable-mlogc
" X) P2 s( q" l$ make0 v7 Q2 L/ [. f9 n2 o
编译安装Nginx并添加ModSecurity模块8 D, k8 r" c* z
$ tar xzvf nginx-1.9.2.tar.gz( @6 }; b# u. a+ `
$ cd nginx-1.9.2
; l" F" f8 Z( z' `. P3 t8 M- W' p$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
3 y% k9 X$ ^3 e. Q  `$ make && make install
# J. n$ e- |, b; S" j$ @方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
5 Q" B: M& F( o& k7 g1 X  T3 X; y* ?# P" d8 g
% k8 G$ P3 `- V/ x3 v1 B" T# J
编译LibModSecurity(modsecurity-3.0)* Z7 T8 Z9 B& N/ B2 U  R  X$ M  m
$ cd /root( P/ p. `' L: D+ k' ~" V) {
$ git clone https://github.com/SpiderLabs/ModSecurity+ }& ~( {1 ]) `+ z4 e
$ cd ModSecurity6 d: ^0 t! _! j1 I. m
$ git checkout -b v3/master origin/v3/master
$ [) X4 O+ K; Q  n5 o$ sh build.sh
1 b0 f) z4 W( {3 T, B$ git submodule init  l5 f* y. M: K$ }& W' m
$ git submodule update( R5 w. b$ {* J
$ ./configure
: N! w/ Q6 _% a; j( Q. y% \$ make
" q9 y! I$ N6 @3 A8 B0 b+ y5 }$ make install
$ p3 ~) c" R  [: D4 T, ILibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
  C2 k; q. s9 R
/ O3 t* l: [: l% \, u, y3 q( G5 V/ }! \( ?
$ ls /usr/local/modsecurity/lib# n/ ^0 L  e! y+ v) S- y/ [: {# T
libmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.0$ w0 k3 p+ x2 ]0 s9 w/ I) N% C2 d* e
编译安装Nginx并添加ModSecurity-Nginx Connector模块
5 N- P0 c( S% y0 w使用ModSecurity-Nginx模块来连接LibModSecurity; u4 F) p- _' m/ o2 C
; \3 ^: Z0 ^4 r. R1 N

' O- H# b" C( F( `# o# y$ cd /root
2 k& r% Z: c/ F) r# u9 ~$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx; i: s+ \' M; S  e4 R: o2 _8 L  |
$ tar xzvf nginx-1.9.2.tar.gz% i7 e. k: B* D9 T4 N$ Z% R4 B
$ cd nginx-1.9.26 z6 o% L) ~  h! o
$ ./configure --add-module=/root/modsecurity-nginx$ `' r3 J8 ]) X9 U
$ make1 n' c' }7 y8 P( e( n1 ~
$ make && make install
& W% r% P- k1 @" |, H/ S添加OWASP规则" ~" d3 ~; Q2 i1 j: x
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
; b) I+ s% w/ |0 ?3 {2 U* p/ d+ j6 O! `: s4 y) e

3 ?' x" N; F0 k) k下载OWASP规则并生成配置文件
6 [( v( ~2 Q; i: y, ?) v3 M$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
5 c( `7 c+ a$ p1 t9 C0 f$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/! E3 t# }+ _9 v# l
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs) @; l, K6 B$ D  W( p
$ cp crs-setup.conf.example  crs-setup.conf
. i+ _7 x2 x/ F; d" |配置OWASP规则
2 z! s/ k0 i0 U( u+ h; L, F7 J2 e5 V编辑crs-setup.conf文件7 e" O0 v8 T. t+ Y2 U
" C$ Z5 j& B+ z

! @7 u, M3 \  e9 o4 D" b  l$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf$ u7 k  q) g5 U" M
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf$ O% q8 ^( v: \" Y
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
# k2 K3 V3 A  d9 d8 m9 {$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
: d6 K% j2 j8 f$ r& z默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。( B% s! K9 N" ]* N8 G. j

: z$ C: ~& f6 l. d% }; j& b: q' r1 S3 M
启用ModSecurity模块和CRS规则
& `5 @7 h8 K* Q复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
1 r6 t, L8 K( s  K( V8 J# ~, \9 I0 L, p: c. E% G
0 S, g4 h" d- T8 _6 s# @8 i3 q' H/ S
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。' U5 X: X2 b# W+ l
+ k& G8 W1 J5 z/ ]" G3 N

9 e* f9 k* _) }% Q5 z% I, Q% R$ cd /root/modsecurity-2.9.1/# f9 R. X% D' {8 Z4 q' D
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  
' }$ f, r" L2 n& Y* k" f  W# X$ cp unicode.mapping  /usr/local/nginx/conf/  \: h# n+ z$ D3 F0 x1 a7 b# I
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。- [* v. F; E* Z) S. V
$ d: V1 Q4 G* Z  l2 R+ M+ A
8 P, }0 z  _5 s6 I) ?" Q
$ vim /usr/local/nginx/conf/modsecurity.conf
9 i9 O+ y0 a2 |! uSecRuleEngine On
4 D% E; l% F: L; L2 Q9 v  F- {ModSecurity中几个常用配置说明:
8 D8 Q; f$ j8 {8 x% M! C5 `0 b0 q" \& e/ L, N' x: ~7 J
  g) K3 }0 i; {
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。% l& i8 X2 D0 D

5 {2 _8 l& ]- j* l; ^0 |5 A8 g5 E
  [: }" J9 q( `$ j% V, a, @! D, u2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
& m$ Z9 i- }3 e  e) p
! w# N/ }& ^1 ~% l
& Q% W. q  c1 |* I- |6 D3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。+ _1 C- j$ _2 Y" j% T: t
! Q4 R/ u$ Q; b6 s

# l9 u( ~& o) E8 C+ \# ]5 \4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
* [6 N" W9 {* K4 L3 t
1 G  @* r+ D9 _  ~* R1 S+ C8 M/ }4 r6 m
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。# H  l2 W. g1 u" g* h- N# J, Q# e4 f
# g# \, C; o. C+ Q, v7 S

: D5 G% k) b- _% e5 X9 [3.x版本CRS
8 x" M; o5 q- I6 L! K. o1 G$ cd /usr/local/nginx/conf/owasp-modsecurity-crs; u4 V8 w( _+ T3 w7 r+ ]+ e
# 生成例外排除请求的配置文件4 J2 y- I! m' l
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf0 q2 F- S6 ?+ Y' S
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf% Y% [  [0 k$ Z: x% C7 F1 L! q  e; |" V
$ cp rules/*.data /usr/local/nginx/conf6 j: L5 [: k4 c. n3 h* u
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
1 u& [9 _" `6 a0 }; B5 q& u( D
8 F/ m2 Q! E& J- C
" M, f3 d, ^* j+ ]0 R$ vim /usr/local/nginx/conf/modsec_includes.conf
8 x4 I$ `: G0 H: ]& @, R: N1 X, t/ J6 z; R! {
[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

' z$ O. s5 ~; H' Q+ S: `* C/ d
) l9 i: K  q4 z3 ^& [注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。" z$ a( ]; W$ b1 L, f, n9 p4 ]) ]

2 Y  l$ M9 |0 H' Y
5 k6 ?% a! Z: H  U' L配置Nginx支持Modsecurity
  p7 X3 `8 K! l/ g启用Modsecurity) J2 [6 w1 y7 I! _  o' e. `
使用静态模块加载的配置方法
, f3 E; \" Z0 j; P在需要启用Modsecurity的主机的location下面加入下面两行即可:: |7 J2 A' R/ o7 ~  D! j! L

3 [) x) p& @5 L8 ?* }* L
! i+ P/ |- f; R& P2 J6 zModSecurityEnabled on;
8 z1 r  E: N0 m8 j! eModSecurityConfig modsec_includes.conf;
! q0 H+ `7 X3 y1 I( H修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。+ t, q3 y! V' M# E2 A

! j8 \' R! H' k: Q* x5 O1 N8 F( ^/ ^# N) f% B
$ vim /usr/local/nginx/conf/nginx.conf
4 _/ c; H( B1 [' k
* q' X+ Z7 O3 {; g. B
& C) ^. G& E9 T# s0 F) p4 jserver {
% O+ z) L" _: Q. B5 B  listen       80;1 P- u, v% W& Z  i: s- l' X1 {/ Q
  server_name  example.com;0 l$ A9 ^" D' l1 y" m
* U, [  W! X' [$ h

7 B3 E9 V: J  v% G1 }$ x  location / {
9 \3 l+ g# w! {$ F    ModSecurityEnabled on;# s) Z# b; D! l0 f3 c& N; a
    ModSecurityConfig modsec_includes.conf;
3 ]9 ^/ S/ b' W4 V8 Z    root   html;6 H+ l, ~% s! A# H2 C/ U: c
    index  index.html index.htm;
( ?7 A! ^! D+ y+ B: p5 Y' O; I  }
3 H1 n- w$ r4 N% t}- R3 ?  G  h6 [1 u. q9 r- W: O
使用动态模块加载的配置方法
) x( K; W9 y& }9 k0 B1 g在需要启用Modsecurity的主机的location下面加入下面两行即可:  G8 X6 U. y5 C( J: m

) `7 ^9 k! Q# d, J9 U* c- {( \7 a( k$ a1 u/ r( w
modsecurity on;
+ P/ `# C+ o, m! fmodsecurity_rules_file modsec_includes.conf;) _7 B$ K; \4 V# v
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。- a3 |  R- O. O8 w" L: k+ A

$ E8 S; u9 \- T$ K5 w/ i" J& P. P
/ J  a  x: }" Z0 y2 Z: l- x5 N$ vim /usr/local/nginx/conf/nginx.conf
5 g2 g" N5 X/ i/ D7 H4 ~7 s$ V8 N! X' H" z. k2 A  y

' x6 s- d1 M% `4 h2 M1 mserver {7 _" D+ n% @: Z! E6 t: u
  listen  80;  {& R$ e; t( p
  server_name localhost mike.hi-linux.com;; Y0 x6 h. i$ c% ^: M$ j
  access_log /var/log/nginx/yourdomain.log;  I0 g! E. {( a

" o7 U0 s5 J8 ?; @7 g0 F6 F
  x: ]3 U7 T+ P  location / {. S& H6 m$ v) ]7 _8 U

! L! |# y* J; c% R; H6 o$ r# l& ^% U8 z% c2 S# w/ P$ p, N
  modsecurity on;6 t( h- G- M/ U6 k0 u2 I$ D
  modsecurity_rules_file modsec_includes.conf;
/ m6 G5 F2 o" v' T" L  root   html;
( z4 Y7 L2 t& Q9 n* d* D8 \6 d  index  index.html index.htm;! X, b& Z4 s) Z; O/ g
}
" ?9 M' x$ W  {; A  U}3 p, H0 @1 r7 l- o( Q3 K: `* F
验证Nginx配置文件2 A2 n, P8 Y+ j
$ /usr/local/nginx/sbin/nginx -t3 v7 T* H5 O( z8 z+ [
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
' \5 p0 j& T6 {nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
" `- ~0 d3 r8 O启动Nginx3 j8 S) h/ H4 I5 t" O. w% i
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf- C. ^! `2 K" @4 D! |; x

9 l* ^5 i+ _0 s; f) ^( X/ 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能够战胜更多复杂/未知/混淆的攻击模式。

: R- B0 N( j2 ^- O  X

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-10-27 09:48 , Processed in 0.094904 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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