找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 10571|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。* Y% e. |7 p+ X, U
! Q- \  H+ ~5 w' z( W. ?5 w

4 r! U& }& h6 M! k5 l3 C1 F在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
# O2 n2 G$ Q. @' d2 b
& L" n# B: w/ Y4 N
/ W8 v" l! t2 `1 D% x! o! K什么是ModSecurity. D1 F+ ~% d- Q, c' v8 r
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。9 q6 t9 X9 g' L1 H, m# u

5 G& }( V7 g3 ]0 V$ e: s' c3 r3 m6 j6 ^( E
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
1 }2 w6 E* j8 c" f. ]( I
- J7 L3 d; I5 v7 R
$ ~" s* x) N; t7 g5 \8 A; AModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
; X) P7 v1 \6 z* H$ K/ |2 r0 O/ D" B/ y+ M* k) D3 U9 s9 H

0 ~1 z. x5 n$ Q官网: https://www.modsecurity.org/
- A+ E$ e/ J/ u6 P1 t
* L$ X# G. w2 _; }5 u4 t% m% g$ J4 o$ k0 h# S: b
什么是OWASP CRS
7 h- T# t2 V$ ~6 \  GOWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
( z' ]) f8 W$ C) V& _3 W8 U5 J' d1 S  m$ c3 A

/ ^: m7 O! B* L! L2 m5 g* Z6 A9 k/ E, hModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。$ V4 C" S# z+ o  I- L% s5 b9 }  {7 {; G

( f- N: h4 w6 ~7 u7 ]; p; G; U+ K' v" ^3 J# o; x3 ~
HTTP Protection(HTTP防御)) Z* v! U: L2 `$ @  y
HTTP协议和本地定义使用的detectsviolations策略。
3 d4 a/ L* F6 m; L5 ^! z5 q9 t$ z' I8 p8 N4 ]% I0 R9 \; p$ }) ^& k) m2 B
) k& L2 X9 O6 J- C$ E. g' O% R
Real-time Blacklist Lookups(实时黑名单查询)$ N9 N  |- W( j0 a  F) n& b3 z
利用第三方IP名单。. w8 g; T$ z1 q2 B# ?: R# ]" R' o7 ?
& q/ D. A0 @# L! l4 W# V
% D0 S5 a# E" J9 Q
HTTP Denial of Service Protections(HTTP的拒绝服务保护)9 M- K" J, h  Y; M5 e0 S
防御HTTP的洪水攻击和HTTP Dos攻击。
7 ^0 T4 A% p: r
* c$ B4 c5 A4 K% r0 }
- y" }. p8 Q" ?, FCommon Web Attacks Protection(常见的Web攻击防护). O9 L  w1 K; ?
检测常见的Web应用程序的安全攻击。, }3 K4 q! g' S2 D7 R2 R) l4 W

' z3 P5 ?0 B6 _5 j8 B8 x! x% g1 @( m) L$ \$ O9 V2 s2 _
Automation Detection(自动化检测)
6 S8 ^$ w, _. b% `8 @) Z. E) L检测机器人,爬虫,扫描仪和其他表面恶意活动。* B" ^3 m' \. V; A! H1 _3 P

