找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11224|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
* N! }# i% e1 c3 X) D/ |
8 T; Q$ i- w# Q( i5 K& @& H% U
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。% J) Y4 ~' O# K

* n* G; t# p8 W4 A: q* k. p
5 ?9 C7 m  \% w" D8 a什么是ModSecurity3 m# |& g, w& U2 O
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。$ v: [5 a1 l4 @- P% Q! X
4 c8 V$ T0 O  v  M3 c; E

7 }2 b' y# J8 g3 bModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。8 Y% q- |- W* V7 j
7 D/ G- {! i. R

$ Q9 R+ Q$ ^" Q8 ]ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
+ `% |3 \) ~5 w1 u% v# E: T# D) A$ C- t0 L, q  s

4 S- {5 L) Y$ }: \. _官网: https://www.modsecurity.org/
* F8 p" Y/ m5 C) `  L3 H% n
# C6 p2 l1 T$ C# S5 H) G
$ x+ e/ M6 Z: n$ I  P什么是OWASP CRS
6 ], n: W" ^7 G1 W! O3 }. ?OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
, G% I& R  ~! d2 F4 W3 A2 `" Q  E& B* e" [* {3 V" e8 g

1 F( c9 @7 b. s9 r- x/ k4 N$ p, |ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。% O" a# @6 n& M  U( D: U) @* A$ x
1 P; v1 |- {) V5 B' v! H, E
# L- g& ~5 |( ~
HTTP Protection(HTTP防御)
) I* K9 _6 v, o" o3 LHTTP协议和本地定义使用的detectsviolations策略。8 x4 L. T3 I8 u

/ \( R& ^: u$ x0 _" ^% n8 ?6 {" n8 T7 e) _& K5 k
Real-time Blacklist Lookups(实时黑名单查询)) _$ U% z) s3 b0 b1 c
利用第三方IP名单。7 G, t& v5 y* N; w7 k

1 A0 O9 t  A% V" m
; r/ ~* f& |1 A6 c; X9 zHTTP Denial of Service Protections(HTTP的拒绝服务保护)" E4 U/ V1 q7 o& R. E
防御HTTP的洪水攻击和HTTP Dos攻击。
; c6 T7 O$ P1 z5 x2 _7 c  ?0 P- ?& k5 v0 d  K# u

& n" y& x3 L8 l, p& e- Z5 oCommon Web Attacks Protection(常见的Web攻击防护)1 v6 W, @, X( a0 Q8 b) z' U
检测常见的Web应用程序的安全攻击。
' G8 `5 s' C$ r0 A% P6 d/ p7 R( h0 w
9 Y, x+ s! y# h1 g7 }, x8 D, h* h
Automation Detection(自动化检测)
' M3 h4 z3 W+ m+ T% l7 X" Q; \检测机器人,爬虫,扫描仪和其他表面恶意活动。) [7 n$ g2 l2 ]9 w: M* k

