找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 10330|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。* [- [4 ]6 L) H2 ?9 y
3 T8 a8 x/ I1 E6 z5 z$ \1 o* I

& y- y" d) ~/ V. N3 K在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。( y8 \3 a* j& w+ z

& }% R! l- o8 T% O( J& S
- x; o$ o, S) @7 o. T5 ]! X* y什么是ModSecurity2 O8 j7 B& E+ E9 J# m+ A4 ?( t4 f
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
: r* m% P3 n3 ~: @1 H
$ f  t- P8 ]5 p, a; ?$ n6 ]0 y. @" V, \! p
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
( @! O4 n8 d  j' s$ @$ \4 c  |+ _! Z8 @1 Z$ u+ N- }" o2 u
; G* S/ U- U- V( Q5 k! b
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。# ?. K" M. X. k8 i6 |0 M( P

( R$ Y2 k3 c3 u
# A2 q- f. O; k9 z  K官网: https://www.modsecurity.org/
4 ^" K/ k' a6 }# V4 ~6 }& P6 i. x& r0 x: \( w5 J, x- B

! q. Q2 z: r/ A! d什么是OWASP CRS, h$ v$ y/ z5 b6 P
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
+ C5 K: ^0 z  E" F2 |
3 h( s, \8 [4 I  I6 V1 u4 P* x  H
4 J! j' _" z% `6 t# L  j5 @ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。) g0 I! Y4 o9 w* R5 C  r! o
6 y/ e8 N( O2 F

- A1 s. B# |# f. v! xHTTP Protection(HTTP防御)1 c$ L$ ~. D0 p& h. @, _8 }
HTTP协议和本地定义使用的detectsviolations策略。$ I: F9 f" y( q+ |1 m" v

7 o/ f! x: W2 i( `2 {1 `& @+ Q) ?: v! J! w9 o) F4 @+ l
Real-time Blacklist Lookups(实时黑名单查询)
4 T6 _- ]3 j# J  ~. V" `; O利用第三方IP名单。' C9 O' G2 {6 v! {: g

, G+ ~: W) }3 x6 ?. ~* l
8 C3 p  A1 Z7 X( K8 d) L8 q" D( RHTTP Denial of Service Protections(HTTP的拒绝服务保护)
4 P* W+ u/ X! L% S8 [' ?防御HTTP的洪水攻击和HTTP Dos攻击。
8 q4 J3 [& H+ p9 {: b  Y2 Q& Y$ U% |6 l/ K6 B' Z

* A( X6 e# }% r8 Z9 oCommon Web Attacks Protection(常见的Web攻击防护)& R. q% ^5 j6 f3 S
检测常见的Web应用程序的安全攻击。4 r; {! K" ]( J8 _5 i# j% O0 y9 `
8 S' l2 X8 T: G" l! }) ~

" a  I2 E$ P7 B6 x! OAutomation Detection(自动化检测)
: M6 a: |* r: U7 g1 h, z检测机器人,爬虫,扫描仪和其他表面恶意活动。# Q4 Y! m( ]# u1 m0 R
' g4 n2 T' p! r6 D- w% g
% @! s" g, S1 ^2 l% Q
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)1 E' u- K! O6 }% m
检测通过Web应用程序上传的恶意文件。
+ S4 r; V, y+ Y8 F/ O# a# |7 U
( j) ]; i$ ?( W3 C; I6 V% b! w+ u/ f
Tracking Sensitive Data(跟踪敏感数据)! T* w8 h1 U( q* n9 `5 b
信用卡通道的使用,并阻止泄漏。' F2 s1 }6 u5 ~. ?! K, `& G. e- z8 p

* ^: l/ T$ H  `& n4 g# h4 B  E+ Q9 `2 q* Z6 U5 f/ K% d
Trojan Protection(木马防护)  z2 s) f' y/ h! g
检测访问木马。  |  `3 U  ?8 C6 G

' D' P" j# }: e5 m# V% A) G. M; c3 r+ r# ~1 }' @- ~( y
Identification of Application Defects(应用程序缺陷的鉴定)
! }& z+ q8 g: D- p/ P7 o8 t0 W检测应用程序的错误配置警报。0 f0 e( }4 U9 d! k1 p8 `
2 [$ d) B8 b6 Z' n# j/ h( g- ]
) o) m: S$ |# K* G" K
Error Detection and Hiding(错误检测和隐藏)% F6 v  {# q! G4 B( x
检测伪装服务器发送错误消息。
& m+ G2 d, p* X$ J& E, g# X" v/ x4 E( z' F# H

# n9 O: r3 T8 T: I5 u5 n4 Y  ~4 I8 w安装ModSecurity
8 ^8 f% q0 @' _5 z: _软件基础环境准备
4 y( N1 S+ l; g3 _, f! l/ l下载对应软件包- S# D. _2 a: r+ @2 Y( f' l
$ cd /root! a  v3 ?- h, _0 s& ^
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'3 {( T4 i- A, e. a2 W! ^0 h" [. ]+ 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% ]; R2 P2 n$ x5 ~
安装Nginx和ModSecurity依赖包
$ ^8 o2 \. I& x! M% tCentos/RHEL" b6 d. l. V7 i: b' ~  V8 M0 ?' y1 w
& ?" R+ J8 F# k8 F

9 |; \# v# P7 d& k4 |3 S, k$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel. {0 j( \" z2 |/ n/ o( Z- N
Ubuntu/Debian2 y8 i8 ^0 ?5 v' v( H9 h  I+ M# B

$ y% V% @) W7 S3 N5 o
+ J$ O) a3 n) v- }+ ^9 I! 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++-dev1 ]! o7 b% }: L
编译安装ModSecurity5 D* v( L3 x% j& W  K1 o3 P
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
5 y' `* t! H* [6 f( {, M2 Q9 i8 n6 x( @

; K. B( r. j! i0 r方法一:编译为Nginx静态模块
0 f! ^0 q9 X& t: b$ r
7 ?8 O5 `5 O0 E0 D: Y5 t, O- [: q* [) T0 g
编译为独立模块(modsecurity-2.9.1)1 J1 N6 S$ u7 ^3 J
$ tar xzvf modsecurity-2.9.1.tar.gz
% N5 u, ?" }# u" a$ cd modsecurity-2.9.1/1 A) u; A$ _: h" D, g% b
$ ./autogen.sh! N3 [" c' @- U6 X( Y1 |9 f
$ ./configure --enable-standalone-module --disable-mlogc
1 W, ~1 u: o6 Q* A# R* s$ ~$ make9 j  o, V  ]  V* a
编译安装Nginx并添加ModSecurity模块5 B2 k- W6 z! j9 i8 h) X
$ tar xzvf nginx-1.9.2.tar.gz
1 z% e+ a" Z5 n: {7 I9 \* s" a# ?$ cd nginx-1.9.2
6 d8 [" u9 ?  W0 W% _$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/0 x0 N2 S' D/ U  z
$ make && make install
* B6 S' O/ a& B. c* L方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
0 W$ O  J( ?- l7 j( A: L6 [. a7 I  i) t% S( S7 p

; Y7 I% ^  ^/ @; [# n  S; z编译LibModSecurity(modsecurity-3.0)0 A0 S3 Y) i( h6 n
$ cd /root0 h; Q6 M$ y; O
$ git clone https://github.com/SpiderLabs/ModSecurity9 b2 f/ w. ^& k+ s6 N! s
$ cd ModSecurity. T9 [' s( X4 l  ?  ~
$ git checkout -b v3/master origin/v3/master
  ~& W* I& C( G0 [7 L0 L2 A1 E0 D$ y( I$ sh build.sh  R, a6 Q! D( R" _" y7 P* b3 v
$ git submodule init2 B3 p& H- X, {! a$ L7 s
$ git submodule update
# H# x0 w, p* _. j1 R3 p7 v. z8 {$ ./configure/ C, I8 b- e( L  w
$ make6 U  n9 _- G+ d' B3 U
$ make install% [# t* X4 A+ Q8 J1 |! E7 o
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
: v5 V% z" X9 \5 N0 g" |0 K! @1 w, G$ X# D0 Z

, ~+ j: k  B6 P+ y8 o, J9 `' W+ v$ ls /usr/local/modsecurity/lib/ a! `- \& [3 s- f% Q
libmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.0
$ u9 _8 V+ V  E9 i* A4 u/ C编译安装Nginx并添加ModSecurity-Nginx Connector模块9 x2 X# S7 b+ t" {2 e+ I
使用ModSecurity-Nginx模块来连接LibModSecurity
) D3 C- V5 ?. \# q6 J- O. j/ }* Z& v1 w, n& P$ A# a' _- a
3 D; G. A4 L" E- u
$ cd /root7 g2 D# t% e) Z8 ?/ A
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
/ ?7 Q# I2 U% g: y6 I$ tar xzvf nginx-1.9.2.tar.gz3 K4 ?- T: m0 X
$ cd nginx-1.9.2- Q% k/ Y- \# \, W% {4 q5 [
$ ./configure --add-module=/root/modsecurity-nginx
4 J  v" g' D4 \$ |. T! ?' U$ make! L) Q3 R6 z7 O  W1 S) p4 H$ h4 Q
$ make && make install
! l/ m1 h/ f' t添加OWASP规则
& `8 ^0 d; j, v) l* tModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。- S# V% p5 U. A  ^! q0 K) `) f- g
( h0 g: E3 _3 u- h+ e! }# L