* E% c# q  B, q9 ^1 N) V+ c- t
4 F7 y) k# k: c+ n- r* }Integration with AV Scanning for File Uploads(文件上传防病毒扫描)
  a% P3 O. ^0 s( q检测通过Web应用程序上传的恶意文件。! L( Z* o8 b% y7 H1 D5 ~

+ G* @1 e" X& @# ?* @4 N, ?. B9 f  _
Tracking Sensitive Data(跟踪敏感数据)- F0 D. t7 s- ~4 _
信用卡通道的使用,并阻止泄漏。. i* ]  r3 x# a7 x! v- R
  N+ h& p6 s  P4 w' l0 @. y% ?
3 T; |# z2 ?' D6 ~9 ?7 P$ Y( Z2 l2 h
Trojan Protection(木马防护)7 {7 q# j7 J4 b9 o
检测访问木马。+ Y  m4 X3 K: a) A0 y5 x9 z; C

" t/ |6 W5 X1 E2 F! N0 _6 B) p
7 Q5 `, y8 q- X! U. p' M! _* T. C4 XIdentification of Application Defects(应用程序缺陷的鉴定): T6 ^1 i9 F8 T: b6 Q& D- z3 r
检测应用程序的错误配置警报。
1 R- g6 }' ~8 w% L( G1 o4 r
% w, f: i% D  B5 L  D1 a6 \$ T, b( Z
2 S% v& |; C' p* p/ fError Detection and Hiding(错误检测和隐藏)( y3 O6 i* {  F! H; u
检测伪装服务器发送错误消息。6 K3 ]8 Z: M9 a  q' K9 ?0 I% }

6 U6 ^7 P3 A6 n: x
! R5 b! T& P7 a% t- Q7 H+ M8 ]安装ModSecurity' q3 k0 `& L1 Q. p
软件基础环境准备
% O, i/ V- ], D5 K下载对应软件包5 }" g. u8 |$ c1 j
$ cd /root
& b$ ?. O& T7 v+ q% D  H0 c$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
. n3 H) ~( H7 j' `, r$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz& z, i, {2 g3 D' {6 |/ b
安装Nginx和ModSecurity依赖包- R/ N# k$ f: Y! |- X3 }* V/ q
Centos/RHEL  J' B, F# J2 P% u4 \- T- l1 H6 {

! o, c' ?1 E5 [: J$ z. d
" Y% d6 P8 e/ @+ t! d/ r$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel. C- }# P2 d, W" m3 Q! S+ m
Ubuntu/Debian0 h* f7 D4 I9 V# q

$ ~, f1 z7 ?/ r3 }5 P  V! h% R& I' J/ i0 N; V" z5 H* @  L
$ 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" E1 D& e- g+ X  G* g9 ~
编译安装ModSecurity
  @8 C" p6 m7 f# eNginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
1 H" [: {, R, x" s' X& O+ j+ }4 V, Z3 {9 Q0 ~
, z' c$ [7 A6 n" }% q% n5 R
方法一:编译为Nginx静态模块
( P2 k4 F' ~  \8 \
1 M7 ?) S* `; Y: c
2 A: Y$ B1 O4 h: ~; k编译为独立模块(modsecurity-2.9.1)
8 S$ s0 H+ W' E( d) d) M+ d$ tar xzvf modsecurity-2.9.1.tar.gz) q- r8 z; v6 h0 @
$ cd modsecurity-2.9.1/
; z7 `0 O/ n! e6 _7 L2 i$ ./autogen.sh
9 T4 D4 F! ^& _4 n4 L$ ./configure --enable-standalone-module --disable-mlogc
6 U( \5 |+ C% y) _5 }$ make9 W- |5 ^7 F! p2 ^
编译安装Nginx并添加ModSecurity模块! b  S0 X/ N: ^+ z. R
$ tar xzvf nginx-1.9.2.tar.gz
0 q1 M9 m# a- V8 P2 D0 \  \2 E$ cd nginx-1.9.2- ?- P0 ]  d* k
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/9 i/ t! R6 ^; [9 U' l% D3 ~/ V
$ make && make install2 H7 y, d- G, D- ?
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块2 i' c9 y! Y  f5 ?$ _
5 N0 V; G4 [; B; H$ Z. d- F0 n- n" H
! Y! `3 X3 \) C2 _; S
编译LibModSecurity(modsecurity-3.0)
, @& j9 ^/ E& S$ b$ cd /root
0 c0 _& M8 y, t- }6 P5 X$ git clone https://github.com/SpiderLabs/ModSecurity
6 z3 ~9 p  Y. z6 D$ cd ModSecurity
2 L- W7 V: D, a" M& \9 H' A4 r1 O$ git checkout -b v3/master origin/v3/master
1 ^. B+ U$ W2 ^6 K, X! Q8 J( M2 K7 d$ sh build.sh
2 }( R% c- K) k0 ~$ git submodule init% F' z' A. a1 w" ^
$ git submodule update! V3 y" m1 T' A+ w* ?+ e/ Y& M; B
$ ./configure
' A3 ^: Q8 l4 ~, `$ make
+ ]# X3 b/ w  A1 q$ make install
8 Z3 Y2 \# ]/ c; N  kLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。/ E$ q5 q  a! F  r: z5 ~
' }4 i" Z: A8 T5 w: g

