找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 10409|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
9 ]  V3 D8 s4 Q% F: i8 E* m. x" w$ V( p! l" Z" F

; a7 Z' i; w: ~! F" a$ t在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
. v( R& T% ]9 y8 ^
0 N+ B& j) g2 Q: g" M, m' S, r3 ~- x0 h+ Q
什么是ModSecurity
& N. Q; Z+ v, Z7 F& j  `1 fModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。' M( X- F! Z+ ~1 k% D& m

0 z2 w( v- Q9 P# h  O/ [: K2 o; n3 N6 i) H$ s/ O) X2 n7 p
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
. F" P" U6 j1 H( \7 ^3 p  l) }8 r# O$ X) E4 H$ ?  E1 v' u

2 e9 n0 D6 c8 QModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
0 v+ c  n, H8 J6 [3 G/ M0 z. [; X+ a( B2 d7 n5 F  ?7 o3 M) g
$ ^, h$ |4 S( Y' ?$ z2 D( o
官网: https://www.modsecurity.org/  A9 w9 `8 R# `; ]

  x- K8 E( {+ m. i' h% Z/ H3 P3 X  w  L
什么是OWASP CRS
+ |0 f! Y( Y+ f* o3 f& z5 g% SOWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。( N2 V, w& [. G. S
6 ]( |5 Q1 |4 p" B. c) d# l- C3 Z; q: d
+ }1 _/ L0 d5 Q4 Y, S
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
2 l1 F3 z  f  X" l% M. [9 a" v) F2 x2 Q/ _2 r. v" ?! i- q1 t

3 q, b! U% Z2 u6 j' K7 PHTTP Protection(HTTP防御)
9 v9 }! g& N& S3 RHTTP协议和本地定义使用的detectsviolations策略。4 I- _) w' t9 j# ^* I" {- f- V
/ p# l5 K  P, X  E% v

  k4 y( P6 U$ H- N1 k* H' N0 vReal-time Blacklist Lookups(实时黑名单查询)* V  a5 t: F; z" A! q. A* W$ W; h5 [
利用第三方IP名单。# c- N' f+ T) X0 F- G) m

6 z% E5 u) E1 H4 [( y* u# |% N
) F1 n8 Z+ ]* @) _. h, zHTTP Denial of Service Protections(HTTP的拒绝服务保护)# L  y. p5 T5 w
防御HTTP的洪水攻击和HTTP Dos攻击。9 P1 B, X1 E$ a8 a$ G
7 I. [+ y" i  K! L6 s) C

4 I2 W+ l( l* }" E6 HCommon Web Attacks Protection(常见的Web攻击防护): T9 a1 n% g5 l$ o
检测常见的Web应用程序的安全攻击。1 Y$ N) z* ?* Q, P0 ]
) g: m; y1 _5 r" ?0 e7 y
1 a* t' `& Q  j! ?& \: O* G
Automation Detection(自动化检测)
/ S" m# n. c7 E4 y# y6 y& L检测机器人,爬虫,扫描仪和其他表面恶意活动。" D, b2 M3 H' C* ]0 @5 z4 j0 A% _5 Y

