找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 10251|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。6 c; B- K; }7 b$ F( l9 l! V8 o" u
2 k8 u! ?4 G* B) v$ }6 s/ F9 H$ x% x

6 L1 [; O! o8 r. w" g1 q$ G  w在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。0 r7 N% e  r, A5 E% `% X) h4 l9 I

! J. Y2 d1 r, H6 M
3 r  U) E: h! a5 o& M什么是ModSecurity
! U6 @1 l  k% d  }- OModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。; i0 u6 }6 W8 y" H* c4 {
( `3 A: Y2 ]8 h/ z' \

9 \' B! \/ h& @4 F# C8 e' \) OModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
8 \& ]$ n$ d) d6 |5 b" v8 J
/ O" @  U$ |" A) \$ p8 g
+ }$ C! u6 A& r& F9 ZModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。- Q& h7 g6 c6 C8 y: V

: m7 c$ c/ |0 G  |+ O% }( D3 y( M
6 y: w" s( x4 m$ g4 J; q官网: https://www.modsecurity.org/# x+ i. y0 B7 F! [! d
; d# L2 X- ^/ u0 n! M
7 L9 T+ J) Z) o) j9 a
什么是OWASP CRS1 K' M/ K* f3 L8 t
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
8 H8 ~& B: `6 C* g- c( u8 _. B
* h! f0 Y( z$ P& `1 b) f1 w' w+ _7 [" S' s' C' l4 N
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
+ K5 E8 n( I, y4 R
% W1 N- a6 y+ T$ L' m' k
$ O. S$ W% N. X* C0 u1 zHTTP Protection(HTTP防御)
, i7 V/ w  ^, u$ x$ }  RHTTP协议和本地定义使用的detectsviolations策略。
! K7 o* a0 P1 F2 i' B4 P( D6 h' k) E: [/ m+ n8 L9 u/ e
' G; ?9 n. m9 i" g6 \: _/ W
Real-time Blacklist Lookups(实时黑名单查询)+ f! }/ {9 N2 h1 t
利用第三方IP名单。
3 U* W) y! z- R  v: l) \  Z# t5 d4 i3 v8 V: V, g" \2 P

/ |% T6 }4 ^6 JHTTP Denial of Service Protections(HTTP的拒绝服务保护)6 q% n. w- e6 d: n" L8 P+ u- g, |
防御HTTP的洪水攻击和HTTP Dos攻击。
' }& j# E9 h( Q$ i2 ^# I
, ?( T0 D5 |2 I, ?  Y$ |& n
( `. q2 Y( {0 e$ K! VCommon Web Attacks Protection(常见的Web攻击防护)* `+ p7 ?7 g$ [1 P
检测常见的Web应用程序的安全攻击。( J7 P3 m" G5 f% {* y1 H
1 t0 o$ r8 k4 O7 x& _- p
3 k% i0 ~) ?8 O( e- i
Automation Detection(自动化检测)% x1 k) m% \1 `9 T
检测机器人,爬虫,扫描仪和其他表面恶意活动。
- O& p0 w6 t/ X0 F! X( \
# }/ }9 m& i5 h2 \0 N* O. _" ~" q+ d3 G
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)
% F  x; w& @9 n, B& X检测通过Web应用程序上传的恶意文件。  v5 q% Q# F# g5 V/ S  d/ l) P

+ O8 O6 X8 |3 ~: ]& ~: ?4 m
2 V( g7 L( O3 q# U- HTracking Sensitive Data(跟踪敏感数据)* x% [9 ?. J' G( {0 a; L% X5 n+ B
信用卡通道的使用,并阻止泄漏。$ u: s# u/ d" j' A9 g
; `( r" J3 f8 G, a9 u8 [* h) _
* [& F8 u6 ]4 r% F; H$ N4 }
Trojan Protection(木马防护)
+ v' w" S" M8 U9 ]3 t0 L0 V检测访问木马。# j0 F8 M. a- ]4 R3 t

. n7 B, K0 l* q# X1 ]+ T. k3 V; c
$ g; T. I. s% r5 z! v7 O& X. IIdentification of Application Defects(应用程序缺陷的鉴定)) [  K/ z# H* o, n8 O
检测应用程序的错误配置警报。; L; Y. P% E' j1 M
: l) K0 q0 J+ y( l1 B/ ^

4 b7 M' G) p( G  YError Detection and Hiding(错误检测和隐藏)- ]2 w/ y3 s( Z3 S7 W' X
检测伪装服务器发送错误消息。
; q9 h" `  h) ]( q% r! t% \3 W( \" A3 x8 P3 U8 a5 @
' H( n; I; Y) j; d) Z. w& r/ R1 r
安装ModSecurity
# D1 R0 @( |$ {  P0 Z1 t% s6 b9 d, \软件基础环境准备  O+ }8 }, K( w/ c9 [/ z. p3 Q
下载对应软件包
6 J" S+ ?$ D$ t4 g$ cd /root$ y, J1 i! F+ V
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
( s! N7 s2 M: c6 i$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz7 V8 Z( w  S# I* u2 |: L$ ]" s
安装Nginx和ModSecurity依赖包5 [, g; {  ^+ n4 y
Centos/RHEL
: ~# S$ c5 z  Q  `) L. m
* Q" ?1 J1 e' x% D7 W+ e! S1 M  {+ t: V% a$ l$ Y
$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel$ I8 a$ T  D* N* D+ \6 u
Ubuntu/Debian
7 {, C' o9 M: ~; S* y& Y& x1 s, U7 ~, Q

( n2 F; Z  V1 y" r) g/ p$ 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
! w# r4 I6 p9 R编译安装ModSecurity3 t# c0 G* N7 f' A. a
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
8 R1 F; z. s  L; E! M" G* g# p% u! D- f' g

: [7 L' V3 J9 o1 S" ~1 j! @- E' }方法一:编译为Nginx静态模块7 k; P/ h( g' U" I
9 H5 I' S4 S4 w  j3 ~% L
9 |1 ?1 C* m9 H% e0 g; a8 j6 g- s7 w
编译为独立模块(modsecurity-2.9.1)
% O" ?3 C$ C3 [) C( b$ tar xzvf modsecurity-2.9.1.tar.gz7 S% o" G6 ~$ W# |' c2 E4 X
$ cd modsecurity-2.9.1/6 ^& s& a5 g9 g
$ ./autogen.sh. i+ a; a4 b5 N/ `4 u
$ ./configure --enable-standalone-module --disable-mlogc  L7 l! ]& R, [
$ make
" S. r" j; G$ ^! s" `( R编译安装Nginx并添加ModSecurity模块2 ]; a( Z' X% t# a0 \3 S
$ tar xzvf nginx-1.9.2.tar.gz
, S1 Q0 z1 l  R- ~$ cd nginx-1.9.28 t2 R9 F5 T1 c2 b) X
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/2 t7 U- c4 E4 [4 r( }
$ make && make install
) n+ s0 x6 U. p5 Q( X方法二:编译通过ModSecurity-Nginx Connector加载的动态模块8 |; T6 j9 x/ @! E7 V! J. _+ R! m
) i$ N; z" k( H+ Z: B

4 e" p  V5 n( ], y9 f) E# P编译LibModSecurity(modsecurity-3.0)  |! l1 L; O* _3 Y. S. a
$ cd /root
8 q1 O% F, G$ I1 ]! y) O; e: M" @$ git clone https://github.com/SpiderLabs/ModSecurity
/ p+ a$ j/ ~% Q1 K& F6 s$ cd ModSecurity& x% z  n6 P6 x- n% w# I
$ git checkout -b v3/master origin/v3/master! W3 n$ U3 d6 M- M  Y
$ sh build.sh3 Z0 D/ t1 p8 E% x
$ git submodule init; c+ a- [. u) J8 d
$ git submodule update
9 u( A8 y) ?! I; I4 _$ ./configure7 c9 B, ~' a* y4 Y' L* [* h% g
$ make
* j5 [6 T2 {! D$ make install
5 b5 |' J( Z0 I+ p& b* ^. I" [& z  V" ^LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。3 z) t/ d9 K3 J# Z$ X

8 \: M" k/ |6 b) N9 w4 C" k) h; H( y6 K0 M
$ ls /usr/local/modsecurity/lib& f0 t1 f: `6 o7 ^
libmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.01 x! `& g7 G" [  g) B& Y5 H% V
编译安装Nginx并添加ModSecurity-Nginx Connector模块
+ U' V9 P0 ]  V6 R. _' o4 P7 N使用ModSecurity-Nginx模块来连接LibModSecurity
* A/ H$ ]. h. E9 o1 T+ j& ?+ ~4 m+ v+ R; U0 E& o" h

% u8 x6 C0 r' t! S+ t0 l6 M& V1 o/ v; }$ cd /root8 `8 h- U3 Y8 J! w4 q' S  s
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
. T% W3 \$ V: c& r$ tar xzvf nginx-1.9.2.tar.gz
. L; x" k) q/ B% h) i# w6 k$ cd nginx-1.9.25 a0 Y1 o5 @5 U, J5 r( Z
$ ./configure --add-module=/root/modsecurity-nginx
! t, Q: F% \4 `1 N$ make
- L* _2 I# s4 d6 ?# ~: U$ make && make install
+ y/ P6 J" G% r* I( C添加OWASP规则& y& z0 g) N3 B$ F$ d9 c) C# e
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。. E" ?3 F. y4 z3 X. ^6 V4 G
, T4 v9 ]' Y0 R3 b5 ~8 p
* z; ]' D# L9 C/ I+ @
下载OWASP规则并生成配置文件
! z$ H( \5 |7 P8 \$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
& P5 N. S2 O! }2 L! n" ?7 P$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/6 X& w4 r$ r7 H! F
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs5 T) y# o9 K6 h8 D7 F& z& P& |
$ cp crs-setup.conf.example  crs-setup.conf
" ?4 }  ]. q: S1 f! _, ^5 h: N" B配置OWASP规则
% T- C" _# Z" t编辑crs-setup.conf文件' ]/ Y9 ]& D# E$ @( l
" x7 W" m: Q- K: V7 M3 _2 C& X
2 U3 k  l1 M8 M
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
9 m, j0 \" v7 M5 X6 z, k4 v$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf/ c0 ], P& m: f" x7 L0 @6 O
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf5 o4 H1 L" A! K  |  n
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
& C$ G  B6 Q/ t2 l默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。5 \! t  u' M& d( I3 _
# G, J2 T1 Z4 U/ Q$ c- R4 |3 `5 o; w

: X6 [. v! }: O# b启用ModSecurity模块和CRS规则
5 m/ @$ o/ v1 c0 E. d复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
0 V& D1 K/ e$ t0 H- f8 ?# r
" {. ~+ f. }9 ]2 _* Y; S0 `6 G8 m  F1 w  x! _6 \: A
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。+ B1 p1 n; b3 y+ G0 q
1 f1 ]; H- r. I3 s" I. T
' W% w, m5 @- c( b6 g4 I$ f% z, g
$ cd /root/modsecurity-2.9.1/
6 o4 c: M  [& c: Q$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  
0 p1 J5 Z, s8 B! a) D9 |9 ?: c$ cp unicode.mapping  /usr/local/nginx/conf/
" J! A2 |# A! I4 ]/ Y  _# p将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
' P9 f* A8 [# m% ^; G% K  Y8 ^" a8 m  O$ j% v* i
  M. l( N3 f  ?# c# g. _6 B  t
$ vim /usr/local/nginx/conf/modsecurity.conf6 \! v1 C7 x  Z& @! m& M+ }0 C
SecRuleEngine On
* R8 s& ?1 j3 a4 e- F/ zModSecurity中几个常用配置说明:
: ], S' M) F$ ^9 u2 h( n7 S/ M
. M/ U# ?/ s0 N  L) B: ]$ s9 E; _: l* g) G
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
* A: E% K1 ~& ~" \, U& E, b+ B5 l4 A& R! z
% l& ?3 A. z7 a8 |
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
! j! A4 M5 f- J* D6 q7 ~4 m0 b; \+ g7 _- W
, r. l; Y2 O; X8 P! q
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
6 h+ U! V3 r& n" j/ i! {7 `2 H2 O( y6 }+ J' N
& F0 F8 S6 V; G) @
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
: N4 X. ~- |; e$ J# @5 y( X. s8 P) t+ X0 i4 f* F0 N6 E

3 \4 Q- @: u) k6 V4 B/ d/ r在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。6 T( A* |" q3 Y0 ]/ U8 u. g
# Q' w* o  J0 g; q7 B2 V6 _- a* Z( x

' x9 b1 u; {( w3.x版本CRS
+ @; h' Y- V; h1 H3 q2 [0 X5 k$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
/ x4 d" ], w" B# 生成例外排除请求的配置文件
9 Z. R/ \" s  `, _$ A6 I$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
4 w7 p  k* @5 v4 L7 |; [- M$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
! @. U& V# O6 Q$ cp rules/*.data /usr/local/nginx/conf& j; y1 n3 `( x0 y& y! A" f
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。) J1 m" |& H; u% r  Y! Q* T* N4 F

8 w/ I" M: m2 O& t
% P$ @" G, z, A1 t- T% O, A  ?$ vim /usr/local/nginx/conf/modsec_includes.conf1 S2 h1 ?; K. W# e$ A# T& [) A

& h4 @5 O! i1 }6 v
[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

: f+ d; i& w4 g4 M
% z0 f4 O  n3 ]4 {: t; v注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。/ r; x# A) B  o. o- ~' q
+ k" c1 C  z* m9 V7 c
& u/ p" e. v, m" ^5 z
配置Nginx支持Modsecurity7 \4 Z  Q, o- _
启用Modsecurity
4 `& \4 Y+ `; ?& f7 P! o使用静态模块加载的配置方法
6 a7 Y: ~! o$ x9 ]在需要启用Modsecurity的主机的location下面加入下面两行即可:/ s# |. L# h4 r% w' [" Q! \

- U. s' V( t4 c$ {3 t& A
: @, S+ Z! V# _5 YModSecurityEnabled on;
+ D" |5 U7 V2 jModSecurityConfig modsec_includes.conf;/ B" f$ s! d6 ^7 [* `7 p- ^7 z$ _
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
5 p/ M5 g5 P. S( i! r. O; g* e) N+ N1 G1 G
  o6 x5 n1 j& P* s8 g
$ vim /usr/local/nginx/conf/nginx.conf
( m# p7 E# z0 j+ z( }
% f1 `/ F' g( Q* c( o8 E7 c( H# D( i. h9 E: }
server {
) J' n2 ^' S+ n1 U: n6 Y; I- |  listen       80;
' q4 H( |$ \' X. [9 n0 V3 ^  server_name  example.com;* }8 n; j  m+ c7 m4 ?9 q
- R& S4 q% x  Z# s# p
, I: |. ^' r; R# {* b6 J
  location / {- Y1 |/ N; Y! M8 h0 a+ B" |
    ModSecurityEnabled on;
1 K' C$ g1 A& w2 W% i/ _( [    ModSecurityConfig modsec_includes.conf;
# Y0 {& Y" l% R: L9 o6 B6 g    root   html;
( y6 H3 ]. r8 I. I    index  index.html index.htm;
; u) x; y* K6 |0 B  }, _. ~: E8 i, u
}/ @9 S/ ^0 T. p: l3 I
使用动态模块加载的配置方法
, p# h4 h( `: y& J8 _9 d2 f- {/ p在需要启用Modsecurity的主机的location下面加入下面两行即可:
1 g0 z/ Q  {' J. C# }' T$ v; u9 r- `
5 ], `; c5 B( [8 d0 l) h& Y
9 a. p& Y4 U0 k! xmodsecurity on;
% Z/ d+ ^- W# m4 emodsecurity_rules_file modsec_includes.conf;6 b# D  p/ \- N. W
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。/ W0 o, q& F! P4 z" F# }& l

: I8 y& E$ d+ O8 j
: s6 S8 U/ q$ ~& D! Z) k9 Z$ vim /usr/local/nginx/conf/nginx.conf* N% M/ B8 N9 i+ l- G) |' {

% {  \1 N5 E# M- ]& G
3 _3 J" k% E0 I, S1 ?4 y& t# Jserver {* G! Y$ Q, a) S3 C
  listen  80;4 y2 x# S# S3 L- H1 e' @- M
  server_name localhost mike.hi-linux.com;9 [$ ^6 @5 m/ t0 C/ F% a' f: @9 W
  access_log /var/log/nginx/yourdomain.log;- @% A' y  p; }

( ?; a8 a, o* U, Y: c" g# H8 L4 e' b3 O! E6 |/ G! c0 h
  location / {7 ]0 N/ h& Z% L9 C4 F  m0 [# w4 D

5 E, |  ~1 l, |4 m  a
7 o0 \0 V0 I& u8 B8 s  modsecurity on;
' a$ W( e& v4 u' H% w; J# D  modsecurity_rules_file modsec_includes.conf;
7 o0 h6 A. j6 B9 {  root   html;7 a9 \$ j4 O5 K. ~
  index  index.html index.htm;
. l6 p$ ]9 |  ^9 T& D4 p9 j3 U}
4 g. B+ K, w- b& G}" c$ ^: j. }  g( E
验证Nginx配置文件
9 X0 Q) V; \& u- x) w/ F  b0 D$ /usr/local/nginx/sbin/nginx -t# C# n! i) S' F7 E" F
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok' r) R. ~/ b" \7 V% d! R, m4 B- Z+ _% L
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful+ m$ S$ N! I6 i; E
启动Nginx! R. q- \# @, R4 Z8 ]3 ?8 E3 s
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
& u3 l$ i% r$ k. `. Q' ?8 H7 f! o! K- n3 z" F: b  Q) G+ e, Z  J

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

; V0 M9 G6 j+ {' K7 m6 \9 Y; C7 X

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-2-16 23:15 , Processed in 0.075985 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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