找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11712|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
% |, L( U% U2 f6 M" }1 i
& k, _1 G4 C& z* F8 d% c: I0 u' }: J4 E, v. S% u7 ?! [
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
; u/ ~8 D" R6 d  a6 |
6 W4 j" Y( R9 w, ~; O( r8 B) X5 _2 P, @: B3 y2 c& m
什么是ModSecurity
: G, T) I; Z3 a/ S; u6 lModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。! x& b+ y' i) q3 K: F. u6 M
+ Q! C9 H0 R% [0 _* E9 Q! m

, O, B  H% v* V1 O( bModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。9 Z/ a- s8 ]  s

0 {4 m6 h+ }6 p+ i! S/ o
- _) u+ O' ^; @" gModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
. b& d. @6 P- q4 g  l, F- W: A3 Q6 c+ |/ c, O6 W  e

/ G8 g: j9 v( }& }: W官网: https://www.modsecurity.org/$ S$ p) E" F6 X) t9 H

2 D4 f( |& z+ M# K+ u: t
+ M9 S$ ~, y  g1 ^" Q/ u什么是OWASP CRS
, t# O* U; o8 W0 l/ S& sOWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。5 U1 ]  C- Q. p/ B+ r2 j+ f

9 U' E  f( P' p3 n
* k7 t! _6 k' ?1 s9 VModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
4 G5 m- ?& p# f9 @5 j  G+ A$ F
$ z; A- |: G. H4 Y$ Y7 ]6 W* E( k7 U: y( c& o5 ^' @; G' H
HTTP Protection(HTTP防御)2 k/ d9 G% Y# d4 u5 V  X) B
HTTP协议和本地定义使用的detectsviolations策略。
; i3 K: Y3 n' o2 ?' }: F/ k# \9 C( l- Z6 `" e5 U9 i3 U
. m+ q9 C1 Y" N0 F# n5 R  M
Real-time Blacklist Lookups(实时黑名单查询)9 m( P; j, N( j' b1 w' o" B
利用第三方IP名单。# u4 @" T( [: p6 n1 V
) p7 d- S5 N/ l2 I; J
: a8 D4 L) m6 W* S/ z. o
HTTP Denial of Service Protections(HTTP的拒绝服务保护)6 o9 r3 ^$ E& r! f* \5 w0 r, Q
防御HTTP的洪水攻击和HTTP Dos攻击。3 z' z: N9 D! }( x' X
/ E( a3 T7 T0 m) K, A( F5 d
$ b  z* L' J& h  |% b
Common Web Attacks Protection(常见的Web攻击防护)0 P) V9 ~+ S9 Z% S
检测常见的Web应用程序的安全攻击。( B) H7 r4 h6 n, F( D" P3 y

  T2 u+ y/ S! ?7 t" h/ U9 p. m% h+ W- d' `& _) S. W' S
Automation Detection(自动化检测)
  }6 h0 Q. ?$ ]; K8 m& G' v检测机器人,爬虫,扫描仪和其他表面恶意活动。
5 i/ o/ o5 k# V
) Z. S! u* X- f3 U  D5 a$ _0 j, S6 \: ]  [, g- K
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)
$ E' d2 H2 \8 W" s% s1 t4 W检测通过Web应用程序上传的恶意文件。
% J$ `, J5 a5 g: g9 |" R' w; p: b8 t: `) ~
, B# {$ h! S& G7 e. K
Tracking Sensitive Data(跟踪敏感数据)  k2 I: \$ h% j. m0 S2 {: u1 w
信用卡通道的使用,并阻止泄漏。
; \, N7 l3 s" v9 F
0 s/ Q0 Q* l4 D  T% u2 f. p  r; X8 L1 D0 X
Trojan Protection(木马防护)
* d) W+ i( ~) I  L7 E检测访问木马。
+ \! M/ C. y/ E" s$ b! e* k7 J1 \5 L# k& l# t& O. p
1 I* O9 b1 ?9 G, ^7 E
Identification of Application Defects(应用程序缺陷的鉴定)
+ B8 x/ l- d! U: I/ t检测应用程序的错误配置警报。
+ q5 |/ _& N4 \: V0 [" n% _
. K  o; b; w: u! f
" h  X7 f" q0 V5 O' y8 Y) _Error Detection and Hiding(错误检测和隐藏)
: X. K5 i; @: H5 X, c& a/ j$ @3 x检测伪装服务器发送错误消息。) _4 ~1 ~& N4 f8 b
) O* l" W: d+ \8 d8 g0 i, h# x7 W6 I

