找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 10430|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。: y& G" q) A+ }4 n6 M, q# Y, x
0 g% l: ]" f0 C  {6 T: r
" `( G+ @/ `+ W9 ~
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
  a8 q4 \! n" L/ T7 F5 w, e7 z" S8 A  w

+ s' N% m. V8 r& x什么是ModSecurity2 r" G. P9 b% G2 F7 u
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。3 n" ~! P0 Q  Q6 J

3 c* B; \9 V! V, T8 Y4 {+ p$ M$ l& L" f2 ?9 N# D
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。: c) R0 T. d# b+ U; N) ]

' g4 q5 }1 r3 ]2 S2 \
1 l& B* _; ^6 b) y$ y; S2 DModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
7 ~( S( K1 X' {6 `/ K8 {& C, J4 m

2 D+ l: o& a* D4 t0 i官网: https://www.modsecurity.org/
$ c6 T" x$ u5 y; W+ C2 z! D6 i% o4 ~# e3 O2 N) \9 V% p6 D' E$ x

6 ]' e' I( @3 q; K什么是OWASP CRS9 J  l4 {6 P  q3 x& U
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
. C: t! r5 a8 I
) Z" B# y" b" e" M) O' e# v5 O6 [6 t9 C
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。9 E# u! n( h9 V1 }2 j; y

" s) k& @2 q) [# _5 a8 ]$ A8 D% [
$ l* E0 \% r3 Y/ O1 mHTTP Protection(HTTP防御)9 }) G9 d/ m1 G6 O
HTTP协议和本地定义使用的detectsviolations策略。
% o7 x' @% Z! U+ v; X: b9 U6 i3 \$ ]  u; k# c

$ K' f: N: D7 T1 ]; e; d" q( zReal-time Blacklist Lookups(实时黑名单查询). B+ e/ e& |+ Z
利用第三方IP名单。4 i0 v! N+ D! P% }- `5 p6 M1 t
( S) l& X' b5 a$ x) w3 n) c

  }7 |3 o3 x2 d2 i6 HHTTP Denial of Service Protections(HTTP的拒绝服务保护), ^: {9 h0 ~2 N5 e
防御HTTP的洪水攻击和HTTP Dos攻击。
& Y' h% I5 r4 y+ m9 e" s& m4 E4 v5 R
  r; Y8 {/ W2 _- I' ]3 D
Common Web Attacks Protection(常见的Web攻击防护)
0 O  A/ e" ~# k4 Y检测常见的Web应用程序的安全攻击。
' Q6 U; r; e+ K; ~% {) i( C
* X2 |& o5 G5 e* l+ k
) ?2 K+ q) P1 r7 [7 V4 w8 B2 hAutomation Detection(自动化检测)
! s9 R& _% f4 U- g5 O: _6 r1 \检测机器人,爬虫,扫描仪和其他表面恶意活动。  m3 c' ^. T8 \8 Z- \% A4 ]

1 N0 T6 l& M1 h) s
+ a, {8 k# ]( t7 I. h, P. YIntegration with AV Scanning for File Uploads(文件上传防病毒扫描)
( s0 z( b7 ]5 W3 `  I% }3 b& \检测通过Web应用程序上传的恶意文件。
8 V) _/ Z5 s- ]$ X7 A
9 f; j6 |  u6 ]3 o* n9 J
; a+ f0 X- Q: S) Z- L# KTracking Sensitive Data(跟踪敏感数据)5 p9 z, Y# O: S, B% ?
信用卡通道的使用,并阻止泄漏。) W% m! m& ~! t8 M$ a- ?: H" a, _
* T* T3 v" ~0 I7 l9 N7 _
& B& _; a3 V& z
Trojan Protection(木马防护)1 z  c7 @/ q4 N- B2 a# Y5 b
检测访问木马。
( l. @" }% b- q% p. ^. h
% R" M, ~3 L+ S+ b' F* I) V% C; }# L6 Y+ |! v+ S
Identification of Application Defects(应用程序缺陷的鉴定)
' e+ e3 e* ?/ E6 L检测应用程序的错误配置警报。
/ d  \  u0 e0 t' N5 w# J; }
1 |' z; n* Q( }+ u
4 _. v& M% @* A4 o  D& f- s! o% ]Error Detection and Hiding(错误检测和隐藏)& i3 ~& j4 q8 k( v" v7 }
检测伪装服务器发送错误消息。" `6 A( U9 Q! V$ }$ Y

. _% ^, Q; d9 g& @) A+ K. k
% Z( K- q( X& U! K9 I# Y安装ModSecurity6 X& v3 F, w9 q, P5 r% B
软件基础环境准备
4 I) C2 |1 P+ B9 W下载对应软件包
8 C+ x5 e  r/ W5 x) ^# X& B$ cd /root3 B" f$ {, _, k
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'- J9 q6 A1 i% l  m0 N% y" j3 @0 I
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz
$ U' X! a! g7 r  f* u* U+ w安装Nginx和ModSecurity依赖包" ^, z1 B! d+ {" z
Centos/RHEL# @+ D. ?# F/ o1 O
$ ]' V0 V# p- U  f  T  o/ W

