找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11301|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
' i" o, b$ a" T0 _# z! T/ O
! |6 \6 t7 o8 ?
* H. [8 p; n" m) N  f# p在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
1 Q. j6 H( r7 H& U, ]
; ^: v0 n; [: `5 n
2 ?- C5 w1 z8 l3 ?. M9 ]什么是ModSecurity
$ ^5 S% k1 M' [9 s0 A& ~: KModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。% I) n4 Q: j+ x* p& r
' w0 D# h8 ^: I& y6 _
" w8 o& ~2 E8 {" T1 ~
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
- G3 U6 r; U8 b+ V6 ?5 k
& R# z+ O4 p. w* J3 z" b, y6 M( j
* w7 W6 {' G$ B: O( R' \4 h; tModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
7 f3 H: @1 ~& G$ _* d! X
/ h% N9 y* Z5 w1 V% A" U4 Z# j
官网: https://www.modsecurity.org/2 P0 |, O1 R. `# [, F* [7 Z" y7 i
. o/ }0 B8 \0 R5 q, b9 k6 z

6 Q& {/ P4 c8 _1 v什么是OWASP CRS5 p) a4 P& [+ A9 X4 {" p7 K* o
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。1 }. z: q9 v4 C* f: }  H2 u

+ b0 O+ u% n# g: r+ v" S( }+ h) `5 }2 Q( Y: l2 j$ S
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
* |: B: p4 o# |6 ?  l; q) x
$ s: x  }+ q* O; Y" j( @  X) Y1 n$ Y" P' g9 V& B; M) E
HTTP Protection(HTTP防御)
4 H/ Y. w, K, ?3 u& j  [HTTP协议和本地定义使用的detectsviolations策略。
0 \, F( l# V& w, N
+ U: g5 i! `/ g7 m; }6 L
1 |" T+ g3 K, F" C+ j5 LReal-time Blacklist Lookups(实时黑名单查询)
9 s9 W5 C3 S  a# o, Q! N" o利用第三方IP名单。
* r: F5 K$ W' I: f% t# L* f% E- p
/ S- ~5 F% h! r  {7 i! Z  n
HTTP Denial of Service Protections(HTTP的拒绝服务保护)  N! i8 u  H+ u: Y; k  y
防御HTTP的洪水攻击和HTTP Dos攻击。; T' h* U- y4 n2 H' u; z  d8 F8 ?
0 ]& Z+ v$ c# m+ v

2 f) B' o9 J8 TCommon Web Attacks Protection(常见的Web攻击防护)7 H( O% L) w4 `. ^1 w- _
检测常见的Web应用程序的安全攻击。" {+ s; \( I* ]- k$ k
4 P& w" v3 _9 s$ x
/ H. Z5 O# \0 E* K1 l6 y
Automation Detection(自动化检测)! q/ M/ x( r: v" e7 y  T
检测机器人,爬虫,扫描仪和其他表面恶意活动。
: `& H" T  S1 ]- d/ y" s# b
- x+ g2 Y2 m) @) M* n4 \
, D3 m+ p, G9 }3 ^! m) i$ Y5 K. |Integration with AV Scanning for File Uploads(文件上传防病毒扫描): C( g6 F; _0 ?$ U
检测通过Web应用程序上传的恶意文件。* h1 F1 l4 T0 Q+ q7 X+ @! c
* {5 @( c' h& C
* t4 r* a$ I* r( |& [6 ^
Tracking Sensitive Data(跟踪敏感数据)
) T' ^+ g0 u" ?3 S: ?8 s* |信用卡通道的使用,并阻止泄漏。
' z% C+ q& `% c# \6 z: k/ O7 _2 g( Z8 Q8 h

/ P4 R" V9 R& rTrojan Protection(木马防护)) ~+ r$ D$ T8 u& }
检测访问木马。7 D* u3 u0 a+ x9 u5 {9 P5 g  T; K3 ~% y: a
$ ?; |% B7 G  C! t1 o4 b

9 @, ]" C) }' k* x, S! N  GIdentification of Application Defects(应用程序缺陷的鉴定). |/ x0 Q& J/ Y( x2 l
检测应用程序的错误配置警报。2 y2 y& X0 H: s0 i

" \0 e% q' x5 p8 U
8 l+ V5 E5 a4 N  mError Detection and Hiding(错误检测和隐藏)  S9 H6 F0 s* D- @9 D1 K4 w
检测伪装服务器发送错误消息。9 d& C+ }/ x- E  n5 S# p. K/ c

' s+ i" b) `: [4 p3 D; {
* U9 u; I5 {9 P% O2 P安装ModSecurity4 L( a, c# L. \/ l+ M* Z  a
软件基础环境准备
/ ]! b" x/ L3 L$ |9 }3 U6 y下载对应软件包
: P9 Z4 K2 s2 Y6 B4 v$ cd /root
$ v5 h& O. p% U) i/ ]4 A$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
( `) S& m5 {1 W5 |3 L$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz
, F5 t0 b8 j5 {5 R: H" _5 z9 C安装Nginx和ModSecurity依赖包
+ g- {3 t7 {) `! dCentos/RHEL) L) T# j% }" v8 v3 r/ D
7 j8 S! x, q& n  g! ]- @
7 S0 L2 [5 _$ n5 \) _
$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel' o/ t! r9 v& A1 k$ m
Ubuntu/Debian
% T' t: t1 v1 c) y+ \
" D& v" S, Z+ ]& @6 R9 U  ~' v1 |- r0 D: Z' G! D8 u
$ 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
5 }; |! x7 C% W8 g1 W0 z7 Y, _编译安装ModSecurity
- p* j( N0 s, a' ]! l/ eNginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。+ f* F0 J3 R7 J* A* ^

- U1 W/ D* w8 b% O2 m8 t0 \0 O5 ^( e2 V
方法一:编译为Nginx静态模块
+ g  y* ?4 o& y: m
: X8 \9 P& h7 h/ E
  x' [$ S% L! H' u  M" d( x4 p编译为独立模块(modsecurity-2.9.1)( Q3 `0 ]. `* p; D4 A2 V
$ tar xzvf modsecurity-2.9.1.tar.gz
; X# K9 M6 a2 d2 @$ E+ J' b$ cd modsecurity-2.9.1/* A6 E/ c* |5 O
$ ./autogen.sh6 ?2 _, w$ H2 Z, d
$ ./configure --enable-standalone-module --disable-mlogc3 T0 u2 p1 m) Q" X8 P; z& F; q
$ make5 y/ B! E5 D6 E* N/ Z0 l8 r
编译安装Nginx并添加ModSecurity模块
9 ~  K2 w2 R8 y5 U# D8 {* ?$ tar xzvf nginx-1.9.2.tar.gz
5 ^3 u& i/ \, I+ j; |, a$ cd nginx-1.9.2+ J7 t9 {7 n1 o+ l
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
$ w$ f: O+ V6 u0 i  n0 W$ make && make install+ O5 Y1 Q& n, ]* b! E& k
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
# f8 B1 X' D5 I& h& h& x( X/ _) j" N: ~! ~8 l

$ j8 C! U$ {7 [. g4 I! r  ~编译LibModSecurity(modsecurity-3.0): J. m$ C! G* [3 u; D0 l4 ^
$ cd /root
) B% \2 l& x% ?/ n$ git clone https://github.com/SpiderLabs/ModSecurity
* l) F. E( o, Z% T7 A$ cd ModSecurity
) ?4 e4 m1 F/ h; b* z2 t/ }" g$ git checkout -b v3/master origin/v3/master) H0 ?1 L6 B$ O! _: u* ~9 Y
$ sh build.sh
; ^/ E! R2 K$ a9 F$ git submodule init
5 t' p) y, H7 ]" k+ i% h$ git submodule update
8 j2 Z2 d( D- C* \$ ./configure
: W2 Q% A, ^* ~" B3 r4 n$ make
9 g$ ]6 V9 @/ v- E) s( s8 s$ make install# i4 S, S; Y8 m6 h
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。) w3 u+ B& ]/ L: u2 Z

