找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 10004|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
  A( j0 k; Z4 P/ l. s- _3 `+ E2 m* R7 E# a4 w
4 M6 `- O, z# O. ]: R; m* ?
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。' [4 s& m, t" j. ]* m

9 |0 U+ F5 K5 K6 {& h0 H
: W. S) E/ V6 ?什么是ModSecurity
' f. i% {9 ^& M9 O! e; p' gModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
$ p2 [* U5 [; o8 F8 W( ?, y. U+ q9 B4 B/ h. A) G0 [/ l
% N6 Y4 M+ }& y( B! c1 a/ a) a
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
. L; M9 X. d# z9 W- f: p; B% m0 G0 Y6 e; \& ~8 ^
. a+ _1 x) U/ E0 c3 x+ g
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。/ M* ?: [0 x. x7 T" Q

% q' L/ J+ q0 |& o3 e
6 V+ t5 k# w2 i- E/ ^官网: https://www.modsecurity.org/
: y2 P4 i2 ]. b' I+ ^$ Q0 B, b3 D3 e! O: d% e$ y) q
4 S2 H1 f+ _# k0 H  i+ f7 m
什么是OWASP CRS
) h! s+ d* s$ P" L( J" ^* Z  q# p8 e4 vOWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。/ h* o" G  O" ^3 A+ K  f9 j
1 ]( s; Z- s9 d  ~, J) o
1 I  n( k% F; T
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
8 [/ o! N0 K, T4 a; y* R; L: N& T* l$ W9 e3 L  g
8 T4 j3 {% Q2 x# {9 g9 Y
HTTP Protection(HTTP防御)/ H/ Z% w) S' _. `" k
HTTP协议和本地定义使用的detectsviolations策略。+ P6 ~5 D% T% j- `9 i6 Y4 b6 P
- X2 L9 t; x! p6 E

2 s0 p: o* U# ]% e+ U+ P: [1 HReal-time Blacklist Lookups(实时黑名单查询)" D) m, ]: Z; k7 r8 x& X
利用第三方IP名单。8 @! R; r! b2 m* p' O# V6 a

/ d- \. e* U) D; a. J* B
" P6 A- V7 l6 Z9 SHTTP Denial of Service Protections(HTTP的拒绝服务保护)  z6 r, x, ?, s1 k; _0 f& Q* J
防御HTTP的洪水攻击和HTTP Dos攻击。( i' u9 O& D0 n- e
$ U( Q- n' y2 ]  d0 a7 U5 T

0 y5 n# R( S0 C, y' v4 y  UCommon Web Attacks Protection(常见的Web攻击防护)" h6 B: ^1 k* S( K/ O4 R  |
检测常见的Web应用程序的安全攻击。
: O9 a8 D" h2 M9 W+ X4 T% o/ d5 x) J6 F

! y$ G) n9 h+ O, _2 v: ~Automation Detection(自动化检测)+ W7 ^0 @( F% r3 [' N' X* `( m
检测机器人,爬虫,扫描仪和其他表面恶意活动。+ g5 p" t% O# N' y. Y

9 I' o1 w/ @' B/ w& [$ G. {5 h; E; z& X2 K
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)' Y* S, y6 i: o6 z
检测通过Web应用程序上传的恶意文件。
3 s8 k% k; t+ E% e3 S% x' w: S8 q& l% R

9 R6 M& x: k; z; _Tracking Sensitive Data(跟踪敏感数据)
9 H$ _1 Z# v* h) v. C, {8 t; F信用卡通道的使用,并阻止泄漏。9 W& d! `5 D+ n+ h5 G: e0 Y
9 L6 T) C& M2 Q

9 d" n. ^8 _/ T/ G3 G$ S4 ?Trojan Protection(木马防护)1 x/ u' g0 F1 @5 }1 Z) b+ `* K$ F4 Q
检测访问木马。  u- P' z2 G2 Q# r
$ z9 E: H. r% B
2 X0 j. v+ |* d0 U) Y9 _; E
Identification of Application Defects(应用程序缺陷的鉴定)( U% L  a. ?  |; {6 A% g) Q% J
检测应用程序的错误配置警报。
- c* u. B7 x) v: d( E9 N% M$ R* L
+ o8 V8 U% b( t; `( W
Error Detection and Hiding(错误检测和隐藏)
$ V' m2 t3 a9 ~: m检测伪装服务器发送错误消息。
+ d0 o# Z( R5 t! ]) y
( J6 u3 a: \2 g7 ~' A  s" H, @  ?: A- s
安装ModSecurity
  s) H6 c1 u  M- Z& _% N软件基础环境准备
% u5 R, v! v' N7 b  t6 y4 ~) Q下载对应软件包& Z- `  J- k6 r9 }6 t/ Y6 A
$ cd /root
9 m* {9 F) F2 J, N; l: a* y- m& b6 g  {2 K% _$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'5 {: p4 X/ g3 R8 b
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz% q' t: a' t. v% F
安装Nginx和ModSecurity依赖包& d% i! O( e$ {2 b, y! s7 P
Centos/RHEL5 g+ t8 ^) v- t* d. E% R6 m  K
8 X' R) M, `4 Z

9 c0 I, L7 }2 R$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
7 M' r3 c: q% z7 c" u5 FUbuntu/Debian6 {7 P  i8 J8 O; Z

% W3 j3 G4 l3 Y  {: X7 ~6 ?% K, F% b! B8 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
6 G- i! i- Q" I, @0 G4 e( K编译安装ModSecurity" W+ F  F. j% A" J3 c
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。: L2 l  ~+ w. @7 G1 |0 }" A4 l

$ d+ j6 _' h5 a* ~8 E% \: ~
' x5 H( y8 m7 T3 g! Y, o9 D方法一:编译为Nginx静态模块
& F* @$ F5 T/ c# r( P8 [: `0 K" A* S% B4 I6 O7 U8 g9 x

/ S+ `0 N4 M+ G, j, K. f- J编译为独立模块(modsecurity-2.9.1)6 n0 u  O" ?4 P3 ]) o* N, ^
$ tar xzvf modsecurity-2.9.1.tar.gz
% ~) S; r/ i' z' q- B0 |: k2 V0 v$ cd modsecurity-2.9.1/' {6 ^  x: r: r1 ]7 ?3 C- d* N9 ?
$ ./autogen.sh0 z- [5 _3 P9 S6 U, o. h6 O
$ ./configure --enable-standalone-module --disable-mlogc* ~& c# ?% Z( M; m, i" w; }# E9 l) R
$ make1 N) s1 g7 X2 H0 R6 d
编译安装Nginx并添加ModSecurity模块5 ~2 U: |1 l4 w" U$ F3 s# G+ V5 A
$ tar xzvf nginx-1.9.2.tar.gz: M; S% o9 ]( F' {3 \
$ cd nginx-1.9.2
# W! B; Z2 m" E/ g9 v, s! n$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/' X( ^) i2 p$ P" b+ U+ q
$ make && make install
* P9 Q2 L" Q& M方法二:编译通过ModSecurity-Nginx Connector加载的动态模块# D. {* [5 c6 K' ~3 a8 d1 a# {
) s1 O" f: c+ S
, W! j# C& k) u, a
编译LibModSecurity(modsecurity-3.0)/ f7 J0 ?+ X6 S4 |8 L9 j* M
$ cd /root  p3 |, G# G% V, a0 T
$ git clone https://github.com/SpiderLabs/ModSecurity. j8 o4 n! N; q3 O: a
$ cd ModSecurity1 {1 M- D# U% m
$ git checkout -b v3/master origin/v3/master. i8 p% \% U8 {0 m' P3 c
$ sh build.sh  R& p. Y% `. _) @/ B2 f6 ]$ P
$ git submodule init
1 ]4 Y, s. t8 ], S. v$ X* \. j$ git submodule update
. [1 w+ S& p2 d$ ./configure- O0 ?% r$ R- D, W
$ make
- |& L/ @7 C, x7 ]+ W$ make install
) ]' {' ~1 ]6 ~! D- k4 `( s1 \LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
6 I3 X. P) e8 D. u4 R" ?: V
; S3 z( f6 M1 }8 v8 R9 ~6 h. x! q& d) v# J4 u
$ ls /usr/local/modsecurity/lib
0 P. X+ c- O* ?9 Y$ V% h6 \# vlibmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.08 L- D1 N; C8 I1 E
编译安装Nginx并添加ModSecurity-Nginx Connector模块/ D5 n1 r$ g" i0 s
使用ModSecurity-Nginx模块来连接LibModSecurity
1 n5 z/ c; w( Y! [* K. `. ?3 v  U% x6 M; X# r, B' V