" c; o+ D5 K; f  H8 f, v. z% k) D
+ z! z4 d+ Y; t5 V: pIntegration with AV Scanning for File Uploads(文件上传防病毒扫描)
+ Q) X( a, Z% q' ^4 @4 M. v检测通过Web应用程序上传的恶意文件。* i3 w8 C5 d! u" d  Z
! Q- H5 b; H% u3 l7 ^
$ @' z+ ^- j: {$ g# Z
Tracking Sensitive Data(跟踪敏感数据)
  G. c# Y; {- X+ e信用卡通道的使用,并阻止泄漏。
$ ?; ~2 g) y) ~$ \
$ \0 {; n; s* P0 R9 ^: F* D5 \! Y1 Q8 S8 l9 z; ?$ i9 ~6 [" U! K
Trojan Protection(木马防护)2 a5 ?* [, H; ^. a1 n
检测访问木马。
* e8 k- f2 i! Q: U
( W# E" }" b, ]" z% e% ]* F" h$ E# A
. ^, D4 S! }! ?# w6 n: W0 k. TIdentification of Application Defects(应用程序缺陷的鉴定)
: k0 T9 q7 l, k: {4 w4 v$ N1 p检测应用程序的错误配置警报。
3 c7 ?- k8 R* V  C2 o- u& g5 ^4 |7 C/ f. T

* t. A4 H8 W' d' T) UError Detection and Hiding(错误检测和隐藏)
+ j, w4 t! E5 n) i9 b检测伪装服务器发送错误消息。( X1 t8 T! ]7 _/ U
2 b" h" q, B% T6 N

/ `2 }1 D$ V3 f+ y6 W3 {5 H. H安装ModSecurity4 g7 H/ C8 q% m2 @  {" d
软件基础环境准备
! _2 D' C& p1 R+ D2 `# h$ i) S下载对应软件包9 S& p" S7 j% C4 ~/ Y& ]* a" Z
$ cd /root& q9 q1 l1 J' j
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
# [) [* H" ?" O. q$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz# w# n8 ^" [# w) t) Z
安装Nginx和ModSecurity依赖包
% y7 n0 |' k! H0 b7 k& sCentos/RHEL7 X, T+ l% W) f; j' X

  r- S4 N2 J/ |2 Q& Y- {) m
9 B  |- ^5 ?' u" f  X. @  u, T6 K$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel; n% V0 `& R$ m% p
Ubuntu/Debian; r! S( I, C5 `4 R9 r1 x) l

  O& A% K4 D! Y% W" r' W) w  A9 C; K" E% W* P& q8 v& `$ W! i5 ^
$ 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& [" O9 G5 ~$ P' r
编译安装ModSecurity# W8 z2 q3 I+ J- K. n' B# X
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。) h8 |' B7 [: ~% A8 p# F! r) T
; J, B9 P2 O; F+ U: U

) C. ?/ C& U! R. C方法一:编译为Nginx静态模块, `- l. W2 L4 F) |4 W$ T( n
/ ]4 k: ~$ m5 h! d. ]
# c$ W9 H( r; E5 E
编译为独立模块(modsecurity-2.9.1)
4 A3 z$ ~% Q3 K2 K( ~0 n$ tar xzvf modsecurity-2.9.1.tar.gz
/ p0 T8 N# l6 b! V. U* Z+ y8 R9 j! i$ cd modsecurity-2.9.1/
6 p; _. i: t. X+ I$ S$ ./autogen.sh
2 i, L0 t0 U' _6 }6 I# B$ ./configure --enable-standalone-module --disable-mlogc! p8 k8 X7 Y6 y$ t/ i
$ make
- g- F5 e2 [3 z编译安装Nginx并添加ModSecurity模块( n& \, g1 r; N8 t; y
$ tar xzvf nginx-1.9.2.tar.gz5 x6 W6 O& T" l4 `+ ?* c
$ cd nginx-1.9.2
% ~$ U0 z+ B) R1 E8 h$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/8 N$ v2 H3 m& `2 \, V& V  c, g
$ make && make install$ t  Y6 k  D1 h0 r
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
1 h' T: Y/ L5 I/ K+ ~. |+ W: D+ ^5 p3 s6 l: N& y
+ l+ ^8 j4 k) e4 P! @5 q& B4 ^
编译LibModSecurity(modsecurity-3.0)0 J2 j# v7 i* W, Z
$ cd /root
! u. K+ T1 {$ n! b$ git clone https://github.com/SpiderLabs/ModSecurity
5 }" N; S5 r. q; G+ ]8 S$ cd ModSecurity3 f% m. ~2 |' k' k
$ git checkout -b v3/master origin/v3/master
% r& g4 u* }8 b1 E2 l$ t3 {* c# t$ sh build.sh" [8 x. F! B! ~8 [0 r
$ git submodule init
0 L4 J1 U! f& x# R$ git submodule update7 b. W1 ?8 i# }2 b: t. I: i
$ ./configure$ a4 X2 I: B) _" S: Q
$ make
, s' q0 m7 m- c0 u/ F) O9 `$ make install
, f7 l/ C( y( j( I$ s' d: sLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
+ m* M4 D* `0 l/ R6 G. M" O# e4 e- k! c4 Q, W
1 H& K( X) U, R$ ?: F
$ ls /usr/local/modsecurity/lib
6 l) `+ I1 H% Jlibmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.0
# T9 q0 s$ L/ W$ v; n3 d  _编译安装Nginx并添加ModSecurity-Nginx Connector模块# ]0 G& ?& G! ~7 M
使用ModSecurity-Nginx模块来连接LibModSecurity
6 ^% H# F6 b& s( r, L' l0 Q
& N0 z: A; A8 W, `7 j- a/ y# G; D6 m% b9 y* d' \5 j# y7 Y- q' o
$ cd /root" F$ _& B. N. X; N) |
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx3 h% U" D( g" v# r
$ tar xzvf nginx-1.9.2.tar.gz! {7 g2 y# W' L' U
$ cd nginx-1.9.2, r$ ]4 \8 o9 p3 ?$ Y# k$ Y
$ ./configure --add-module=/root/modsecurity-nginx
' R. m, E1 j7 i' a3 c: x5 i$ make& Q. F& r) n2 r2 c% U, X& Y& u# J
$ make && make install
, r( ?9 E+ \3 C添加OWASP规则" d" S) G5 p; m# {) n. m5 O" N0 n2 n
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。& S# Q3 n" E! W1 m" n4 g6 e

5 f( ^1 _% K) Y
+ t, t% ^( [1 V# k7 j) }0 t$ E下载OWASP规则并生成配置文件
8 c% @5 y8 I) y  q, z' z# w$ |, O- w$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git& p& i; i& P9 S3 l
$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/; c7 I" L5 \* B3 H6 G! D" [) @
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs; s9 g/ v" ]- m% v0 {) q' u
$ cp crs-setup.conf.example  crs-setup.conf  y. k- I- a+ X- E/ f
配置OWASP规则
# ]+ ^' D9 H" b* e6 u编辑crs-setup.conf文件
  c% X; g0 h: G% _6 F! x0 c5 e( \4 `2 `) k2 [( {$ M! l' }

8 H+ R, |; l; v) M, \" i2 ?& t8 P$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
- V6 X; b$ i8 H9 ~$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf7 T! c3 f- e: }6 M6 |
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
+ A: k1 t( F6 G# ?2 J$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf6 g9 D) s/ x' f4 b. f
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
& F# O9 f" x3 P  ?7 O  k
$ Q2 a$ v" F: U* H3 P) I0 k% ?! y1 ?: B* M' w/ O9 u9 D
启用ModSecurity模块和CRS规则
7 [# c2 d: g5 |! _复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
5 a' V: k4 H# N
/ a; n: y* H+ w/ u/ k: {( n6 n+ K( X# `
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。: G  ~' n# P+ s8 p- J. Q5 ]$ n
2 B& e/ s( P0 k
: W# g9 v& o" n; r! ^3 |6 B
$ cd /root/modsecurity-2.9.1/+ l0 s6 L6 P8 C! q! t
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  
" N; n& i5 g! L8 R$ cp unicode.mapping  /usr/local/nginx/conf/
; I" y( i7 D* D/ b% D将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
% o  z/ W* |$ M% z8 {0 @. g7 f0 L- B
5 N: Z+ l& W- l! _2 u. _  E  W6 Y+ D
$ vim /usr/local/nginx/conf/modsecurity.conf
- e$ q4 A- \/ G: U4 ~. Y( eSecRuleEngine On6 U1 b3 @* ~0 @' v
ModSecurity中几个常用配置说明:1 L+ q  R, e4 q; Z- ~; h

5 M, d# J" c0 A% J. W
+ H" {: O, r  q8 t1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
9 {, T( D0 t) P  m
9 T, A5 \- H9 o2 t! q# W8 F, R( i4 Y0 V6 r; o
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。* D  c" C  D( Y3 u0 J9 B. y( z/ c0 _) p
8 O7 E6 A) ~* F) s/ r9 e  y5 o

) o. ^% X+ s+ c( o) M" I3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
( `; c! N, a" P) N  G# h3 a& J9 w7 u5 U. Q
6 |8 I) L4 T5 a6 j5 d- n
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
* N/ W7 c2 X: W* u( M) b0 ?3 _& M
5 R' t0 U9 M- ?: ~' H* X
6 ]: X+ _8 w- H% R1 _在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。, O0 ~( N2 `* k  I& A+ n: \6 e' j

: @. o% q/ F* `# C& B0 e1 t+ n; w) k
3.x版本CRS- W7 V6 `* k) y% H
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
( U7 D' o5 T1 M2 O, {7 R# 生成例外排除请求的配置文件. t; \# [2 p  }. B7 y; V' e$ O
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
$ K8 t' Y6 T& d; d- [  _* z$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf! H- e% P, t. C  `$ Q9 {
$ cp rules/*.data /usr/local/nginx/conf2 {! `4 `4 a! t  r
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
: @: j% O" ?$ C/ f( b, [
0 X! z# D* b6 w  I  o# P1 ]6 n- T# U" E
$ vim /usr/local/nginx/conf/modsec_includes.conf
/ }" h% F" L+ q/ c# d2 v4 T
/ W( Z0 {2 u  d8 N; {4 k: J3 U
[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
5 ]: Y: C# q. F' A6 P8 C

" R! [" u7 V" X5 e注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
9 ^" N* v" w0 o) Z$ P1 B* Y9 x. g8 W$ K4 f  ?, u  L- ]2 h2 D$ M
& @1 O9 m8 @; O! I3 v
配置Nginx支持Modsecurity
2 i. i' S  Z' \, f& m2 D* Q- P( \启用Modsecurity
5 R0 M& R! g& Y" _使用静态模块加载的配置方法
+ Y6 u* r& t, h' @1 `7 }" v在需要启用Modsecurity的主机的location下面加入下面两行即可:
5 J( x4 \$ ?1 E: Q$ h6 e! \9 V  `4 S7 l% p! n/ u1 H, {- U. M+ F2 ~
9 d: ~' E  e7 {) Y1 ^9 z- ?3 E
ModSecurityEnabled on;
- J& E; |0 C" M" r0 m0 E5 ?ModSecurityConfig modsec_includes.conf;
, m* o! o5 e9 H# t* D+ H修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
! O0 n0 U# t- h
2 f1 C  F+ z8 ]3 o7 C! ]! q/ L. j+ y7 \* [0 i4 }
$ vim /usr/local/nginx/conf/nginx.conf
( x' R) ~/ h0 u3 R7 K2 ^) b, ?

1 h7 |" l* ?7 d/ H& d# Cserver {
9 `* B- g, M6 M) D$ G  listen       80;5 j( s; `7 Z4 A0 o. n" W
  server_name  example.com;8 [% U+ ]7 D- T* \+ _
2 u1 G0 r: s, }& @! N" B. O" A
" y. I5 Y/ S5 J/ y
  location / {5 X1 n( b1 R# e
    ModSecurityEnabled on;
& Q: y7 W% q) ]' P* d1 f    ModSecurityConfig modsec_includes.conf;9 Z) \9 g0 T/ u# B. o4 f2 I
    root   html;8 T9 @+ o& q1 j0 W6 y; F
    index  index.html index.htm;
. I6 ?- L3 K2 \8 n6 x3 [  }, z& T- ~- F+ D) F7 [2 J
}& P! t' h9 b$ \" r' C' `* m
使用动态模块加载的配置方法
* L! o2 z, E1 B3 Z6 W+ g在需要启用Modsecurity的主机的location下面加入下面两行即可:" ~- _  I- N6 o1 r& m
3 G/ D0 U: H  S+ C, D5 W+ D

. L* Z/ H$ U/ j' q& S7 S; _' u! Bmodsecurity on;6 ?" j7 B5 ?/ f+ w
modsecurity_rules_file modsec_includes.conf;1 K$ D5 N8 Z1 m$ s) Z
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
) {: f' O: \$ u3 A
& ~$ n/ B) s- A0 ]1 |3 J4 j6 s6 G* t  @. V, J$ e
$ vim /usr/local/nginx/conf/nginx.conf
' _' g) T( s- g8 v8 L
+ d' W+ W: `7 J5 r- r
* B" F: Y9 g+ v$ e( r) vserver {" I- f6 X* H$ L& w+ \
  listen  80;
, r0 ?$ D* d1 [, b  E& j' r  server_name localhost mike.hi-linux.com;
  m( a5 t1 h9 \  access_log /var/log/nginx/yourdomain.log;/ @1 b& E6 m7 T4 {3 i

* F6 r+ \% \& d1 K1 g: w  ]7 o1 H& B8 _9 _$ c  X0 ]) d
  location / {. k* J# Z/ b. ^2 c3 f* l; W
9 D- \5 ~8 t8 B0 U6 u5 C# s$ \6 G

: h# A8 Q0 e; W4 [! Z6 S  modsecurity on;+ _, Z& w; p$ E( S, v$ J, @& e3 t* H. O
  modsecurity_rules_file modsec_includes.conf;
0 r4 N% z* c. w1 L3 D$ f- M  root   html;
/ H5 V: D/ e$ }4 Y3 ]  index  index.html index.htm;
& s% u9 r& y# v/ k  c) W}
9 B- v3 S8 d8 c9 t% d6 `: N% J}& C; i8 F$ n5 w9 ?9 u0 R( X, c1 z
验证Nginx配置文件! k7 P; y/ p( O$ r" O1 b& ]
$ /usr/local/nginx/sbin/nginx -t
. M% m! n1 m' _5 q7 x- \nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
+ Q$ Q  c$ U5 K4 inginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
$ p4 A9 f3 ~: p- w2 T* S9 O5 H8 B启动Nginx
" s3 w3 m5 c1 N" x$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
' X" D4 i8 N1 C6 l1 D# N1 e
! a: j% O  e* c4 Z2 a: ^: J) g& c' W7 @

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


1 x' b  @8 ]  u+ G

本帖子中包含更多资源

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

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

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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