' O5 \/ ]4 a0 \8 Q4 v/ k4 C5 W$ Q
, l" X5 N& E3 m  s( P; q; h$ ls /usr/local/modsecurity/lib/ O3 [4 i9 d% P2 ~" Z8 a6 `# C
libmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.0
1 P- R% K, L* K$ {5 x1 Z7 G编译安装Nginx并添加ModSecurity-Nginx Connector模块
$ T: G% `' S4 B( S# A使用ModSecurity-Nginx模块来连接LibModSecurity( m. c4 B9 D  b% Q
0 ?+ U6 [4 I9 a; B$ r# B) @( b" U' o

& a9 v8 r2 @7 H( @9 ~6 @4 ~$ cd /root% n3 u4 t, n0 r7 G; ~) j4 K1 s: T
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
5 q( ~; v' ~; N% A" I$ tar xzvf nginx-1.9.2.tar.gz
' ?9 P( U  x& |6 C$ cd nginx-1.9.2
2 D8 g! y0 `. ^* z( [$ ./configure --add-module=/root/modsecurity-nginx
7 C8 m* D6 p9 `+ H; [$ make
9 g$ \- C, c# {' v, c; _' F7 p$ make && make install, z4 }0 E$ K: h
添加OWASP规则
: P& ?0 m* h7 x* s6 n' J4 C3 RModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
0 E, F) j, B$ F% e, f" @( X& |7 G  [$ ^% y' Z+ l
; d2 a* T  v3 p: }* P
下载OWASP规则并生成配置文件
2 m( T0 o) B9 I8 @. @- ~# q# I% l$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
8 H7 Q9 p. k8 ~$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/) r  k" X! J3 v, r, z9 G* ~
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
8 k# I* u; D& |) M( ~6 b$ cp crs-setup.conf.example  crs-setup.conf
2 s9 ^; X% E+ j( j8 r配置OWASP规则2 ~) p) [! O1 s1 O
编辑crs-setup.conf文件
7 h  u( t& _) b1 @
$ i7 Z% e" h4 @+ x% |' h" `) Y+ x4 p) J2 v, f
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf3 U8 p" r3 z# e% s7 S
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
" _/ e* `' \: J3 U+ I$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf/ d, K* d5 {% o; J1 H1 ]
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf8 J/ b( `& n# s( f/ t" Y& b
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
0 O9 }0 T! ~% }. W9 {
5 M! n2 t$ e6 I9 G# g6 S% `: F  n1 o8 |; m
启用ModSecurity模块和CRS规则
1 h: P6 n3 r  t3 X4 t; i复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。* w8 ?( s2 T9 d1 A6 Y% r
+ E& _" ~8 {& ^$ s3 @2 @

9 Y/ g; _5 N/ ], W1 K- R& ^0 Dmodsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。/ O" [0 N6 Q5 Q" F
- L3 u5 g7 s) x6 O9 O( a! R

- T6 Z' p4 F. _  f. a$ cd /root/modsecurity-2.9.1/
! q' z( l, Z3 b) ]) @: R$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  
" A3 J+ r: r2 d4 o$ cp unicode.mapping  /usr/local/nginx/conf/
% T; }! ]- g% k将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
# O2 Q! w9 e. F/ s5 y
; j& D, D# I! ^# x* D$ x. o% [5 X; Z8 z2 K3 Z
$ vim /usr/local/nginx/conf/modsecurity.conf) t. x% g, D5 n* S5 S$ a
SecRuleEngine On3 E8 M/ o8 {* L  S" E$ _6 u& D
ModSecurity中几个常用配置说明:
. t; ]5 K5 {2 {# W* E  T9 J
* G- C8 X& s  Z8 Y. e/ v8 w* u
* y2 G6 M2 I* Z: k2 F. h- L8 ]* u% _1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
( `( s5 `7 V  P" j
5 z/ X/ a0 o& u1 @; |$ S
2 v2 F( w4 U, q; {# ?5 b; l2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
: [7 W& s, {7 @+ {# B+ z& ^, l: T- K+ |& [
3 P0 {$ o, R* h3 A. @* w9 T# y; d
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
& d; K; f7 g# ~2 a
8 J/ b/ B% a. O- F
: y4 G# ~9 Z* m: E- H/ S  {! m- o4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。+ i, Y1 V  q7 s

. a+ p+ J4 Y1 U) `
2 N, q1 s& t7 D在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。/ k& B+ u) y1 e/ I6 k
! D7 F; V5 t8 d
# m) V. k% x, m  x) Z
3.x版本CRS- J! {1 ]" z! p2 |) f- H' l5 N
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs# [) P- O1 k% X" J3 {& j
# 生成例外排除请求的配置文件
* B3 R$ A3 _; Z5 q$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
5 A! |, ?; C! l. y$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf. h9 d! K4 j) j9 x, |* w5 r" @
$ cp rules/*.data /usr/local/nginx/conf6 x. C) D) O( Y' {+ W
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
: a) ^6 t7 L. O4 G8 I9 Z& S, @
  X4 g  ?! q; B& x  \3 o; B4 _% o8 _, T
$ vim /usr/local/nginx/conf/modsec_includes.conf
$ U" @- M4 T. P
% m8 Q1 u! d0 z2 ~* k
[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

, R& g& b. y$ Y
6 e- Y0 @+ b$ h$ A8 [) M' c+ H注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。& e' C5 T$ M! m/ t* x: D
2 V' I) }! w% K4 D9 z
: a- p1 b2 m' u9 `
配置Nginx支持Modsecurity/ Z% S& k" H+ |) h; {( G5 A7 Y1 ?
启用Modsecurity( Q" v' }1 F1 y) Y2 R7 |9 K% M$ j( J( W
使用静态模块加载的配置方法
* A; s9 P, Q, x$ A! `在需要启用Modsecurity的主机的location下面加入下面两行即可:
2 f- b1 U: ?! `  n* u* e
" }$ z' e' J2 H5 v) V) h
) G2 G3 y) V7 T! z4 oModSecurityEnabled on;
9 ]" V$ h# g3 m6 k( \ModSecurityConfig modsec_includes.conf;
8 @$ _: I: Y" Z$ w) I修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
: c, ]5 i/ I( A  O$ M$ _6 N
8 ^% x3 _* @; f/ v3 c# A/ I2 C' M9 ^6 {) U. V4 C1 o
$ vim /usr/local/nginx/conf/nginx.conf
! L% w/ }) Z9 F$ Q/ Q5 f& \' d; \1 h  f7 b9 _6 |4 F3 U4 ^5 T7 D

6 c/ |- [/ v( t, U6 wserver {
& p$ x' M) [7 z9 E  listen       80;! K3 p* G8 O* E. F2 R; S8 T
  server_name  example.com;
( V! I6 R! q: r4 B
$ _% r* W5 F: ?% V/ `, P, X. {4 U1 r  t/ D
  location / {
8 f4 B$ X# X$ n4 ^- U8 j( _/ J    ModSecurityEnabled on;# \, _, n  q" n' |/ v
    ModSecurityConfig modsec_includes.conf;' |( M$ k  J+ T+ P
    root   html;
1 i! r4 E% d2 I* U* T' j. |& \    index  index.html index.htm;3 K0 \* _' b# q9 z
  }1 h) u5 g6 s: l0 s( a
}
# f* e% H2 c6 T) r5 ~* z  C' a使用动态模块加载的配置方法5 f" W7 @' W, r3 h
在需要启用Modsecurity的主机的location下面加入下面两行即可:4 z; ?% e* K6 |  o1 H
) \$ M4 i. f) z5 _* P2 ~

1 }2 U# _* ?: u: K" lmodsecurity on;* W2 L  H* \; V. x; z- ~
modsecurity_rules_file modsec_includes.conf;
% d; M* a, I8 t修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。$ c+ R2 S" R8 Z, X

4 T3 |1 Y& @! F: t! e: O4 w5 y& V+ {1 e3 ^1 F: p/ t
$ vim /usr/local/nginx/conf/nginx.conf" U" w/ T/ H$ s8 S5 m" r4 j; O

+ V% l* o0 @; Q& p- U" {, O
- p7 Z% C5 j0 p- Nserver {1 G: e3 ^$ h4 v. i9 h  U
  listen  80;, V3 E3 e; j$ ^: s3 p( f8 }
  server_name localhost mike.hi-linux.com;
: ]" N5 Y- Y$ @$ b- G5 O& a  access_log /var/log/nginx/yourdomain.log;! x% X% n; _: n, h1 d

' c3 z" K6 m; O1 O% [+ u. E
2 G. |1 g/ L9 h9 V. Z: g+ P  location / {; G- A0 y& n! T: O# V

5 I% d. _8 x: X) w, E! M4 u/ O) D. A* v; I, S
  modsecurity on;
' z$ [# ?" ?, p* j5 l- M) c0 W# f7 ^  modsecurity_rules_file modsec_includes.conf;  z# G2 n% U' Y; q/ g3 t2 J% k& R
  root   html;
+ z: O6 X; {  R  V  index  index.html index.htm;1 e. Q9 ]. w! Z* M& B
}- p0 e# e; Z: }) y5 c1 q7 R
}& i# L! w7 J+ [
验证Nginx配置文件
2 n" }( N( o# v& V) b4 y$ /usr/local/nginx/sbin/nginx -t
7 N# ], d0 E5 w4 bnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok' \. n6 h3 f$ B1 \& W' K1 P
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful$ w' t/ g. ]- W; q
启动Nginx
7 `0 z$ {  ]% B+ z% H+ d0 H7 G7 s$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf# Y5 E/ b; I  W1 R6 b: `

2 g7 I3 e$ }; f2 k4 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能够战胜更多复杂/未知/混淆的攻击模式。

5 K/ h3 `* {" S  |* N: {1 T0 c

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-5-26 18:38 , Processed in 0.080908 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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