找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 9575|回复: 0

利用ModSecurity在Nginx上构建WAF

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

6 ^7 ]  L% E( H5 u5 Z0 r/ N8 O. B1 O2 H
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
7 c0 f' I2 k" q6 f: D+ e$ `7 u+ ]/ G

4 D# a$ @: w5 H3 a: y$ E什么是ModSecurity) x# h+ }7 z5 [
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。. c5 y- u! i: o3 F! ?+ ^

' p2 Q) p; n3 J" f- ^, t% h2 R) G' r6 I3 U' F$ q
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
+ _2 O: B6 n" a) t
3 r8 b6 p+ [5 E9 `
. V( ~' n+ y: SModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。; x+ [/ j  S! h5 F6 F' L
/ ^! R- S$ \5 M0 H/ j5 R3 ?% w" L

  E! G0 j3 ?$ m5 }6 p官网: https://www.modsecurity.org/
) S- b, [+ }9 {5 [2 }0 [0 A* o, e/ a  Q/ K1 B% l5 d3 s! J5 b

/ }% `9 J3 u8 U# h! _5 i什么是OWASP CRS
# D& |' j, ?4 ~  R' `0 mOWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
8 z) v; z. t. t: W6 ?
) y- w- q' s7 _) R6 i% e3 H7 ]. H3 R
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
3 }; t5 y9 H* c8 f: p: x5 L9 K- O' \
* N2 c( Z2 q; t  C
HTTP Protection(HTTP防御)3 y3 {' d6 m4 R7 |' B4 }
HTTP协议和本地定义使用的detectsviolations策略。
- E' v' Q5 P+ q1 Z0 `+ G" l' j8 r4 Q# ]! k( n/ z0 b
( L1 C4 b7 f3 {) |
Real-time Blacklist Lookups(实时黑名单查询)$ T! X2 w  B' U- u8 y& m' o% ^
利用第三方IP名单。
+ R. m$ G; o" {. G& \8 b5 F* M; R! ?+ }

+ I1 M9 [8 r! |3 dHTTP Denial of Service Protections(HTTP的拒绝服务保护)
  I, |/ a5 D, R. {( N* L% S防御HTTP的洪水攻击和HTTP Dos攻击。( U1 o- Q  P; P; W! N' e' g" V' r

" K" {* r( Q# n' E$ N
! j* D. z2 ]: I5 ~# h7 yCommon Web Attacks Protection(常见的Web攻击防护)
4 Y% u; @7 w* I, ?4 k% B0 ]( }* D检测常见的Web应用程序的安全攻击。
2 k7 j' P  ?# z% y  Q4 V- M) T) K* J  @$ c& f7 J) `8 r3 p5 d" u