, i  x  N( ^9 N7 i$ cd /root
+ Y; r% v+ c: S, U/ J$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
; `$ {% }3 r$ y, Z" S& @+ m: m  q$ tar xzvf nginx-1.9.2.tar.gz+ d: n7 a2 [5 v: p5 |3 n$ e
$ cd nginx-1.9.2
/ g" N$ u! z) N: F% ^* a& S: a$ ./configure --add-module=/root/modsecurity-nginx3 H! R1 X/ x. x0 N
$ make# G, f! W3 f* |" O/ F( e! b
$ make && make install1 r5 w9 i; B1 m, n2 q7 h
添加OWASP规则3 e) ^+ l9 K4 G) ~
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。, p9 g, o7 B' \# x3 z! X

- P  ]' X: b/ |  g
+ [' N( p, t5 h( X1 j& C下载OWASP规则并生成配置文件! [% p0 A% c6 |8 f; t- p, |  p
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
+ R( v6 z. C( e$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/
# V5 ]) P2 A3 z! E* {& ]$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
# ]2 h, o1 @3 O! P/ a8 P) ~$ cp crs-setup.conf.example  crs-setup.conf
1 t) d: x( s: L配置OWASP规则
  y, s8 I' _3 F) i7 q/ G* l编辑crs-setup.conf文件, C1 ^8 ?+ o" |2 o$ d2 k3 E- d8 q
# ~  q1 i6 n+ Y4 X/ `
* j, G7 h/ Y# {2 K
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
4 p. T- A; Z1 O$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
1 A" J  N9 C4 v, [: l$ {$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
8 V+ [6 }7 r2 z6 M$ y5 p( I# n! U$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
( `% J9 q' d" H$ J$ s默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
/ P4 A4 v# ^3 ~5 c# N% g8 |% u' D: A% s8 t5 I  E) w' @$ p

$ T! _" u) D2 Z* |) Z/ ~7 G启用ModSecurity模块和CRS规则
" \& C$ h8 [: F: ^复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
: r; `  C7 Q  l, L. b6 \1 v+ e+ f, l* j) X3 m

% T) L, F% E, L/ Q  zmodsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。: a# P* b1 X* S" L* l/ b

/ x4 b- ?0 v! m' P* W. o. B$ L; S( J: W, i) J
$ cd /root/modsecurity-2.9.1/
4 Z1 I/ A) F. g4 t9 ?- q. T$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  
6 H* Y9 k) q% u/ z( j$ cp unicode.mapping  /usr/local/nginx/conf/
- L) g1 e- s2 ?% D/ h! `; _  l将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。6 @1 z0 F. f3 l5 k8 G5 U/ i4 A( H

0 v+ \4 _* H; q
/ Y4 G  O4 z( i5 _9 c  _0 O$ vim /usr/local/nginx/conf/modsecurity.conf
: K; `" U. R# \' r: G( p# tSecRuleEngine On3 l% ]+ [! m" ~9 f/ o) z
ModSecurity中几个常用配置说明:
6 E: U) a# g2 V6 q% t' J2 c; w$ E. U9 \& Z/ |% \
! e6 @5 [* x( ^
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。3 n( L7 y# M! V
5 l1 _0 [4 p, y3 G- [
; n" v% @+ U$ z: ~7 |2 M
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
! d7 m; h, e  |/ s; E- K/ N0 }# e+ M) s( Q8 c, L

+ R( Z" @5 G! G, N7 B+ F) B3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。* M& n/ ?, _" [# v6 U
& X7 n, M8 V3 p* h( g& ^- _: T

/ M$ l# K! T0 b* ~4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。' ~* h; m8 \, S/ `) S
$ w3 F/ a3 @% S6 t' A1 P/ d& W

9 T) z% ~. e6 F, `! j% z在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。, z* R( c1 e& g! ~# L% \

1 f0 i" y5 d' E8 f- R( M9 O! R
; _+ c8 v$ r( v) x3.x版本CRS' T( S0 o3 q- U# G' W
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs2 ^; Y! t) @$ L0 `
# 生成例外排除请求的配置文件
- f. W: C0 `$ k% M0 }3 ]. e: }$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
; x0 y2 v+ Q) R* z% `9 A$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
! L  U" N0 {) @' `$ cp rules/*.data /usr/local/nginx/conf
; {1 ~* Y4 e% X0 A) [为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。) k6 C8 [4 u& W

. c7 Q. a& ^. L  J3 ]$ e
, e% S' V  [8 ]$ vim /usr/local/nginx/conf/modsec_includes.conf. ]& \6 i0 q3 u  p: Z5 x* C! k: F+ L
2 J! V  ~0 J! |3 s$ r- }+ E
[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
2 a( J; }3 y! C! D( I2 k0 X
& W3 K& _8 i" ~5 _) z4 g/ m" ~
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。! w& c- g& C0 x# r
; y# O( h  O& Z" A3 P& t
( M; I- U9 Q6 O0 m4 J
配置Nginx支持Modsecurity
3 e4 z0 O% }" ^启用Modsecurity0 l0 Q. \, ^- K) c0 F9 t
使用静态模块加载的配置方法
. y/ g$ H5 Y7 }8 R" g7 a; q在需要启用Modsecurity的主机的location下面加入下面两行即可:7 [" ]* ?! i8 [$ P
: M3 W9 H/ N/ @5 q# K4 @! v

9 B# W. H( G: }- @# j) TModSecurityEnabled on;
: L% C& j" d4 J- _9 [  X5 pModSecurityConfig modsec_includes.conf;5 [7 b9 ]* t2 U6 b- ?, y$ @+ j
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
; `) |1 I# y- p" y7 n. R9 y+ I5 N" E  }2 c9 ]: U2 F

* ~7 W8 r* u% T! I; X: t8 R$ vim /usr/local/nginx/conf/nginx.conf
6 h1 z' e5 P+ X9 g$ z3 f7 V7 L0 P  H9 W# \2 h

5 |2 y  u5 g' Mserver {
+ }2 f. h* ]7 T  listen       80;( ?* J8 E0 _  a: ~
  server_name  example.com;% B" E: a7 s3 W$ d

) p1 b% r2 }7 g/ Z) \- m+ d- A& y2 ?8 @, O8 [  ^
  location / {
) S  f. {$ @# _& P    ModSecurityEnabled on;$ ]& E6 F* s( m' W  Z3 [# r) t
    ModSecurityConfig modsec_includes.conf;
1 |+ L4 a% X2 ]    root   html;3 @0 ?' a+ s# Z( G, g; V
    index  index.html index.htm;- f; l" W( D; S3 v# R1 a0 y3 |
  }. A5 @; o; G! m& U- c
}0 R6 L5 [7 p5 N7 p& X- `
使用动态模块加载的配置方法
6 K/ d; c& w1 J' W2 h  B在需要启用Modsecurity的主机的location下面加入下面两行即可:! S; T; t3 o' q$ g( f" Y

4 D$ Q/ s! I9 s4 E
' }) C* z2 m, z& U9 x3 wmodsecurity on;% C4 v6 T; J6 s0 C, }2 {
modsecurity_rules_file modsec_includes.conf;
2 y; `6 i, K( F$ K修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。; J9 B" k) u* d- b# @- i9 o

7 y! ~2 i: B; ?$ F+ E! }1 w6 \7 j8 @+ a* V% T. k3 ~
$ vim /usr/local/nginx/conf/nginx.conf7 L; N9 p- \6 R3 ^7 q

/ d/ |3 u1 y$ h! x
: U/ S' T& R, v' |  xserver {7 `4 H' s, f4 C' H
  listen  80;& m& ]- R5 f. c- n8 z
  server_name localhost mike.hi-linux.com;
3 A$ W0 c' V& p: {  access_log /var/log/nginx/yourdomain.log;
/ |6 ^( q) z+ \! c' u: o1 _
* j' H( k9 @2 _0 G# q0 c( M7 L9 E- w$ `! K
  location / {
, }! P, E2 ?7 X- F1 S( J& A  Z( K- m0 P9 z+ R/ w, O

/ C, [! F2 }& e2 q' u  modsecurity on;
$ h, F) ?. {% P2 f* u4 g% A  modsecurity_rules_file modsec_includes.conf;; T+ `: o) j9 N, N7 B0 o( s
  root   html;, D8 G$ _/ N6 K( ~1 }/ @1 ?
  index  index.html index.htm;0 h8 o* H; o2 ^3 s
}
2 ?5 ^% @+ `* ~" I}
! ~& n3 H2 @8 Z1 {0 S: x# N9 {验证Nginx配置文件) p* |8 {. \6 u& O$ I/ x9 G
$ /usr/local/nginx/sbin/nginx -t; H1 f9 v9 l7 g; u7 K6 \( t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok  ?3 p$ N. v5 V# ^5 |
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
$ i( c$ U, j! I# ]; d9 i启动Nginx
8 Y: n1 j/ u. W: E$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
7 a; Z& z/ J2 {0 j
5 T" K  e- s; f, o4 Q7 V7 U

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


6 a- g. s" f3 m) v- d9 ^

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-1-22 07:23 , Processed in 0.066821 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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