( \" o0 y% A& T! J6 O/ h- g+ J" P$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel1 R7 }$ F: S" d
Ubuntu/Debian( t3 _8 B% l' a0 c1 }
& C- G' m3 J2 V- c
4 Q, j7 i1 w+ ?1 y5 _( l& 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
+ p* v/ |  x7 A; v1 |. r编译安装ModSecurity/ o6 e$ C4 ]. q" G
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
- i# ]3 H- W1 n+ b5 v" T
3 A" c: H6 I: ~/ ?
. B6 G. n) r3 P! [方法一:编译为Nginx静态模块6 T) ]6 X  _  o! u. I1 w4 x

2 N( v4 z; X* B2 n5 p
' F" J" e$ m9 @1 b. A编译为独立模块(modsecurity-2.9.1)
% K% S* M& L1 b4 N9 U9 O$ tar xzvf modsecurity-2.9.1.tar.gz
0 L5 t2 _9 |7 ?& c$ cd modsecurity-2.9.1/9 Z5 n. J+ B9 E/ j0 k1 X4 s- T* y2 E
$ ./autogen.sh
! W  p- L: J$ H# W3 R7 }0 ?$ ./configure --enable-standalone-module --disable-mlogc) m* m; G7 e; p6 I8 e
$ make) C4 O- j7 k+ I& M1 p0 I( V9 E
编译安装Nginx并添加ModSecurity模块
: U5 w/ h1 M% S# [9 e3 B# S# i$ tar xzvf nginx-1.9.2.tar.gz" k" u  E1 f6 F% K) b$ e
$ cd nginx-1.9.27 p0 m* a# P2 S( m2 A1 b
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/* D5 ~- e4 o+ H+ u
$ make && make install
4 p5 g# V: Y# X: O" R5 U$ r方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
/ o8 W/ x+ i9 Q* y' @% V* p4 N
8 ^6 m3 p% E0 d/ ^; ]
- Z! w, A: w+ b9 F3 S* O编译LibModSecurity(modsecurity-3.0), g8 [( b$ T3 D4 z
$ cd /root
, `0 X3 i# X1 b& X$ {" m7 G$ git clone https://github.com/SpiderLabs/ModSecurity
+ g, @: z# B) M+ ^$ cd ModSecurity
" X5 H( |2 T. h: p2 J( _$ git checkout -b v3/master origin/v3/master
, O& v& }; p8 {/ Z0 k0 y$ sh build.sh
; {$ K9 m- C3 m& O$ git submodule init
( u9 T7 Q4 c" U$ Y1 n" t$ Q" c$ git submodule update" S6 x+ m" E" `% Q
$ ./configure
4 C# p( Q7 ^" o& F$ make
* j8 I6 @/ h3 q5 n, ~$ make install" \0 Y  }. w# Z3 }; D" e& B
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。( w4 Q0 \6 p7 r/ v
0 G- W3 g0 g* y2 q. N, }- S% I
/ l5 a1 z- w3 P: P% Z% T
$ ls /usr/local/modsecurity/lib4 b5 ~% d3 z9 O0 }, K% @
libmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.08 Q; e" c5 f) u- p) i1 A
编译安装Nginx并添加ModSecurity-Nginx Connector模块5 W3 E3 H+ v0 [& c
使用ModSecurity-Nginx模块来连接LibModSecurity" M0 g+ T% D  n

6 p. D0 n, P- I) M, C; g7 x+ R. P/ U* g7 y3 ]4 x
$ cd /root( t- t+ p6 ~$ h  ^6 \3 i8 i# a0 b
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx; d" t# D+ y- i0 g( k2 R
$ tar xzvf nginx-1.9.2.tar.gz
) Z, x: q; u8 d$ cd nginx-1.9.2
4 O$ ]- C0 U6 Y1 c, `$ ./configure --add-module=/root/modsecurity-nginx
+ {7 {  q* D- |5 v+ p( G$ make, j9 g' d3 `3 A: {
$ make && make install6 S- s: H/ y- J' C: K9 w0 O
添加OWASP规则
- P, l4 E9 Z4 L( z' ?' J+ mModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
$ }" [4 X- ]& A( I, X2 Q6 J+ {+ x1 `8 x/ X, w: t  v

, [5 y- U9 I0 K7 z下载OWASP规则并生成配置文件
, u# B6 S# `  L2 s/ j& w9 h0 z$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git- ?6 U  W- P7 J2 K* M1 [* l
$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/
1 J% Z; ^6 w: W' }% z8 B$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
" C6 Q5 s* w/ }' m8 X$ ]$ cp crs-setup.conf.example  crs-setup.conf
+ n8 E  B7 E+ Y8 N$ l1 R" z配置OWASP规则' P2 t# P8 l, w! U. b3 F
编辑crs-setup.conf文件
. ^  w! B$ c6 i8 {
5 H1 K% y3 L& v3 t% u. K
3 h, ?! `7 @: u/ \* z0 h$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
# r" T: u: o( ?( A: P$ ]$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
% p/ n5 k4 S; D9 }; l4 k1 m0 @$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf- F/ r$ @0 |/ t/ ?0 h7 R6 v
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
! t: O  N. T* h默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
: _: p: e3 k* x5 V2 t. J, I
8 ]) G* J. L" c$ ]1 {9 C4 A7 V% |* x3 [5 e4 {
启用ModSecurity模块和CRS规则" l2 ^0 Z# x7 a/ Z- h( Q. n. S. L
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
4 b& |3 s: _4 n" P9 U2 e* Z7 l. E, d; C3 i0 ^
9 A5 X5 k: h, o' c9 ^, X0 j  I
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。6 [! d5 _+ A, s* C+ @3 w/ D' J

6 o  S) V, u" G
+ v+ \& T, A; n2 u0 L$ cd /root/modsecurity-2.9.1/9 D( T2 A( j! H' ^. Z
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  
5 b  b) G9 I1 H& b% w0 v$ cp unicode.mapping  /usr/local/nginx/conf/. [  J" g; {8 }8 {6 D# w
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。* l( w: [0 b. @' K& Y& M- N, @
: j4 o% u, t* H4 o/ c8 ^( w7 n

% s- D4 z- U/ Y6 Q" W$ vim /usr/local/nginx/conf/modsecurity.conf
5 C" b  L; @; ~SecRuleEngine On
, A# e9 X0 c- @& E# h. W* bModSecurity中几个常用配置说明:
7 K. ]) I! i. a, L% E) h# [. @  ]; {' I2 }4 |! z( r+ S, Q& _
7 ^/ N' _( w! `
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
1 t3 B' H$ f& F, f- S4 t3 d: ?+ V4 X& j: |, n0 F

1 ], P* `' b1 l! B4 e2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
0 R" s8 a  n3 k" i) N/ g; ^, S' q$ ?6 K: C8 ]7 V: ~

. ]: R+ _9 x) j8 A7 r* n5 V3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。" l( T& J9 R- B+ a
3 ]3 K/ ~. z+ k  T! k. ^9 g8 l! T

5 g, A1 [) O5 w3 f$ G4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。& N2 Z, y' X3 C. }2 e. ?
( o* y, p2 Q8 C) ?  X  I5 v8 k0 ]

3 C1 G* }$ H3 r5 f, R. n/ l' l在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
, B9 b! O- S0 l+ Z& j& V" L0 i. y
. n4 O# ~5 U5 d6 _/ }4 I- s3 g; g
3.x版本CRS# [1 E; q0 m& g- q3 s5 G
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs+ m* C0 ^4 ]  h0 ~& i
# 生成例外排除请求的配置文件
; m$ M6 N+ _  \( r$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
. Z7 y! f& n: V! U7 \$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
1 t+ D4 X, `; w' f7 |$ cp rules/*.data /usr/local/nginx/conf
% G3 e2 g) Y" @1 |/ r7 X4 ?4 _& X$ h为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
7 v. K3 g) v2 z2 z8 m/ v( o2 R6 `- d( u& C' [

9 a: @  L) S7 [2 D$ vim /usr/local/nginx/conf/modsec_includes.conf" M4 c, q- G) S
! i" l' `1 V7 x) g! _3 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
7 g: |1 T  O$ k2 Z0 N. N8 U

# Z8 `% D2 Z9 U* v1 [, W注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
3 }( N  c2 Z; J! K$ A5 T% b9 O
. T& s6 l7 G! e+ l
5 O* u2 x* N3 v7 |配置Nginx支持Modsecurity
& ^7 @0 u0 n: K$ a& c% G. m启用Modsecurity
: z& {# F! y& f' ~. ]; |4 q使用静态模块加载的配置方法: c! Z. A: S6 ?0 I5 x
在需要启用Modsecurity的主机的location下面加入下面两行即可:
1 G* r2 D/ {6 W* z- T, ~: A1 V( u3 |

3 V+ P7 m! J# F' E% ?+ @ModSecurityEnabled on;
1 _9 G$ s1 b( s2 K$ C' n0 Z/ \ModSecurityConfig modsec_includes.conf;
- v$ x' I, n: [* s0 E修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。+ M# u1 W  Y/ n4 K& X* R7 V
9 b  d4 B/ M* n  M9 M7 W

0 [- @9 z# C1 _0 D2 z$ vim /usr/local/nginx/conf/nginx.conf
2 T$ ^( ~* A9 ?) g5 J! O+ b8 x5 U& d% P: }4 E% N: M. y/ e4 n, s9 ]

, C7 p( o# e- @+ ~9 O* b6 Rserver {
( h" ^* K* A" S* D9 t  listen       80;
+ `: e) G6 V) _5 r+ y" s  server_name  example.com;
) w/ f3 s7 x/ L* t4 R5 M$ q3 U* ]  j" E' ]# R
3 s+ |! D9 F( z8 k$ [( f! M( ]
  location / {+ _: {# X3 y" C& f3 R3 q) V, g
    ModSecurityEnabled on;
' X/ T( s- h  o    ModSecurityConfig modsec_includes.conf;) Q) w" G+ L) w. p: U, n% X
    root   html;5 t, p% P) t; n6 Q
    index  index.html index.htm;
3 D3 i8 g9 x. K6 [% n( L+ a  }
& r/ l1 \7 v. N# [& o}- ~& G# Y: ^' U: Y
使用动态模块加载的配置方法% S% H3 `' g; r( w2 H! }2 c
在需要启用Modsecurity的主机的location下面加入下面两行即可:7 l, \1 l5 Q# q% t8 x: P( {4 r
7 h4 h  S# c& w2 I/ V3 P

: {+ P/ r- s0 @% D& }" Xmodsecurity on;
  }* K6 @1 S7 B4 b8 W3 `modsecurity_rules_file modsec_includes.conf;% B7 P% W3 m& T+ d; j
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。3 \! {: M  a( K* N" z4 X
1 {6 K, ]  K# G0 N- Z+ e

# ?1 K6 w3 r8 Z; F, B1 Y  S# `. L$ vim /usr/local/nginx/conf/nginx.conf
$ p; u- S, `9 @
" J9 y7 X5 K; @7 D
) k( G2 f& d5 O$ K4 qserver {
% n0 a6 p: e$ N, U  listen  80;
2 T( d" t6 a4 b* [6 L" e; b% `  server_name localhost mike.hi-linux.com;
; F: y4 ]5 N5 h* G: |! @  access_log /var/log/nginx/yourdomain.log;
# x) R/ E9 T, l, L+ P& }1 a5 Z' D% e: e( D" p
+ j8 v. O0 I5 w# ]; V
  location / {
) a. Z9 e( C1 Y! ]
% m8 y  y# e  C) D
8 Y+ A# n! [- ?: X" r  \  modsecurity on;, v' v0 y" U# y6 K2 q, @
  modsecurity_rules_file modsec_includes.conf;6 k: A0 r' |  b& H3 l$ N
  root   html;* b0 Y4 N9 v) I0 n
  index  index.html index.htm;
! ]! z  ?0 t- |, G$ q2 O}, d& G( k- s. l# u
}& }3 O6 e3 n2 _& D3 a/ r0 ~
验证Nginx配置文件* ^9 w& X3 ^9 f
$ /usr/local/nginx/sbin/nginx -t
/ Z5 P$ j% `' j* x$ y" L' @nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok1 z) i. [2 M6 s) e  g% l0 T
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
  r1 O- k% b+ T: O5 P启动Nginx3 b' \5 a0 R2 D1 B) f7 W1 n
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
. i, z# g% ~, G! _. q7 s' d1 l  M. ]( ?1 W7 G2 l6 j* S

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

* k) P' q+ j* L

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-3-5 23:17 , Processed in 0.065417 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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