; P7 d4 T3 Q+ O6 W: Z: I8 ]安装ModSecurity
; f& `7 M1 Q7 {" a" G软件基础环境准备" O: A; [9 O  y1 I
下载对应软件包
' @# t1 n+ h9 _* y# m6 S' v$ cd /root. t, S8 c) @8 R8 H3 c1 w7 A- N" l
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'. Y; l; y# W" a2 Y
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz1 x: ~* p* Z  x" d6 X9 t0 c1 R- N9 R
安装Nginx和ModSecurity依赖包
2 `6 S& ~8 L* i2 ]! gCentos/RHEL
: b0 `1 k8 W+ t2 |
) B9 w' b) s; N  m' p  b) ^7 ?7 N; x, u; b" X: T
$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
+ I) p" z5 l8 F1 ~Ubuntu/Debian1 D5 y: X8 c5 O1 W$ N. w9 P& s

6 E' y2 Q/ [' I9 i
+ f  U7 R) [3 B$ 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
4 K5 t+ T& P8 @( C6 E' e编译安装ModSecurity7 t$ M' J: E' {: x5 k* O
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。* L7 |: J; i8 |) d2 s) a! C% [
. s1 o. c. H+ o; q# y+ \

  t' z# e* I4 F6 G+ i" ^方法一:编译为Nginx静态模块' C5 ?$ k" A# K4 ]! s) `& K& M

