找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11161|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。" w# U8 D$ h( _1 q1 S* c4 Y% U6 }5 |

: C/ v) f7 I/ N# {4 t/ ^4 z- N& b" n8 \9 D: A& P1 y- ]
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。8 v/ Q1 [+ s( U5 N/ g: ]
! A9 Y' V8 a" H# s$ M- ?
& d" _. d( }, r+ ^% T$ ~$ Y' I0 m
什么是ModSecurity
& E- R3 ^% y' o& O/ UModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
4 a# L) q8 f! i* v9 j$ z8 S6 F& [+ ~1 S

) y: g7 Z. F, o! QModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。1 k! ~( L6 s: u/ }0 I8 a

& P: _  r- k: k- @; Q7 N  O- I/ c
5 [' o6 Y3 C  v. wModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
3 [* k$ K5 S# Z( {! Q1 r) G& s1 C5 F. r4 L" d1 M8 e+ U' S" {4 H; m
6 `  x3 x" Z+ U- S+ D6 R, T
官网: https://www.modsecurity.org/- Q7 E- R! ^$ r  ^' C
! t! Y4 o( c) r" V1 U; a3 I' h/ M

1 g1 |( F$ o4 T9 i, L: A什么是OWASP CRS
' C5 F6 I3 ]  TOWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。6 O4 N! F, ]& f$ d$ Q% d

! I  p1 f4 ^3 E+ \) t. O, B8 J6 K- F) Z3 S9 S  q+ x
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。. g# Z; m% \; |$ I6 a3 O
, D3 ^6 a- Y7 ?; {/ [
& I/ o* ]4 z( g+ x) X
HTTP Protection(HTTP防御)
7 K9 p* @) F6 h. n7 A( f) rHTTP协议和本地定义使用的detectsviolations策略。8 y0 d6 x3 c1 _& q$ B* _7 u6 B9 P5 H
. ~" P( ?5 l! ]; S1 b
- z# J: W/ l. C" Y, q2 E# T
Real-time Blacklist Lookups(实时黑名单查询)0 `! _; t, b6 g4 ~  E
利用第三方IP名单。
$ y; p- C& h% H4 b. P( K6 k1 K! k" ^
% ~' N! \; T" b1 b4 t: B! F
HTTP Denial of Service Protections(HTTP的拒绝服务保护)) O/ w5 R3 D2 k$ p
防御HTTP的洪水攻击和HTTP Dos攻击。
. G$ Y, I' X5 R8 w: Q( Q4 W
+ P; L: [" T; A! h: p8 M" H9 \. M+ q5 p
Common Web Attacks Protection(常见的Web攻击防护)) d8 O6 e  e6 e; s+ u" |
检测常见的Web应用程序的安全攻击。
: f$ j6 a# Y+ c( \* C) w* e! C$ i9 C2 [9 W
+ c" J9 u" @7 K  }' j
Automation Detection(自动化检测)7 s7 E- m7 E4 h: y* X0 @
检测机器人,爬虫,扫描仪和其他表面恶意活动。7 ]6 p2 Z6 [: C5 ?& q* i" d

# n+ }% G1 I- b7 Y
. v% r1 T8 J; h5 l4 S9 _" yIntegration with AV Scanning for File Uploads(文件上传防病毒扫描)
/ ]; }6 G) g' o: F2 w) R检测通过Web应用程序上传的恶意文件。
$ k( t: b) c; S; a# ?8 a1 }0 q  `
6 j5 F, f+ C' x, B
8 J' S8 J) ^# Q8 y' ^6 V1 z' z6 M7 Y% RTracking Sensitive Data(跟踪敏感数据)
" s3 c, n3 E3 A3 E信用卡通道的使用,并阻止泄漏。
3 N! k% E, c* K; i: ?2 I' d( s/ _+ S  J. X