+ A. L5 u" A9 b, f3 ?/ ^  Y- D下载OWASP规则并生成配置文件
" s9 k! o( s* ^/ p/ K3 q$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
% k% v" t8 l9 p8 F6 C1 w' r+ I$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/+ O# Z5 t: r. K
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs+ [9 U4 ?- m9 D5 u( M0 P% Z' T
$ cp crs-setup.conf.example  crs-setup.conf! y: G' t& r0 c( v
配置OWASP规则
6 N* n- @( i- j2 {3 y, }编辑crs-setup.conf文件4 h) V  {2 C+ B7 I

6 J9 Q. `: _9 L7 n9 R$ M6 l0 O( S! v' a8 `+ U" A
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf2 n0 N$ N2 z1 U! B3 L" q1 y! `& E
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf. H7 @5 T1 K5 p  c' ^, i1 k
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
# o1 O. s, U% o8 B0 ~7 u# S( m$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
7 {$ M' ^1 ^! M5 x2 l默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
- v5 n/ B5 x  e; c# E2 I
- p, s' m/ N# b. D7 I8 A8 g" g
5 K8 N! P+ X. N" v+ ^5 G启用ModSecurity模块和CRS规则! K; k2 H- i3 X& w# p3 Z
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
2 {4 v/ ~; s& Q( D
+ w/ }- \) n, G! T" h3 Q/ ^7 u9 {8 v" N
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。" P( x5 H, z4 X/ q1 V) R
8 v' r" U+ M3 @3 a; d0 L8 k
, S  O6 s8 O( {! O* O& Z6 @
$ cd /root/modsecurity-2.9.1/7 b! O1 b# E; E" h% }' p% [" |
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  5 \9 T/ T$ B1 I( P
$ cp unicode.mapping  /usr/local/nginx/conf/
3 h7 G$ s! r. z1 z0 V" Z# c' H将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。  u, [( B' c/ l( F

6 W" w5 z8 i+ L0 v4 u3 R' x0 H1 t, W
$ vim /usr/local/nginx/conf/modsecurity.conf
* I8 ~3 F. |7 S2 E1 _* R6 mSecRuleEngine On8 c) |6 [/ X7 X# Y+ r# Y  _; |
ModSecurity中几个常用配置说明:
, Y! v4 T# h1 d  i
# s  o  g% @& r1 D* d" ?+ v3 a) V
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。1 ^' I7 Z" w, u8 X* R
9 J! f6 Y6 g, d( i+ e+ @# W- `7 n

) e- R2 h6 p; [  C7 G2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。: [) ^6 e  Y, F. H6 z

6 d) f" D. n1 u. K' E5 Q. l
9 V2 Q4 A! ^: M( s% u3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。; c1 f* l' ^, ?0 @' u  N, N. Y
4 A: O; V" L) H9 p

" |: ^+ Q5 k6 w* [$ q3 b( U- @  h# O% H4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
  G8 N6 |$ `' A
. f3 J9 O* \9 d; l$ J1 k& `  O9 `
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
( G# Y2 a9 ^8 C* {" J" K
2 e0 X+ C; _5 f3 R! c. o0 s! N' ^3 B, i; v% R
3.x版本CRS
; _& X% C8 P) J8 G$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
6 Q1 |$ x+ I) e5 W7 P: D# 生成例外排除请求的配置文件
2 F' t( N+ ~8 X$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf, _* O+ U* t, e; G4 n6 T  e2 [! o; S
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
0 d4 Y7 E+ W. ]  R$ cp rules/*.data /usr/local/nginx/conf
2 R7 O& p' y" P# Q! E为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。4 y6 D3 A4 Y' @7 D- |

) E" q" e- [! _1 l0 V! n, E' ]- I3 D' ^2 w  c, g7 _- t& @
$ vim /usr/local/nginx/conf/modsec_includes.conf
$ k! D9 z" J8 l  Y# s7 L9 C  m4 u9 I' Z) t9 \  z% ^7 b3 X+ }
[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
+ m" s- @9 w, X# g

* g3 u( W& f6 ~1 u注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
7 b9 T! [" p& @/ H! i. y
7 B8 y% v5 u+ L8 p* i! w, s% o" |* g% [) j+ ^0 `4 j3 C# L, z6 S
配置Nginx支持Modsecurity9 K" H; |5 [8 i, q
启用Modsecurity
- X* k& c: s$ ~使用静态模块加载的配置方法6 m2 R! }8 D. S2 J8 _% a5 e
在需要启用Modsecurity的主机的location下面加入下面两行即可:
4 B+ M- N1 @- k: I3 e! q, O3 ]# U* p2 Q
4 |0 Q% ?& ~/ j
ModSecurityEnabled on;
1 R& R+ R! n1 z* g3 z5 w" gModSecurityConfig modsec_includes.conf;( R% l* J1 c4 Q5 C  G: r( L
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。( l- _; N2 J+ r9 ^, _+ A* I
  j! W0 k+ @. P
" D! u" g' n' g. P1 [* I
$ vim /usr/local/nginx/conf/nginx.conf* X) n% J, D- E! T7 K0 U+ l

, W' W- U( F' |6 I; p$ R" L
3 x% n/ W/ ?5 ]2 G# T. Pserver {
8 C: b1 N2 H, o8 W  listen       80;; s* _$ N( x, \
  server_name  example.com;
) {& o' F+ F# Z' S$ z+ U$ l# @. c, ~( }: p. w5 {4 G4 E
$ q) G. [. `$ P% E# A
  location / {
' A2 }6 H8 a# q* z; z8 ~    ModSecurityEnabled on;
" W; L6 B7 q6 A: n8 [: {: b8 q    ModSecurityConfig modsec_includes.conf;
# e  T% N6 i# H6 Z% T+ F% F& V    root   html;
4 y0 F; J- ~! R4 z% X( H# _    index  index.html index.htm;
% g& q  k; j& c8 d. x  }
9 C" \7 L2 ^. X) G2 T3 G}
4 A3 M% A7 A- I2 D+ M使用动态模块加载的配置方法2 d7 a4 T8 i  v) Y  K+ w2 {
在需要启用Modsecurity的主机的location下面加入下面两行即可:. C/ v! Z8 W9 J  }) G6 M
  e5 R! g! X# Z& c, V
7 U2 f# p8 o0 Y. Y$ I+ u7 n
modsecurity on;# y" b/ r% {) J! G% c2 A
modsecurity_rules_file modsec_includes.conf;
9 [$ ?/ y: }3 x9 e3 ?4 r# U6 `修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。1 d; h/ N/ v9 q; O4 w
. m* Y* D: }: a/ M  q5 V/ p6 q
4 p/ b: P; [/ D
$ vim /usr/local/nginx/conf/nginx.conf; F0 s; Q6 F9 z& h2 n! P
, @) X4 E4 r! v; k8 N- C0 _; g

3 a1 K) F% v, u7 z  i* ~server {
+ {7 f6 p- D0 _) X  listen  80;7 g+ Y7 ^* \3 v! V" g( F) z/ o. o- W
  server_name localhost mike.hi-linux.com;
5 D7 U% A4 Z, S- G# |9 o  access_log /var/log/nginx/yourdomain.log;4 u. S8 X' I; _

$ A1 f( p' b* J# S- e
6 r" \8 E# X( f" s3 }# P  location / {2 v# a) h' U+ j3 J% q" j2 ~& h& V
% @1 p( a/ E7 k% g$ k
5 I8 v9 \! U6 T$ T, O3 U9 v' x
  modsecurity on;
$ Z4 x; Q4 B3 E  modsecurity_rules_file modsec_includes.conf;, j8 F" d" P& x: [8 z7 G
  root   html;" H6 N, t1 y  Z+ F
  index  index.html index.htm;; J0 W1 T% K, p
}9 J+ B3 x0 t- W, `
}
; }, j0 o; D( A" N. Q验证Nginx配置文件* j2 v; O( n, P; l$ j
$ /usr/local/nginx/sbin/nginx -t
. ~/ f; a3 s- W# i* x$ Q7 nnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok% D( |: z9 P$ ^, G+ ^
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
4 c5 w/ y( @8 m, F. ~( |启动Nginx& Z- e! ^4 D# \* T
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
; X5 E  F* z0 @/ h2 r9 \) m7 i5 K* A. I" c

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


; J* W( N+ Z1 j8 e: T& W

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-2-25 15:19 , Processed in 0.096496 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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