找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11620|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。: V9 u* z# a4 {$ `; Z
2 ]# p2 R1 j' _/ l& j$ E

  I9 b0 [9 I6 w0 K: m在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
/ R! r  N5 a4 {: J& d7 h
) Q/ r0 T0 Z2 m9 _" k: p: Y5 B, `# U' D6 X. ^# Q
什么是ModSecurity
5 V7 L$ h6 u4 _+ r! uModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
: r/ z0 \8 a. G1 O& O. _' A2 U2 R3 F0 |* U! T( o) f

1 K9 Z4 T3 s3 f* y  T1 w5 ?4 KModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。' `2 w" F4 B4 Z" D) H3 y( I

. k# {3 l- P% r: F- u* u
. ^4 Y* \+ ~0 p. N* B" [# x  Q; lModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
; n9 {# w! P6 R1 N1 T' M& [
; o0 W. _' T3 R2 x; l& E( i( G5 @8 b. n7 q" X* K
官网: https://www.modsecurity.org// B) e' F# K) D- |! G6 w& J- T: q
% }# }( L8 P3 U: c

' R9 d' c- {; v什么是OWASP CRS
, |" |* e% {( l8 sOWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。0 D/ S3 j. h; s3 T+ X! b

) z3 O1 D6 t: G6 `0 r0 m; ]' ^7 o: m; _) a! D; {' A% ?1 l2 X
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
: n# f! w) G6 V* x. k  Z' I! v7 C% r1 N

) O3 E7 Q: C2 r4 q# }  m# FHTTP Protection(HTTP防御)
# Y2 |* n+ Y9 P7 ~! @6 PHTTP协议和本地定义使用的detectsviolations策略。
* W7 j+ N- O$ e1 m) w/ t" n) }% B9 W1 \3 c4 u1 V. @2 U0 F
3 i2 y6 ^0 \/ f5 c
Real-time Blacklist Lookups(实时黑名单查询)
& t2 y+ E* R+ `8 B# S利用第三方IP名单。2 `4 a7 V7 r( g1 \4 L

+ J9 g+ a5 {4 @: d0 k/ C
8 D$ |% h% z- \' c# \: f+ zHTTP Denial of Service Protections(HTTP的拒绝服务保护)  S7 d' b, o) L+ y# O+ x
防御HTTP的洪水攻击和HTTP Dos攻击。: V3 }% b' u% k( w

6 l& d( ~% P/ Q3 t( \, }* ]! S  W# T3 H
Common Web Attacks Protection(常见的Web攻击防护)" a, Y6 y$ f5 N& S' R$ f
检测常见的Web应用程序的安全攻击。; N8 e0 i1 d8 M; Q& u$ x6 b4 o

1 C- v' P" `8 ^& c' w" a2 Y" e; _2 E' d  D$ b8 Q  \# s; m$ n
Automation Detection(自动化检测)
5 U  J. {3 \. U/ l检测机器人,爬虫,扫描仪和其他表面恶意活动。, E! i+ }1 ~$ Q: O
* [# @* f& |5 S- [& S: i
* Q4 r* u: v- g+ {
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)
$ p- B, \9 L8 w& n1 c检测通过Web应用程序上传的恶意文件。1 R) y  I6 |( H% N
' c1 L0 L2 ~: |8 @

8 l8 p* c. U* t8 A5 p3 ]3 eTracking Sensitive Data(跟踪敏感数据)+ ]" C4 \' s5 \% x* ?& q
信用卡通道的使用,并阻止泄漏。
* S/ u. p! `! ~$ z& Z
7 h' X& v2 y& k3 ]9 m6 T7 ~7 E% Z6 d; p$ ]! @. I4 c6 `
Trojan Protection(木马防护)
. o$ I1 Y# M  F/ t% j检测访问木马。9 c* S/ I6 d( o% Q4 h

% e$ y/ D" G* s5 T+ A6 q+ t3 S
1 A8 g" {; J% P5 \% rIdentification of Application Defects(应用程序缺陷的鉴定)# x$ j% {& c# J+ e$ s4 \" [
检测应用程序的错误配置警报。
& {% @6 ?4 d. W) y; P$ Y' X  T; l/ N; R& e$ J
4 f3 g$ k5 K: T0 W4 E( m
Error Detection and Hiding(错误检测和隐藏)
5 p8 ^& {7 Z8 P* b1 ?, ?7 ?$ Q' j1 h检测伪装服务器发送错误消息。
) l# |; i, q5 c& v! e* I0 t8 k% Z. [* k4 j

  v0 n5 s6 ]4 H安装ModSecurity0 j3 ?* o! p# n' W& \' e& W- \! V
