找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11579|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。# j8 P4 t: ]) r6 a5 \* Z. D

) w7 y6 Q6 [7 H( z3 b
/ f. K3 |$ j/ C7 N在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。, V1 [; N, V3 d( g. t

: h2 H+ a( `) g3 e; M2 o4 B: P, m$ f$ d2 J
什么是ModSecurity% H  o. b! X- k' x: d1 Z4 P) e
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。& F$ V. \6 Z; \! Q3 Q% b

  m9 {  D5 p! w
! q3 ?# W# h& ]5 T) K2 \7 C. hModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
% O6 ?" ~/ |' M' o/ _. \
2 f5 x1 n4 F4 G( w$ d6 h: M5 o$ ~; d
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。# g% ^7 f6 }1 x  x

4 ]6 H; x5 K  Z! n$ i
2 U& {/ x' y+ Z2 Y. m. B$ X& O官网: https://www.modsecurity.org/
2 b% \& p1 R6 i8 O  {- H1 @
* h- Y* }4 T7 F% {- U
  T' J% P: |  r1 V3 _什么是OWASP CRS8 v2 H0 Q& U) i1 J& A
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
1 k/ ~9 i# c2 q" k( n% g9 w. r$ ^5 d* d9 A

; S( X% N- _. E3 @ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。+ b1 _/ g5 }& {- G/ ~! ]  o
/ _) _+ u) d) F! }# [2 ]

; ]) i& U( @8 ^& C. n  z6 ?HTTP Protection(HTTP防御)/ \: J( Y, E' C& N
HTTP协议和本地定义使用的detectsviolations策略。7 a% ?: c% \% i

8 Y2 J/ |2 z& x* q
% L! \5 b4 }7 I. ZReal-time Blacklist Lookups(实时黑名单查询)" D( A7 z( H# T/ n! D
利用第三方IP名单。- a% A1 Q" c* o7 v$ Y3 O

1 z3 z5 F9 Z8 z2 v6 W5 H- s# F( p8 F' s7 m( J4 T
HTTP Denial of Service Protections(HTTP的拒绝服务保护)1 j6 r5 u8 H. Z; A% q
防御HTTP的洪水攻击和HTTP Dos攻击。
5 r. V: h! n$ N! J  e1 a) o: m7 k
0 B, O9 o* `  s; i9 X7 r
! e5 U% H0 ?9 p4 ?9 J# Z" @: lCommon Web Attacks Protection(常见的Web攻击防护)
4 a9 T) V% ?  t" C7 w" e( F检测常见的Web应用程序的安全攻击。
; i, q+ f+ e5 O1 \# D8 y6 D
4 C, r" U+ v% n) C( H; |
- M+ W, I9 i5 w: j8 ^Automation Detection(自动化检测)+ g! {/ |7 d$ I  x, u* E
检测机器人,爬虫,扫描仪和其他表面恶意活动。6 p7 n* p, F6 n9 k5 T: ]( G
) W( O# g+ @8 g1 u6 _( {6 h

5 I( h  T( {- ^8 `1 E  y6 G: cIntegration with AV Scanning for File Uploads(文件上传防病毒扫描)
/ T; @6 b! p2 j: Q检测通过Web应用程序上传的恶意文件。" @. x5 H4 x1 m& }  X

9 n2 t% a+ o& y2 b
) }% @0 N6 N% _( M( T8 L, eTracking Sensitive Data(跟踪敏感数据)( J& n3 j+ r- @
信用卡通道的使用,并阻止泄漏。
* w  z- i" d; k( b
8 E. z" v" l. ?3 c, ~* }* v. `- F0 `5 l- ?9 C4 d
Trojan Protection(木马防护)
  i( l3 H0 S5 Y; Z检测访问木马。* H. b6 q$ a. Q3 j2 `  E! Y
$ V* H: t% O/ D9 G9 G

) f: Z5 ]! V+ M& ~+ O6 lIdentification of Application Defects(应用程序缺陷的鉴定), Q- C  P# J4 w. R
检测应用程序的错误配置警报。! b$ L* ^; f, C

5 F0 B4 |! F$ v: d( o- m
3 O4 }% F+ z2 {; F" ~+ Y8 AError Detection and Hiding(错误检测和隐藏)% _- ~3 h/ V, D0 p% A
检测伪装服务器发送错误消息。
9 e9 _! V; W5 }3 p! N/ _* L: N2 s
3 z  X0 @" z  j. N, T: x: M+ ^* B2 c+ H0 k! m" A; {9 B
安装ModSecurity
( T! X1 y0 z% g: }) I- p软件基础环境准备
# D% V$ l+ z8 k% T5 w& |3 A下载对应软件包. d3 [& `' i1 u; M" r7 e. o& H# z
$ cd /root3 p1 J/ _4 e; p' N/ g9 V
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
$ ~7 g$ K" @9 j8 }& y$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz
. W% y" x: G/ F4 `" q安装Nginx和ModSecurity依赖包7 ^4 O0 L6 _$ h2 ?0 Y
Centos/RHEL' h& `3 c8 c4 D9 `. g( n

; a7 U. r/ G9 @9 q% H9 }2 K4 Q
% j, G0 C/ D6 d( M- h$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel& ~4 d) }8 X) X$ W* V4 a; m# v
Ubuntu/Debian+ {% d% }1 e1 P5 R8 V9 ^

4 g+ E8 K  a& R% U; k, U3 r) k# Z/ |  j' v9 P8 a1 ~/ P
$ 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, V/ G  t8 }+ h' p$ A
编译安装ModSecurity* [  S1 I! l. b, {( l' L3 U; w
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。5 W' b' V& z* _# D/ i" n

9 T3 }. b2 t; G. @$ \* N) D: P: h5 @7 \+ f% K6 l& o% u& a
方法一:编译为Nginx静态模块+ @) n% T* u: v" o" ^+ j' o4 n
5 @) k# [' a; }# K/ S
* O5 r2 |7 f2 ~8 ~& Z
编译为独立模块(modsecurity-2.9.1)0 K6 ], x8 z$ z2 n9 W5 q  D9 t
$ tar xzvf modsecurity-2.9.1.tar.gz- ~: Y7 o  U$ S% o5 m
$ cd modsecurity-2.9.1/
: i. m5 @1 r: G( A1 [. C$ ./autogen.sh
; I" L: n( m& N7 F. [; o$ ./configure --enable-standalone-module --disable-mlogc
! j' b4 a- Z& H5 G: u! T! o1 ^$ make7 T. }: Z; [4 |% s: Z# r
编译安装Nginx并添加ModSecurity模块6 K% H9 k+ A9 K* B! f# o5 p
$ tar xzvf nginx-1.9.2.tar.gz
7 J, E# C0 B* c, Y3 ]% Z$ cd nginx-1.9.2
0 V/ Z9 k" |5 X5 p0 V7 w$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/( C2 \7 t% ?. B4 D/ h5 n$ f( r
$ make && make install
" X! ]# o4 q0 R方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
9 J& _  P6 d$ L
# y4 z/ _8 Q; B2 x2 J. X. p, v' U" C2 P
编译LibModSecurity(modsecurity-3.0)
; W! b& [7 ^% B& y2 u& {$ cd /root( T' f, i& C. b+ W7 Q, ^
$ git clone https://github.com/SpiderLabs/ModSecurity
0 R8 _% b/ N+ R( t- X& `& a$ cd ModSecurity
8 _9 T% p) l5 F& ^3 h% J$ git checkout -b v3/master origin/v3/master8 v4 B2 ]5 E, n7 q" ]: T
$ sh build.sh
6 K; N& ^( {) N3 b; u" ]4 R4 S$ git submodule init0 Z5 ~% n' c6 a( _  I/ h1 ~
$ git submodule update. {* h7 g) `7 x
$ ./configure* Y! c: M6 P" |' }( _# J
$ make
" \. G' G/ V( d$ make install1 H- I0 j1 U4 S: `& _0 l8 H
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
6 i9 d* q9 ^& F# P7 I2 K2 b0 ^' d
; d' S- ]0 w3 L2 P
$ ls /usr/local/modsecurity/lib8 u! J* R; ~. B6 @
libmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.00 R% B6 z0 {% v; S5 C
编译安装Nginx并添加ModSecurity-Nginx Connector模块
/ j& S4 |  j, u2 l  _2 U% w* `使用ModSecurity-Nginx模块来连接LibModSecurity
1 q$ v, Y5 e- ?9 |' b/ V5 h' @- r- A; T' b
* B0 J8 P7 ]) v# I! z; _4 [( W
$ cd /root
- @: h) t5 k5 v5 W4 S2 v$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx: Q, k/ X. K' _# B: Z5 m
$ tar xzvf nginx-1.9.2.tar.gz% N5 U! a. r2 V) j6 `
$ cd nginx-1.9.2
! c) b# u" d' F6 x8 k) T$ ./configure --add-module=/root/modsecurity-nginx
% Z! N8 O7 p% \: i6 Y$ make+ w# d( m% Q4 Y9 o% D. u! B8 O, r
$ make && make install
& e0 X; F% `) X4 D添加OWASP规则
5 q( Z) ^  V, a  }. J8 }7 [ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
9 P- n; M1 ~" o+ G0 x
- |5 ~* k! h- X1 \+ P
/ g+ @+ ~  x1 P下载OWASP规则并生成配置文件
, K: v3 ~1 X& F" Z+ m$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git+ f4 X8 f5 [0 N' y7 A. G; v7 I
$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/2 B7 ~: p  X! A) `- K9 d
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs9 A4 Y( ~' Y* q0 m
$ cp crs-setup.conf.example  crs-setup.conf( [6 V8 K# v8 u  B) v" n1 S# p/ Z
配置OWASP规则! \2 g" C. D0 {. z4 X9 f
编辑crs-setup.conf文件3 z& u8 J8 T# _3 K. U3 n& X6 c
4 L3 L* [$ e8 B0 J9 @9 t
3 |; R7 R5 T( M3 F( g0 t7 x4 ]& F  l/ }
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf& d! T" x  p8 k* r* ]  @- [
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
; `! p2 f6 E1 j2 A4 z8 R" s$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
5 J' w! X( n* l/ M' R" F* i2 @$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf4 Q* O" J& Z  @2 {! _
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。$ x! p( z" J. \* m
9 X) s( h. b2 [5 S9 I9 z& c+ Y
/ b9 _, r! t  h, c* b7 P) v
启用ModSecurity模块和CRS规则
5 E( y$ |2 i& j, g/ y6 m8 `复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
+ E5 ]/ m$ r" r" n3 b1 F+ c" p1 ?) ^: j% Z5 M& v* y3 O% F

2 Z' K- i) b) Z' K/ X" Nmodsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。( P: L6 d2 m9 D" L7 J$ a) @1 w

$ y  C4 d' ?% i5 U$ D2 N7 e7 j! P
$ cd /root/modsecurity-2.9.1/+ T* e9 F! O' W0 @/ z3 p5 {
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  
7 J1 K% I( r7 ?. W1 E, d$ cp unicode.mapping  /usr/local/nginx/conf// y( m6 c8 t$ z2 U
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。  O$ ^/ ?: B8 U; K4 e# L% E
9 |; i  |: V. b% X' z& _; A7 p
/ v, u' g- o. Z  H! n
$ vim /usr/local/nginx/conf/modsecurity.conf
8 y$ b2 l! y$ Z7 wSecRuleEngine On
+ R3 ]% U- R* l- ~) c* N$ d, o" xModSecurity中几个常用配置说明:
* O# G. h- j6 z. f) m6 d- d
  M9 n& {$ T" V: M. R9 Q, r5 f6 B# i2 D1 m3 B* o7 z3 O
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
* z4 M# U$ R% [: n- ]1 V# z9 @0 z" O/ ^4 N3 N* {

; {6 H1 b# R4 e  w3 L3 I1 f7 U2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。" w, k6 g, W& Q& ?. \/ I  t, l6 g) z

' G: X1 T7 k4 I2 @- [, [1 a( s" ?* F7 ~5 [
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
% }, _( J0 \" w2 H* Y
. E4 [; B* y9 W' {5 {
$ n( F; }" R  f7 |2 c$ U4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。  ?$ t8 s  W( s) [& ]; |8 g+ x

! k/ |; h( ~) R. e) E( v7 L8 |
0 Z+ F" k8 j% }% r在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
/ B' r  B# U0 `, |7 K- m
" l( [& @* Z' @; l* s& s  x' T) `+ g3 d$ d/ s- V# l% n6 p
3.x版本CRS
$ F$ l( Z. Q: m3 e; d; O( J$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
* P) v* T4 W7 \, ?6 y! ~+ B. l# 生成例外排除请求的配置文件; x- U2 {% x' ~$ N" O6 V' ]
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
4 x+ M5 F' u# _9 {. w& `& J1 T$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
, ~. n  i" \) l9 N$ cp rules/*.data /usr/local/nginx/conf& ^$ n) |2 i; G( }) t
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
* K/ P. c# x  P. `. @6 B9 D/ \; H) ~8 y9 n. e8 I

: ~8 V: b. j7 a6 k' c5 @$ vim /usr/local/nginx/conf/modsec_includes.conf* O0 ^8 x- \, k: J3 M5 ?

0 a- F6 J3 B7 Y6 n" D3 @' o
[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 x! \' G2 J# z3 X! K5 Q
! h* o- g. B4 W6 A1 O, |
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。5 P  r  X% \  C" M8 `

3 W/ T- U* {3 e& t3 l
. J+ X5 I8 u( [: L! g! u配置Nginx支持Modsecurity5 \2 K6 e+ d0 A5 K- [7 U# P- G1 i
启用Modsecurity
3 C3 o6 L% r! H. |5 M7 Y! j使用静态模块加载的配置方法! p* r9 J4 p+ R; `  R/ f; w0 O) u
在需要启用Modsecurity的主机的location下面加入下面两行即可:7 k: c6 r2 q% ?$ J9 h: C4 Q3 b
" |0 h( c& P2 ], y9 ~

1 Q# o9 }- H- Q. s4 m( I- g( q) SModSecurityEnabled on;& C2 E1 ~9 p# n; u7 W
ModSecurityConfig modsec_includes.conf;
* O- `, E, C/ r修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。5 q/ c. k& b) n7 a: N4 n8 x# G2 Q; ~
8 ?2 Z9 N7 }/ g# {

0 _# I5 v5 m, F! O$ vim /usr/local/nginx/conf/nginx.conf
. [, F! G: D# q( S
  z$ I6 h2 C) `% s
7 _. |6 p7 @6 I$ Vserver {
9 h1 t. q4 w$ c# }) q( I" F  listen       80;4 Y" G& {$ ^2 b3 C6 I% \
  server_name  example.com;5 }$ p8 E* g2 D/ T- n

" @9 E, y) ~- ~  e6 h, f3 U
# _+ a2 g/ M8 [) H( N* s9 l/ N  location / {1 }( n9 e2 K% g/ Q5 t7 L! W$ B
    ModSecurityEnabled on;& c  ~# G: ]5 {0 L8 M: `  k$ {
    ModSecurityConfig modsec_includes.conf;
6 c) \9 K  V- I4 k/ N2 ]    root   html;! b. ]  H1 C' g! B
    index  index.html index.htm;
. n$ \, g6 Q* _9 j+ L" D0 x2 n  }
3 i0 r( \4 P/ m  W}
9 l) w9 W3 ]7 f; Q使用动态模块加载的配置方法5 ?. K) I4 I' Z4 \2 y) m$ C
在需要启用Modsecurity的主机的location下面加入下面两行即可:' s- U* p7 b0 b

1 V7 O1 H" P) K. g9 k, T: u7 \- t: S
modsecurity on;
' w; {  ~) X+ K0 Nmodsecurity_rules_file modsec_includes.conf;1 ?$ X! q# Y. a$ K) @+ |5 I( a
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
- H, c* q9 y  o1 O, V5 W! ]3 \) l) s) s2 A6 J( N$ r

& {* j+ u- c2 H2 V- T/ i2 c+ Q$ vim /usr/local/nginx/conf/nginx.conf; O9 |. Z+ L; L9 a* s
6 }+ K% D! u- z5 f

4 |& M5 r/ Y# Zserver {
7 f) j; x. M: K8 j4 L; @  listen  80;
$ @% c, w3 {1 o" A( f; N  server_name localhost mike.hi-linux.com;9 F3 g6 o2 q" }5 H' r% ?. C1 `& B
  access_log /var/log/nginx/yourdomain.log;
$ u5 y9 D% e" ^; [
8 r9 v+ l/ M) ~% b* C$ [2 h6 U! U* ^
  location / {5 w0 e" U+ L! L0 G* J! r% k

8 t3 |( S& \" m& t8 D3 h  t  `
3 H; c8 r9 J% q  x; ^! T  modsecurity on;$ i$ }1 w+ N, M& N1 f# X
  modsecurity_rules_file modsec_includes.conf;
7 C6 H3 R" U8 o  L! y4 p  root   html;) S/ F1 B7 N; P1 ?# C2 @
  index  index.html index.htm;
3 @/ c8 `3 b) U8 f+ I}
% s- ~1 }3 Y3 v' k! P' Q2 f3 f5 F}
& L/ u7 J- l1 X2 t验证Nginx配置文件& U# c1 W3 F+ n
$ /usr/local/nginx/sbin/nginx -t
/ z/ W, J# R  R4 }4 u' Bnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
  u! d' {: \" h: Mnginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
9 h& g; w  {2 C启动Nginx/ a* N/ t: \5 x5 r# q9 n, U
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf9 o2 w3 X. \" u

" a  t, U% Z/ s  k" n' d. @

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


1 d2 Z2 j7 F  _) [0 `

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-6-25 09:37 , Processed in 0.072250 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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