找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 10309|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。* F& c; T  J* c5 }7 Z

9 t" ?$ U7 V7 }' \& K" x+ @
; i' w7 a1 o2 }' v; m$ v$ [; O5 K/ I# G在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
$ \  e( P- Q" s4 [0 W' f( Q& U4 j' b- k
8 ?8 D3 v& G" W0 N: L* m  V- K
什么是ModSecurity
# P$ o8 i. c) w* X. t6 J! jModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。+ ?- _8 Y1 y8 v$ M- u' k! i6 O
  ^" p$ Z+ S. K
  v; Z$ y9 R4 P+ ^$ U
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。0 h% k& Q, X: C3 r

& S% k( U- W4 G9 k( v$ x7 ^/ b; q" U2 Y* _
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。( v3 o: ^, U: P/ p$ ^

2 H2 o- v% S6 s6 S* d6 Q; N
9 j8 y, f. E+ U* O- M( A& F官网: https://www.modsecurity.org/( z- {; a+ k$ y- t: A. N: i
' P5 M$ F0 ^! O  k+ I

. ]% p& f4 ]. M& i# A! M0 `什么是OWASP CRS
$ x$ n3 L; y2 @$ R' p$ H" B2 jOWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
8 m5 L$ H4 ]' I1 Z6 V, b2 }& Z
# c" |0 ]4 G0 i# F0 P6 e* l/ w
! W) [9 }: y' u5 J2 B+ I2 W8 ZModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
' I# v4 N7 }# B6 W# Q4 u; E
  \2 s1 h- B2 y* g/ v+ a, n  o& R* H7 ]4 B3 T
HTTP Protection(HTTP防御)
. s8 D) m' |9 ~4 ], L  q3 OHTTP协议和本地定义使用的detectsviolations策略。1 m. l  a0 w5 I; {  J
9 U; I1 c! n! ^5 X0 v- v. ^7 @8 Y
9 U8 y: I2 t' u$ X% ?
Real-time Blacklist Lookups(实时黑名单查询)
' {: t; u( h, S" d% d利用第三方IP名单。
+ x2 w( e" t' |) ^5 n* L" E- E0 N0 c4 L3 I. Y4 ^

2 o" Z" }9 u  w% _1 CHTTP Denial of Service Protections(HTTP的拒绝服务保护)
/ J  v1 k, V8 {. x! `" r9 S; A防御HTTP的洪水攻击和HTTP Dos攻击。
, s' j; n$ H3 w- x! c9 \" ?5 H
) w* g1 k$ |( e. L* D# P; E" Q0 L2 `0 m; d/ g: Q9 P9 |
Common Web Attacks Protection(常见的Web攻击防护)* _# a: x+ l' Y  z
检测常见的Web应用程序的安全攻击。
/ `( }/ g, C1 I' R  b. v4 S& L/ X

1 f1 i1 Y, J$ }7 K* vAutomation Detection(自动化检测)
& C$ R9 N( a3 N7 P. G: _检测机器人,爬虫,扫描仪和其他表面恶意活动。
2 a; o6 X4 Q! b( l8 _. `/ W
7 H4 Y" y' Q& f6 T, Y' z  m
, M+ b) S% s! r! O, yIntegration with AV Scanning for File Uploads(文件上传防病毒扫描)# z. ~: g8 \3 ~
检测通过Web应用程序上传的恶意文件。$ p- s0 P8 k6 b
+ H7 \% w  v. {! x1 P8 b

7 D' R' P+ d" TTracking Sensitive Data(跟踪敏感数据)
+ z% L& f; z  R7 v' ~; S4 O7 \) Q/ Y信用卡通道的使用,并阻止泄漏。
5 M; U+ P0 [! @9 |* G
& ?) w* w/ ]9 a8 _/ G
- k4 z' A9 P2 y( [Trojan Protection(木马防护)
0 ~% b, S1 T( x, g检测访问木马。- H+ @* I% T/ e! c7 p
/ W# a. j: a. o) D; b/ |1 G

* u; w! H7 ~  \8 g/ R3 s9 xIdentification of Application Defects(应用程序缺陷的鉴定)
: i! ]: @% z  @0 c4 Y; I, U! v9 [检测应用程序的错误配置警报。
, c/ `- Z3 E% [- o7 g
9 z3 X& ]* K" C1 n4 f
/ p  t) q+ ?0 ^/ BError Detection and Hiding(错误检测和隐藏)
, ]/ K# H( Z. v! C0 Y检测伪装服务器发送错误消息。/ V9 U6 s% f1 e" U) z; M
' ^6 P' `, }$ U! c, i% z" [
" H7 P) U$ ?4 N5 b
安装ModSecurity$ O' D; e' A. Z
软件基础环境准备
% R/ X' ?* m- C* ]& b( C0 ~下载对应软件包
8 e4 q3 }$ b7 D7 S4 B$ cd /root
7 \) D7 f8 W; O$ r. \2 s" s$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
# P. s) C' e# [$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz* W7 M0 `- M* i1 G
安装Nginx和ModSecurity依赖包' J  R3 a. h/ Q& k" P- x2 [: [+ z
Centos/RHEL
( b; P0 q8 E4 T# h4 Z: Y3 s" f$ G5 B

, J7 N1 F- C& w2 z% |, Y) }" t1 w$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel! A# a, Z9 d) X7 Z
Ubuntu/Debian( a# r2 O1 k8 I/ ?" H

$ [( d  G5 A9 B& Z4 G
3 U- |1 R, g% I& x3 K9 J0 e$ 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
# L7 l: `7 K7 X9 ?编译安装ModSecurity9 ]. b# D- q* H% t! e( O
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
7 {( G; ~. C/ Z% s5 d  K+ j
( J, K1 j6 ~& _7 X4 I5 q6 n0 y# w) r3 K' h, H+ f
方法一:编译为Nginx静态模块
  @8 S7 w0 Z, K& Q" q, ~
+ n* h. i0 J* ?: A0 _7 @! J1 X7 q* l- q2 G
编译为独立模块(modsecurity-2.9.1)
* Y7 M. f9 ^7 l- N& z/ x$ tar xzvf modsecurity-2.9.1.tar.gz6 O* C/ \2 s8 w- q! k
$ cd modsecurity-2.9.1/
* L( V0 Z, @! ]- T$ C( ]( X8 w$ ./autogen.sh& K) t0 Y5 D( r$ ?+ N) Y
$ ./configure --enable-standalone-module --disable-mlogc
- C) I' p( n/ z: S$ make% ~  r. [/ l3 b
编译安装Nginx并添加ModSecurity模块
0 M0 E1 C% l9 _4 f% O+ B9 [$ tar xzvf nginx-1.9.2.tar.gz: s" P  O- X( I/ G
$ cd nginx-1.9.2
5 G1 ~5 s1 o- {( C$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/3 b$ W/ A9 H3 g& u$ s0 b& A  ?8 p
$ make && make install0 G* P+ l7 ^+ }. |9 u
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块! J3 ?8 N+ L- P2 K

2 I4 y  \% N. d9 o6 ?4 E5 N
) l' u' S% j8 U! b( M( U: n编译LibModSecurity(modsecurity-3.0)
" U8 h/ q8 u: Z$ cd /root
4 k$ |. t. N. O* k% M! b5 N$ git clone https://github.com/SpiderLabs/ModSecurity) O- K0 I# Q1 [7 I$ u
$ cd ModSecurity
" A% C2 z. I; d  H1 e! s; x$ git checkout -b v3/master origin/v3/master# L5 N2 I: `. g$ D
$ sh build.sh3 c9 \. v- k) y) R- ]8 u* s9 o
$ git submodule init8 c9 b. T0 Y* Z4 |4 U9 u2 B
$ git submodule update
7 D' T& ?& J9 q: x6 B* I$ ./configure
1 J5 Z7 {1 @  j/ F- \$ make% {0 b! x+ f, e. Y6 w
$ make install+ m" m) ~" ^( V+ K( G$ h
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。& \1 S* A9 q+ {4 w2 s; z  t4 \

9 \$ y6 w( `/ `; ?1 h4 x! h& L$ w' x) A0 ]9 K9 ?7 q! i' s( |0 A
$ ls /usr/local/modsecurity/lib
2 ~, L- D3 b$ Z0 \7 `+ Nlibmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.0
) U# q/ v8 J% K" S$ F* M, S编译安装Nginx并添加ModSecurity-Nginx Connector模块
3 P! c5 A+ ~1 z/ S- @# _使用ModSecurity-Nginx模块来连接LibModSecurity9 _& {- a9 Y2 u0 R3 _' s! `
5 c, [; u9 \& q  b: w! G! k' R' V
7 h6 z9 E: S* p& z- z  w2 Q
$ cd /root
& L8 p- L. p) V# |$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
; L5 Y; b; E$ T' x5 p% f, h$ tar xzvf nginx-1.9.2.tar.gz, ?+ a7 A1 J( Q
$ cd nginx-1.9.2
  A& J# h0 }* U& M. V+ R0 y' O$ ./configure --add-module=/root/modsecurity-nginx
; W; g6 w/ n! @6 }1 z$ make
  g* _& X- {% x( a+ L4 O$ make && make install
; e  F- Y- @8 |, e添加OWASP规则
; r9 r& {" m9 Y6 P, o* n8 d8 ^ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。  E+ J1 f, r. Z% A
' d( C; Z2 T( L; N

0 F3 x$ R/ @, h6 p+ R2 t2 l/ q下载OWASP规则并生成配置文件
9 g; r( E4 i- M! _6 g' ?/ R$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git+ n/ L8 ~3 C) ]! w
$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/
( ^7 N2 \. C. y) W1 ~- c$ cd /usr/local/nginx/conf/owasp-modsecurity-crs$ Y/ M9 {% z7 {$ @$ }' Z/ Z4 L
$ cp crs-setup.conf.example  crs-setup.conf
# E7 _5 S2 O6 ]" X: C. c8 B配置OWASP规则
$ f9 P, V  v+ L% N) F编辑crs-setup.conf文件
3 T/ }: C5 q6 {, n
7 l" I* {) |8 S$ A$ ^# u9 v6 M# ~
: [) O, g' _+ _% ^% E# `* Z$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
- L; N3 H; w8 T* g; q- |/ H, Y% `$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
- q0 J9 j/ L1 e4 H: W& Z$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf# Z# @0 ]2 F' c3 u. p
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
9 f9 K! {$ x# f  |1 D- O4 d0 r默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。- P( r( x  g" I% e: g; h" e0 Q

: x4 S% d9 Y  _; |1 [/ T/ z1 L: c7 F0 V3 W' O- y  o! N
启用ModSecurity模块和CRS规则& E. p! s( ]3 W  _0 [
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
' H. V, D$ D+ L  a& l& U% ]# g" z0 k+ K6 o

7 a4 ^& F; F. }/ q! ^6 lmodsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
9 T  Q7 O& k  z0 m" I0 _3 M+ P  ~) P

: @* V: T- ~, A. B% b6 q, n$ cd /root/modsecurity-2.9.1/
! r$ W( H- p* W4 o# e! D' W$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  
8 k$ o- r; Y2 y5 j1 l4 {' J$ cp unicode.mapping  /usr/local/nginx/conf/
) N: B/ B; U$ K, C% p" A; E将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。* @$ }1 s: D4 Y. ?7 L
" |/ p' [) h- K' W9 i, y* ~% E

7 u! `4 n8 B1 y) D) T7 H$ vim /usr/local/nginx/conf/modsecurity.conf+ G, V. q5 w: S& H
SecRuleEngine On
+ y+ B+ Q7 Z2 R7 o: VModSecurity中几个常用配置说明:3 j0 K+ `0 s2 g6 \/ O
1 Z0 {, h( a6 a, b

$ f" r; D, M1 E1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
+ [( {% l3 K4 R: ^2 K+ @1 j# r/ G/ C7 I9 ^3 Y

% f, _' b8 @( v! J" c0 s: {& i' g2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。3 Z3 _0 c2 e/ ^9 y  u
- o; P3 j+ n7 ~

' G2 i$ p( \) f1 E& [$ @  }3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
8 t6 B/ ?6 m* ~! G$ h# F/ \0 I3 D# w9 r8 O0 u$ k; ^
; }: ?8 |  U' B) [! r4 W* ~
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
0 e3 B  U! z" }( f7 d' d6 P5 y. N7 p. p4 W" K& H  P) w0 o! H
, U$ u6 {) o  O* I
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
5 d, z* R2 G+ u% R( `  C' V, E: P, X8 x2 ~. D: Q
1 ], ?: O0 b/ e% x* ^
3.x版本CRS3 z4 c" d/ h6 r, U0 @
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
# U8 o; P/ y( B1 b" Z% G; T# X# 生成例外排除请求的配置文件
2 z3 g- [  M4 Y% W% E( D; _% D$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf/ w% f6 e- K  h9 G) L- {8 L9 Z
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
' H9 C' W# |* s+ q: v$ cp rules/*.data /usr/local/nginx/conf
. g- _6 g+ m0 \/ D% q1 @为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
- v1 f8 w  c2 E% I! g! W# ~& a; V6 i1 T$ O; ^1 H- z# s
/ L' s% G6 D( {( X* W
$ vim /usr/local/nginx/conf/modsec_includes.conf
4 h4 T8 `. F4 I  f; r
! F9 S/ L2 [5 R) \5 D
[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

9 M7 ^" G1 U- r$ B% S$ i0 u; K
* p2 l4 n' j# j注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。% w7 I, f7 h0 i

, r: ?% v! r0 P( X2 ?: h! M, n
  T5 v0 X- o& o# C6 F) T4 l配置Nginx支持Modsecurity: g6 ~* c$ ^$ C- I1 L8 U- G% }
启用Modsecurity# E, U8 a; p" J# T( ^6 J  g+ b, C
使用静态模块加载的配置方法; {! o' e! c4 u' A+ X7 f
在需要启用Modsecurity的主机的location下面加入下面两行即可:/ u# W( ?: z! q# m- b$ ^2 i7 D" Y

4 n/ X1 z# F2 [  C, H& n
) ?1 W, e) s$ I: i9 Z1 @% _ModSecurityEnabled on;% @- P% l  E5 F; p
ModSecurityConfig modsec_includes.conf;  W! v3 j8 x3 {8 [' y7 x
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。& R6 }0 Q( H' A; W# i# S$ A

$ m% N; j# q3 U5 p% n  E# Q* ]
6 [- }! @# ^+ A# f1 K! D( L$ vim /usr/local/nginx/conf/nginx.conf
" C- h! n4 d" u0 _& U( {, s" a* w: o; n5 y$ H8 P$ z% h4 q
9 y' s3 Z1 ?, ?8 @7 N! N  K1 \
server {
' R% e5 w9 w# K/ H  listen       80;
* j0 q, @- z. o/ D; e  server_name  example.com;/ f: Q' @8 X8 b/ w

  e5 ?* G" u6 ~! U+ g* {  o! n
* x: t* w3 O( {2 x  location / {; w: v9 s5 y" d  I0 d, Z1 f9 e
    ModSecurityEnabled on;, y7 C7 e8 Q1 Q2 z
    ModSecurityConfig modsec_includes.conf;
: e! u% c* N7 e% v# f6 N& v8 S7 h    root   html;
2 A0 W+ K$ o+ f) E0 x- G) o    index  index.html index.htm;
+ V$ P& v9 {0 d4 {' [' Z6 ~( \! }' \  }  j& V3 [. J( |; u  b& E3 W! u
}. N1 Y7 `8 v; x! u- A, B
使用动态模块加载的配置方法+ z* c) A* M% F9 s1 ?4 r0 y
在需要启用Modsecurity的主机的location下面加入下面两行即可:" f; r! b' r* z0 v& U) `% Q& U( S1 x
* [5 W) P1 w/ K6 c9 D7 d

+ a  k* {: h! H6 ]6 L  u% gmodsecurity on;. f9 j9 |; G) v% e+ W4 P6 k* H
modsecurity_rules_file modsec_includes.conf;
/ r8 [6 W; `3 L7 h修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。* k- s+ o5 Q5 _: ~. V1 S

% ~+ U6 e3 U/ j& @. f( S% X7 X6 Z% P0 R; A
$ vim /usr/local/nginx/conf/nginx.conf! X0 p* V  ]$ I* Q# A
  b  s. p, H4 K

0 q9 d- g, ^* }0 t1 kserver {- [. d- w; p% Q+ Y& V6 S& R/ _  P' s: x0 B
  listen  80;
5 Q" t7 k. {% Z8 s2 l. m! a8 B& F  server_name localhost mike.hi-linux.com;5 _0 k5 G# E3 a
  access_log /var/log/nginx/yourdomain.log;
' s$ k" I: k% B) m! j
2 e  u. u6 z) u$ F: C' X) m8 C4 i2 [/ P0 F4 _" D
  location / {
; o6 ?' v# ~- v0 ], B7 X; P, F8 X6 l
% G/ y' m: }& I% b2 T0 J* j
1 O& ^$ Y0 z+ e7 i# s; N  modsecurity on;) b0 J* |* Y% d8 }
  modsecurity_rules_file modsec_includes.conf;
+ o, a" ]6 N8 l6 Q* Y  root   html;
8 T5 [% G3 N, l7 v  l5 s0 h/ |  index  index.html index.htm;
( k2 d/ D; [% \9 I/ T1 J}
" U- h- l0 @* M}
2 R. N* e  R8 C; h验证Nginx配置文件& u, _. X  p! Y" O" u) b' Y
$ /usr/local/nginx/sbin/nginx -t7 c9 c# v0 t" m# H* f9 w( e4 m, y
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok8 ?, v% |7 R. a; n1 C6 ~, }6 H1 N
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful, z0 S3 ?5 Z' d* _  `
启动Nginx
! m* H* r- c9 U& q$ g0 t+ }4 f+ A$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf0 I$ x' W  v5 B3 ^; Z) ^

( Y7 h) Z- |1 _; W* N8 @/ y

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

2 G  Z% g' d5 ?0 l3 \; k

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-2-22 14:45 , Processed in 0.064715 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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