: e2 L+ G5 M' e2 g6 J. K$ ls /usr/local/modsecurity/lib. I8 v& W  _7 H
libmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.0) d0 L5 v- Z$ L4 ~6 j/ l9 S
编译安装Nginx并添加ModSecurity-Nginx Connector模块
" j& I1 n* k! f; ~  w0 \$ L3 O使用ModSecurity-Nginx模块来连接LibModSecurity
, b+ h. ?9 @$ V3 t; [# k. M
/ a/ r& M% i( Q4 L; h, M1 s7 |) N  |/ ^! Y4 {" f+ {: u5 I1 r4 l
$ cd /root! D; L! N& I& {% `1 L8 u( X1 {7 P
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
; {; J  L4 n* |; e$ tar xzvf nginx-1.9.2.tar.gz
& E9 |, C6 H( s2 d9 j% O! C5 g( [$ cd nginx-1.9.2
* L( ?: n5 d' t* t; P$ L) ]2 H$ ./configure --add-module=/root/modsecurity-nginx- F- c, R2 s5 c  R
$ make
+ K$ ]$ ~5 ?' z; M! l$ make && make install2 d- K! C0 J7 U
添加OWASP规则
: u$ l2 ]9 ?. m  v: FModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。2 e4 m/ T* T! I  ?' ]7 D

( n! @- O" G, _+ m4 y) k  i
) l; ]2 v6 n9 Q6 S% k0 O. K2 P下载OWASP规则并生成配置文件/ J0 A+ e9 m# ?+ L3 ^* z. l0 ?3 U
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git# w8 }- O. |$ E, A/ ]. {  H
$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/
* `! ?* S( \2 U2 _1 M; W$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
  z2 O6 {9 s( I! M% s$ cp crs-setup.conf.example  crs-setup.conf
7 q0 T9 L5 W) L" x7 `7 h: B% W配置OWASP规则8 k& c2 z1 Q/ n8 H
编辑crs-setup.conf文件
, s& b) f# [5 v6 t  b4 N9 G1 Y! A' B

! c; L, S- h- ~2 S7 X6 l; A) u& A2 q) k$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf- t0 p* c+ c. S* z
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
* d1 d1 ?- g8 R0 ]! y$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
6 v: ~2 J# R8 K) J* y; D$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
; K, D. }; r* _' X$ x默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。. m0 \6 N# F, Z1 R) x! T/ x1 m$ m+ \
: B! G( z6 Y) V# G

" A) u( j  C9 Y, }8 k启用ModSecurity模块和CRS规则
$ ^" p7 H( N1 |3 P复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
( O0 m6 e% _! ~* [
* X8 R7 B  d" Q
( }( ?  _3 r5 Y: Y1 U& Nmodsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。2 k% M# A* S  L* K& W! \/ A7 A
; U8 }$ Y- G7 Q+ x6 O7 o1 k
; ~4 K4 V' ^( u* a9 J: M; d
$ cd /root/modsecurity-2.9.1/% F2 _: B3 v. U1 J/ U
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  : P7 f! Z# S  C' Z5 @/ u/ A
$ cp unicode.mapping  /usr/local/nginx/conf/0 w0 r7 u1 |/ Z" P1 T
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。% j) R5 t9 z0 [
* g+ }  m0 f' Q8 n+ c

8 j+ |+ p( u/ E0 c$ vim /usr/local/nginx/conf/modsecurity.conf
& g7 n; ]3 M3 `8 f" s  A; oSecRuleEngine On4 d! T) C* `+ C' {
ModSecurity中几个常用配置说明:. R/ A7 w. V3 V$ |  A
3 X) e$ \6 }8 ?0 ~* U' [