( m6 ~. Y8 ^0 B! t2 ]6 TTrojan Protection(木马防护): j6 |6 x4 _& S
检测访问木马。
' v( s3 [7 @, L* E/ E
/ c! Y2 j( y1 ?6 Q- z( U+ [3 W6 W
9 g& ^1 z5 R* S+ A8 \% g" N5 y6 [9 yIdentification of Application Defects(应用程序缺陷的鉴定)
& l. Z- U% q* z8 M- F4 B9 p" Q检测应用程序的错误配置警报。9 H0 n/ u+ d( Q; @' ]
" A4 X! T% T' P8 K% i2 P

  k0 q) ?" v! z- M8 B# v5 NError Detection and Hiding(错误检测和隐藏)1 W  B0 J9 n9 j2 M8 S8 [
检测伪装服务器发送错误消息。
2 m9 U$ Z* z6 E* X& a! l( y% W5 j% x- g9 j) ]

3 R8 h9 {, a- z& L- a安装ModSecurity8 z% G4 E0 N5 X' m, t" h& ~. j0 T$ F4 y
软件基础环境准备
0 e6 C7 T, s- z& v( L! z下载对应软件包
! X3 C( ?* e9 I4 h- `8 Y) y$ cd /root
+ u9 L+ _1 K2 t# ^0 S( W4 k) o$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
4 A+ p. o+ e# Z$ 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; p2 h! g
安装Nginx和ModSecurity依赖包- X0 P: _- k) E: L0 O6 b, L5 u
Centos/RHEL; {* P7 j$ v* S
2 V5 ]' }5 Z# V  y3 S; b. m+ c

. G/ L4 l& o% [, d  x2 o6 R$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
% a) f. Q- M0 v8 f/ L  \" NUbuntu/Debian: Z3 u& I% I' B; V. {2 r

: T3 g' e4 }- v, n7 P% Z
" d/ ]3 t% N( s. L* f$ 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- Y7 J. E( X3 i! I" n9 k
编译安装ModSecurity' l7 y9 w! H2 W* f! i$ X0 ^+ x( O# c
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。0 i- |2 M9 E4 B' O' I9 y. r1 P
0 ^0 G9 `  t5 Q5 a; P: Z" u
1 `+ V0 z2 O) Y+ x2 s
方法一:编译为Nginx静态模块
9 d: d9 v* {2 {! N' l* \0 R" I- W
2 U/ H; X) {1 [" ~
编译为独立模块(modsecurity-2.9.1)
: s( h& W0 a+ ]! {  p! O! l% B8 N$ tar xzvf modsecurity-2.9.1.tar.gz
1 u' C, v" B% D$ r& c$ cd modsecurity-2.9.1/
7 P. D  C5 k0 x. V$ ./autogen.sh. a% I. s; M4 S
$ ./configure --enable-standalone-module --disable-mlogc1 |* _1 \+ d0 S$ z" K
$ make/ |; g, s. j' m  y% X( ^
编译安装Nginx并添加ModSecurity模块. M7 c8 G; G  e. f) g. Q% z
$ tar xzvf nginx-1.9.2.tar.gz
" s% m" ]7 P5 q7 C7 h) c' U$ cd nginx-1.9.2
! q* e/ E' w! d- F! W9 |$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
" P1 \. _9 v# C+ v3 g, Z$ make && make install
+ \6 d2 D/ @% ?* F+ `! {方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
& U& C' V$ T% [# `( b
& p- d+ Z% l+ B1 ~* ]$ n! s6 P% a+ m% Z8 M
编译LibModSecurity(modsecurity-3.0)
3 `. N6 R5 B6 B. b$ cd /root5 U/ v/ Z: j/ |, f
$ git clone https://github.com/SpiderLabs/ModSecurity3 j2 R, _9 U) f" I, k
$ cd ModSecurity7 O$ l: k* d  L6 [9 Y5 t
$ git checkout -b v3/master origin/v3/master8 A/ A# d' F- J. x8 E. l
$ sh build.sh
3 s/ j: h8 `, ~- U$ git submodule init
. y3 M5 B/ R; P, j3 a9 M  m4 P$ git submodule update1 q3 |: `6 M/ }
$ ./configure
1 I+ K* ?+ c/ R2 n/ F$ make2 {- f* Z+ @/ m9 n, p- ^4 S
$ make install) t9 m6 S3 n# y& k2 H1 ^9 N' s* v# I/ l; G
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。$ r5 t" H8 U. R: P) u$ ]0 J

& R+ G6 o8 n: X7 m+ s) B' I/ e0 C
; V. V% p+ B. h% R. m- [- r( N$ ls /usr/local/modsecurity/lib$ Z0 M6 x1 \0 p; r1 X( [
libmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.0) ?, n# O# Q' @- \6 t
编译安装Nginx并添加ModSecurity-Nginx Connector模块
# C: \$ q# o6 ?9 F3 X4 g使用ModSecurity-Nginx模块来连接LibModSecurity
" J# d- \8 W( K5 g
1 f: F: W1 Y' S6 a6 a9 O; z& @- ^% Q3 n
$ cd /root. q. G1 T) g4 H0 {
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
+ O+ g" o. l+ m7 p$ tar xzvf nginx-1.9.2.tar.gz
# k% g6 y( i/ l9 |3 a" [; x6 Z$ cd nginx-1.9.2
; k6 P9 n( A' Y$ ./configure --add-module=/root/modsecurity-nginx: Z0 F9 R/ C. f& P6 \; N5 e& o
$ make6 p- R7 ~6 o, n" v/ _+ M
$ make && make install8 N1 r" i1 \8 t8 a6 W: Q6 G
添加OWASP规则
/ y; P5 B/ L" T1 H" NModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
3 O! h. m) X5 G$ o" F/ h" ?1 Z; o' k' \1 N8 U/ g
# ]- U' ?3 q( H5 v! S6 y3 i3 w8 k1 Q
下载OWASP规则并生成配置文件* |* b& S2 \  |6 |- d1 r! M
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
, `4 D* d7 n$ _; ?, Y4 z$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/
3 p! Y5 P" M; Z% ~, [: T$ cd /usr/local/nginx/conf/owasp-modsecurity-crs/ [; X& P: F' _3 \4 s3 j
$ cp crs-setup.conf.example  crs-setup.conf
- k7 D* l; m  W- |; Z配置OWASP规则' F3 f* a1 n+ R0 t9 S3 X
编辑crs-setup.conf文件
0 F! U4 J  H+ E) K
/ J( U, [0 S/ m7 T9 L& L0 N. V) j2 `. S7 ?' w8 Y) }4 @' a
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
5 Q7 l7 G) l! W" g1 c$ h$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
' L( X  L9 h# ?$ q" `$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
$ j# D( d) X1 e9 |1 F' @( n$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf% L4 n& v! H+ j5 c: j
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
* }; ]2 N3 L( g9 u  ^9 m8 ]/ c
6 J) O( n% H- t2 U# o. \: @2 d6 E7 N* t+ e
启用ModSecurity模块和CRS规则* \+ n& `, R4 `/ W
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。1 z9 i$ z9 R+ X) W1 T* ]4 l  }