6 u$ u6 ?% v1 q4 B) z, p) fAutomation Detection(自动化检测)& N* e' ~; C8 p+ D, A
检测机器人,爬虫,扫描仪和其他表面恶意活动。
0 N) j  w0 X  g, O+ ?4 d
) T0 t2 i9 H( g  A/ O. U% ?# d7 O/ o
' A4 }% f3 v# U9 e% [3 }& i8 ^Integration with AV Scanning for File Uploads(文件上传防病毒扫描)% `3 D5 o, @/ x5 B5 U$ P+ T/ p* i; H6 x
检测通过Web应用程序上传的恶意文件。
" v, K$ K3 t  f$ @( g
( Y; i& X4 }, D. [+ d( f, j% Q* y; f  H* v  L
Tracking Sensitive Data(跟踪敏感数据)# e' k* `3 {5 k
信用卡通道的使用,并阻止泄漏。' [/ f% b$ o% i7 T. f) t

) w9 [4 H  t- T0 _# D$ O" Q
; \0 S. K3 N* C2 bTrojan Protection(木马防护)
. H% a6 |' F! n- b# R2 w0 g检测访问木马。
, f9 C" Y  H% S) ?, b9 S
- N  n1 C. ^; f5 _+ x7 O+ C6 y) @* ?5 T8 V' d% y5 N& u* o
Identification of Application Defects(应用程序缺陷的鉴定)) w% X# |: F4 n3 Q+ \. S7 }0 B
检测应用程序的错误配置警报。
. W+ [4 q( L# ^, e8 @- N- ]1 w  M( r$ @9 }7 O8 a& [
) P1 \: C3 ~$ y/ P" }3 @2 y
Error Detection and Hiding(错误检测和隐藏)8 I& P& |1 I2 G* \1 q5 [  F' f
检测伪装服务器发送错误消息。
$ F# t1 u/ i- p: \6 V# B6 T: p, b
5 P/ s; g: Q7 o& t! `% m, c; ?! h6 I& W1 ?; l1 W
安装ModSecurity
* `1 O, S2 _  C2 z/ S* n4 D8 A: r/ @软件基础环境准备/ }9 i0 ?7 n- W
下载对应软件包
* }# I5 A2 l* K( E5 p! `$ cd /root
- u% I- I$ s4 G4 g$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
2 ?, ^  B* _* l% o/ M1 v$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz
' `2 T& w7 y7 K! C) s: |安装Nginx和ModSecurity依赖包
7 ?0 V) N7 L, K4 H0 I( L% u: rCentos/RHEL
: ]5 I4 }9 {; v( u  D2 F* J
9 c0 N! B$ F5 d% }+ N& [
8 p9 N, F+ S! @! ^$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel5 C: H, Y. [# [4 t
Ubuntu/Debian
8 s' ]* |( ~# y
+ `, `+ e% b+ ?+ i2 q- N% N+ f/ \5 L- e* j5 H/ Y5 I
$ 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++-dev6 c% q" r: e* x8 q, F/ `) W; S# F
编译安装ModSecurity
: x. J, L: Y8 e& u; p$ ANginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
/ k  I+ e; ]' b% j3 J6 U
8 \0 r+ g5 k, ^
4 k8 N0 N2 V% T/ R方法一:编译为Nginx静态模块
5 \* G8 X) \' w! p9 U! C( U; N, U" r% s' `! p- z2 H: y3 w
5 {- h) N# X- U# L- M
编译为独立模块(modsecurity-2.9.1)
! B  ^( w! I  B4 w; L$ tar xzvf modsecurity-2.9.1.tar.gz
+ i& H, V" a/ m) o/ a  I$ cd modsecurity-2.9.1/& ]+ J4 T* O4 H+ @; J
$ ./autogen.sh
" g. I4 G; @  r9 Z  k8 O! C0 V1 S$ ./configure --enable-standalone-module --disable-mlogc
* O# `, q1 j. X$ make, B5 I1 T9 i: b$ H+ M, L
编译安装Nginx并添加ModSecurity模块7 O1 _! V( V/ a9 k. _1 K
$ tar xzvf nginx-1.9.2.tar.gz
0 \/ B# T/ w4 e0 G) i6 P$ cd nginx-1.9.2) g" w5 y5 L, S0 P9 J
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/; @8 v1 l9 |) N( m& w8 q" `
$ make && make install1 d' T; u$ T5 B/ P* T. y
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
6 F. a! y& I& w+ l) e3 r) N+ @$ n! L4 _) I$ K( b
, N% b6 z& C2 @0 h+ B+ d
编译LibModSecurity(modsecurity-3.0)$ T: U  w) }* ]- l8 z" \$ t
$ cd /root( C: X9 ]# y# ]3 H# H6 y
$ git clone https://github.com/SpiderLabs/ModSecurity
# u) }, t/ w% e  _# A4 C; x2 T! z$ cd ModSecurity( ?2 e; @9 f+ O- X4 A. h; G8 w
$ git checkout -b v3/master origin/v3/master- G1 ^$ T" B8 O% S
$ sh build.sh9 `* \% t) C1 q5 j
$ git submodule init  S6 h" H0 }' Y
$ git submodule update
# k- p6 `: v1 F7 _; O6 q% _& d$ ./configure
/ C6 }% a* k) K$ make8 q2 q2 |& M; x. }2 g  i
$ make install
' W) e( N. ]4 U8 |) bLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
' N+ C: Z* _1 y2 f. L; h! _2 w
5 ]7 b& ^7 U  Z0 T7 w5 e. Q9 V. J! ~( \, i) L) D
$ ls /usr/local/modsecurity/lib
0 r) ^1 W6 V3 s" v# \0 k8 B. y, Dlibmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.0
" G& S4 E2 `. S5 V编译安装Nginx并添加ModSecurity-Nginx Connector模块
: |1 K9 ?( c& Q& ]( _( b使用ModSecurity-Nginx模块来连接LibModSecurity3 p4 `% `6 y9 k( o
- h3 I. B! h5 ]# e* E) Z" P
3 J, G! z; }4 t& {0 f( L
$ cd /root
6 [, q' r- H3 R* A# _0 s3 p) a; l$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
( R1 S* p6 R# \* y$ tar xzvf nginx-1.9.2.tar.gz
0 _3 Y( H: G& `) y' S7 C$ cd nginx-1.9.28 ~; b* {: T: q6 n$ {' v5 N
$ ./configure --add-module=/root/modsecurity-nginx0 R% R$ O2 L6 P5 R+ D
$ make  n5 @! q& |% T  T
$ make && make install7 E* m/ i* }  `& Y5 v2 P
添加OWASP规则
; k3 K1 q2 N- h: F, c8 kModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
) |5 j& N1 m) |0 T# j" N  _5 t7 V& G8 W( M% N- J/ G
! z" U9 ^) Y5 i* R! W8 Q! C
下载OWASP规则并生成配置文件8 l! W% @# j+ V7 p6 p& M
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git( z2 e6 Y. }1 I+ g( Z; q& ]
$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/
1 n4 r6 ^6 D0 b* f( b" T# \$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
; i" p! _: q, H) E8 q$ ?$ cp crs-setup.conf.example  crs-setup.conf0 J# m  \1 n3 O5 _; C; B$ S9 i  C
配置OWASP规则+ @, K( w/ \3 d  ^8 g* a8 @
编辑crs-setup.conf文件) _* u4 M5 Z) b4 [# \
: C% C- Y( G8 `% i! W
, L$ r- u4 l; a/ w; F/ r% b
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
' L9 f4 w# ~% u/ |$ r* H4 @# l$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
& y* n0 e# W' }  s4 T6 J$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf9 C9 ^+ A( F. ~* q, R  m6 r1 p8 j8 J
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf/ j9 @! [" l2 \& P& K
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。" O9 z3 K8 W" g" Y8 o% s3 z

4 s" S! |% D) u/ h: Y8 b, n/ N4 I1 {- P
启用ModSecurity模块和CRS规则
, `" Y- ?) O# k复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。* m& m) C1 F# n. h& h/ X8 o  r! w

. V7 O! r+ _$ V2 C
/ _/ G8 R  r* J. }5 G& U5 N0 Z% }modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
4 _; \& n. c4 l# |' C1 n+ P
' ^* ~; d8 W- z1 X! g# S% P% l( O7 D" j
$ cd /root/modsecurity-2.9.1/) S. J: T( ]6 D
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  
* H& o+ w$ }; M  d$ cp unicode.mapping  /usr/local/nginx/conf/
! m7 I4 @. f+ n将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
( n. O9 E; l1 J8 O" K* p5 j6 m
8 }) u  N  Z2 k8 C0 J. X0 ?
$ w! o6 v* W, R0 R1 b$ vim /usr/local/nginx/conf/modsecurity.conf9 s8 g1 \' N* v/ w$ ]/ |
SecRuleEngine On8 T9 l0 X$ C, Q
ModSecurity中几个常用配置说明:
/ q2 f) {4 V& n+ a+ g: {( v& U0 `7 N2 ]3 \, c) o

/ y* l( X, e- x$ z$ X1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
- S3 w8 Z# J1 A! `" Y, K
1 V4 M4 O% ~( P; W
' d; d: B* K- z0 E' A2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
, F; z; `5 I) h/ \7 J$ o; u2 ~. }0 R5 m# x
6 L# _! O9 r$ m; D5 f! Y. R/ R, b1 a/ ?( ~! X# s8 h
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。3 X; U) v2 m3 w

! N' V. Q2 j5 ]. i/ a% L2 f- G1 f8 j3 l) K( J: c- P
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。" ~& ?( t* m/ U4 p' `+ \( @1 k1 z
0 n" l! Z. H7 l: }
+ S; \/ [3 S) J) \/ e& R0 e7 i; N
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
2 {) N7 A7 l) h. c* l" L5 _
/ ]+ I( [, e$ N2 Z; W+ w0 x2 w; Q7 N' _
3.x版本CRS# X% d% t1 m4 N; g
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs# P& ^2 M% v. b; N& k& l
# 生成例外排除请求的配置文件  n: ~4 I+ n  f# ?/ V- a
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf( y0 C/ [3 e! e! b/ h
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
0 D! ?: q' z6 G3 g: P) ]$ R$ cp rules/*.data /usr/local/nginx/conf$ y, [) r) J- G  n& z
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
: k- H# u' z; f! D$ F: g& X7 t: U0 q8 Q0 Z( W0 ~& v, |- H

' o3 i1 u2 c, r" p1 p$ vim /usr/local/nginx/conf/modsec_includes.conf# O# U# y+ b! _! P, Z" C

& \0 _. h, M- e3 e' t# n# k% y
[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
# p1 f# E2 c9 q/ L" X

" g1 W  o7 W# `8 H5 ]1 u' u注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。7 R8 e! i0 R! ?$ o" B3 f

, k% e1 p4 l. o6 k. \: e
. N4 {, K/ c. p! l配置Nginx支持Modsecurity# ?  r9 v4 R4 Z  b
启用Modsecurity. p. W6 N  g; j% D
使用静态模块加载的配置方法
$ G) I9 X6 h( g' v$ M( M$ U! k; ~# V在需要启用Modsecurity的主机的location下面加入下面两行即可:( c! v# ^( C/ g5 b- w8 Z
) j; o* B; [! D7 Y1 k/ M

. w: m; S. }  q8 u& {% @ModSecurityEnabled on;. R- x3 n! P" A* L7 s; r: m* T6 c
ModSecurityConfig modsec_includes.conf;
2 m4 W: r2 J% K( p3 }9 J* N修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。5 Z% V8 S8 O' W6 w8 F" d) K

$ F. u1 V- O" Q  P0 U! I  \$ `
$ vim /usr/local/nginx/conf/nginx.conf
+ D# c6 Z; |3 d9 R7 h
, W8 H: _% `% G2 C8 [2 V! p& E
3 A+ W# W) `/ P8 s( h, R2 Hserver {
- j$ u, ^0 z1 {( t: N  listen       80;
; n' A* d2 f' Q  L  server_name  example.com;5 F5 E5 |9 s2 G; J3 J4 y* t" H6 u

; C5 E' j# t' S0 U( c, c0 _3 u7 ~! v3 J3 I: M4 S! v
  location / {
! f; {$ ^6 Y8 l* k- `! k, N    ModSecurityEnabled on;' O/ ]1 B: u& ^" j+ A, ?- C
    ModSecurityConfig modsec_includes.conf;
) n0 c, l, b, c4 c: l+ S0 `. q    root   html;1 I& {" a" m- [
    index  index.html index.htm;  E8 ?' ^# t6 Y; f! q$ d
  }  H# M+ x0 {- n1 i' ~
}+ o: x, d9 W% C
使用动态模块加载的配置方法
+ U  |- e6 d( i  n在需要启用Modsecurity的主机的location下面加入下面两行即可:1 N1 ~& O; W6 O* w5 K, J

/ k, t; k- `# t, N
; A; A8 \: d, o* \, N4 }6 s7 nmodsecurity on;: @. S1 G( r! ~7 Y1 Q8 ~% a
modsecurity_rules_file modsec_includes.conf;
' o* E- u) N: R2 j) `/ Y3 o修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
$ z- B# n0 U' {" S2 N- M; ~9 p7 b1 o: n/ t* z! K
; z1 L1 Q! r* V; S" m& W9 ^
$ vim /usr/local/nginx/conf/nginx.conf, b; s9 c0 J$ V8 H
& p: z& Q1 @) E

( U# F  E( Q4 i. z( A6 sserver {
& J$ G. X& D3 M+ L. V  listen  80;4 e  ]) v6 F7 c, {+ g
  server_name localhost mike.hi-linux.com;2 l. D1 u+ n3 j. t0 v( Y
  access_log /var/log/nginx/yourdomain.log;
  o& S' h1 t# Y; }! Z2 d
; n9 f2 {3 b6 y4 l
5 ^  {$ G6 s, a$ f2 w  location / {
1 l2 F. J" f- z) u
. I3 X; |' y7 }- R1 ]# ^. m: A: @) @3 ~- v$ q* ]. G4 [/ x9 U
  modsecurity on;
7 q, L2 Z, n# n' \& U' S. f' S  modsecurity_rules_file modsec_includes.conf;( I, H' i7 H; E
  root   html;8 k1 j# y$ U) ^- t3 I
  index  index.html index.htm;
5 F) Q2 [7 K( w2 U& f* u}# j3 L! [4 B. d" f7 Z9 h
}
6 y0 @8 A) d& h& x! K" p8 u: }4 i* Q; E验证Nginx配置文件
1 K! S+ Y" u8 I  y" C9 w3 I3 a" E$ /usr/local/nginx/sbin/nginx -t
; I" F  k/ I7 ]: \nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok9 t7 k+ p( P5 ]  w; ?7 g$ j! S, ?
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
) p  H8 D/ z& j启动Nginx* Z9 m/ Y- K$ O0 u
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf0 ?6 a+ k! l& p3 D- B

: ~6 b4 J4 e0 O( I9 B, t4 B

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


" d% S0 n: r, M5 a

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2025-11-22 00:54 , Processed in 0.077939 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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