8 [2 j' x6 C3 s( X7 y! q  w, Q1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。) }' P& y6 J! y6 M  n, @( y
( Q2 _& ?8 h- v. f

9 g6 N0 e4 s) D4 m' M6 R2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。# e# t2 B* w0 M; y
, r& P8 X% p$ _) y8 l4 u

* r9 `9 j5 M6 C7 }! O. T- J7 S$ N3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。4 X; S* n5 c  R, N
  u- o7 Y6 T9 ~5 ~
( X0 _  N+ _, y7 s
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。$ B  {2 O$ \) k+ @" B- d

) i' W  r+ b6 K/ b$ i5 h
4 w9 G& X  F3 s/ r# @- {' _在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。$ A7 c- t& }9 \, `9 d0 l/ Q
% k5 H2 _% W, ~( j  |( D
  [" ~( H0 p2 S0 d$ l% K$ b
3.x版本CRS. Z) U0 ?( |; D' J6 b- h( d0 B
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs1 n8 V/ c: k0 ]- S
# 生成例外排除请求的配置文件' C1 |6 K/ z5 f9 T# \+ S
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf+ T  n0 P( d% k( i- R. b
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf& }( x5 a1 B& B& `9 r. Z% N; ~
$ cp rules/*.data /usr/local/nginx/conf
/ o& s8 f- X! c; c2 _, p7 ~! Q为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
; j- i, O) R! R8 u! g+ A, `, ^3 j# n! y

+ Q8 k, u2 l3 h$ vim /usr/local/nginx/conf/modsec_includes.conf
# w/ I1 B' h, v7 r, d, q* z- |% I
0 f0 V& l9 u, c8 h/ f
[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

/ x3 @& o* Z8 S4 Q* k
4 {1 o+ a/ _. Q( j7 s5 j注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。1 }3 R+ M% e2 D

$ f" M; g# t+ g! m* n3 E0 V1 ~# P/ X" z5 J* N
配置Nginx支持Modsecurity
0 [$ S; _" h* D9 u- s2 T0 b% M# ^启用Modsecurity- a$ C; ~. D0 X* R1 ?
使用静态模块加载的配置方法. }4 z8 D8 _0 u; H
在需要启用Modsecurity的主机的location下面加入下面两行即可:
$ z; m1 Q" T. G5 r2 L7 P3 N! r  g" U3 V* E
# F* a, `+ r/ b0 X- Z* ~9 Q
ModSecurityEnabled on;
. F/ f, n$ ~# B) y' O6 b- }ModSecurityConfig modsec_includes.conf;
2 _9 t% Q0 z7 l0 P* \$ p) @' N3 m修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。# L/ K- c% t5 f" a* ^* v
/ p1 D% \1 |* p: G

9 _7 M3 n- Y  G6 ^5 E$ V$ vim /usr/local/nginx/conf/nginx.conf8 V- \) O6 P/ F5 O# e

. B5 r$ \2 f& q, ?6 l
! X+ X( f& `) dserver {
! Q. ~0 d$ ^0 l& a( @  listen       80;
+ x& T3 q( H8 G, d% U7 @% S  server_name  example.com;: }6 R" H/ G4 z
/ i; ~( b- f' J# F+ a2 M4 ]
# ^) ^" ?" T6 w3 ^. T
  location / {
6 ~3 n: T  I( [    ModSecurityEnabled on;5 m( q/ Q- |* U# C; ?% V
    ModSecurityConfig modsec_includes.conf;" J: O/ h) l. I9 c
    root   html;0 K5 n! n2 a  V( @7 R
    index  index.html index.htm;( F. Z( u2 E6 \- _& f
  }
$ B1 S3 ?) x( q/ D- K0 e}9 L9 ?' d5 G; l; I( h, c: a
使用动态模块加载的配置方法/ n5 p" a/ Y: ?* I5 y2 `
在需要启用Modsecurity的主机的location下面加入下面两行即可:
( G) f3 o$ M. |0 t3 t( w& U$ C6 @0 m/ w4 B$ a
3 Y6 Q7 v  R* b9 I* x, L
modsecurity on;: A8 k1 L  J" Y  |8 }7 s# q
modsecurity_rules_file modsec_includes.conf;
0 _7 _+ K8 H- j/ d8 L5 s修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。( j8 M: L1 }! h- F) O' \  c0 o
9 R0 m  p9 O0 T" _0 T* F

$ M& e; r0 g! u4 ?1 D) s$ vim /usr/local/nginx/conf/nginx.conf
0 V" x* c2 I- S( U: h: E4 M. M1 Z7 P) k* S6 k" W7 F4 ?

8 l% g/ p& x% X$ g- a/ f3 F5 Dserver {
4 T4 i' H4 ^. h/ U; W& B( ^4 Q8 o0 J  listen  80;
# b5 N% {2 ^$ V, l- }. s  server_name localhost mike.hi-linux.com;
4 b9 e- g/ ]# B+ l/ M3 G+ T  access_log /var/log/nginx/yourdomain.log;
% f& j. U# H1 R2 O# o/ g3 C( m
: ]8 m& c' v" c1 t/ W' @  ?
  location / {* ?9 n1 r% N8 Y7 ]

  \- Q% G, Q5 A
% k) i, M/ q3 Y3 L5 T  modsecurity on;
0 N7 F" z# t! A( Q# X0 j  modsecurity_rules_file modsec_includes.conf;
5 A! Q4 ^# b/ ~& D: f8 p9 t0 |" f1 m3 [  root   html;/ r! z) ], E% r0 G: [" a1 ?
  index  index.html index.htm;
- }) }$ B* V: a  F9 g6 M2 w8 c}
5 c* q3 I- C2 B6 Y* o) [  T}5 }" u% a  f7 m8 w4 T# L! K! D
验证Nginx配置文件
& G2 `! g4 {* T4 N2 h7 Z$ /usr/local/nginx/sbin/nginx -t
0 I  G$ f# G1 N0 onginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok9 t2 t+ g8 b' x3 r4 r
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
) a+ O' b, V6 l  h" J+ j启动Nginx) _6 A( ]9 `" O3 `; C' p/ S
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
" v# b4 F7 x1 ]% [0 r9 a
$ M* D! p4 L) }6 F  Q" b& N  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能够战胜更多复杂/未知/混淆的攻击模式。

# i6 p8 O* L0 {/ x, k0 [

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-3-21 11:07 , Processed in 0.076385 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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