找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 10819|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。+ p( i2 a( r- l( P
' h- @5 C( b, D: I, c: }6 F
# k2 \0 z2 a" [# E, _4 u9 E( U
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。7 e( b  n. p- Y& o

% ?2 X& K2 }$ `6 f9 n' H- Z, g7 i+ t' E8 y
什么是ModSecurity
, C1 u3 x$ w; lModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
8 y' b# q, {* @0 S! s# p) k  h# v" s1 u1 l, W
" ~/ w0 G: u$ H$ W" D! K" N; I
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
8 L- W* f# ~# H/ x' B; K
/ c, }1 x  G$ M# H( h7 N' N, A1 S: o
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。/ }* y8 R' U1 d2 P  U0 I
. h2 Y! q" o5 m! U- c" V
* Y  z1 l$ _$ G3 Q0 X* q( \
官网: https://www.modsecurity.org/
2 E1 Y8 k2 y$ ^- j
9 c0 [0 q7 t+ }! v. Z- j; {6 r, ?$ B2 }1 j" j4 o! ]( r
什么是OWASP CRS) ^+ t$ @+ R7 {- t0 P) g+ {
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。) S& A6 m! ~( Z# l# {2 N; u; N% z
" ~- u) U- Z1 g' }

6 G# N' }& n2 k* WModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。& p" t' w( _" N# C9 D6 n# k
- }7 t% ]  {. C+ D" X
4 g! r2 i& `0 `0 K( |
HTTP Protection(HTTP防御)$ O  ?) s% {/ U. l, ~% b7 s2 ?
HTTP协议和本地定义使用的detectsviolations策略。
7 Y4 [9 L' ?4 J2 z, U6 |' ]( ~3 R5 O3 ^! c! W- ]

% \2 v% x- c% d9 mReal-time Blacklist Lookups(实时黑名单查询)
3 ~& T& V, x5 X+ y  F# H9 @% q利用第三方IP名单。6 R. n0 i6 l% G0 D

7 U5 ~5 n( B$ k; I7 U) W- _  n) f1 z, f5 g0 ^+ q9 O( J
HTTP Denial of Service Protections(HTTP的拒绝服务保护)8 W+ o* z) j2 q2 ^( o
防御HTTP的洪水攻击和HTTP Dos攻击。/ V, C2 |0 a4 _( I3 j% K
. f3 L. h9 n: v. Z0 i& C( K

4 }2 E, x0 J+ f* |/ r* X# R: }& }Common Web Attacks Protection(常见的Web攻击防护)
( q! y) P4 t- e& J( ]. E8 L/ s检测常见的Web应用程序的安全攻击。
2 I5 G3 f# i  M. P. ~
# N( e. U2 E7 l7 N1 Q* b/ G( J9 D" c; S- J5 p8 i* r0 ~! E/ v" M
Automation Detection(自动化检测)) f" |$ y7 X% v* ?2 E1 o
检测机器人,爬虫,扫描仪和其他表面恶意活动。+ p2 a" c3 O5 }) z- D" x5 C
! Q0 ~! E4 t; _. g1 I: k, ]
7 g% Y# A  d' S" I( z0 r  S
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)$ S, J7 W2 F' ?: H. k: Y$ ?* Y
检测通过Web应用程序上传的恶意文件。
6 w9 N$ U( S2 m/ P
* `4 g9 S( U! @" v7 O/ k
  y1 R2 s: [) M. {$ lTracking Sensitive Data(跟踪敏感数据)
- G. g1 X" z5 S" o1 K: C信用卡通道的使用,并阻止泄漏。( j. P# T) R3 j% C4 l+ Z1 t+ Q* t
0 l* y5 V* }5 g8 W0 `" X
3 G2 ^( Y% P" K) b" W) q
Trojan Protection(木马防护)
: s- U0 Z+ {( r9 g8 y; t# A6 Y检测访问木马。4 |  Q2 g: @' S3 t3 g, q" J

) H7 G! j2 y8 k' J; u: e, [5 r6 }$ z. Q! }" B2 c7 J
Identification of Application Defects(应用程序缺陷的鉴定)
5 D( o2 @. K# P% l7 y检测应用程序的错误配置警报。" _0 m1 g3 A9 D' `

/ t6 v- [  }& V; ~4 l1 a& ?5 X6 p# |2 ~+ d
Error Detection and Hiding(错误检测和隐藏)/ }1 W& ?1 P8 n  S2 |
检测伪装服务器发送错误消息。
3 [8 B2 O5 x: Z
$ V1 G0 z1 P% A3 t7 @" t1 q. m
! v" j" |/ @  z# q5 @4 s* p安装ModSecurity3 E, ]3 C" e6 e+ u3 G6 ~* s& @" F  N
软件基础环境准备7 {; z- m' p- G
下载对应软件包
+ G8 [( J: B/ C1 `9 Q4 E$ cd /root- @+ i8 T6 `7 L/ X
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'( @$ L9 W% q6 c0 c" J
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz
1 L" c' {7 I6 a; `5 N安装Nginx和ModSecurity依赖包
# t* ?! E! ^5 e8 x6 @. FCentos/RHEL
1 H+ e+ H0 x! G" K/ t0 S, J% ^
# E* P; _  u8 p4 @
& q/ I' W  A$ ^1 s& b. Y$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
( A1 r! n4 [9 Z" x4 s8 |; GUbuntu/Debian
# D  X, \: z& i( `% ]' O6 \& b' u2 z. V% ~# T; M( D+ i) m$ a$ C
+ F$ @% K# C4 i1 H& }( L4 Z+ k
$ 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
& [; w4 S2 n5 C- c$ T8 d3 r编译安装ModSecurity& |6 J" |' T. P& |+ W" W# Z
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。8 @/ j% }* K; x& {: h$ n  J; A' q. ]

) z7 {/ [+ \7 Z- ?
0 e; k6 O( E6 M方法一:编译为Nginx静态模块
3 c$ F) \& Q% {0 h# n3 |0 l# K2 z1 M. a: R
: ]9 D. q. c' k2 J9 z4 S
编译为独立模块(modsecurity-2.9.1)% G* b7 g) j& i% t+ P
$ tar xzvf modsecurity-2.9.1.tar.gz3 H8 b- M, F) {8 o$ y- Q2 z, h3 e
$ cd modsecurity-2.9.1/
6 S3 r( z" U. G  ^$ ./autogen.sh) g3 Y# }* C! R8 Y$ H7 S/ U
$ ./configure --enable-standalone-module --disable-mlogc$ ~3 S: d4 g7 x+ p# _7 s' V2 G
$ make1 F# L) c8 ]* }) F- E
编译安装Nginx并添加ModSecurity模块4 F: u; y7 g0 B# g* Z9 C8 e
$ tar xzvf nginx-1.9.2.tar.gz3 ?8 H. ?- T9 R8 N6 h
$ cd nginx-1.9.2; D' G: }+ ?9 m! q/ _% P
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/( T' o! z1 Z9 \8 Q/ h: w" ]
$ make && make install# D: _- }  _! k5 u9 t1 j! n' k% B
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块: A  o. i2 {* U6 V

3 {8 [1 x# [9 K) A$ B9 f7 E9 r6 }6 X8 ?, \5 \
编译LibModSecurity(modsecurity-3.0)
# f/ o; x9 V- w+ D; n$ cd /root4 k! N0 f3 z2 U
$ git clone https://github.com/SpiderLabs/ModSecurity
: K2 m- ?6 x8 T: x1 W2 L$ cd ModSecurity3 S# ^6 L& ]4 ?! t! {7 Q
$ git checkout -b v3/master origin/v3/master) Y' H/ F# o0 h, [1 I
$ sh build.sh
$ P0 M& I6 X# X+ q1 R1 C$ git submodule init1 s( Q$ y2 C0 v1 Z# a/ I0 z
$ git submodule update
+ @  w% l: `3 ~& r1 H. U$ ./configure- r, }: i" q4 d6 V& W; \
$ make
) f, E  C8 [% O7 h$ make install, X. @- b( {( y8 M( w' m
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。; u) R3 z+ k( t& Z
5 b6 H3 R* F$ w& z2 H5 u0 I- M
3 M: c( }) y! m7 a6 G
$ ls /usr/local/modsecurity/lib
8 p# Q7 q( w  S3 }libmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.0& K! m. h- {4 a7 R3 ~6 Z4 ^* C# }0 U4 N. U
编译安装Nginx并添加ModSecurity-Nginx Connector模块
$ _/ X) h' Z& I+ R- }* {5 C使用ModSecurity-Nginx模块来连接LibModSecurity9 w7 B/ Z, q, \6 j7 l% l

" t* W0 w6 s( r
% T& s) G9 q8 `$ cd /root  J' ]+ L$ I5 P* h1 o
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx8 ?, Z6 P8 S4 [% t% m
$ tar xzvf nginx-1.9.2.tar.gz7 B  q. N% Z) L
$ cd nginx-1.9.2
" m( F- Q+ w8 p' d: o$ ./configure --add-module=/root/modsecurity-nginx
4 R  g/ F$ N, s, a$ make
8 w" U3 A* ~0 r$ ~5 I% l2 ~$ make && make install0 r' X1 G" }8 H; G) O" K
添加OWASP规则
( U' t- [. L- R1 t* ]# k( eModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
$ l( I% L7 O, |  _8 }+ V( D
1 J/ d' ]/ m* r8 W$ X! W' o$ T) ?4 N( \
下载OWASP规则并生成配置文件( F1 b8 }3 g* T) S; }. Q3 k
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git2 s. F  p- p3 e5 ?5 {% T# W
$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/
- R6 p# n' S% y6 x' r/ d% U2 S) N$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
6 F9 p- g5 L. i" i3 G$ cp crs-setup.conf.example  crs-setup.conf# x+ Y* D; N1 i# h+ s
配置OWASP规则
8 G+ Q8 x: @1 P% e: O: e编辑crs-setup.conf文件
- P. p' N" `! e& p7 N0 y
' R4 m+ w$ y" \: L& I! m' e
) {$ H; r9 }- l* @9 l7 X$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
1 j" ~+ [% b7 \- a+ T3 G$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
  F/ W0 h$ p0 x4 i1 n3 ]$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
/ O6 v8 m7 a, q2 e4 n' {. }$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf- p4 s+ ^0 J. u$ y- N
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
! R9 E5 d& C( \) d7 M4 L" K# v
" G3 C+ n# k4 P, |' G/ k& Y( y! w. m0 B* L
启用ModSecurity模块和CRS规则
$ Z/ W8 {2 \# d) j3 R- G4 d; w3 }复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
1 Y* R. v- `0 J
$ i, U; ~5 k3 X$ E2 Y" V* f3 X4 Z, W. l$ z" s6 h
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
4 R% F) D9 B5 Z+ S. r! ]& t) @% p+ L4 F
# F+ r5 |" q# F2 m% g9 J3 V6 {
$ cd /root/modsecurity-2.9.1/! U3 \7 f" q* G1 _% e9 l
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  4 S& J- `' Q( z$ @( V  G+ P
$ cp unicode.mapping  /usr/local/nginx/conf/$ H+ d/ Z, ]% f3 r8 s
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
  I. J9 T2 r  R. N4 I4 ~) n0 Z( C
$ c2 `7 _! q* }& j
) G* i; L' Y$ w$ vim /usr/local/nginx/conf/modsecurity.conf
2 I6 H; H9 B# p; PSecRuleEngine On
& K! a" O' _0 S* JModSecurity中几个常用配置说明:
& N: ~* {$ E8 K. |& d4 r* H2 [1 s. g( G7 T* B- o7 c
# |3 w1 Y5 ]# }, ?% `6 k3 s6 j
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
3 b" t1 W# @2 g7 U" E* E: u. h) Q
; I2 ?/ g$ l: }5 l+ e
& E2 c3 I' M+ y  A- W2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
0 V( D$ i/ p) O/ h+ ^6 w7 J2 ^4 W8 e7 k$ v$ l! G  l6 O

: k: Z. v% ?7 G* R. e3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
- [6 F% W7 y4 o& ^4 h" H
- R' j( @" i/ H& ]3 q
9 L7 k0 S- l. t. P& k5 z$ A7 m4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
, e+ Z1 T! n- _% W+ S" }! J( i' A' g
8 d8 ^7 j# W* S; W1 x
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。8 P# C5 V  ]1 k2 ~0 ]

! P) _! m- P3 O# W( X
, ?( U* |2 H5 v; Q) s- ^& w3.x版本CRS/ H7 C6 O& x7 }) ]& n' v
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs7 f  u- Y( {  }
# 生成例外排除请求的配置文件  U8 _9 h. D: I: p
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf8 X% Y5 C" c; k% P2 w0 ~5 B- L
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
; U: n# d: F; b$ cp rules/*.data /usr/local/nginx/conf
6 l4 F( D  D# Z9 l7 e* w4 z% O为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
" x6 s9 n5 [2 `5 P$ ]$ `' F$ q/ U4 |# t) w& x/ o! g' z* _
/ w- s1 j, m! i1 q* s8 j
$ vim /usr/local/nginx/conf/modsec_includes.conf
/ h# @$ W$ t6 p& c; J7 E  w
3 U9 W* A" ?7 w' M, F
[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
8 X3 I% M; v2 Y& G+ }

  q; o$ Z2 F( t% b1 D注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
; v. {& Y6 p1 [7 n# ]% A' ]0 O* C
% y4 Q% u5 e4 Q9 T$ f- |0 `$ b5 G- A& {2 E
配置Nginx支持Modsecurity) q* b  F1 V2 C4 s1 |
启用Modsecurity( e- M  S6 o0 i. ?/ I& y
使用静态模块加载的配置方法
& t" K" y4 V0 U# s3 k7 i) U在需要启用Modsecurity的主机的location下面加入下面两行即可:
( Q& w" M: @) y
* w  f6 S- ~/ ^! z3 x8 a8 s! w
# A& b: e3 X1 \ModSecurityEnabled on;
9 S. h) R1 o' x' \. g* J; A; VModSecurityConfig modsec_includes.conf;; l$ O3 u4 l* Z+ c
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
0 a" e# R/ Z. i
) i3 y9 l) U4 G; U3 Z% d7 a: p; p7 T+ t2 O! j2 w% ]8 A0 V; [: v
$ vim /usr/local/nginx/conf/nginx.conf
5 q: C% [0 T4 |" A; k
: I4 H! w% r$ p# t! I0 K  Y9 d
server {8 b6 w! t; ~; D" s5 h
  listen       80;0 T, V# _8 B, i. g4 x6 |; [
  server_name  example.com;$ `5 [9 P4 `. Y, ]8 m7 ~

% ^9 [5 W8 O9 Y; ^/ E2 ~7 R) H) o! _% s
  location / {6 f* [7 H5 U6 ^+ p
    ModSecurityEnabled on;
; Y3 m' I  I) V6 k+ b$ M) z    ModSecurityConfig modsec_includes.conf;
5 [5 H! g' V) j% r    root   html;
. u: C# {! G! C, l! d4 a    index  index.html index.htm;# f$ @+ u* a3 q* v, w$ n/ o) |
  }
1 K' I+ }4 s: \7 ?& Z}* P2 j/ l6 O6 L, R
使用动态模块加载的配置方法
8 {9 d8 u1 B4 M' D& |) X9 A在需要启用Modsecurity的主机的location下面加入下面两行即可:
1 D3 n( \3 B& y3 Z; c
) w' u  b% |, ~: E5 C) N1 @- O' D2 V( j  R2 K4 ]2 h* a' c$ U3 ?4 I/ \4 c
modsecurity on;, H* Z" Y3 a4 l  f( C3 [
modsecurity_rules_file modsec_includes.conf;
" X' a# o; M* o( T( I5 R$ k9 C修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
+ L  ^7 P! l! q. u1 V3 O( O  |$ `( o+ X; r' e
# A9 @; s9 T" K
$ vim /usr/local/nginx/conf/nginx.conf
0 W6 }4 \. t- r, _& @& E* b4 ^2 t: h" x8 i  ?' X; r* x5 A& ?* D2 Q/ W

$ h, r8 J# A. T& K! [server {
( S8 R  E1 ^$ E  J6 k1 Q2 U  listen  80;- e/ d4 D3 C  ?! Y3 m4 u: l9 i
  server_name localhost mike.hi-linux.com;- H2 q# Y9 \- O" D& A
  access_log /var/log/nginx/yourdomain.log;0 L6 I4 n9 W5 n7 W% U% G4 M) f% K

- E! H; @! o0 U4 L6 H9 P; r0 t- z/ B# o  @' h% _
  location / {4 U+ \2 W6 _3 c, l8 M* `* Z! h" ~2 X9 T

9 d2 B$ h/ X1 M0 P$ v, ~1 I# }, O
2 c; H* a% }$ j# `  B4 Z% O5 I4 Z8 j/ d  modsecurity on;% \8 O$ M4 w% i9 A1 s5 a3 @, w
  modsecurity_rules_file modsec_includes.conf;
$ m% v6 t9 }: B4 I' Z  root   html;4 q; }; i8 r  w
  index  index.html index.htm;
  t$ g& T! Y) r# k0 N; `4 d) m}0 N5 s) f  a7 d! X" c$ T; Q
}6 m1 B0 _1 e# q' Y3 P9 B/ P
验证Nginx配置文件: _9 v' u2 e4 t  b
$ /usr/local/nginx/sbin/nginx -t2 o/ r) V! Q4 u! E$ G/ \2 S
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
0 F; b9 O9 J( q; {8 a6 I( lnginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful" ]8 M9 @0 M4 V1 M7 f# Q
启动Nginx0 h) c( }/ H. g2 d0 V* i& i
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf# {: Z9 Y  y5 S  j0 O9 ^

4 U0 z. t! K0 X3 ^9 p1 a+ e

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

, z* L( {& S/ s5 n5 s! V; C5 j8 U

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-4-12 22:16 , Processed in 0.081088 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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