找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11410|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
  y) B/ `+ N7 E8 K! N7 r5 Z/ W/ k. }" l$ }8 x. {
& V; }- W# j3 f8 V
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。$ i+ p# U; K! X
5 i' C/ L# H! C- a) l8 }) q
- g# ^9 B' m  H, t& ^! H' X
什么是ModSecurity
6 s: Q  i/ x8 j; ZModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。4 T7 g( v- j. t# |8 a: u. v& d( j
9 _7 |5 a8 U1 ]
5 L5 _: d. c" t6 u" N, e4 e
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
3 s9 x* v4 y  b5 i; u; X! s$ c' ], H# m+ N
# @3 X7 m! [+ `; @: @
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
' W8 _2 N8 ?; M9 K2 p7 X5 S  g, l) C
1 g! M1 D3 z% r- f) Q
官网: https://www.modsecurity.org/
# K% |8 c' p  D( O& s( x- i4 s1 z6 h  V# m2 O6 M; Q
& E4 [7 i4 |$ D
什么是OWASP CRS4 a9 z/ c% M3 r$ [0 u' v- _
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
$ {3 l$ \) Q, H! S' Z2 `3 j( c- D* a) @$ H; y8 @( R

/ B( g- [- v& y$ U' X1 |8 qModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
- k8 M- a$ r$ {$ O4 v. L$ Q
& J  Z2 o3 ^1 j; D
, Z, j$ H9 m, D3 LHTTP Protection(HTTP防御)0 G- R6 ?. W# c& N; w
HTTP协议和本地定义使用的detectsviolations策略。5 Z, |* \5 x2 T$ @

! L4 G  c9 Q' o. U$ y- Q7 y
0 v1 C2 u4 J7 W2 W* Q) o6 C6 u: f+ LReal-time Blacklist Lookups(实时黑名单查询)
" A/ P. m1 \* j# r- p利用第三方IP名单。
7 e" K- N6 l( |$ a( ?
- }0 v# X# d. h) r) q% a' [" H0 B& N
HTTP Denial of Service Protections(HTTP的拒绝服务保护)
3 O7 x  S) I7 j8 \: G# l1 w防御HTTP的洪水攻击和HTTP Dos攻击。
) {: e. L  h( N! f( r" P7 P$ s, \. F1 {2 p

! Q7 G2 S( _! d, s% j) FCommon Web Attacks Protection(常见的Web攻击防护)
1 ]4 [) H) J* n- r) A* c检测常见的Web应用程序的安全攻击。
6 o$ L# e' u  B7 O& Z1 N4 U7 W- M, R1 B, }+ B/ K  L* C9 ?
/ J5 C; o  c3 q& l* j  t9 s9 G
Automation Detection(自动化检测)
8 M* M" Z4 _" s9 W! a: X检测机器人,爬虫,扫描仪和其他表面恶意活动。: e. P$ X' W* C3 P) _% W& w
6 X  h0 ^+ F1 R! S' `5 v! Q' A1 ^

) {" E- d  k0 |6 p$ `9 E' g: lIntegration with AV Scanning for File Uploads(文件上传防病毒扫描)
( [$ ^$ H" J; b4 P  u检测通过Web应用程序上传的恶意文件。
7 O7 A& D6 Z3 V) I% W- a2 P$ B: e/ H
$ Q# P: G$ u3 e% o+ k1 ~
Tracking Sensitive Data(跟踪敏感数据)% m* l- t0 M. y& v# w' f* \4 g6 ]* W
信用卡通道的使用,并阻止泄漏。
; V0 Y' n0 X4 ]) o
/ V6 \- L3 m) n/ W6 K5 L& ]0 W/ W4 ^- z* \/ R
Trojan Protection(木马防护)
8 G( K9 |: u+ p" a. G检测访问木马。1 w! U, P4 X* G8 R* p& B

% N. B: P8 L6 y! N$ y
- K2 |! |! e, t6 GIdentification of Application Defects(应用程序缺陷的鉴定)+ _3 h( q1 a3 N, ^
检测应用程序的错误配置警报。
3 a! y! l. \0 Q9 K, X# F, v) p1 G6 }! |- a) W6 \- \
7 d) w* d: m) T2 Q% }
Error Detection and Hiding(错误检测和隐藏)/ B, \  k& r! j/ O4 q; ~
检测伪装服务器发送错误消息。, }- J. F! ~" A- y6 r$ q' Y
' \* v" Y8 N5 |, f7 Y, A9 Y3 o+ i
7 ^1 Q) i& N9 j; a
安装ModSecurity2 ]0 N; {, X+ C+ V
软件基础环境准备/ }' Y0 O3 n5 s  |9 N3 M
下载对应软件包
# `, W- X6 w: U6 @" Q8 [$ cd /root# o3 r6 V. h0 J6 a/ E
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
; q1 k8 a, B1 c. x( ^4 _$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz
3 o6 W9 D0 F, v0 F/ x; y. Q7 J安装Nginx和ModSecurity依赖包
1 m) e. i0 ^( d) H  ~Centos/RHEL. |3 l) t9 w( h

4 O7 o2 w# y3 e7 L4 Z# o" O6 o( Y' u! O' X& f& o3 Y' o
$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel* K5 `# q& X1 h( u; ]# O
Ubuntu/Debian# ?; c: |  n5 s% H

0 T& v- k8 |2 M$ }9 x% f$ A* V  t' e# 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; B8 O! ~  v+ q. b, U- o; {1 R, ~) n
编译安装ModSecurity
2 p* \' C: B* _( i4 G% ]Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。1 d5 i) B; P+ U/ X0 }6 u2 g* \6 b- n, o
6 k; J4 X+ g; Z. m% a0 P: V# ~
. ?9 x4 M. Y; c3 S* \
方法一:编译为Nginx静态模块2 y# D% C8 a- n& a9 B
2 O7 r- p0 U4 @* @& E9 o& s) k$ N# F
, d/ D: u4 z! i# s3 x7 f
编译为独立模块(modsecurity-2.9.1)
. `$ p7 ~& m6 r5 V1 m/ p$ tar xzvf modsecurity-2.9.1.tar.gz2 M5 l1 ^) o  T2 u, ]( @- T% P
$ cd modsecurity-2.9.1/% e+ z) g' L, E6 b
$ ./autogen.sh% G. I( p( r! C
$ ./configure --enable-standalone-module --disable-mlogc
- g/ a. P" L1 O+ @. a, n$ make8 G. c3 d0 ]8 g! x7 W4 O
编译安装Nginx并添加ModSecurity模块4 L/ t. y4 m' z8 z6 x: n
$ tar xzvf nginx-1.9.2.tar.gz
" T& ]2 G: c1 c# U: z. w$ cd nginx-1.9.2  J9 b- I# H8 F* J" O# Z$ o& K
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
( r6 a! U# C& l( K! }1 q" G$ make && make install) ~! |% e# L2 b% V
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块# U5 [$ M/ b- K( C4 F4 c9 ~% V
- x0 B3 x+ Z. j* g* i2 p# o

& h5 O" s# G9 E# ]/ E编译LibModSecurity(modsecurity-3.0)0 r3 p4 p& @" r- Y8 N2 Z
$ cd /root
; }" ]  a& U' _' ]; {$ git clone https://github.com/SpiderLabs/ModSecurity
$ h4 ^# Z" i4 f: A) D5 X0 @9 ~$ cd ModSecurity
0 d4 j- N6 |+ Q2 }. ~$ git checkout -b v3/master origin/v3/master
# U% q, D- K( X" M0 z- ]" @$ sh build.sh6 ?' O" d4 A' ^9 p) R/ M
$ git submodule init8 s: Z0 m" N" P' h
$ git submodule update
+ h, }) g% }0 a* _, o$ ./configure
6 g7 x8 ~2 G% J$ make% P  p) _* J" r
$ make install( z$ i5 \1 h- s3 O+ K. ]2 v
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。: y$ `% u- W, m

; v' E' C6 t6 L. E; w
* |+ m. L0 x. k; H( c6 g( S+ D: S! n$ ls /usr/local/modsecurity/lib
* V5 j) D3 e4 c6 n: I6 Vlibmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.0
( |8 U+ R. _9 }$ {/ b编译安装Nginx并添加ModSecurity-Nginx Connector模块) Y0 I7 e8 ^9 t6 ]2 P9 m
使用ModSecurity-Nginx模块来连接LibModSecurity3 O$ x! d( o% u0 P3 B% g* h7 r

" `7 Y; L9 Q5 t. J4 w
! L) ]' h4 [! o  i( S) I7 J  W$ cd /root
2 o( S% ^0 u, i$ M! D2 k$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx4 J2 g7 t4 M: W1 k$ ^7 e
$ tar xzvf nginx-1.9.2.tar.gz
2 G1 o+ S1 I9 V& O$ cd nginx-1.9.2) r' ]5 R; [" g/ ~- C6 o
$ ./configure --add-module=/root/modsecurity-nginx# h( ~- t$ F7 G
$ make
( S% n: x$ ~  W$ make && make install" d- j# j) w6 T, E& l
添加OWASP规则7 d  R( F" n6 H2 R) q: U+ q
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。% b% ~( p) p% ~* \8 g& ^. L+ s8 k

$ p; _8 \5 q( g6 Q: V! _: a# t' `/ {; t5 P' s# b/ q7 j1 e+ p% I3 f
下载OWASP规则并生成配置文件# u1 B3 @* R) N4 L+ Y2 X& x
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git6 x# M$ b, _6 q& L& q0 m* [; h, ~
$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/: Y5 T# D8 ]% v7 ^! `4 z
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
* Q/ f* o- J, l, b1 L4 G% m$ cp crs-setup.conf.example  crs-setup.conf% p3 l$ x* ?  {( {0 ^% S) X8 |* c
配置OWASP规则3 f, b3 r8 t; k" p% @
编辑crs-setup.conf文件3 o, b; X7 c5 K7 U, J8 n3 j
3 f. S! W! T& S
; U+ P. [& ^' e6 m
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
$ i2 p8 X0 A$ X$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf3 T# y0 D1 \1 O# ~4 H
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
- E. b& i- i+ v! {4 P4 H  {+ n$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf6 ^& G& B6 X; k7 s; }, i1 M' ~
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。/ [1 y" S* u$ J

! V8 A6 j6 Z) b+ h
/ f4 n* ^; Y1 ]: q- C5 W) }9 c启用ModSecurity模块和CRS规则
) F8 o/ P/ H3 D复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。8 q/ X/ [1 O: L5 V: |
2 I* @8 ?! a- q; h6 f
, h6 G) q1 J; }2 H" ^4 f3 G7 X1 G
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
# H; m4 g3 y, K5 J6 J5 F. i$ G/ R8 x% w) A+ p$ c- F" D3 j
0 i. p; A0 E! R5 n! ^) K% u% F
$ cd /root/modsecurity-2.9.1/
6 j2 G" C/ U2 x' X# E1 l$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  % q7 n" _3 ^  \& N6 }  U
$ cp unicode.mapping  /usr/local/nginx/conf/* K, }5 t/ e' k8 G0 J. o
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
* `3 J: z% Z9 L3 s2 f$ b2 Q) _+ u. I9 S1 [9 }8 k% \* e1 x  d

2 Q! I0 _( x, ^- e* N$ vim /usr/local/nginx/conf/modsecurity.conf% d. S! _: L: [* C8 C
SecRuleEngine On
4 ^6 E* r* d+ }3 U% WModSecurity中几个常用配置说明:
- d: |' a) Z8 N  n0 [1 n' N, J8 x7 T
) _3 M6 C- b* _& b+ }- n
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
) w5 r9 i- e) a9 q+ x2 @% ~1 n: y" `2 o

1 n8 Z9 a- K; ~$ _# E! E& `2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
( |8 l/ ~' ^0 c9 `" A2 `+ T' R: V/ J! w5 e* [! F8 j

; L; {, j& Z' N3 X. V; R" S3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。. V' L2 f! e7 L; p! @3 Y% z
( H+ f- f0 L0 b  V# C  o- {1 W& }2 i* Q

# o; m/ h6 e$ K6 `4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
/ E5 d3 V- ^* u# e8 F1 I2 K. L, C) E5 e

" `3 C# V1 _" W  ?! m; @4 H9 i在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
4 A- a8 O  U) N2 P  B' c$ A/ G6 q: t! W3 z

& l$ t. |; d8 C% L3.x版本CRS7 ?' K& h: e, w" f* k
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
- Y4 J4 f, }2 `8 k, |: Q- e- Y1 w# 生成例外排除请求的配置文件+ ~, F3 u/ |# V+ n7 X# E1 t
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf3 J" p: M3 J' `# |/ H+ p* r% q
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf* Z' e) ^2 f7 z( m$ c
$ cp rules/*.data /usr/local/nginx/conf
3 e" C' T" x$ |& Y/ t为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
( b% x" Q3 I! N
0 G8 w! a& n% p2 d( `
! h5 |! R2 s! D/ \+ ?$ a/ W$ vim /usr/local/nginx/conf/modsec_includes.conf
1 }2 R: n/ T1 F  B7 F
3 S. j" Q3 x. ^$ g: d
[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 l. e0 f0 F3 @! `+ d0 U, Q1 S1 v
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
4 w1 a3 I$ f# ]( h0 b
7 x1 l4 D& \. k7 Z" n6 T4 e0 ]9 [/ n8 i& Z& A0 P- S7 ]6 a
配置Nginx支持Modsecurity
6 Y3 t" [0 P  d" e9 L启用Modsecurity
3 C: ~4 i: U; z3 @6 Q使用静态模块加载的配置方法: o, C- c3 y$ C5 e" S4 k0 H
在需要启用Modsecurity的主机的location下面加入下面两行即可:; T3 D( L$ y" Q, q9 z! q" h9 J

6 c% R4 b; M. H3 Q! ?6 ^* K5 m* r9 @1 S$ a5 f: t
ModSecurityEnabled on;; v  @% I; w- @" [& F; K9 ~: M
ModSecurityConfig modsec_includes.conf;$ H: ~" V$ r0 j- t- P
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
; S% `7 K  c$ L
3 s/ e# W! v/ |; d& N+ x9 z
6 A0 [; N, C  K- T: s$ vim /usr/local/nginx/conf/nginx.conf
! S: P( n' B1 h+ L
- j5 v" L1 g9 M0 b, [/ Z8 f) i6 ^9 n
server {
9 E( _; D/ V- a3 ~/ q  listen       80;
) h: U* a, @/ N' [5 N  server_name  example.com;
- x: ~) g- q4 w4 n! `4 [4 s! [# d, R* H6 Y, z

" S/ k$ l# b* ~" J  location / {% M! h6 b$ ?  N  ~5 x
    ModSecurityEnabled on;
* J  }% `* f" j) p    ModSecurityConfig modsec_includes.conf;. i/ @5 M( h, r5 u
    root   html;
8 i2 O. A' O: J  L5 c, u    index  index.html index.htm;, r7 r( A' }1 s5 t
  }. Y; ?* d: o2 i) }/ C; s7 T  R
}
" y9 h, u+ P; V, @使用动态模块加载的配置方法
3 S" c; O# l; g9 ]3 ?1 E+ O在需要启用Modsecurity的主机的location下面加入下面两行即可:
9 E9 u& G% I3 Z2 m/ T' Q$ h* C7 _  A# p" z

' k0 d; B* [; g- _, vmodsecurity on;
! f' t6 D4 A. e. j. Zmodsecurity_rules_file modsec_includes.conf;
3 C0 i# o+ C: y1 A( U1 I0 J修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
) u) I+ i9 `% C  L! c7 n
7 l' _. L7 u) Q) q9 C* Q' K
; m! ~$ b6 `" I2 t4 d$ vim /usr/local/nginx/conf/nginx.conf3 ]& P; k( p; X5 L7 y" s. S
1 Q( @0 L* b; b* {+ w
. [- r3 p9 \' M
server {
) K) c3 c+ ~+ Y0 O& R: G' ~- D  listen  80;
! `" c  W/ |9 F+ m8 O  server_name localhost mike.hi-linux.com;& S3 P% P6 V+ @( n  t  n6 `
  access_log /var/log/nginx/yourdomain.log;6 h; v# c2 w9 _9 q% c

2 a+ E8 D* u& n5 X: q0 ]2 B7 Q) {5 j1 I# C* D
  location / {& w# f/ Q' D. Y0 z! t

# E( J. q/ t1 j' V6 N( M( D8 U
% h6 \0 b+ V- N- x$ T$ |( _/ }  modsecurity on;5 B- x" r3 |- r; S( e2 H/ H
  modsecurity_rules_file modsec_includes.conf;! @  U$ |8 X9 l9 G/ x
  root   html;$ h9 Q, D4 r0 A" s: b! A1 N' v- {
  index  index.html index.htm;
: \5 U9 a: I0 u1 ?* s) |}
( I# U: U! U6 h( e, ?) a, p) [}; E( @7 A8 ^- e. Q/ l: V
验证Nginx配置文件) y0 A% U; M+ a, w5 |& \
$ /usr/local/nginx/sbin/nginx -t
$ e2 Z0 b! i& V! k- m9 N8 v' rnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok$ a4 J# C7 e3 n1 l, m! G; z) ^/ O' v2 A
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
% F4 o+ m' I% S% \+ C& e启动Nginx
. G- G3 g! s2 R* L1 E: O2 p- [" F* B, u$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
. m. t1 p8 p8 R/ H' ~
% {6 v2 H7 z. P9 p6 x! 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能够战胜更多复杂/未知/混淆的攻击模式。

" V6 b7 `8 U% D4 x: H

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-6-8 16:40 , Processed in 0.127711 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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