! [& |# O# w6 Y7 x, m! K( x) ]
% }8 v2 }' x# ~# {" U9 MIntegration with AV Scanning for File Uploads(文件上传防病毒扫描)' G7 O3 d) ^7 C) \7 l( T
检测通过Web应用程序上传的恶意文件。& v- t  {3 Y" Q' ^" s! m% _% M
2 Q6 m+ M+ y+ C* k7 S* e: u

& O. x& I3 t6 b9 o$ v+ Q& WTracking Sensitive Data(跟踪敏感数据)4 ^/ {' R3 @5 g
信用卡通道的使用,并阻止泄漏。
" `+ N  r2 c" I6 h9 f9 R/ |
0 R; A' [' P. W- v1 \, F  j
) ?5 z2 a* W% D" _+ l4 v0 uTrojan Protection(木马防护)
. B8 ?- r( T- ^检测访问木马。
3 ]% n) [% x% h' P, A6 \! @6 w4 o# o2 o; s3 w
& i/ a/ a: k) ^( b" O4 V
Identification of Application Defects(应用程序缺陷的鉴定)
4 u- Q( l% o8 w0 q, B" u6 {检测应用程序的错误配置警报。/ F# \+ k, s4 X! a

& G% `+ _7 g2 o2 U. e4 u4 G9 ]; |2 p% c) V% f( D
Error Detection and Hiding(错误检测和隐藏). a5 `. I4 w2 I  N& w) C
检测伪装服务器发送错误消息。
, U# q! a$ a  T" U8 M4 Q4 ^8 G. k8 \& V# j; ]

; u. Q) a. i5 g4 R2 W安装ModSecurity
0 H* C$ J9 ?$ C8 A软件基础环境准备: E( o) Y# l: q' t4 h/ _
下载对应软件包# p) g4 B; @$ i' r6 A
$ cd /root
! k- D& I' l# N; X+ d$ R6 y+ J$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'' m4 M/ Y2 ]( B# p  Y" m4 W& ]
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz6 U' ?( Z- Z/ d- [0 C, F& ^
安装Nginx和ModSecurity依赖包
' }% U' V+ J6 F5 O5 j  SCentos/RHEL
8 c4 _6 \; Z3 ?/ _2 _( J3 _7 N! O- Q2 [" q! t

, {; }) H! g" |* |2 m: m# D$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel) k0 C" K5 z, L
Ubuntu/Debian
4 r: n0 M( j4 S+ s( v
- y1 L9 L$ M1 T; P6 L  o6 x* |: Y% c- q7 w/ n, Q! R
$ 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++-dev5 A" z# A1 C% Z6 {# N0 Q1 c0 l1 x
编译安装ModSecurity3 Q3 _' S, S+ A  }% Z8 `6 s
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。9 o; ~+ m+ e1 u1 A- N; x
6 c4 J9 ]0 X+ R: g$ x

! L; r3 O" j% c/ u方法一:编译为Nginx静态模块
) c! j: e% J  k3 T4 E3 @6 f; }
, O: g5 N( Q0 W4 S
编译为独立模块(modsecurity-2.9.1)( t  Z  N' k) p4 Y5 j8 l6 p' X
$ tar xzvf modsecurity-2.9.1.tar.gz
8 X' m* N! S- M: m$ cd modsecurity-2.9.1/
$ u# l) {  X% S: u0 ?/ k+ i: m$ ./autogen.sh% f7 V& E1 O: B
$ ./configure --enable-standalone-module --disable-mlogc! z& p# i0 n9 t# Q" y7 s. {4 D+ v
$ make
+ _3 C3 l6 U$ o! y编译安装Nginx并添加ModSecurity模块( r' z3 A, O/ m* r* s: l: q0 M' a
$ tar xzvf nginx-1.9.2.tar.gz5 m0 o/ }! L1 M( s: B  c* B! G2 |1 v6 f
$ cd nginx-1.9.27 S! [( B' Y' o9 t' L) {% P
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/2 H# ^( ?( z7 q: h; b
$ make && make install
$ q- |4 a( K% r$ a方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
/ Q& j( l7 E( m# @
, B% J8 l+ H! k* |
' t6 ~* w# d" ]5 r! ]编译LibModSecurity(modsecurity-3.0)3 _5 J2 \: E0 }2 Q- _0 N
$ cd /root
% Y' _* p' F0 P2 P( [$ git clone https://github.com/SpiderLabs/ModSecurity
4 _% W1 o3 K# a0 v) }5 n' k1 s$ cd ModSecurity
0 d9 [1 `1 u. P2 Q# W. |$ git checkout -b v3/master origin/v3/master
; ]4 u$ H0 H3 C  O( b( j3 a$ sh build.sh
  o/ E" V4 V- V8 A# y1 M) h* z5 e$ git submodule init
1 ]0 n' v# s9 p: y% N$ git submodule update5 {( S# V5 w, N3 b" a
$ ./configure+ T0 d: |$ M: y9 V5 y1 o
$ make
* a) |) t* Q$ n' ]3 F+ [: ?$ make install) ^5 v) y$ W4 g  q/ V0 ^
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。* l* W; y$ [; F: p2 x
) }: h! A' S& ^1 E9 Z8 F

& S6 |; r/ l4 r$ ls /usr/local/modsecurity/lib
* k+ Z( u' Y0 _0 T3 T3 Klibmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.0
  }) f! ^( `6 U! |8 E( ^7 e/ g编译安装Nginx并添加ModSecurity-Nginx Connector模块
/ n; `2 b0 z! ?7 R使用ModSecurity-Nginx模块来连接LibModSecurity
. m$ p# ], }4 l) e" f+ D3 `0 s5 O: Y
/ x" `# o8 q- i/ m$ X, N( h. G1 G5 t  H4 v1 s# m
$ cd /root, Z8 e, R! }5 k& R0 v
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
4 q' c1 t8 |6 V! u& t2 S$ tar xzvf nginx-1.9.2.tar.gz6 Q0 \; M% [5 O
$ cd nginx-1.9.2
$ V% J+ |; z* y0 C$ ./configure --add-module=/root/modsecurity-nginx& [. d6 i8 x2 c5 c
$ make
) d0 F: f' h7 c& W5 A' O$ make && make install
2 i+ O* g- K& \4 _7 {, ?4 @添加OWASP规则
: S5 u5 E$ x; N* B, BModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
5 G! N" L( F. q. _% X7 u0 n& C
6 F6 B+ h& G" v  L: q2 K$ g! L! S! [9 D4 T( e% s
下载OWASP规则并生成配置文件
' Y9 L5 Q# ^" j' x; i$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
: p( J7 `( O1 V3 S! I$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/
* C5 a0 k  y/ [. S' P  E$ cd /usr/local/nginx/conf/owasp-modsecurity-crs% k4 [( G7 n5 L# ?' h: n' Y; x
$ cp crs-setup.conf.example  crs-setup.conf
, N9 h5 _7 t/ N( Q% O4 Q4 x  w配置OWASP规则! P9 b* Y) \7 I- s' m4 f' `& y
编辑crs-setup.conf文件
2 o+ }8 g$ U- ?' |6 l% j7 ~8 O0 F# X7 S' P6 e* ?
8 C$ ~: A8 d! h/ u1 e
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
( I( k$ D0 H- |+ ]3 D$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
) ]1 t+ L; ~  O' o% Z1 k% r. _, Q$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf: }1 \  O- E# c0 M+ a
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
# A/ o1 i- H' w( z; L# d8 e默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。/ a7 C6 r7 e9 T" h+ [2 B
  W' d" H$ O7 p- n
0 [, O1 W) p# @- A
启用ModSecurity模块和CRS规则
. I/ P% H2 A9 u" x' F1 H复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。( g! E- G+ b  E

+ c! T: v' j' ]; s6 S$ B/ j1 x5 {0 q# I6 Q) i3 R  d
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。) S: G' j) h( F- s" }

) ~2 Z. \# c4 r' T" _: e7 H
5 Y# J! H! ^& X+ x1 W, X/ ^$ cd /root/modsecurity-2.9.1/- }6 L; p' h, l
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  
! w, D% A$ A1 l& y( Q$ cp unicode.mapping  /usr/local/nginx/conf/. W1 t1 C2 E7 C" G. @' y
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。: v1 r; c; d* q0 V

6 c6 k1 \1 ^5 a+ J
, q7 [4 ^" u; J, Y1 y, J' v$ vim /usr/local/nginx/conf/modsecurity.conf& p% R, _- o- L/ b' ^, G
SecRuleEngine On
# W6 ^8 Q" q& k( a7 B  L6 s- rModSecurity中几个常用配置说明:
: v: Y- M% U$ N& e& F" s
( h+ J" a8 O( w" V: A! r, Q
* p* G/ H) g2 [" {1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
. K5 t% q; ~2 _3 N5 Y5 z, d' \' n" O/ \* f, l  A

9 B0 q4 j' k* G! _: A: N! s2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
5 I2 W3 n: z$ Q. K0 |. ^/ [4 U6 P( a& J- i! P" q, F# j
3 S; g3 T  D7 y& M! C
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
) D2 ]: G4 T) o4 |+ v4 e+ Z: {+ n1 f: U. f) Q, \8 k0 G

6 q; L6 p, o" W, Y+ I3 ?4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
. R/ E7 r# J3 o; v/ _3 G/ g' \5 H7 L. n% Z! @! c& \6 o, C

) W( {& L; l: U5 \6 X在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。2 K7 F- m/ H1 E/ L% ]9 {* [4 n
! v6 j9 y4 B) H( X, }% t. {. B
( @: t8 b3 k, Z, y$ N
3.x版本CRS: k: D' h9 k4 j
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
+ k" ~& f5 u- r8 n1 o3 F# 生成例外排除请求的配置文件6 v5 E+ A! G" y( p: t8 l
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf, [: d! e0 z8 J$ q/ h9 N, f
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
) S7 e, l6 h% ~- s0 T2 O$ cp rules/*.data /usr/local/nginx/conf
' n7 K* G! b" p6 K& @: `. q' T) J1 z为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。# P) u8 B" b* F1 M( g+ l) o) L

2 j+ S( J6 f2 s1 B
8 r+ s/ [0 f9 g$ vim /usr/local/nginx/conf/modsec_includes.conf' S! W) A, \0 a2 i' G

# g) T9 P5 G$ `; _0 {
[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
+ ^7 @8 r/ K; n$ R; n) X
- w  a; A. H2 x) d, K1 L$ n9 ~' n
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。' i* a- T" ]4 y% o
3 H, V* S# P& q* c; B2 U
1 ?; ?8 y7 a0 J
配置Nginx支持Modsecurity5 h# {3 }: L% {  ?7 f3 G
启用Modsecurity* A0 `. V6 P0 f% H
使用静态模块加载的配置方法
+ n9 E4 y& F4 X+ A+ C在需要启用Modsecurity的主机的location下面加入下面两行即可:
5 K4 S! l4 _$ A- L
% X9 A0 D7 z2 b( a9 C
  W) i; P5 v1 F4 `ModSecurityEnabled on;
+ T1 V. N0 C4 ZModSecurityConfig modsec_includes.conf;
; B* {  v* C) G* L- G; C7 w' p$ c1 j修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。$ L$ ]) Z! j( c* g. l

$ ^2 ]0 O. v4 S6 M6 Q: A3 L+ j/ p6 r7 s; v
$ vim /usr/local/nginx/conf/nginx.conf
' z8 W8 w" u3 `& e5 `) \/ h
7 O& g! M0 }3 x. o) E- `9 Y& x  {
# D' _( M3 w; \* dserver {* e! i* i% H& l0 B
  listen       80;
4 F* g8 A1 o4 v0 p; A* a  m  server_name  example.com;
3 E. ?- z- r0 X4 X% D5 j! i. y0 E' K5 @* g# m0 |

2 |# ]! V% I5 D" X$ }0 q6 I  location / {1 K2 y4 I+ _+ D$ O+ ], ~: u
    ModSecurityEnabled on;" V" C9 k+ \- H5 V0 n
    ModSecurityConfig modsec_includes.conf;
6 q! }4 S+ `: H( b# @) Y( y9 ~    root   html;
9 X4 O4 x2 E2 Z, P    index  index.html index.htm;
. c  U$ o/ r! R  }
6 ^9 I9 N! @1 R6 t: \! \* X- ~$ r# ?}
6 |) |  G7 R. @- y6 w使用动态模块加载的配置方法
# X1 I% w# Q0 Z0 q9 B9 ~/ R. F在需要启用Modsecurity的主机的location下面加入下面两行即可:
% A$ h  O; R+ e2 w1 n2 M0 A+ C+ }" t# P$ E- _+ e1 s
! p2 H/ K+ |; f5 g' c
modsecurity on;0 b2 Q$ h) t- b% j" T
modsecurity_rules_file modsec_includes.conf;# _" y( R+ M% G7 N6 l( [1 G1 M, ]4 v
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。6 Y4 K  E" R& X
- S! c5 a: |! i& U( W

5 Z  v- w& K. }4 r- `& i$ vim /usr/local/nginx/conf/nginx.conf
) _8 p5 ]6 z( [
# C/ [, w$ P( Q  C1 D: \- S
' X- w1 a: v  u9 Pserver {3 V6 O+ F# x% s+ I5 h/ t
  listen  80;
: K; u8 m, h% I9 P9 w* E  G$ u+ H  server_name localhost mike.hi-linux.com;
  F2 ^( [# Y$ S7 j- ?" E+ t  access_log /var/log/nginx/yourdomain.log;
! e. Q# p) E- a- H& W/ y* M; {" t! H  X9 ?
, n. W! }2 N! P" a
; v1 Q4 ]7 a$ q! x4 M% ?  location / {) X' g# {- ?. }; E

7 G# D' p5 G! ]9 W5 C2 i! Y" H! ?' w/ r
  modsecurity on;. U. X: C+ r' r) ?; P" y5 O* ?
  modsecurity_rules_file modsec_includes.conf;' D+ M: F1 k$ h  r, G/ X
  root   html;
% q+ c7 T$ y4 G0 P  O) k. J! X  index  index.html index.htm;' W6 m& ]4 T( R0 I% |3 ]8 x
}
( Q/ p* O$ i; l; s2 ~}
) C  {: v  Y$ v) F验证Nginx配置文件# S3 g' g/ C' h( E3 y2 ]8 h
$ /usr/local/nginx/sbin/nginx -t/ O& v9 @0 \0 w0 z1 z2 A$ y' r$ x
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
8 y9 D' {7 [3 R4 ^* [4 @6 gnginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful4 L4 M' ~6 g  z+ q  t' G9 H
启动Nginx
  g% S( E- o7 y/ s$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
( s! T  ~2 t% s9 E7 k
( r; f9 [% l9 Q; v

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


' |: v6 Z  j: [4 A6 Z6 E

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-5-19 14:54 , Processed in 0.079013 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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