软件基础环境准备9 j5 L% a. }0 N" x* \" L1 g/ v
下载对应软件包0 U5 R+ w" U0 C
$ cd /root8 x2 N- a, c% ]
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
2 Y9 k; t  j6 H( J1 v' A$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz; g! B$ Y9 R- @- d. h& N
安装Nginx和ModSecurity依赖包" m6 g5 {0 }7 [7 G& t* e
Centos/RHEL
6 t; N( b! J. R" X+ p
$ z7 A4 @; I0 u  [, k( v* B  U( Y$ k6 A
$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
$ f& r/ @" [. L2 a5 @4 [Ubuntu/Debian
% u8 M: y  W( z4 w! V0 O) _. h# p, u2 d5 Q4 Z. H# m4 o

% q. {# o( N% r$ 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. c. B6 P( X/ U& U7 s, r
编译安装ModSecurity: X7 h& T$ c5 O: M& `6 @
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
" x' {1 r3 U% U0 p
$ g3 \& k1 }" W4 H! y* b8 M+ H
5 G. O( m% l! V6 B* I- ~/ U方法一:编译为Nginx静态模块- [2 ^: D' @0 i& B; S# x. S8 q/ J3 a2 a

% e* u4 D. K1 t9 ~* C; N
' p( h. \7 u$ B# v) ?6 @8 y编译为独立模块(modsecurity-2.9.1)/ V' r; `( ]. C! N
$ tar xzvf modsecurity-2.9.1.tar.gz. M) Q9 J5 V1 [5 v8 h  q! X
$ cd modsecurity-2.9.1/" P* I8 x; l- V
$ ./autogen.sh
5 b; z0 T1 x& N1 B  W/ l) `; ~$ ./configure --enable-standalone-module --disable-mlogc
3 J% y  F# y$ A  O! N1 M! g5 h$ make/ r0 A1 g/ c, G9 k4 _: [  C5 K. Q# ]
编译安装Nginx并添加ModSecurity模块2 @0 B  `& `$ V& o6 z5 R
$ tar xzvf nginx-1.9.2.tar.gz( E, T1 U0 l: b
$ cd nginx-1.9.2% H- u1 u! |" S
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/, X- }/ c! D2 l1 o
$ make && make install
8 N3 i+ {* l6 O方法二:编译通过ModSecurity-Nginx Connector加载的动态模块" p, V" @+ Z* B3 i" n8 j2 M
  S' D, k% w+ h9 C

& b" Z7 P4 ^1 q0 M. ]+ Z. ~/ i1 j7 W! Y编译LibModSecurity(modsecurity-3.0)! Y+ [, f% E2 v6 t% ?2 K
$ cd /root
, ~: u% {' p6 ?2 {, e* i6 r$ git clone https://github.com/SpiderLabs/ModSecurity
  j" {) b& N+ j0 w7 ]( L- G$ cd ModSecurity
' J' d8 O" a1 G* l$ git checkout -b v3/master origin/v3/master
5 a: z; y& f  Z% T; ?( N' v$ sh build.sh6 f% p) x, P$ E: }
$ git submodule init8 r, J0 s/ R6 Q. Q6 n' m) ?& g
$ git submodule update* Z& X- S7 Y2 S
$ ./configure# ?# }; h* s! g8 J+ q
$ make0 y& O+ W/ n0 x5 }. t
$ make install
& o, ~' O7 v& f. t2 M6 FLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
! s8 [, [0 ]; s/ u9 X0 x1 [/ k) n# O+ j

7 z% o" O/ O9 \; t+ k, G% S$ ls /usr/local/modsecurity/lib
% d8 w* n; C# L8 A# hlibmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.0
! U6 }" q7 B! x& d' `, M: o6 _- N2 \' ^4 W编译安装Nginx并添加ModSecurity-Nginx Connector模块
2 y$ W) C6 Q1 P使用ModSecurity-Nginx模块来连接LibModSecurity3 f# f" t1 s4 O8 E1 A2 o7 F
/ h( m, y! z2 p! M( @9 o

9 e* R& P; x- p8 F  g0 l) Z0 d3 o0 }. @$ cd /root% O, u, s2 ?+ [0 S) n% E
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
  i3 T( P5 V. ^$ tar xzvf nginx-1.9.2.tar.gz
5 S$ F! Y) a4 b7 m7 J$ cd nginx-1.9.22 P7 `& l1 E- c1 f
$ ./configure --add-module=/root/modsecurity-nginx  v$ e+ `7 h2 C6 c
$ make8 e9 w& O) B; G& m/ P
$ make && make install
6 N4 A# D$ o7 I7 V9 J1 E5 G: B添加OWASP规则
7 {- D1 x/ i0 tModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
% H$ _% w/ [! q- n1 N1 o0 y2 [- E) y$ I6 b
9 b. J! H) u5 L8 V) V
下载OWASP规则并生成配置文件
( c8 |9 t8 ?1 k$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
% w1 q6 L) ~" H! t2 `9 N2 ?$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/4 U: R; e; U! d  L
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs) K( u/ E6 f" J& o. N% ^" b" B5 U$ z; A
$ cp crs-setup.conf.example  crs-setup.conf, q' m/ a- m3 t: G+ u/ f
配置OWASP规则# n- z" k7 ]$ `% a3 k6 X- S
编辑crs-setup.conf文件
- L  C1 m4 Y" l7 W. J" j1 K/ P0 H4 x& d( [- h) N8 @9 n
1 V. y+ e; L* |' S
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
4 A5 K, p4 \! ~$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf3 s  n+ u- M; Q+ S1 |
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf/ `' [. b5 P+ Q: ^0 o: m6 J, f% E+ b
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
$ Q# Y: W" p* R' ~默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
# m& a" Z6 }$ t6 e7 t$ R( B0 f. B

* s$ }# ?7 y4 z! A  d8 I' t启用ModSecurity模块和CRS规则$ E. w: e. {2 N  l, I7 ^
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
) h* n3 B. f: i) g3 |
0 `" ^: ?3 E( T  Q. b  |
* V- q5 g" ~! ~modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。) q2 t. F( O5 u, c1 v# s$ |1 n
1 o8 E& v6 t! ^6 k* E, R+ i- `, l; D
" P1 ^6 h9 C( @& E( I' N
$ cd /root/modsecurity-2.9.1/
7 ~' R; r/ F. r$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  
0 x/ ^4 {- Q1 ~8 c+ B- i, l/ X% I$ cp unicode.mapping  /usr/local/nginx/conf/
# g+ s5 ~4 J6 P0 c9 a4 Q" [" a* m将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。) p: T! e( J8 P8 `% `+ i8 G, D

' p- A3 b  u2 v) P7 W  X) K6 j& j2 o
$ vim /usr/local/nginx/conf/modsecurity.conf/ Y4 O, K* Z) w% B& O+ K
SecRuleEngine On, k; J' D& W& ]; v# S
ModSecurity中几个常用配置说明:
' w( V( I& o/ r% z' p2 V( y  P5 Y+ i: Z

7 b% A+ m! U1 [% x- o1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
. p: m# W/ M9 a7 T7 b% v/ F+ F* s# ~- s/ u, R* r2 B5 P. b+ s

0 s* r0 a% {: M) _: x1 T, b2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。# @0 w1 \, G+ [' Y: ^
+ K4 @9 v; n7 |; E. ^8 d& Y- K0 b- [

3 ?) g: |& ]( ]: b8 u7 q6 ?3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
# t  |1 M& [9 m7 i3 a. M( j/ J  `/ t5 G! M' K" z

9 n, _5 T7 |/ Q. H4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。* o6 I3 g5 a% P3 P7 t

+ w! Q/ B6 ?  L4 x2 k* {! @5 p; j* R( s) d) O( k$ Y! {
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。& J" I6 o0 y9 O/ W7 ~

1 h- G4 m1 L4 C  M# m5 |) ~  k! V+ C2 u8 z" h
3.x版本CRS2 |: o6 g6 g7 h+ k( z
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs& |' T" |) v8 z1 {- y3 \* }7 T
# 生成例外排除请求的配置文件
3 @, r; c" d) j& K1 _3 u# I( a$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf/ h7 Q* [9 w5 L9 \0 r
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf/ H+ C' I7 r- S4 f
$ cp rules/*.data /usr/local/nginx/conf9 D8 \9 V( t8 B) C
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
9 m# f5 k; e0 R
" `+ w" I7 K/ n8 A- ^6 _: K. I, Q% a3 J" R: M" ~
$ vim /usr/local/nginx/conf/modsec_includes.conf
3 \, D3 P0 ]8 U+ @. |5 P
6 T3 X5 {$ v: q5 t  D( H1 k( B( 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

% S2 K0 ]4 A+ z9 a3 `/ E/ O
0 q) |0 Z  w- j注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。; c" \! k, J" E
! a/ x; d0 a0 |$ f

. \2 v- r: Q1 w( f5 g' g$ J1 l配置Nginx支持Modsecurity
, L' l, y3 C- F4 o/ \/ N6 m启用Modsecurity% E# [# S6 p6 D) D: B8 I, U* O8 t
使用静态模块加载的配置方法% E' j2 f$ C( G
在需要启用Modsecurity的主机的location下面加入下面两行即可:
# f  X. c$ l' E7 [$ q) j* K
" I" Z% b$ F1 w  E4 q
% @! }$ ^- C- M! I) L; w3 E( R2 S1 zModSecurityEnabled on;# o7 U# `6 D8 |. Z  v& R9 f% w' S
ModSecurityConfig modsec_includes.conf;
7 B, A8 F- \7 _6 Y& h& n% m修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
3 w4 A3 a0 z% E% l. P& Z& t9 r0 [" W: W  N/ L
$ e, j% x0 a9 `/ J& ]
$ vim /usr/local/nginx/conf/nginx.conf2 B2 k, P; E: k6 P# T9 ~# K9 y# Y/ D
6 ~5 Z& V) }$ r; L5 a6 L

& b/ e+ E  y  Y) Z$ S/ N5 |server {
! V7 E/ N; ^2 e, C- n  listen       80;
8 k7 ?1 e: y0 g  ~, i( B# W  server_name  example.com;
0 I  R/ |8 a$ ]; u" q+ u, N& Y$ D  o# S" m; T* z) t, e

! E1 k/ F* y9 ~3 z. J% U9 Y& _  location / {
2 |3 K0 v2 H/ H: u: O( Q( T    ModSecurityEnabled on;8 G9 |0 ]# r1 o* a# n
    ModSecurityConfig modsec_includes.conf;; C; ?* J& Y9 y- }" x$ X& J
    root   html;
* e" D) l& i( _8 B) w2 ]6 ^    index  index.html index.htm;5 g" M8 Z# o5 d' F- i
  }
5 J' n, y- q& m  z}
1 o5 k9 y! F  ~2 g) `# {使用动态模块加载的配置方法
1 C1 @. l  T* j7 }7 e( D; \7 a6 e在需要启用Modsecurity的主机的location下面加入下面两行即可:
0 F7 L; O/ A' T- \8 Y8 c+ V6 n/ s  y# V2 t' @. Q
# w% `4 I* U1 r2 O6 W
modsecurity on;
( P6 c- m; N7 H! L. P8 qmodsecurity_rules_file modsec_includes.conf;3 Z2 H0 U3 ~8 y& _8 I, ~
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。3 J& N: e& |. Q/ Y  O, X' f/ z
4 t; N3 z; E- Q+ }, a
* u6 C$ W. u7 \2 m, q+ T. _
$ vim /usr/local/nginx/conf/nginx.conf6 R7 X! V  D6 @
0 j5 D( ^; l8 Y. E0 K
& y/ u3 |% f! u% Q9 j
server {+ |+ J: n( F5 b" T# _
  listen  80;
' a9 U/ R# U# t/ }  server_name localhost mike.hi-linux.com;4 n' `# u4 O- O0 q1 v5 m( y
  access_log /var/log/nginx/yourdomain.log;: ?' ~% x0 l( }, k( Y
: W- `1 A9 i  c+ l: D' b6 T5 S
* y/ L) D6 o9 z
  location / {
5 Y1 _- z+ s# }5 F% K* t: B; c; ?! A3 C* ]: B, J6 @; s
+ X) a* h4 |1 P# D
  modsecurity on;
8 j$ p7 i& _0 ~. v3 ?# t  modsecurity_rules_file modsec_includes.conf;
% `+ p9 J7 E3 E8 q0 C4 B  root   html;
& b# |: w  Q; C; M  index  index.html index.htm;
; ]( z1 b2 ?# y9 A- }- P3 B' V}
( V! w( h6 q6 f0 s) z& J# L}8 t3 B! F3 ^! G# |% o' R& F
验证Nginx配置文件( X1 |7 Q3 B& W" h9 ^/ w
$ /usr/local/nginx/sbin/nginx -t; s& _* I8 R/ h+ s& T
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
+ i0 F* G7 ~' i" [nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful2 r; Z, ^9 R. Z; a. M. o
启动Nginx% F' [4 l9 G, y3 o. N
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
- a$ n9 G# u$ K( V' v: P( `9 T1 X0 y9 b1 \3 m1 o& _& M" A. }2 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能够战胜更多复杂/未知/混淆的攻击模式。


6 M/ h5 Y! P/ L6 W

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-6-28 13:27 , Processed in 0.098812 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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