; q3 Y! v2 v' j; a( M
0 ]/ @0 A) ^9 V: V) |modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
; j* I% Q3 e& |9 w' y, y; R4 h7 _
& E/ z; a3 q: Q
$ cd /root/modsecurity-2.9.1/2 n4 K& E4 ]! r4 [( B3 U+ j$ K4 f
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  $ Q6 h2 |$ O, X1 G5 v: J) L
$ cp unicode.mapping  /usr/local/nginx/conf/, T. P! H: o# m  j. |+ A
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。1 K& F5 L7 R* _9 \5 P2 [

" _* [! u6 w9 e) F' C" S! }+ Z% Y# k% V! w
$ vim /usr/local/nginx/conf/modsecurity.conf2 f4 p6 Q0 {( V; V
SecRuleEngine On
) y8 u: \/ U5 gModSecurity中几个常用配置说明:
! e* ?$ z$ y) r# F+ |! O( A; c4 o1 w0 Q

0 b" H" H9 f, o9 U; K: K+ w& j1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。3 v$ ^& M; C) {+ F
9 U6 v) N, ]0 Z6 t) z2 v5 {2 V4 S
) c& \5 f6 z7 I" e* `: l- }
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。- J" A5 C+ T4 W" h+ n2 d
' h. Y/ g  L/ I5 {* a1 Y  i9 h
3 m7 N4 C6 w& U; z6 y
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
0 `1 D5 b% c" R8 q
/ {1 a* `  v$ [) ^) ^9 Y5 |0 Q, h4 K" r" Q1 W7 ]* m" g
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。6 @, p' {  M6 |8 r9 z/ O7 y
* q5 S& d+ h' u) b2 [
8 V6 k0 j! `4 @8 Z6 d
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。# O  t7 x0 P) d+ b- I& S
/ m" F, a1 w9 N1 X5 w% H0 Q# \6 s8 j

% d, i2 J/ Z/ z1 C$ \$ }5 c; X3.x版本CRS9 Y! f7 Y5 P$ P6 |& a7 E
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
* c  ?9 V: ~: x. Y2 W# 生成例外排除请求的配置文件" M3 [' t1 x* H/ R9 U" ]
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
/ s; |& F- ]* i9 _" T$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
% }. M  O+ l. D4 R1 q$ cp rules/*.data /usr/local/nginx/conf
( X# C( C% D" K为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。+ C7 c' C2 {4 x# o, L+ m- ?4 |
4 `0 ?6 t* X* y7 x8 [1 U

2 A! }: F( Y$ ~" X3 ~$ vim /usr/local/nginx/conf/modsec_includes.conf
5 E1 T  Y$ F' r) d; C. V
" T9 M/ r5 j( o# P; S
[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
' l0 q8 f% g9 X( B5 Q1 d9 n

$ D* z1 h2 R8 j, `- f* v注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。( ^$ N1 t! S. T& Q
6 X6 W* U7 B, D6 K

" N7 X) R5 e+ ]配置Nginx支持Modsecurity
0 o$ w' e. E2 [+ f; k& E, f启用Modsecurity. Y* S3 E7 T8 W+ V  e- s2 I9 {: q
使用静态模块加载的配置方法
2 D( N' G: L; s9 P在需要启用Modsecurity的主机的location下面加入下面两行即可:
3 l' W- S% W' X( y+ o% |6 n6 F: L5 A# G9 b6 {

  {4 ~  c; b6 |2 t& _$ ?  r! G" lModSecurityEnabled on;6 h2 @- I# z; K9 {+ G) }! o% s: q
ModSecurityConfig modsec_includes.conf;" g1 `7 {1 d" x4 t: N
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。4 Y9 P3 j+ J0 E3 @

8 n, ]" Y2 F. X# _! x# h, T0 s) u& a) c0 j$ l' C
$ vim /usr/local/nginx/conf/nginx.conf' y! g8 U  N$ s% J0 }( e4 Y

9 K7 g; K( E& F% ?3 u5 T+ O" X8 z
8 g/ w7 m) n! R2 X% e: c- Gserver {
. Y+ E/ Q+ E9 X  listen       80;! }; \9 M9 x  {' [0 i
  server_name  example.com;# C: I+ p% L, q$ L9 a/ Z/ w
: z9 ~$ b" G; ?: X( s5 H9 U2 C6 H

" x8 m( }. I4 d! B, B% D  location / {
- |. U  ~0 M& @    ModSecurityEnabled on;0 X/ m% N0 i3 o. ?
    ModSecurityConfig modsec_includes.conf;: I- l( U( z: a1 S1 ?
    root   html;2 Q) C2 G& A$ r% n8 _2 Y
    index  index.html index.htm;/ s$ q1 R0 Z0 t8 C
  }
2 ^1 E* ^$ x% o1 e" E}
+ _. W8 }) W5 R5 i. M使用动态模块加载的配置方法& d, t) B$ V9 e" g; O- |1 K3 W$ o
在需要启用Modsecurity的主机的location下面加入下面两行即可:
; i0 x: L3 @4 a* o
) \' r; N6 U" d3 A' f' q. v. `
- V- E- Y/ v6 g) }- Smodsecurity on;
* u, E+ Y% s0 g# D) [modsecurity_rules_file modsec_includes.conf;
$ u# {3 H5 r" h/ u修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
; l" |$ k( w" w0 w- B7 d2 S( z) G" ~/ g# F( t

