找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11850|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
( B* E+ S- W% E+ \) ~
# V/ Q+ K, c8 @$ E" p# d( Q- _0 E8 c: _
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
9 L$ |. D8 j+ w. ~, N% d9 n1 U
9 B' F* c' A% w' G) f& O, }  r+ L% [4 v, C
什么是ModSecurity0 W' n0 D  B$ g0 ^; q
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
3 m0 ]7 V; Y( D) f/ |
( l  j: k; p& J8 ^7 l, n* E) k0 @+ A6 M& h. f( W, Z  X' [7 r
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
! a7 E& }! \9 v: ?
3 S1 x# x2 B: [% M, i+ {1 Z# W
3 j, g; ~/ o5 M0 XModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。8 r0 j, D2 X; F! ?$ {' q: X8 I& Q- k

$ ?: f" P7 n, _; _: [8 s. ]- c0 z0 m' ^3 V6 i2 @4 L
官网: https://www.modsecurity.org/
( P  d/ i( c% U' u5 V- @9 M5 G" f7 G* p: _! G# }* S; H
, |$ j7 B2 c* M/ C% K
什么是OWASP CRS7 p* E+ t5 f( ~; \
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
! L8 I2 q, U8 h* O  W, _- x/ h2 L, g! ^* T* Q
+ n* B$ l  q6 y& @+ A  @
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
9 p/ e3 D( Z: J/ ?& v& ^4 d$ C6 D" O* F- t
" O. O# S0 d' p8 c8 O$ f" m. P% k* C% M
HTTP Protection(HTTP防御): X' d. M+ I+ [* K8 ?! Q
HTTP协议和本地定义使用的detectsviolations策略。
) x7 X2 T" I6 X8 e) c3 O. ~; d! a& Z$ e  h
  ]8 r5 R  s& x( H. n$ b7 ^! v1 W
Real-time Blacklist Lookups(实时黑名单查询)
) n: r, m) s; |% U/ ^  F5 o9 [利用第三方IP名单。
9 ?2 ?6 b( g$ S/ ?: Y
, v, h6 R' b- E: p. x) N* ]: @; B* [$ }
HTTP Denial of Service Protections(HTTP的拒绝服务保护)
3 L; t' x, K5 o( C8 O防御HTTP的洪水攻击和HTTP Dos攻击。! n9 l9 O# j* A" P

4 \" Y+ H; c# V% Z/ _+ S! T+ h- ^* T; ^3 C  x
Common Web Attacks Protection(常见的Web攻击防护)
' b- w- ?% h7 U% k检测常见的Web应用程序的安全攻击。
# L/ [+ z6 |, Q5 S- Y* y
, U; g# h6 O6 Z, ~8 B$ V- }# c7 i
& Z1 ~  G( {% D& d5 HAutomation Detection(自动化检测)6 h$ r! L! Z( A& b
检测机器人,爬虫,扫描仪和其他表面恶意活动。' c& ?* T: ?) U, X8 m
' r4 U6 g5 I9 \2 L9 P9 m$ e

% Q- d7 q. Q* N. yIntegration with AV Scanning for File Uploads(文件上传防病毒扫描)4 s% y6 H- O0 h
检测通过Web应用程序上传的恶意文件。
. k; ~- ^: Q1 |% y7 ?, L
/ B  Q- @; ^% Q% p1 d# c3 w
+ I5 N" a* k, w5 BTracking Sensitive Data(跟踪敏感数据)
! Z4 l: {7 F; D信用卡通道的使用,并阻止泄漏。
8 Q& f5 i  r8 Y
* g4 F  H/ S5 W0 \
0 Q0 E9 O7 H' e, u$ y5 w* TTrojan Protection(木马防护)
) G) o) U5 b7 `/ p( m检测访问木马。8 h  A; q0 s) V9 a( e/ B

8 J# u( E) \7 a! A4 I$ G/ V2 F3 G3 w  j, }5 Q, ?8 x5 K
Identification of Application Defects(应用程序缺陷的鉴定)
( _5 V& S9 ]. @' V$ X检测应用程序的错误配置警报。9 y% H6 e( x2 y3 A

1 d, P7 v$ [( ^6 w4 m, u& ~- n; ?, ]7 X- y( d9 l. S5 J1 t- b3 ]: H- g0 T
Error Detection and Hiding(错误检测和隐藏)5 f2 _# A+ r- @: @' }& e( T
检测伪装服务器发送错误消息。! j; Y8 K" A* U6 C/ k+ @* i6 V
- o7 G! `: ^& j; H% G. f
6 v  |) `6 U9 i/ g1 t) a
安装ModSecurity
1 ?+ [( x1 Z) T! V- a! h0 ], a软件基础环境准备( K2 e7 F3 Q7 r" s* O
下载对应软件包7 m3 `) {5 U9 d0 }7 W5 c
$ cd /root3 @$ {, u& Q1 U$ h9 l) o5 ]  G
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz', h5 i8 d5 |, j2 M: a" w: d
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz/ d7 L- `% U  N
安装Nginx和ModSecurity依赖包
) r' k' O" z  r% XCentos/RHEL
( q' Q) q% X- r  r# o" m# i2 Q# |2 |/ L! t' j! c( z% ^+ S' ?

/ N7 H: Z) w1 e; z) y- M; N' q- c$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
2 g' _1 K5 J2 i6 T7 t7 ?Ubuntu/Debian5 Y- h4 V- ?8 m# }7 p! l3 Y9 v! e
, o1 {  |/ |7 y# w
* e2 e+ T/ e3 D% ^
$ 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/ y7 t+ O- N% @" o8 S+ o1 J
编译安装ModSecurity, H; `' W4 s/ y( p  `
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
5 b- v3 ]! M7 l' r6 o! r/ k2 r* R0 f5 w' b' T6 ?

# m" _& m7 a2 P7 \, j( S方法一:编译为Nginx静态模块
* c% j- N1 A' c6 M$ M' W- ^) ?( A% o  @8 M/ {* f
$ e1 p- V; a3 }2 n# q; O! D
编译为独立模块(modsecurity-2.9.1)* g8 [; B1 ~1 T3 N+ p
$ tar xzvf modsecurity-2.9.1.tar.gz  V* m% H: q3 j4 l4 G6 ^/ L; s" j2 ^0 \
$ cd modsecurity-2.9.1/; m! q7 P. I' z$ M7 o
$ ./autogen.sh
/ R9 v4 p% d" m$ ./configure --enable-standalone-module --disable-mlogc
4 `, q5 I8 L+ d8 ]* a' I& M7 Z$ make
% P3 n( P4 o- b, T编译安装Nginx并添加ModSecurity模块
  D" l: L; p. J; G$ tar xzvf nginx-1.9.2.tar.gz$ A3 _1 S% [$ ~3 y8 |# e: u$ ]
$ cd nginx-1.9.2
3 ^9 h- q" t7 d3 `" u. \$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/5 n& k# _! D2 x' u( T
$ make && make install
6 a% `5 R% I& R2 H! a方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
/ x9 b. O  [3 s; J: \4 g, ~1 p$ g* j! J' e) k$ Z/ g+ C# @; d5 t
& ~7 I- J* M; c, \; G* l
编译LibModSecurity(modsecurity-3.0)
- }4 }8 T* Q) T7 ]$ cd /root
2 O, _1 a8 s+ E( I- W' o0 @* P, R$ git clone https://github.com/SpiderLabs/ModSecurity& s. z9 d; u" m  V
$ cd ModSecurity
/ i4 }/ \3 }) F, p8 Q$ git checkout -b v3/master origin/v3/master
) W% p* P* ~1 q) X! X2 w$ sh build.sh
. s! F  O: n! A" v$ \$ |, t: B$ git submodule init
4 t$ U1 x  q8 V. [. S/ y8 k$ git submodule update7 `* k/ A5 w: ~
$ ./configure
. C) h0 Y' f7 L0 Y% k! d$ make
* Q" A  D' w3 S9 a4 c$ make install0 A4 O) n2 g% E" J. k- h
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。/ I) Q. ~% [) u/ [+ b/ I. v  Q
! R% @% U. H; \2 e0 \1 m) X1 E

