找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 12649|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
+ w7 H& H, b* j( h7 k" L5 I: d) {
! Z1 |4 V4 X7 T% S3 g" g, Y
- O) [( d7 Y; T* m在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
5 Z/ q1 U- Y! U
# ~- g. g& j3 c& C! T
+ J7 A& b+ F+ t7 m+ i) @. c$ ]什么是ModSecurity
3 ?0 g$ l. f5 E: _; f4 @0 IModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
, z  D" b1 p+ A6 Q" r' N7 n" k2 s' E- O/ B
) b" ?/ E% _) \- K. v  K! U9 y
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
2 C( B  D; Q3 n" i: v" B4 D7 F( D8 E) o' y' i& @4 X

  v" Y9 T$ {* n  O$ A5 rModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。$ l) {+ Q+ ]1 R  i* L& S7 I6 V

3 y0 X' c, ]; y8 t' S! |% f
% k- ~2 D: c9 n& K官网: https://www.modsecurity.org/1 J; ?( w+ m6 M1 M+ a" [9 O- w
4 {% l7 v- R: `
) k+ |0 v. U9 I& @0 W+ v5 [
什么是OWASP CRS
8 H$ ^' J% d' C0 [# LOWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。1 m2 K& W) K2 W# z+ h

- d; o2 s% ^; F( k/ q8 i6 \4 }5 X1 w
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
) k; p* t* ?# ]- @/ @
. M' W' q9 q" C: F6 b" q3 ]/ d+ z! |, ^: s) b3 ?
HTTP Protection(HTTP防御)
' b, h9 K" i4 a: h( s( C- x( \4 VHTTP协议和本地定义使用的detectsviolations策略。5 t4 {  G% p: o" l- {" d
- ~0 p1 i2 Q" p8 R$ K1 s. O9 k( X( H$ S/ [

: O9 u3 s3 d: GReal-time Blacklist Lookups(实时黑名单查询)) p# g6 L1 d- R$ d' t$ C; A
利用第三方IP名单。) ^: K& [+ P8 Z) A. P1 G' [! O4 W/ E
. J- _% M. w$ w

7 X9 Q- |# G! j7 O% rHTTP Denial of Service Protections(HTTP的拒绝服务保护)$ g$ ~+ y- B3 U; E+ j
防御HTTP的洪水攻击和HTTP Dos攻击。
# d( J+ }! y1 ?; n* z- [* P5 [2 A$ h

: H3 N; K% M/ c- H% \Common Web Attacks Protection(常见的Web攻击防护)
. {( C* y. M0 z! o0 o检测常见的Web应用程序的安全攻击。& W8 Q& X* y2 e

3 `7 i# ]+ z' V9 a0 y  X
5 @. G  R- `9 I3 u' gAutomation Detection(自动化检测); g5 f3 U0 k' L8 O; r) q
检测机器人,爬虫,扫描仪和其他表面恶意活动。
% i8 X5 @; y9 E% X9 C2 s; x2 d' r0 }8 @0 E' H- Q8 X

0 ]. s+ z" l8 i1 QIntegration with AV Scanning for File Uploads(文件上传防病毒扫描)5 @6 `, p' c9 U, D6 q' y
检测通过Web应用程序上传的恶意文件。
; Q9 Y2 i/ L* p. o& q( i0 Y6 E$ t) Q5 k
/ n7 T+ {7 K6 J# m5 v  n/ E$ y7 w9 }+ I2 u  z" v# p
Tracking Sensitive Data(跟踪敏感数据)6 m9 q& y0 C! z" t# H% ^5 w: P
信用卡通道的使用,并阻止泄漏。
1 J( n  i9 y9 Q- G2 H! a  v! X1 O' u& f$ }' {, I/ |
4 e1 O; s/ D, s5 e) R/ N
Trojan Protection(木马防护)
; p8 }- z( R& ]0 H2 L; G检测访问木马。
' O& }) @3 q: u$ B8 C
" D, a( q5 u- _& D+ Y  n4 ?6 X" F4 F' m1 O" E. u: {2 l
Identification of Application Defects(应用程序缺陷的鉴定)
% [) O+ m2 \  `1 J检测应用程序的错误配置警报。
8 ]5 e- e' V) v' I( |
. e( O! Y9 a  L/ j' ?' a5 V! L; j  e- g6 d
Error Detection and Hiding(错误检测和隐藏)+ }5 K& J% G* n* N1 e0 S( ]
检测伪装服务器发送错误消息。) o$ K* j2 {# a- Y) V2 m
" ~. F- K& a0 f2 E

: f! W. b: D: x" A4 q& b5 A; d安装ModSecurity
& L% Q+ d% T; a1 {4 R+ D( O软件基础环境准备2 E9 j$ a+ @1 ?" _- c
下载对应软件包! l2 y; ~7 a; H
$ cd /root
" f$ P9 L6 e# U! W5 J$ I! G# A$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
1 _; j4 q! w; U3 E* o6 P& X$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz
0 U' z8 `8 X6 G" p. ^) K安装Nginx和ModSecurity依赖包
1 X3 ], t% y+ Z4 G2 NCentos/RHEL
$ p; L/ h3 |% T  b$ [( i
" {! ^5 @+ p" F7 X( X/ x1 ]: U% X+ m' S4 G! P# |7 s
$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel7 }* m2 F. p2 z& H" o
Ubuntu/Debian
& J$ {0 }& S2 Z6 K* ~
- c0 D. E$ E: Z6 k+ d8 W
/ i4 O% B/ [) k( Z5 ]4 g! g$ 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* o$ M+ Z0 n$ c
编译安装ModSecurity, E/ L* P& w( P/ q" L
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。  p/ I. ?) _" }- U, o7 W* Y

* x; n9 P$ G3 B/ p5 Y# ~- i( q4 A- _: x  B, z' B
方法一:编译为Nginx静态模块
+ S% M1 C! b% z4 u* x/ p  C  f; _, w/ H. F! `4 s% O
& o6 _/ B) d6 H2 y% F% U
编译为独立模块(modsecurity-2.9.1): Z2 @6 a2 l1 d( J) C' [
$ tar xzvf modsecurity-2.9.1.tar.gz) C, E3 O6 |1 h* l5 V/ R3 _2 D
$ cd modsecurity-2.9.1/. o/ g8 V# e/ G1 v6 H) M7 Y0 `& d; q: o
$ ./autogen.sh
8 k2 b5 X' j' L% c$ ./configure --enable-standalone-module --disable-mlogc* D3 M! ?8 O9 @* L8 x3 T, O; M
$ make  }: Z6 z, H" E7 t! h/ A% |
编译安装Nginx并添加ModSecurity模块+ k: z! D9 e2 ^) \, z9 f
$ tar xzvf nginx-1.9.2.tar.gz8 L, u8 F7 U* ^4 u4 O3 K' Q2 v
$ cd nginx-1.9.2: F2 Z3 x6 t& A  g9 a# f5 g
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/# C, f  u5 l  O1 @1 `# D
$ make && make install5 a+ o! a# z  \+ Q+ B% v4 l( |
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
3 O* _8 R+ u$ H6 L; C8 T# n8 j
) ]' z+ V' }+ R- ?' |5 f+ k" w. i! P2 j  ]2 a7 {
编译LibModSecurity(modsecurity-3.0)
- ?2 u. e. u% r9 o! q$ cd /root2 f' ~3 Y7 T8 h1 c% c3 j4 Q- a
$ git clone https://github.com/SpiderLabs/ModSecurity
: e5 I1 j6 a5 Q- ]9 ~% ?$ cd ModSecurity+ z! k3 n6 E! }# t
$ git checkout -b v3/master origin/v3/master6 e' L# z- h9 O& U2 J0 {" [
$ sh build.sh, \- G0 i6 P( B7 b+ q! V
$ git submodule init: m2 b8 J4 q* ^0 @  v
$ git submodule update
: {' R- Z; e$ @+ N$ ./configure
5 h! Z2 x# X9 r- H- _$ make  y2 M$ a! O- A- \
$ make install
6 K! F; g* X% e2 F4 QLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
3 S% B7 v& Q. r: A8 I! e
$ s# l9 l  J) \2 I0 Z9 n$ I
+ n- j1 c. {5 c3 K( Y" K- ^$ ls /usr/local/modsecurity/lib& ^% |! ]: ^2 f8 g2 W& C! j
libmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.02 I7 C% Q& V$ [$ k( u) }
编译安装Nginx并添加ModSecurity-Nginx Connector模块3 R: }  B0 t/ A$ u  Y5 F
使用ModSecurity-Nginx模块来连接LibModSecurity
1 w! }+ d0 o4 C# O/ T+ P& b6 H$ b8 G" h% ~

  H6 @& k9 ?+ Z+ y+ p$ cd /root
- u$ |; R6 z8 o- k/ \3 q0 S$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
9 o/ o; V+ a. f9 w& }$ tar xzvf nginx-1.9.2.tar.gz
$ a- l. O' }5 M6 o$ cd nginx-1.9.27 z; g  C8 N$ s3 U! m$ P* A3 p
$ ./configure --add-module=/root/modsecurity-nginx
: r) v" \& L, X  c$ make
: S% e3 K! u6 W! E8 w7 y$ make && make install6 D5 G$ f8 ~- w+ V4 o* {
添加OWASP规则. o2 F4 _, O5 g! E7 ~2 `
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。: u9 t7 J5 I5 {' H

% w$ P* b5 g  ^6 r$ \- u) H
$ f# @0 ^! Q) A; \5 W: N8 \下载OWASP规则并生成配置文件* J$ f1 |; X$ G% Z+ L$ ~5 t
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
; h" P8 A$ ^( x9 |2 E% b$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/
$ r( l* m  Y" l* M5 ^6 a$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
: D8 {3 h% q( a( _. U% z$ cp crs-setup.conf.example  crs-setup.conf
: H: G0 O: Q  u1 g1 J. B配置OWASP规则1 v* w; \! r  |( w, l8 ?4 B
编辑crs-setup.conf文件9 J2 A7 M$ T- x6 H5 w  m
2 f: Q5 X( t0 M5 k$ H
1 ~/ B7 h6 h/ D8 O7 z
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf& C) g" G% o- C3 S- ]* X
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
# G- |% r9 i- }& Q0 Y/ l9 |& T+ A$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
  h& `0 r" v. _! K3 z& ?. j% j$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf4 ~0 R8 r5 V* v
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
: P  H! g$ A5 Q% V3 [# ~( U* }$ n* A: f6 K, u0 ~9 c: y7 q& l
. T3 `% @* K9 m+ Q2 Z2 D9 y0 l
启用ModSecurity模块和CRS规则' r# F$ c' ]' r! d8 t! c
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
; _4 W; @1 r# [- L4 M( G6 J0 }
9 k; h4 X( Z4 U! n8 z. @5 L# v. x, [
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
2 U* D2 V' F8 \2 W# {+ l7 l3 r$ {* Z2 d! w  r

" H8 }2 w' {9 q$ cd /root/modsecurity-2.9.1/) d6 A5 c3 I2 l
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  
0 F1 r$ n) u, r' U. R$ cp unicode.mapping  /usr/local/nginx/conf/, C/ E( y$ R& z0 [( D
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
) |- t) |. ~; X- U0 q1 [9 A2 b& N" J0 k; p
; _8 h+ h3 [1 g5 x
$ vim /usr/local/nginx/conf/modsecurity.conf4 q5 v3 y) w" s  P
SecRuleEngine On* U6 }$ c% i1 U7 x, o
ModSecurity中几个常用配置说明:
7 Q. S" g% r2 T9 W
4 L+ f7 u* _3 {+ @" o( \0 G  @9 q) B. m, K
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
8 \8 g6 u0 v- |5 M$ d) h6 g1 m

5 d7 N& K$ ~/ s' |! l* H) P2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。& F5 {& l$ q. O; ?& a7 ]

& A$ B9 b8 w5 b2 j, e% l
1 O4 r6 H# d2 M0 {) v8 g3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
' n! B2 f- D' P/ ~' d
/ Q3 T. D; B- j! y" _. J+ {2 |9 A: O8 C
/ y3 P" w" g1 x+ b4 L4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。% B7 p8 D( f5 a. X! w( a
9 ?3 p7 t$ V6 p2 f+ |( f

# J# R9 Z0 G. U: r6 t+ G9 j9 Z4 I在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
& k6 Y% _( F3 C( X5 _$ o: J6 _( b$ S- {" Z9 Q( y% U. u
, l9 ^5 q% ]' Q
3.x版本CRS
& G$ M' T* I0 r4 Y$ cd /usr/local/nginx/conf/owasp-modsecurity-crs) o6 \, x- F" q: [$ E$ s( ^
# 生成例外排除请求的配置文件$ a6 N! ^+ P1 Y
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
4 V5 \% @7 d* p% R% W$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
) b3 O  Z$ k5 p1 l' p2 k# y$ cp rules/*.data /usr/local/nginx/conf+ L0 r8 t2 \4 O2 w3 ~2 A
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
. Z( e' O: @, M5 i$ {1 ]/ L1 w: R' \. |6 P: O/ s. b3 l5 o
' T( S- x5 P. y8 T6 L$ ]; q! ?1 x
$ vim /usr/local/nginx/conf/modsec_includes.conf% E9 g) J" L8 Z/ F% [6 P& M1 o3 c

0 g6 X! l0 r6 S9 K( Y) H7 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

4 \: l" G/ A: L+ D; d4 n0 I$ [" Q+ u- ]' N& m4 l
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。- S6 ^) z$ @  u4 Z& s
% d8 `6 q9 F0 F& s

& Z% ~$ m5 l* h) ^配置Nginx支持Modsecurity
8 v; B& j: x( M$ `启用Modsecurity
- J- x* Z4 A" {使用静态模块加载的配置方法, H( S+ c1 K7 u6 J2 y
在需要启用Modsecurity的主机的location下面加入下面两行即可:4 t4 c/ D* }/ `

' Q9 J6 O3 V9 `5 ], P
, q; ~- ?% A! P" }  d8 hModSecurityEnabled on;4 w& W2 ~4 u% W7 y1 j( E
ModSecurityConfig modsec_includes.conf;  T6 l6 T9 X; L& m7 q
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
$ N8 P4 k6 j/ r: B
( ~1 M& i. H/ Y+ n% G( G3 o/ ?2 w5 v" L3 w4 C
$ vim /usr/local/nginx/conf/nginx.conf! I$ `, [& _* z) _$ C7 P5 |" n' N

4 @. \; I  a8 _( D& z' S. @- ^# p( t! F9 N, R  N: z8 d0 G: `) `
server {6 d: F! {5 Q% D0 s/ P
  listen       80;7 {6 {9 b- Y  E* s% f& l
  server_name  example.com;
; }: N4 o' R7 {* F0 V8 E4 g2 e6 E% U% r! n

. r6 t0 t' u1 W) N$ ^  location / {; Q( z$ }2 x4 o4 D7 l
    ModSecurityEnabled on;
  R( h3 ^+ l, I: F3 J2 {    ModSecurityConfig modsec_includes.conf;
. \8 F( _# H0 ^# V    root   html;3 V! b; p) C7 J' K0 F
    index  index.html index.htm;
* W1 [7 N6 B. V  {; A9 ^: `5 R  }7 V1 D5 w6 ?. K. u4 v$ Z% R
}
+ i. o3 ?3 h' n使用动态模块加载的配置方法1 \- `: J, |1 G1 d- s
在需要启用Modsecurity的主机的location下面加入下面两行即可:' o6 Q, ]/ v+ W; _! a4 I8 n8 [" j

' G  o. Z+ _( q6 ]1 S/ r
% O3 M/ m( E8 @5 Amodsecurity on;
, y  B, \' }8 U5 U! A- I5 b! emodsecurity_rules_file modsec_includes.conf;
% w' }- r8 q# N  U2 N; z5 i8 q修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
" t) v7 r% @  L; U
  v. A% L& I0 ], ?' a' p2 {. w" r
$ q! I7 N6 X* y" ?  P) {- x. H$ vim /usr/local/nginx/conf/nginx.conf
% m/ o3 y  ]4 l! k" z
6 }3 J/ n7 W+ l4 r! h7 X& Y9 U' Z
8 u: S' {4 p: A1 z9 nserver {4 w+ |( l2 u# m  I
  listen  80;
