找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 12506|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
3 q3 m4 h" I3 ?# ?" T
' Q& o' Q! [3 T4 z4 ^2 X
1 }* M( k. x  c& M在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。. d* w8 m3 F+ j

4 O. A$ x9 r/ o- o) R% \. Z4 n4 M1 M9 M! @
什么是ModSecurity
# f( |. t* b, q4 f6 W/ j0 n8 {% UModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
7 X0 ?" r. ]/ a# W
  s! O6 y7 O! [, c1 x5 ]+ I8 t+ P9 [* \( @! w) E
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
( Y  W$ o; i! y
6 U; K7 k  }8 D- B) u4 ]( u) D# r2 M2 b& r8 Y( e1 @- R1 d
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
7 d& B/ T  ]) |& D* U* l- ]. F  t0 w5 I4 ~* b

- @! @( x% H" f, \* B官网: https://www.modsecurity.org/$ I* L& I! E. I" `
) s9 l! m5 q1 S- [- Z
4 f- C% \3 b# ?0 a$ S
什么是OWASP CRS0 P9 \. l8 X7 i+ l% G9 x0 S- J
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。1 w2 j0 o2 |0 W5 j$ `5 A0 W4 v
6 e4 J. H. f# l8 h

5 u4 ^' Z7 [4 n1 p: X; X0 D  {9 vModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
* b5 s( G; Q, u3 Z4 R) }, Z+ l& r, h* {6 j7 R/ H" X
5 B5 S7 o1 k2 b/ G9 I% E
HTTP Protection(HTTP防御)  ~7 y- q! h# P  I! r/ g' N
HTTP协议和本地定义使用的detectsviolations策略。. u) n( h: H3 x* R* u5 P( Z8 v- R' Y3 M
* O" p' k- o0 Y9 U7 W' f
1 w! W6 Z8 }% A! H9 p* [
Real-time Blacklist Lookups(实时黑名单查询)7 W# s+ d( |) {" c$ E' n
利用第三方IP名单。
% t4 d/ S" ]' B
0 W  X- m1 Y- N9 j; E% e- ]) J" a
HTTP Denial of Service Protections(HTTP的拒绝服务保护)
* B5 G0 \5 p+ I/ n8 f防御HTTP的洪水攻击和HTTP Dos攻击。
! @# ~$ r4 N. b! R5 n' E5 a4 q4 C8 b8 ~/ D& h
# t# n7 g/ E; G
Common Web Attacks Protection(常见的Web攻击防护)
; c( c$ W. ^+ i5 k检测常见的Web应用程序的安全攻击。
0 m9 f% l, [, e" R8 ]: B8 i1 h$ q) p/ `* @: O& t1 s) a' y
' {2 [5 T" D7 _- X# [1 C
Automation Detection(自动化检测)( X" B, q& T! D) F) Y! S6 Z
检测机器人,爬虫,扫描仪和其他表面恶意活动。  K( S. r) K* x( b4 s% n+ k/ I
! E8 a6 y( F7 ]& k# z

, v) j" W0 P- X* b5 M6 |7 l! dIntegration with AV Scanning for File Uploads(文件上传防病毒扫描)
- {' {2 g+ y  u: K3 H检测通过Web应用程序上传的恶意文件。
% l  \6 v7 i  G2 ?4 K0 Y# g. L# d2 k6 @0 i

8 z2 c9 U; W+ P' }- sTracking Sensitive Data(跟踪敏感数据)) Y! H. l6 {) Q' U% H
信用卡通道的使用,并阻止泄漏。
8 P# g* G7 J7 J6 ^
1 c7 t7 Z$ n( r1 A# J% C
- a$ _, ?7 q5 f; g0 j( W8 HTrojan Protection(木马防护)" f& O! H# Z) m& P
检测访问木马。% F; B; j) Y% o2 E3 N

" G0 t# v( h3 a5 z' x# i
- k+ v4 M9 r' s0 ^1 M7 X# ~2 LIdentification of Application Defects(应用程序缺陷的鉴定)
$ `* H6 u/ {4 k0 C% ]检测应用程序的错误配置警报。7 S  F3 v4 ?, @4 `9 P; i$ L! r
" k% G7 |  a+ d) d, A+ ]% O

8 a! u# u- i+ F! y9 B  b3 u7 KError Detection and Hiding(错误检测和隐藏); B/ s, S! h' S) m
检测伪装服务器发送错误消息。7 G, B" J7 c1 @5 i
3 e( p) `( _& D9 U) e/ Y9 M

8 ^1 i9 p' \2 |7 Z+ s0 S! a! w$ v安装ModSecurity' B. b' o7 T5 N, \& ]" X) C
软件基础环境准备7 n( J' _% }. Z
下载对应软件包# ~% V! X5 k/ L" t- }: ]6 X
$ cd /root  T4 B# x( r* d# D% @& c7 R
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
. M0 U4 @' ^( L+ C3 i: m* [$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz% [- f& j7 o7 k/ H* q
安装Nginx和ModSecurity依赖包/ L! y8 Y, ^' J9 Y
Centos/RHEL
2 V6 s, I* |# U) R$ k: B( p; R
& g  r$ }/ ]1 G! u3 G% r5 h' Z/ k6 m' E! r3 i
$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel6 k" O& s$ p8 o# V7 e+ I1 K
Ubuntu/Debian
# D: X6 L0 Y5 r5 x5 i1 l& O6 P( S1 p3 Z& D1 X! K! S

7 ?9 G; H/ F0 i9 r, y& i$ 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
( Y8 J7 y$ O5 C编译安装ModSecurity1 L9 {2 T  `; Y* l5 A' [
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
2 ?& {" p3 c7 ?5 J: r3 H& T- G4 `9 \# \$ \3 R( ^9 P

4 a( ?- `" |/ \方法一:编译为Nginx静态模块
: a1 Z7 E  @' v6 L
6 J0 f' b, Q* X# p, z1 ?! E+ S9 v8 r0 z3 Z* ^$ F1 ~
编译为独立模块(modsecurity-2.9.1)
4 Q* n8 A" n5 J# ~1 O5 L9 l& }$ tar xzvf modsecurity-2.9.1.tar.gz
5 ]! d4 V; R9 Z; X. r" c0 k6 j$ cd modsecurity-2.9.1/$ D) S$ E1 H- y1 c% E# S  y
$ ./autogen.sh" L9 R; q1 ]: f) a& {! N. j! _- o
$ ./configure --enable-standalone-module --disable-mlogc
! d3 m' x4 |3 C- n& c) _8 ?$ make
9 c, Q3 ^/ f) `) N# X编译安装Nginx并添加ModSecurity模块8 ?) R  p2 |8 a4 Q, L  P4 l# P
$ tar xzvf nginx-1.9.2.tar.gz4 P+ j) s3 k$ M1 _. ]; K  t
$ cd nginx-1.9.2
; R% ?; J: y1 e$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/& v2 ~! u: n5 a( v
$ make && make install2 a4 w# o. ?! h7 I; t5 S" M
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块5 c- {/ \% D$ f9 r3 g( i
) w# S, Q- `0 @- y
  r# x! \+ u" _4 @& P
编译LibModSecurity(modsecurity-3.0)# N$ \0 g) q) y+ B4 \
$ cd /root
3 e6 ^* i7 P; \" A$ git clone https://github.com/SpiderLabs/ModSecurity9 ~9 ]( S) S9 t5 a$ S& \
$ cd ModSecurity
# ?; E8 c; b/ r% t$ git checkout -b v3/master origin/v3/master' M$ G- P/ S- D  ?
$ sh build.sh
! o4 @& ?, j, I: a* O4 X7 g+ L$ git submodule init5 k/ u4 n/ W: [& F* U* _0 }9 G
$ git submodule update
% I) O; H% [6 _( D5 p4 J! P$ f$ ./configure6 R2 f, Q$ [: ?# {0 z, V2 _- D" b
$ make
! b6 G. n8 v7 {! x& v$ ~$ make install" @& i) j  Z7 c( _
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。) @  i8 w( I% w  o5 Z5 @
. w" }7 n0 f1 }5 {. j( G; k4 W, v

6 n8 \9 d8 u0 I$ ls /usr/local/modsecurity/lib2 U) t3 r. o8 n  R% a
libmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.0
4 R- F$ c- E6 V+ E5 T, Z4 x6 M编译安装Nginx并添加ModSecurity-Nginx Connector模块5 J8 y0 @1 c. i. n1 C
使用ModSecurity-Nginx模块来连接LibModSecurity
/ G) W4 P$ m( Q7 _0 U* n1 x) g# P# t! ]1 ?( l
+ W5 S, l. C$ u' [, p
$ cd /root5 @) C" c6 c: t/ w% e9 }) i
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
& X4 \5 e4 E% g9 ]+ n  a$ tar xzvf nginx-1.9.2.tar.gz
/ S, j* U- q$ v% L2 S. [$ cd nginx-1.9.2
! _6 x3 g; a3 L) n$ ./configure --add-module=/root/modsecurity-nginx) D% ]5 o. s- ]+ H+ E
$ make& @0 b% Y# w" U( t3 l9 x
$ make && make install$ e: ]# {# {: l) H/ y  J# x3 I2 P
添加OWASP规则
9 G5 V& R* h+ a2 i# m( xModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
( d" b2 v+ e/ i8 O1 m4 G1 }( Q3 z* B  v, \: v& Y

, ?% O4 D$ p) k$ Z% ~下载OWASP规则并生成配置文件
/ h4 |1 \: c  P1 K* E$ d$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git& A. `' R. Q: ^6 ~! D: i! i
$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/; G7 V) k0 W* q  i. D# @5 X8 j+ f
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs$ P+ J2 q( q# {9 ?% r+ F
$ cp crs-setup.conf.example  crs-setup.conf
) ]7 E! z7 Y% M# P3 }0 A/ f9 X% _配置OWASP规则4 ]2 i, X( Y, Q0 E
编辑crs-setup.conf文件' [3 p, j* o, w; g9 V3 v; E/ S4 W

( N# X8 ^( {# F4 p, S7 v) Q8 w& V1 B5 ^# }) w7 ~
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
$ t' y* \- l9 r* _" \4 k$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf1 d4 H- q* p; ~4 k1 B& n
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
: P* e  w& N+ a2 ~$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf" D+ t5 [) G% p
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
+ O. t3 k& N! ]2 {1 k2 j/ d
# O, L2 v/ ~6 e3 L
+ l+ d# Y! t0 y' j+ g/ b: B# g2 j) h启用ModSecurity模块和CRS规则
* h+ `) l7 ~0 O) T* v复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。$ l5 O0 G* i+ U1 ^9 z( O  y

2 y2 V8 x* i6 Z' a( b: d8 \! ]: _4 b( ]$ u. l4 `' y  T
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。$ H1 i, C3 @9 t% D7 P2 W5 d9 V

+ |. p- z1 g) e9 U
: k3 {, N. `# [3 a8 |7 m! w$ j$ cd /root/modsecurity-2.9.1/
  q7 U  h  w- x' o! }$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  4 s" [* U7 H% I( ]+ b$ |8 E! M& V
$ cp unicode.mapping  /usr/local/nginx/conf/
0 B3 Q/ a/ \/ C( b8 Q* w! r4 ~# Z将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。( R7 c8 P, w9 l

3 \$ V# f0 V! d- w* x+ K9 W  ~8 t& \, F1 L* ^# s/ g8 F
$ vim /usr/local/nginx/conf/modsecurity.conf* }! H: {, Z0 e; F
SecRuleEngine On  p0 Q2 J  R. [6 f5 X: h
ModSecurity中几个常用配置说明:
7 F" y" W! }! {1 A
; K9 Z5 q0 z; W. ]/ Q% t/ b7 x2 L: X) [0 Y4 p" e# u
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
2 O- J, F- b$ j3 o, N& M
% W, o$ m+ u' I! |$ t! |; m; G7 b) A: {- b# C8 I9 \9 q
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。) S& F/ g3 m* N: g; V

" d0 R, Q( s* ]& r! k6 I: F# ]9 l: S2 N3 v8 {& ?
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。$ N( y/ f; A: B" J2 r
8 O/ Z8 [: F3 I5 P
6 A' P9 p& K8 _2 K3 j/ C+ G
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。# k# a, G0 ~/ {0 X, T

& g# a" h& ^3 N9 N% w3 B6 c& U$ {: v: _2 |/ c. q/ C
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。+ I) i- R7 N! W) ~- m! D
1 l& `5 W4 i- Y/ E
1 c, u: w* n8 g% x2 k/ \# w- }+ P
3.x版本CRS+ H1 Z. w2 T2 Q
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs5 K# @2 M4 L" i1 ?3 n) O# K, a5 G9 U
# 生成例外排除请求的配置文件
- W( ]6 {0 r8 I$ I$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
  C$ U' X0 L  A" _' a9 U5 N$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
1 J. D/ `( d2 S7 f+ j+ P4 k8 d$ cp rules/*.data /usr/local/nginx/conf
' u! y' C. R* q  A) R* `为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
# R/ b' _. H7 K' Q5 q! i
4 L  ], L* L- Z* H
' T2 F9 d. u4 t8 S* g4 A$ vim /usr/local/nginx/conf/modsec_includes.conf
' o  e# v& m5 T0 W' ^  }6 _
! k6 k$ Y6 I3 b* }  A+ D# m4 H
[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
7 e- a& {/ O$ C7 y. \; Y
: e/ v- W) J  W8 V5 E
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。- A( d0 @7 r% Y4 Q
8 c, c- \: q6 n: n7 z" o3 b8 K

: r* T8 P7 R: N3 h* q* o配置Nginx支持Modsecurity
: O* q$ s+ f4 C/ {1 g# T1 W启用Modsecurity
, ~; Y* }' b* y3 N! N" X: N. K使用静态模块加载的配置方法
8 _6 c$ M4 H3 O. o4 `: [8 T在需要启用Modsecurity的主机的location下面加入下面两行即可:' b4 g3 P, [3 T, u4 ]+ R

: [1 p+ R' `" }) S) ?5 q! n; N4 c  ], L
ModSecurityEnabled on;6 R- c9 v! b& ~0 i
ModSecurityConfig modsec_includes.conf;
7 S% H& v4 l9 K+ R4 l* {+ c/ b修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。/ k$ u. e/ B+ d- G
% Z! e4 f5 }$ v$ c; y1 c6 D& S$ O& [* K- r
# Q( P# U' `) Z
$ vim /usr/local/nginx/conf/nginx.conf
5 l8 V! j4 @/ Q; K3 o" E$ e5 f, y9 w5 K7 D- N$ D" \
0 Y, t3 L& u  U3 S" r0 E" m# s  r
server {  u# \- Y, x7 t  M8 c
  listen       80;
- C5 t8 p9 \8 w  M2 H  server_name  example.com;! f0 K. R) a" o

0 I" q8 q3 `/ \: l6 s+ N# v: @! a9 y, C/ @
  location / {/ T" d$ D' [2 ^4 ]1 c1 K: M: {1 L, L
    ModSecurityEnabled on;. T1 Q* H" G; V3 F) M/ `8 R; h
    ModSecurityConfig modsec_includes.conf;
9 j( f/ p6 c# H% d- W    root   html;
$ x7 Z, l+ Y) ^    index  index.html index.htm;
) l3 S% N- h& `# _# T2 P- A0 Y  }
! Y: f3 l; s( f- O5 p}  b5 ?$ C6 r; D3 z
使用动态模块加载的配置方法
' S4 u2 e& y5 ?在需要启用Modsecurity的主机的location下面加入下面两行即可:
7 O$ ^: R+ ^3 v
  V' U3 K6 C! ?' T5 c: o  v, I: f& p  R2 _' @3 D# h: z
modsecurity on;3 S- P) l, T9 A2 r6 f" [' V
modsecurity_rules_file modsec_includes.conf;
/ p7 [; f& C. M  ]' \7 {3 k2 A修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
4 q3 p( ^* I7 g: n0 k: v5 q- Z* R* M% ~) y

# d; y5 E# G# I. I" y, O- ]$ vim /usr/local/nginx/conf/nginx.conf
3 h7 [! L2 K9 n$ e
; k3 K& K; g+ d
7 U" h5 G7 T0 s1 {+ g0 A# }3 n  ]server {
2 U: n  V' N2 k5 U  v- F( v9 f8 q  listen  80;
: u6 ^, B7 }  D  server_name localhost mike.hi-linux.com;
  ]7 O- J1 N5 I0 q/ c  access_log /var/log/nginx/yourdomain.log;
4 a5 i1 d% `1 k- G4 i$ W( B$ [- d( `& A# M  w. \+ Q; z! E

) d% l+ X/ L: _  location / {
) ]' `- U  [/ {6 {! q
9 Q& A# H$ t% M! |
$ C0 f0 ~+ o6 T. ~  modsecurity on;
$ o0 c0 S* ]0 b  modsecurity_rules_file modsec_includes.conf;
' V/ Z1 s% c; ]6 P  root   html;
% m- |3 m6 L& M, @4 z+ c" j  index  index.html index.htm;0 k* g1 V, _7 g, r
}
& w3 y4 Q( w9 p& o$ x}
+ T; t) f. Q/ W" j% Q+ k$ A验证Nginx配置文件
: p" S8 L. m6 c, O9 H4 E5 n$ /usr/local/nginx/sbin/nginx -t
8 ]- S  ]6 m/ f( n4 t; Ynginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok- l# l, y8 l% D& T) y
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
- m8 J1 x4 ?: O0 v6 n; V# A启动Nginx% S& }1 @+ v* z  n7 A
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf& J' n) Z& u, K

4 o/ U7 U& o, G5 U  d! [. S" H& 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能够战胜更多复杂/未知/混淆的攻击模式。

$ J8 c" o1 j- f+ ^8 F% B6 C

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-10-5 14:37 , Processed in 0.074915 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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