找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 9812|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
/ R2 c5 ?0 [5 q* m& X3 T# {! l
: r0 O; [# a( V! I5 w
' U- v" z, V2 f: \. v  I+ @在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。6 X3 G0 N$ D7 u( `6 j
4 b% Q" U9 n( j& o5 Z

" W" V. G3 K! H5 M8 m* d& ]什么是ModSecurity& o/ \# p+ |2 Z. t
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。. B" {6 i7 j( s5 F

" q& B5 r! K" E' W+ Q- k( z! v, y. F$ B$ i  z0 c5 h* N/ q
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。' ^; |2 D) X( `) S4 g% c5 ^1 ~  c# y
0 z7 B" `: |9 P8 K2 I
+ Y( }0 v% U6 |: @
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。3 D  j" @& l) i7 P& |) x/ M

8 c, J9 w$ s% I* T- l+ x1 v7 [9 X
2 D# \" w0 [0 Z( L' q官网: https://www.modsecurity.org/
7 ^% w& p! h( F$ X2 D& o4 N, K1 Q% @( G/ X; d6 u
6 P( s8 s4 K2 L: b
什么是OWASP CRS* W2 C. p# C1 i
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
' @4 [  C; U) |6 ]/ l% ?" g# W/ D0 t# m8 l
, _$ Q! V' d( t/ k* o, H, C
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。+ q  G: f* l: I
' B0 B2 u* E+ ^! @6 r/ z# h5 u
0 w. J3 c5 b) Q9 l, `$ m
HTTP Protection(HTTP防御)
& S' e( A! z# Q9 tHTTP协议和本地定义使用的detectsviolations策略。
9 \4 {, S; P+ U$ s8 a6 |0 u0 k. D; o0 n. ?
; t. }& z  H7 c
Real-time Blacklist Lookups(实时黑名单查询)/ p% F0 U, D8 U
利用第三方IP名单。9 b2 H8 ~; p3 v" O( o0 [3 u9 s

" |$ g) T8 Z0 F) \7 D/ z+ }' D& h; I- b! P* u8 \. U. Q. o5 r
HTTP Denial of Service Protections(HTTP的拒绝服务保护)& ?( h4 F1 f' \+ s% F
防御HTTP的洪水攻击和HTTP Dos攻击。
( C! z; H( k" q3 i1 J* r% a4 E' F3 \0 a& k) Q# }4 {7 y
9 j# f) {* s) j
Common Web Attacks Protection(常见的Web攻击防护)/ R2 l* @1 h3 S. E# r8 x1 h
检测常见的Web应用程序的安全攻击。
* t6 Q# x. C. p7 ~+ k) U& v+ k0 u( M7 U+ f. x: I* ]
. |! R* l- g% ^2 V% V. o! U/ }- x
Automation Detection(自动化检测)& S9 X; y2 r) k9 L9 y9 A7 C
检测机器人,爬虫,扫描仪和其他表面恶意活动。
7 [6 G2 W/ q& y+ p( A; ]
, Z7 s- _7 e' ?6 ?% |3 |( r! S) |$ v- G2 B: z4 E
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)9 }7 ]+ @, U" E2 H
检测通过Web应用程序上传的恶意文件。& k( K' O" L5 ~$ ~
& F9 O' I% ~* C+ h  P: O/ `
1 v; r, ^0 W9 [8 G# p
Tracking Sensitive Data(跟踪敏感数据)
" v; ?! ]6 e# L- y信用卡通道的使用,并阻止泄漏。
$ D: K: a& u# v8 p
( s$ k" \7 V) z/ t- l3 }6 s! g) E  s: j- b
Trojan Protection(木马防护)
3 f, R, W! E/ P6 V检测访问木马。0 w  Q/ h$ j4 W. C* o. M
; ?3 R/ ]5 V( \% U% R* q3 W- O

; F% @/ F' d, K# \* j5 OIdentification of Application Defects(应用程序缺陷的鉴定)
! a2 C: N* u9 `% d( }) |检测应用程序的错误配置警报。' ]3 [5 b9 C* q/ r

- w: f* _# v) L( F  u6 n, s1 F1 I
( E1 b2 N+ ]4 v  U6 r" Y6 @; CError Detection and Hiding(错误检测和隐藏)9 E& W6 Q9 C2 I; U8 c
检测伪装服务器发送错误消息。
  L- |7 p$ E' d5 J9 i# K+ r9 w  ^
% B1 R) I; r7 L  s
. M3 M$ G1 Y1 g安装ModSecurity
) w$ |0 H' o. ]. Q) |$ T软件基础环境准备; a0 J: u& c$ b2 y6 j
下载对应软件包
; E+ a" X, e# b3 R' n7 N6 B  P) j: o; b$ cd /root6 i0 p0 d1 Z. ~0 X) i6 _
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
2 L( ^5 Y! V( x; f$ g/ ]$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz) l) g" r7 H' |8 u5 D8 v1 d( I
安装Nginx和ModSecurity依赖包
" [5 w$ x3 n& w+ f/ [# a7 B4 |Centos/RHEL
& ~2 c, \6 ~' |$ _( i1 W0 {6 Q: z* Z- M. Q0 ?" ]* S

/ U, V$ X) M. q4 n: z' t$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
; Q5 T. G4 x3 F$ U- a1 vUbuntu/Debian: ?( O( V- z7 w# a3 ~
" J% f3 a' f2 T( F$ ^- _: z; h; @! i
7 H" J; a0 s( ?, t# k8 {% [) s) {
$ 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
% \2 L( `2 L( z( @8 d! r' a9 ^编译安装ModSecurity
' @7 D7 g/ l7 b1 q% O3 ZNginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。0 C# E5 I2 _* T/ O- L8 w
# z: U7 s; }% b$ i+ R# B' G
5 }  c  t8 `! y- u7 k
方法一:编译为Nginx静态模块
" n8 s/ ^9 t! _
& y# i) a6 \- p* X5 z: Q+ o& Q" |# g& ^
编译为独立模块(modsecurity-2.9.1)9 M0 J9 w6 r. J1 f$ R
$ tar xzvf modsecurity-2.9.1.tar.gz+ G' p) a/ u3 u
$ cd modsecurity-2.9.1/
+ E1 O; [$ q% E+ x1 z+ O4 |$ ./autogen.sh
3 e3 y! j; o# L$ ./configure --enable-standalone-module --disable-mlogc$ s4 I, X; C$ d
$ make
. s& r: }2 t2 a# {) v) E9 {% T1 V% g编译安装Nginx并添加ModSecurity模块. ?$ D1 |, I, @# Q# E/ @, L; m9 }
$ tar xzvf nginx-1.9.2.tar.gz3 I' N  L, F5 M7 m" S1 s
$ cd nginx-1.9.2
8 p* f, t* \: ^4 Z9 p7 u$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
: c$ @' F% ]/ l$ make && make install$ v) Q4 Q! [/ G3 r8 X& y/ \$ [( A+ z( G
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
7 {" D8 s7 m: ?" L$ v) ^4 ?; {8 h9 e5 V( o# O5 O4 g2 X4 ~+ z; N6 E

4 F% L8 t& c/ r5 K编译LibModSecurity(modsecurity-3.0)
; l5 r, e) v7 g: x0 m$ Z9 G& W$ cd /root6 V7 h8 Q* y- t& B- T2 c# x
$ git clone https://github.com/SpiderLabs/ModSecurity
! r# t' L) c, R& l3 O$ cd ModSecurity# {1 Q3 P- g; c$ _- ]/ [" O8 R
$ git checkout -b v3/master origin/v3/master6 [( g2 s& K& s* _1 A+ L5 U/ }
$ sh build.sh
& p+ L& O2 K+ I; R2 d( Y$ git submodule init' u, ]( _+ r: K2 L" U4 X6 \
$ git submodule update" C- E3 \, T& U; N- H# c: T5 E
$ ./configure9 K( I6 z- X8 B' I2 a+ g
$ make# t$ X/ p7 D) [! _; O
$ make install
' z4 C. X% A( r8 I0 {' s$ J% KLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
4 J$ s3 m, u6 S% J: W2 |
2 @) v3 H' {( }8 {; a$ Q, w; g
. P$ g/ P3 |1 [  A* N$ ls /usr/local/modsecurity/lib
  _, Z: f+ e+ E3 S) q3 g$ Vlibmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.0
8 `1 s( F5 m" s! |* C$ ~! v$ n5 d编译安装Nginx并添加ModSecurity-Nginx Connector模块  S0 ^* N% Z; S
使用ModSecurity-Nginx模块来连接LibModSecurity
% ^* ?# B3 W& p2 ?7 a7 l0 z
/ w  M4 W/ n8 ~6 H, s. G4 D' v% ]
4 f  C5 [5 R7 U$ cd /root
0 n3 U2 f( {7 L; ^( J1 a6 I! l$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx4 m% ~3 b* f9 Q6 j& d3 c$ p
$ tar xzvf nginx-1.9.2.tar.gz
: k$ A! e6 y/ `# G$ cd nginx-1.9.2
" \1 v0 w! m/ o; K* D/ ?( a0 A$ ./configure --add-module=/root/modsecurity-nginx
0 A5 U8 Y2 O' \0 |$ make
0 u) l* u4 q  i$ make && make install
; N4 Q* Z( E' \! s- E, o添加OWASP规则6 m! b4 o/ @* B) s% h" y0 j
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
# c0 q$ j! w* a' y) v0 a
+ s  R) g/ a' ~3 u; \! D- k' P; X7 [2 o. x; R; Y
下载OWASP规则并生成配置文件
# l, ]( n) Q) h/ d! V& M$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
. Q$ |, T, m* ]$ H( d% Y- E/ |  M: D$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/% p- V. z: I6 T3 f
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
4 H4 u& ?; v- v! v# U" {' K8 F$ cp crs-setup.conf.example  crs-setup.conf
( Q  a# N* A  o  N+ E' u& ~& U配置OWASP规则7 r; o- w; O, ~9 x9 _' ^
编辑crs-setup.conf文件
4 p6 y2 ^( y3 b/ ~
2 D5 d: B, m% H2 V0 }9 {2 ^; u& \! T2 }1 e
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
$ Y  |) x1 _& I$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf+ v- @) D$ K* F
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
( m0 e" D' T7 c9 A; N/ j$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
  e* q& G% k1 `) t默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
: z9 J. |8 U; G- S9 s  w8 M- E2 s$ I1 a' C$ I5 s" R/ S) @

9 t7 u/ A4 p6 o' h* y' E6 f$ J启用ModSecurity模块和CRS规则
' P& B7 ^1 ^, n+ w3 @1 T& f复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
& L2 ]# S3 N! z% v. D7 V0 y6 |- L- Y3 O) e3 [$ \
& E/ B0 P0 X; Z7 N% o
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。  I- k- n# _/ U( T( g) A! W& F

( v+ Z4 u& v( Z+ I( t
/ w1 _7 \+ J9 F# ^1 I$ _* e$ cd /root/modsecurity-2.9.1/
1 a7 e3 X# Q3 y: r$ ]5 y- a+ C/ U+ B$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  ; j) S' y# ~7 A$ ]3 X6 r
$ cp unicode.mapping  /usr/local/nginx/conf/! h6 {4 J! g* n/ G, K8 ^9 c2 v
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。9 H- s' y0 O3 {0 Y. z' ]

8 @2 N2 J  {2 j7 I& V( c: H+ Z
) V5 n! b9 O4 K4 _% g$ vim /usr/local/nginx/conf/modsecurity.conf% A# j9 @5 o. |) U# [) m2 ?
SecRuleEngine On4 g& x; h$ z( J0 p' |  z
ModSecurity中几个常用配置说明:
9 }2 `4 i+ K! a; Q9 f
2 S' _5 E% {2 H! g1 g& v
0 a/ w7 T0 @) R( J4 H5 e) w1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
& j7 C1 h6 I4 j, S0 w! Z5 `1 x: T- H) o
8 c6 ~0 v8 v' N8 P
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
7 |$ s/ ^' T/ h6 J0 T1 i0 v- P6 f3 ^" E; ?0 Q
; ^5 h0 ]! v: o2 x0 y  g2 @
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
1 X0 y) m0 D7 x2 [' s: F% U: b6 z0 O8 t. T/ `0 c5 {: y
5 y- z' K0 I( M
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。" p9 `# U' S9 H; X! [

. e3 A* J: ~) ]9 n6 O& P. _! @" v  c$ C  e4 ^4 y" [6 E6 A3 `$ F
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
$ z" L3 H+ q. m2 M! }! k# f$ ~4 r3 H' e9 y
6 z! B; p, i) \2 B; w! y$ f
3.x版本CRS: _$ _, X: g% z6 ~/ G! Y
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs6 ^$ m; t7 |7 O# w+ o
# 生成例外排除请求的配置文件
4 c" m/ q/ ^) B3 s$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
) }' A9 g( f7 A$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
" j0 J: V, v5 o2 m6 ^2 M$ cp rules/*.data /usr/local/nginx/conf
, W/ q! E' }# {5 e( v2 D% `. u为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。- ~1 y1 A1 c7 V- A. w. `* W: y

# \- R3 B1 n  n, i5 M9 K1 x
! K. ^4 h, z* t# [7 m( F& N$ vim /usr/local/nginx/conf/modsec_includes.conf
; F8 |0 \6 t! ^& X* A! d3 Q" [1 N, D6 B
[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

5 \) H: K/ Q4 \& E& A  ]) a  r3 Z' w+ p0 j( A. @
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
9 h* W! @1 Q, m0 B9 z  x& j$ a8 s( f1 t% Z  N0 {* R

3 R# U8 t) Z0 `' W9 ~0 c, \: G配置Nginx支持Modsecurity1 x* B0 ~. Z7 }2 O6 e+ R; @
启用Modsecurity
6 A* P0 c! `% Q) L! c使用静态模块加载的配置方法; X1 D5 }* e( G" |  I* v, l; t
在需要启用Modsecurity的主机的location下面加入下面两行即可:
1 c6 C8 V) y! F7 O" K) j& v+ T3 h. M# D* |0 f: e  I

2 [" n: A, ^3 |8 r( \2 k; b" ?" KModSecurityEnabled on;! O5 e0 y1 u- j4 A7 {  D' a
ModSecurityConfig modsec_includes.conf;1 ~3 R$ S- ^) b: N* ~3 a
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
9 k% R# u# T" ]+ c$ ^) D8 R7 Y6 r2 j& B4 d! d; v" V8 m* M
' q3 ?3 |" r4 r5 m8 J% x7 l1 [, k
$ vim /usr/local/nginx/conf/nginx.conf. d# Q" }! v( l* c. X
* Y- e% ~6 y; Q( @" K, A4 O

$ A8 f6 g. F) [! h4 l6 [1 ^server {
5 `" h/ \8 |: H- y  listen       80;
; J: p9 A; ^  R2 l; k  server_name  example.com;" t3 d& g% k. t( s' q' O. a

# n+ F- |& u# {/ ?* S% u1 Z2 o+ ]% n
  location / {
4 g. Q8 w. B+ Z    ModSecurityEnabled on;+ j, O" Y  |+ Y  a6 c  j
    ModSecurityConfig modsec_includes.conf;" Q* i# `+ o4 p0 n
    root   html;
+ i& ]9 r* w* h' V4 e    index  index.html index.htm;4 @4 X  z2 \4 E' R( E* ?. m( T
  }1 L. `2 m" L1 Y7 u' e7 W; J& C
}- {+ N/ b1 R2 {: X) [: P
使用动态模块加载的配置方法
- [0 v$ j, u2 M  w/ ?在需要启用Modsecurity的主机的location下面加入下面两行即可:
! h' Q" v: G; a+ P$ J* O8 h# U  p' n9 J

7 T! p7 ]4 x! P- \( f/ v- Umodsecurity on;
, m1 r; c2 L# l* Gmodsecurity_rules_file modsec_includes.conf;3 O: C3 v' [) ~3 f8 X: b
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。3 o. M3 C$ m; U9 l1 t* _7 B/ s

4 Z$ ~- Z+ y( p8 U4 ]$ ^( m. M- e
1 ]* j+ r; e- O6 M7 [2 T$ vim /usr/local/nginx/conf/nginx.conf
1 y9 j7 Z* }4 r# t# K0 x. q1 G% R$ v
3 t/ o: [; R" i1 E6 B0 B
server {
. d5 r. p6 v- d  listen  80;
# l' r: u5 {/ O& J; m; h  server_name localhost mike.hi-linux.com;0 U9 q% [0 p! _  f: P
  access_log /var/log/nginx/yourdomain.log;/ `; W/ e1 m1 [, h; x# E

1 D* j  K6 T! b6 C! M, d) Q0 h( ~- b* A% K: k* q" i) p
  location / {1 O4 l3 I4 l1 k# D$ T
3 m1 H) O+ |5 w* }& C

& b2 |1 @1 J5 [# ^: V1 Y# k  modsecurity on;
% }- n, l/ r) d- l1 N  modsecurity_rules_file modsec_includes.conf;
$ R& B- N( V% q# H* {9 R* h% P  root   html;
  t8 y0 V8 k' V& b3 _  index  index.html index.htm;
# P+ {4 D" Q1 m- j' O, l6 ^}
3 C! b1 F3 E" I6 V+ i. m9 `, p, Y  O}
' {- f% P1 v4 A% J" ?! X, c验证Nginx配置文件
4 u1 W+ s+ h, z2 q) Q0 h$ /usr/local/nginx/sbin/nginx -t
+ J. N9 O7 ^- v2 `, [8 ^- E, Onginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
" n" F* z5 r, V$ }9 q) i% dnginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
2 b) P- ^# j' o/ f) `: j启动Nginx! }5 M' p$ O9 b' T
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
: y9 Z, G- f/ s7 I  u3 I5 r' _; _. `3 H% W- c" M5 w

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

3 x% K2 F* }( n2 Y6 h; `

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2025-12-27 15:50 , Processed in 0.081829 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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