2 A" V! @2 A& B( b7 W/ ]  server_name localhost mike.hi-linux.com;
, ?' f" n/ h5 u8 Q( k. W7 R  access_log /var/log/nginx/yourdomain.log;7 U" d8 Q+ G3 `6 z$ m+ Z- H& m% i

2 O# B# ~/ c6 {6 I! h, C! N! I3 N3 o: {! m: k# R
  location / {
$ {$ s; ^4 \. w- B! T- y* i7 W! b+ s8 H  h% j" v' R, U' Y5 b# g

7 l9 f( Q& b, h  v9 p3 `, K  modsecurity on;
, X) {) V* k# Y/ Q( L  modsecurity_rules_file modsec_includes.conf;; h( x; _% P; J
  root   html;; c0 H% `" X. |) u
  index  index.html index.htm;
' r( L# h3 s: j}
  q7 Q2 N, m3 z* Z+ K}) o) J$ M+ J. O; a. C% I
验证Nginx配置文件
1 I" _# `. |0 p& S$ /usr/local/nginx/sbin/nginx -t
, W& Z5 ?# X# Q% t3 |8 wnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
! M9 h( u  V; T& R+ enginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful3 i6 J( |8 g/ v- D% I6 u
启动Nginx+ d5 i; {5 S. w+ z; B* z$ O" [, E
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf: Q: n3 g5 w; B$ a! A
* _. p$ K* q4 W6 x2 E: 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能够战胜更多复杂/未知/混淆的攻击模式。


* W' q( k( h- u" G( m$ Y- \

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-10-24 05:39 , Processed in 0.077617 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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