0 d. M" s) E. g$ vim /usr/local/nginx/conf/nginx.conf0 m3 z8 B6 o- }. y7 ^" Y
* h+ h, \/ N0 U& d! {7 @- ?

2 Z# f3 r7 U1 n4 Sserver {! f  f* [- O' L+ @& r$ r: S
  listen  80;& \+ V! ]6 ~$ v% h! F/ \4 ]
  server_name localhost mike.hi-linux.com;
: [* Q8 \- C8 I# B9 ?0 ?  access_log /var/log/nginx/yourdomain.log;
% `! }0 ~) F% l
* [& ]. K4 c/ _; {0 Z: u' ]$ q7 s" Z% C' N
  location / {
6 b3 X1 l: a: Y3 w3 u6 g: B- M  h$ [" ~' [( K

/ v: E8 K) Y; _4 I  modsecurity on;* T$ E- j6 h; l( ^% l8 u
  modsecurity_rules_file modsec_includes.conf;0 c2 l8 S2 U4 [! R0 |8 y
  root   html;
7 H9 M( R  ^+ Z3 S6 r  index  index.html index.htm;
2 c  [8 g3 f! t}% h' _- X, x9 R
}% O8 r$ d% A6 I; d5 L# p5 V. Z5 c
验证Nginx配置文件
9 R. x; D9 J4 D$ /usr/local/nginx/sbin/nginx -t
+ y4 n2 u2 d' t$ O; n% ^4 ]0 ?" Snginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
; a2 @. ^# ~7 l. E6 o, i1 pnginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful$ c0 h' k! _1 i4 X; L- O- y6 v' T5 Y
启动Nginx0 s' Q9 _' y+ b+ H! S; `; t( o3 i
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf) e% h* E* E* y/ r

3 D: {# t" k8 X0 ?# [! Z

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

, o% U* |. T* h* R+ s# q; q

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-5-13 07:07 , Processed in 0.076090 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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