, o0 K, W1 U, U
2 r+ Q+ k* c0 \. ~1 ?5 T7 Y4 ~编译为独立模块(modsecurity-2.9.1), t0 U- F& M* O; ?: k
$ tar xzvf modsecurity-2.9.1.tar.gz
) n/ c8 U2 q. L2 N$ ~5 c% k7 p$ cd modsecurity-2.9.1/( W2 p8 u' O, t% o
$ ./autogen.sh) Z# V  \  K2 y  a+ H
$ ./configure --enable-standalone-module --disable-mlogc
: z0 w( c9 ^; f$ y8 h& e6 U- f$ make
' |5 y- R, S% I/ F, y编译安装Nginx并添加ModSecurity模块+ {& `5 b5 x, z+ l( i: n
$ tar xzvf nginx-1.9.2.tar.gz( s7 ~) X% u5 t6 L# T
$ cd nginx-1.9.2
3 [8 I# ]) z9 z: L  d: u3 ?$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/9 y# o8 e3 v7 K
$ make && make install, C2 S6 M/ G3 Z( u
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块$ }: L8 Z; u( w: V3 h+ D
/ n: c4 _" }, C
8 N" J7 |* v% w' @5 O4 Q
编译LibModSecurity(modsecurity-3.0)4 s# t* ~, }5 C7 z. X0 Q0 N
$ cd /root
) T" n- x1 f( \) ^* e: H$ git clone https://github.com/SpiderLabs/ModSecurity  q  i* w! J6 \( d2 r" N& P
$ cd ModSecurity
7 o6 V6 B  {9 k7 R, `" o$ git checkout -b v3/master origin/v3/master& C- b+ ]. R9 A- z3 ]2 ~$ U+ v! S
$ sh build.sh; D' H/ H! a- U& o- f) \4 V1 t/ o# E; A
$ git submodule init
2 U0 @. y  V# Q9 h: R( G* g$ git submodule update
) d; d6 }$ W2 `% n$ ./configure% ^6 Z: K, V3 t) k# A: \- s1 Q
$ make3 |; i3 _/ x8 x0 p1 x
$ make install
7 s) c& Y2 ?4 \5 r& T# ULibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
9 k6 T# y. @0 ?. ?$ G3 C1 y- T" _6 \3 y2 Z4 d

' C  w; P. @, w& H$ ls /usr/local/modsecurity/lib: b$ b4 C. B8 V1 d/ H& Z- ~
libmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.0
, @5 A+ A8 n0 L( A0 D编译安装Nginx并添加ModSecurity-Nginx Connector模块& c! A* Q) V4 W* W0 W
使用ModSecurity-Nginx模块来连接LibModSecurity
: b9 N" o% n3 P) s) M  K" ?
, Q3 l$ i( t/ e; Q0 y4 i" t3 ^! V# Q% M! y; U: [, Z0 e
$ cd /root, L5 ^0 m( \- J. y
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx4 v) z4 V2 U1 C) ]6 O
$ tar xzvf nginx-1.9.2.tar.gz
/ N* [7 O/ H# v; b1 \) m% n% K$ cd nginx-1.9.2
) R7 j$ M1 z4 f* c: ]( V$ ./configure --add-module=/root/modsecurity-nginx
  a( M6 b& v: X0 h- P$ u$ make9 Q( q+ y! _% Y. X. p
$ make && make install0 c7 @7 a8 G$ F# e' A
添加OWASP规则- N2 F& k% ^6 K" C+ \
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。6 j3 y' r- _4 l- K
& O, e' g" V' P' e. x. a( a
2 s: b0 M7 s' M0 T* M' h
下载OWASP规则并生成配置文件
! n# s, J; }4 W9 L+ D$ o8 I$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git' t7 |/ o8 D' {* G+ G
$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/
5 o4 x, H( G2 a2 H$ cd /usr/local/nginx/conf/owasp-modsecurity-crs* c% v" A9 w% h, b
$ cp crs-setup.conf.example  crs-setup.conf
2 e; b- x9 j9 c& J& F9 j. O8 @配置OWASP规则4 \; Q6 e8 r8 F9 E. J: s, N
编辑crs-setup.conf文件6 w8 ^+ l. Y7 X  E

0 F5 f: d" S# {/ a1 b1 u$ q" `. }/ H/ r* Q6 I+ Y7 _
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf# X( p1 j' g' z, ^0 g+ x* y) B
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
. D9 r4 m; t! a  |$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
4 \5 k; J  j4 h7 _" ?8 k) p& |$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
3 z2 Q4 G/ N3 T; X% r9 O# y默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
4 d1 k  c/ z0 I) X& e% \
0 E4 G: u! o( j+ k* ?* P) [  O9 ~: t" k# ]2 _7 U$ Y2 H. e, }$ ~
启用ModSecurity模块和CRS规则
1 P& M+ f$ D( X  K# v复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。! F+ f* ^' h) J* Z9 n
* ~* c0 S! R% F+ r

* v. ?6 T4 S4 Bmodsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。3 o# ]! T: X: h8 ~% G$ L

: \7 R( h  k9 a4 v
& R! m& D$ Z! ~; A& Q& q$ cd /root/modsecurity-2.9.1/( F2 `1 W8 ?) C. H
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  
! [2 S# C# P7 ~  N7 @3 C) v$ cp unicode.mapping  /usr/local/nginx/conf/
6 f" U# d1 `8 U3 }; D将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
9 s" \  u1 `9 I! ^4 ]/ j
3 u6 p" U% A( c7 Y' |& A3 j) n3 X/ c  n" A) |3 W
$ vim /usr/local/nginx/conf/modsecurity.conf
  U/ @6 }5 Y$ u2 u4 {2 N0 ?SecRuleEngine On
) t( t5 U$ E8 BModSecurity中几个常用配置说明:# T* z: A, D  I' W

7 D) D# e! U5 g% T5 n0 e$ J5 c& d% s. t
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
+ o/ J4 L& g; j. K; |& A7 j3 r* e6 ^3 X, C/ N! h/ P* y" U0 p

9 K& x' q# w" S2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
& u7 x% L/ K* M, ?* t% r9 _$ H0 w, o) s$ C, Z' Z- F* ]

& F( f' d2 H' @( s8 k" T3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
" o9 @8 v9 _+ y4 |% O" I* A, O: J% ~4 l9 z8 x9 |# [* l
$ v7 ?8 k; `4 z# N: \. P: V
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
9 v! h  l7 a. f+ O  f1 S
' v5 Y& x: G' ?, N$ ?- \
' y* Z; j0 s& ?' k4 X+ t" `在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。! [8 m$ q/ D2 D2 d# `) B
0 {. a: F+ e; H3 l6 r4 p/ o& Q
( B, t- k' w7 i  m% G
3.x版本CRS- x* @# G& p! ~; B& F; I
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
/ I! W- S; z2 Y2 Y$ R6 b( r: L4 _# 生成例外排除请求的配置文件( g* r: E- F- ]# D( C9 h
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
- t! }# o& V+ C3 |) _$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf1 v5 Y' P& p- N4 _! D2 P
$ cp rules/*.data /usr/local/nginx/conf
1 J# u/ y# |5 Z1 y为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。1 R" Q! N7 ]$ S' _# L3 R
1 Q- [4 h8 Q2 ^
# V4 R0 s$ i' f: V
$ vim /usr/local/nginx/conf/modsec_includes.conf4 e4 J/ C9 _6 _$ X: c0 n, j+ L8 {
' A9 O, F& ]$ j4 g+ Z- S+ 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

. w! t  |  x0 O
5 T# }7 ^# P. J. Y0 Z" O6 q注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
, g) J# G0 G* b. O# r2 e
- X/ R/ E; B- f6 R1 n
" I$ f8 j4 W8 S* s9 o配置Nginx支持Modsecurity8 }  {, z, d/ l/ r
启用Modsecurity
" J5 R9 i5 c4 ^2 `& g0 o, [使用静态模块加载的配置方法
8 ?* C5 c* |9 D1 O  n在需要启用Modsecurity的主机的location下面加入下面两行即可:
0 x- G  i" V1 t2 W
( w' d3 y8 |6 D  w& `9 w( q0 b+ I6 s  M+ f- |/ G
ModSecurityEnabled on;
3 ~; v8 {' M& @' H& BModSecurityConfig modsec_includes.conf;( w) A7 M6 X% N& u# g7 Y# T" ]
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。# a2 o1 p+ ]8 x8 x8 u+ y, B7 G/ P

( P* N- ~: v, ^
) N  L, s+ N4 g% C0 D9 W# D$ vim /usr/local/nginx/conf/nginx.conf
  V& \1 F  H4 w2 n' B# ~( T. @; c3 `/ J1 W
& p& r1 }1 C8 m- m& C0 Q5 a5 \
server {
# V2 l) o  \. k7 E  listen       80;5 k9 Y2 L! Z3 {  W( d& E) X2 }
  server_name  example.com;# f2 \1 s5 B% k& W
$ X$ n. ]3 D8 _7 o% N

8 g  g4 m4 V4 Y  location / {
2 `$ _. d- c6 V    ModSecurityEnabled on;4 b: o( T9 J& ?* ~- l
    ModSecurityConfig modsec_includes.conf;
: E( p- c0 S0 {& b: h# `6 `    root   html;
& M/ B0 m  C2 _" C/ R    index  index.html index.htm;
+ t2 }; X7 n  U( ?% M. e  }
" Z# v* s4 f  G' ~; x( h4 T7 g}
& H* O7 k4 ?' F; v使用动态模块加载的配置方法4 ?) y5 ]7 n" t& A4 y
在需要启用Modsecurity的主机的location下面加入下面两行即可:
5 b% U* p( z* x! m4 s2 @7 o# K8 O$ q7 p" Y+ n' h' g
$ h: O# {2 A5 q3 z/ `7 q6 q
modsecurity on;, w: f2 ^" G8 i* o3 G
modsecurity_rules_file modsec_includes.conf;
; \- _" [  C- ?& x# N6 I; B- K修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。# o; v; q" ^/ n! M! _8 t  K
* K, e$ T: V" V5 z
& q" _1 {  }2 k, \4 U) r
$ vim /usr/local/nginx/conf/nginx.conf
0 C( M8 L' S( |& Y1 n# ~# b$ ~- P9 U' E9 {2 S8 v

7 H! t1 w% e6 B/ O- T' Fserver {' f8 o3 T- ?( }+ G  r& E$ l$ K% T
  listen  80;! x2 w  K# c/ z
  server_name localhost mike.hi-linux.com;
/ J1 O6 y* l& q2 f0 N0 b* Y  access_log /var/log/nginx/yourdomain.log;) p4 S/ I2 s) M& \+ P

( @  L3 V( h- r0 v  s% I
# B/ x+ A7 z% k: T) |  location / {
. c1 O: B% v" A5 t* e: Q
8 j" ?  Q) u; A! q2 h: z7 G1 H; |
0 Z- I9 `1 q4 m2 q  modsecurity on;
/ G4 Q$ r6 l* d% r& _  modsecurity_rules_file modsec_includes.conf;
" C& A! w1 T1 b9 P$ e% F  root   html;
5 ^4 P8 v8 m( c# C3 _& L  index  index.html index.htm;
3 ^! S& r" v! J0 J8 C}& C) }! D6 l# J% L: q) q
}
3 X: S. [. R3 `9 q$ N, x5 j: q验证Nginx配置文件3 y$ |) z0 @- ]6 m
$ /usr/local/nginx/sbin/nginx -t/ `$ W% ~3 Z, I1 f4 m9 y
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok5 W! L4 c7 Q1 c7 E( D0 `! U: Z
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
( I+ K) V, G" `7 H启动Nginx5 G- }  N8 N( [) l) z8 V
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf9 G" q0 n* k2 [2 p0 U
4 j8 M  t8 `) A# I9 I" Q2 A

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


$ w* g1 n2 j5 R

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-7-6 19:06 , Processed in 0.074079 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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