0 m: L' R  Y# U$ ls /usr/local/modsecurity/lib
/ [/ Q. S! Q) {6 W+ _! M- mlibmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.06 A" H% U( p  X8 ?; h7 g4 Q+ ]3 T
编译安装Nginx并添加ModSecurity-Nginx Connector模块1 q( d  F. Z: P" n
使用ModSecurity-Nginx模块来连接LibModSecurity
% f' Y* u# W# V4 H- {$ u! y2 _) ^& t5 V' T* k3 c

: |3 {: y6 X4 D( y- @$ cd /root1 y1 n7 _" @3 _7 p' P1 h- ?
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
( p" ~  R" M9 l& P  ^$ tar xzvf nginx-1.9.2.tar.gz
" z, _1 C5 u+ ]" K( B- i; |! g$ cd nginx-1.9.2* a, y) z+ _  R! F
$ ./configure --add-module=/root/modsecurity-nginx
7 {4 B" {8 \/ _6 e$ m' l$ make
7 D6 B0 j, T/ f, K; J% a2 I$ v) F$ make && make install3 F8 q; d) e% F: E% e  t3 A
添加OWASP规则: M; c" }9 v% K8 w2 \
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
' A/ k9 h* x9 O* _9 v4 u: y
4 ^. z0 B, |1 f4 G  F8 p$ [  \7 m' V
下载OWASP规则并生成配置文件# V# E  z; i/ m; S7 ?3 h6 @/ t7 c0 M8 t
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
( a; u& F' |/ s" J8 w0 t) n$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/
* h, L' |: t1 z3 c+ w$ cd /usr/local/nginx/conf/owasp-modsecurity-crs# @% y3 u7 D; `2 h
$ cp crs-setup.conf.example  crs-setup.conf
4 c& u$ Y0 }, m5 p& e4 T) j( n* j配置OWASP规则
" L" w  N" i- I8 ]6 D8 y编辑crs-setup.conf文件
, R3 i5 q- G$ G4 h) I% X+ q6 n& q. a! P) e: r8 p: N
5 U7 |2 I0 l( {
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf7 D, N9 r# a; W1 u
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf+ }" K0 [  G0 l, l* T
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf! ^4 _- b& t5 `; d) r
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf! _* P) E  c; @( H! ]/ N
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
9 D9 k: ~. W9 Y$ O0 u$ P% C1 j+ y# X  P) H* y
" W$ Y8 B5 s& M0 u- k
启用ModSecurity模块和CRS规则
/ H; S$ u, J" ^3 r复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
+ G3 Y$ P4 {' e8 A) I8 w9 t
( _6 H" c8 G& Z0 m  n0 {& S- X7 l+ j0 [/ F8 c
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
1 V. m; f6 C3 T
3 `# m0 a' p- c6 L4 w6 `* T3 k
$ cd /root/modsecurity-2.9.1/
9 T" @0 @  h! ?, |: |7 W$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  - O" B# U9 T6 c2 x# i, W# R
$ cp unicode.mapping  /usr/local/nginx/conf/
2 c$ [! p1 a9 a1 _4 S' J5 ]9 g  L2 ~3 h将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。! A# t8 ^4 M  ?$ y0 y

9 f# \' J1 F0 J2 P3 D- [, n: a3 c8 u- h# k* r/ V/ h% }: K
$ vim /usr/local/nginx/conf/modsecurity.conf- P4 `9 s' b% J
SecRuleEngine On7 f' t1 h( A, V- m$ V* T6 g4 C- f
ModSecurity中几个常用配置说明:$ t5 w6 p$ d. H! r9 G& C. d
$ p9 W3 l/ V: U

8 P- E% N' B, h1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。5 T2 U) c" [4 e" i( v- h
! n, Z8 k0 t- Y: d; J

( ~$ u( \  D: g. v, S$ R2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
2 ~! u# s( |/ ~
+ o) r( V2 K2 o+ d/ t! ^8 i: b/ E# F8 t+ F$ N, h: q
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。2 k- B: C4 U8 G$ k4 y
1 C8 I! G! m" E1 v$ Y3 ?9 ~

/ }, f# }7 w( v6 s4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。# c; C5 ]1 U) ]0 m7 j5 r! F
/ g5 M. r' p0 l% W& b0 v$ T

5 i3 Y$ h+ V% b; s7 M6 g在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
7 z0 {5 B$ [2 r0 z; O3 K* B' P0 X9 |6 ^" j8 j) x

+ M% z) V8 S% z) o- _$ h: a3.x版本CRS
. }" q( Z4 p8 c) l: L$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
) N, m. B- s. \# 生成例外排除请求的配置文件
- D% ~' P6 e- [$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf$ e6 q) C" J$ \& G5 q
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf( `- N& Q- X+ p( o
$ cp rules/*.data /usr/local/nginx/conf+ J% [9 F! A0 x# [2 e& H
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
- N1 F5 H' J+ K/ [; _- g  u) a( `& f1 i
" v' w# ]# e: m6 n
$ vim /usr/local/nginx/conf/modsec_includes.conf7 A" z; r. n: J0 f7 Y# t

! @2 D1 W) S6 N4 Q2 |2 w) v7 Q
[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
3 T7 A' E5 {9 Q+ U2 P/ g

9 D$ Z# z% X* C! L& E2 z注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
; ~0 v9 R) P+ X1 m5 ~6 @& Q
( P  ?/ o2 q$ ?1 @+ d
  I+ @! R6 F0 w& a' Q: e7 r* s4 Y配置Nginx支持Modsecurity  `& f. ~- Q' ?3 ]& N8 y
启用Modsecurity( ~  [4 u6 |/ h
使用静态模块加载的配置方法8 v% T: @4 Y( w6 j( C( _
在需要启用Modsecurity的主机的location下面加入下面两行即可:
' ^/ ^4 {7 y6 P9 y, i1 v7 R; i2 E; i2 k# A; `; u* _9 ]
( y: A; ~- [2 I2 X
ModSecurityEnabled on;
  P+ r4 p% q% J, h, C( V! ^4 mModSecurityConfig modsec_includes.conf;
8 @+ @* [" i. Y7 V0 H" M* G3 J+ o. X修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。7 ?6 {' |( B5 F8 p
/ j$ d4 B+ Q3 r! g# |* ~

1 V# X' w/ o: M1 i5 I! l5 }$ vim /usr/local/nginx/conf/nginx.conf
+ c$ K# u3 X/ z7 k
( y- v2 Y8 i; y  g# N# f
3 A* w6 B, ?( L! t" e8 B' rserver {
8 p: x7 g- _" K6 \1 i5 @" f  listen       80;% e" t8 |$ ^# C- \
  server_name  example.com;, u( S" Y# j# `# L
5 h7 t3 F( b1 F/ z, M& i/ [
3 T5 G2 d# L7 v. o
  location / {8 V2 s6 k8 a3 l
    ModSecurityEnabled on;/ ^8 M0 g, E% `: S- l: j: z; Z
    ModSecurityConfig modsec_includes.conf;" e. s% Q1 r/ S- A( F- `
    root   html;) M) B% c7 \5 g6 h# t( M$ a" I" L
    index  index.html index.htm;0 \# m! ^. ], C: G
  }+ w" D( D8 ^( i2 z
}
8 D8 p* R1 B" ~+ e9 K9 x; [- H& m使用动态模块加载的配置方法
; Q* H8 ]- h8 E0 F在需要启用Modsecurity的主机的location下面加入下面两行即可:! ~0 l! W9 O5 S! Q

: h3 v: q' j5 F5 p# }5 |
* e8 J. [8 \7 G3 W' _2 |2 M5 amodsecurity on;  `- W% K: V+ ~: X
modsecurity_rules_file modsec_includes.conf;
1 x! W" D: Y: }# u) k" C* M修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。  ]0 K' X/ ]8 d

7 A# {. U, k6 V. ^/ F  j/ c' @# E% e3 D+ L7 i
$ vim /usr/local/nginx/conf/nginx.conf
1 B+ w) F, [, K- x* U: p
  m( o/ c+ V8 @( o1 B% J
9 _+ n& O3 Q! \) M/ \' {! Tserver {' g( v. ]% m! y4 S
  listen  80;
7 w, O+ M" X% R- G; q, s  server_name localhost mike.hi-linux.com;
6 B2 W- [; J& {  access_log /var/log/nginx/yourdomain.log;0 A/ E- N& o$ N  V2 N$ A

- z4 l& \9 |( o# L+ H& @" @
2 F! Z* \" B4 O% N  location / {: g. h% D' U% K% Q$ P

1 w" h. L, R8 s6 z
- H& ?) N0 j) k  modsecurity on;
' W- a3 f0 ]3 ^  P, t0 z  modsecurity_rules_file modsec_includes.conf;
% x2 K: W6 E2 F7 ?0 g: i% D' y& m  root   html;
( L, X3 W% P2 G9 X  index  index.html index.htm;
0 q) w+ @) a- F0 q3 `" U! v9 k/ C0 J}
# o! B" I: Y5 _6 S* p* ]}) t- K. v+ u- z. h$ l
验证Nginx配置文件
! F" ?0 x' f; S+ W1 r) S" s2 b$ /usr/local/nginx/sbin/nginx -t+ H; c$ N) `* A6 b& P4 A/ @; z
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
& m: e, W/ N: N" g% wnginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
9 S( I6 x9 _4 l: ^& l) W' b启动Nginx0 O. y& v# @% r6 g/ ?& p& W/ }
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
; b" T: E- W* A0 J+ `' o$ v. O4 A0 M) u9 K! o

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


; s! `- o- [% B' R, b3 N

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-7-21 11:02 , Processed in 0.079740 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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