找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11912|回复: 0

利用ModSecurity在Nginx上构建WAF

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

4 z9 W1 W# p# S& e& _* F0 V6 }' g0 C# W) u
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
9 w5 a* U& o1 L# u% |5 G& L# L$ J; w1 O0 {. t  l

  V: J/ c) v  Y' {9 j  K9 z什么是ModSecurity
) U+ E$ R' y2 ?6 f; r/ f4 QModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
# u2 c6 A- n8 A, n6 Q* O; b0 K* c
) A8 O0 M  T3 t1 m9 H8 k) S& \& h, i( c$ v( y0 r( p
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
3 {/ A& W2 s8 g; t6 Q9 E  [( _6 X) I. P, Q: `! S) m. q3 B& U3 P
# ~8 n1 M3 x2 b; f" V/ S1 u
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。* C1 C6 y3 G+ E# k8 I6 o( K& o

& ?4 m' C( S; L+ _2 k
8 Q4 G# n( }2 D: m& |3 z& C官网: https://www.modsecurity.org/
& {2 D# R6 P# ~$ q; r3 H8 o! m* V. q' o. A
. G" F& O% n6 h/ u  Z* H( g
什么是OWASP CRS
& Z/ c! |1 @7 B$ o% g+ ^( g; OOWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
( R  y6 \1 `# O( r" N+ q7 S& d( p9 _1 ?

9 t$ Y7 `  V1 A& T: P) ZModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
: `$ o3 @& r& E+ o
2 o, K$ X+ P9 z; i+ j: J8 u0 t* c( ?( q0 y
HTTP Protection(HTTP防御)  ~0 D) t; x# b: t4 ^( W+ I7 ?6 S
HTTP协议和本地定义使用的detectsviolations策略。
% p; }$ ?9 v6 E- Y& \. _# T& x2 u% q" Q4 A! }7 T$ C, a% Q

% ~6 a1 O9 E: I& q" bReal-time Blacklist Lookups(实时黑名单查询)% l& s9 t: s6 |# a1 Q
利用第三方IP名单。  A' t: c# v# H
0 [. ?  q  }1 d0 X6 i- R
1 S: N0 e' f0 X& E6 S, ^; ?; Y
HTTP Denial of Service Protections(HTTP的拒绝服务保护)* S& i+ |  T. v" _% N
防御HTTP的洪水攻击和HTTP Dos攻击。" G, d" t1 ]3 z9 P
+ F* K- T$ B$ S. \; S
7 X1 h1 Y; Q# E4 p: \0 e  X
Common Web Attacks Protection(常见的Web攻击防护); @5 B) M7 N$ q4 q$ _6 e
检测常见的Web应用程序的安全攻击。" f9 ?: f1 v* w

1 r6 i0 v; I9 W% @2 j5 R$ q$ B+ i2 C* X% `0 ~' W
Automation Detection(自动化检测)
& `% q9 f2 E" K/ T检测机器人,爬虫,扫描仪和其他表面恶意活动。
1 z1 q" m/ r' M" d: e& ^1 O" Q# _/ q) W6 y4 n
, M; v( N7 f; [% Z, B3 S: S
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)9 m- z! ~5 k( t  S
检测通过Web应用程序上传的恶意文件。+ ]5 ~4 j0 V% z; k& l. D

) f/ t0 n- \( Y; Q( K0 i& N6 Q3 ^; e8 P1 g# J3 z/ L# X" c
Tracking Sensitive Data(跟踪敏感数据)8 F  ~& X6 L$ d8 d& p
信用卡通道的使用,并阻止泄漏。, X5 W, ~; J2 e; e3 Z+ w2 _

7 ^: F: z# O# n, A" X# g) r: G! v5 L1 `( a9 B7 t5 T
Trojan Protection(木马防护)
: O( Y' B3 r6 k* E/ A检测访问木马。$ y, E0 F4 f' X, f8 S
* I# x3 k( s8 n: B

, J  G. N+ K9 O2 _Identification of Application Defects(应用程序缺陷的鉴定)
) V) r. x$ c) A; }; i: K检测应用程序的错误配置警报。; E- l4 W& l/ X

% M3 Y7 b! e( I. R
7 j+ K% C' v  V: w1 c2 yError Detection and Hiding(错误检测和隐藏)$ `0 J! e/ ]4 G4 [; M6 v
检测伪装服务器发送错误消息。7 u7 C( P6 g" N& k; O; L! i. y

/ t% O9 w. Y1 s. J5 ^  _
3 W) M& M! V4 X' k安装ModSecurity
( U. S6 W! l+ _- k; G2 Z7 Q. v4 k- N软件基础环境准备; J1 ^9 ~3 X: [! O, P; L: G
下载对应软件包
* `" [  w7 S6 V5 S$ cd /root1 F# w: S$ h( h% u( H
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
0 e4 I+ T3 `: J0 `+ [7 s( R$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz
- Z% [3 w$ ^2 ?, y5 ]安装Nginx和ModSecurity依赖包. J- C3 N5 X3 w7 ?. y' A
Centos/RHEL
' m% ?# [: q: d& Z' x- E; T& A0 r$ g) F# Z3 ?+ g9 ?/ v

# C% O& i2 |, C2 P8 `! R. L- z: _$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel  N3 L8 g5 C, f: s0 g+ r( G9 P
Ubuntu/Debian- \4 q) p) V2 O' R2 }
  [) P. }) A) u1 C4 b

& `. m8 D/ s8 R6 _% q7 f" t: Z) J$ 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
! D; N0 z) {9 Y; }7 n( q编译安装ModSecurity) B5 z% s7 A, G3 w, h
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
8 O9 H! _' H3 j" }/ @: Q) J7 z
# M, Z$ C+ T: d2 l3 d  Q6 z5 c5 \" t- r+ n+ u
方法一:编译为Nginx静态模块- W5 N2 m) ^3 F( z
" s- g" C$ o& T' `! @2 O

; x. p5 w- g% Y编译为独立模块(modsecurity-2.9.1)+ W& [4 K& C' K% F: `0 w
$ tar xzvf modsecurity-2.9.1.tar.gz
" p2 J/ b. u6 Y( P$ \. v6 {4 E6 n7 s$ cd modsecurity-2.9.1/
! s# ?/ D. ?: m6 {3 p0 F$ ./autogen.sh, y9 O+ t; S/ F1 Y& R0 C' j
$ ./configure --enable-standalone-module --disable-mlogc
0 [4 V7 }6 r' r1 H6 ]$ make
# H3 m2 ^1 c% X% e* Z编译安装Nginx并添加ModSecurity模块# ?5 X/ N  A# W0 B
$ tar xzvf nginx-1.9.2.tar.gz- j! z1 j2 D) A
$ cd nginx-1.9.2
) M- I. J, ?4 d0 l- S* j9 y/ e$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/' l$ k2 P" r3 H4 J- z) o5 {
$ make && make install2 L/ r$ A2 a6 H  C8 Y8 X6 o
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块, t& E: j5 }5 `1 K3 D. |- Z4 N

% R. ]# ~2 `7 H: ?7 ~2 {+ L2 K$ ^+ N
编译LibModSecurity(modsecurity-3.0)* x4 F  [2 ~6 I. R; Y
$ cd /root: A+ |2 l$ b! `6 W% \2 L% e
$ git clone https://github.com/SpiderLabs/ModSecurity' B) h0 Y& H: C( s, X
$ cd ModSecurity% J  @( u# f7 y
$ git checkout -b v3/master origin/v3/master
" x, h: O  x2 d" _1 D. {$ sh build.sh, k0 N/ g: b- g$ b9 q
$ git submodule init
/ n+ W4 @' ]2 L! q: f  K% F$ git submodule update; n2 `/ G4 C: R0 |+ C) v
$ ./configure! }/ D) ?$ ~4 y9 i' Q! V: \
$ make
( b* Q% g+ P% D$ make install0 e, m3 k, a5 S. M2 y& c2 [
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
7 p% \; e6 k; z- R; d; R
; M$ n/ J6 G( m% t1 y% s' U
1 @8 j$ k9 g* i' \# h6 T8 \$ ls /usr/local/modsecurity/lib7 u2 a! K  P( D0 ~1 ?, a. h
libmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.0
4 E! o0 B! H' U编译安装Nginx并添加ModSecurity-Nginx Connector模块
# S& ]  \6 Y5 k0 y) V使用ModSecurity-Nginx模块来连接LibModSecurity
7 o* Q; \  Q+ M8 n3 E, z% W) M( T  a2 b/ F0 x

+ P' Z4 G  `7 Z9 q$ cd /root! \5 j9 W8 L4 E  v, ^  T
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
3 F& [4 }# O+ d; n$ tar xzvf nginx-1.9.2.tar.gz4 y8 [- y! ~# w2 D
$ cd nginx-1.9.2; U2 @0 D, |9 s  s+ J2 _
$ ./configure --add-module=/root/modsecurity-nginx2 |" x4 |# z7 f" Q
$ make
) c. y$ j5 b- c. X9 _* b/ q" Z* |$ make && make install4 `- U& y* q; D, o7 s+ `% b
添加OWASP规则
; {6 h9 ]9 _( r, I3 Z# i/ ?ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
! E4 q' J+ ~0 e8 f7 I( o3 E' S8 }
6 w$ H3 T3 M6 Q/ G- ^* Q4 W: M, \
下载OWASP规则并生成配置文件. c& Q' G; o  U+ V- ^/ \2 l
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git- y: ^. W6 \$ d8 t7 h3 P
$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/- `4 e# Y# P, K  {; @
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs! Z" X) o5 o# A& K0 Q1 f0 f1 I
$ cp crs-setup.conf.example  crs-setup.conf9 F# W4 Z* X# |3 S( v/ q
配置OWASP规则
3 o1 ]- b$ Z/ l( o; t. g编辑crs-setup.conf文件
' s. V+ P& J4 R9 s) I7 a5 \/ ?- K* O  v# l) D
; [; H0 D2 m% k# q( y, A, d/ m
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf6 x5 C3 G2 \, ^3 i
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
4 \  U. K! u' G5 F4 t7 b! W$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
: p! m( ]% `. w$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf) R; ^. W& j/ u9 c
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
4 U  x% j. ~$ b+ y7 g
6 w' Y+ h2 T/ I0 u* P3 Y$ c! E- v. G5 b- V/ @
启用ModSecurity模块和CRS规则2 K" h* K3 [# w1 {
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
+ Z1 ?; w: k/ t
" [$ b/ r( x) M1 U5 T) z1 J- i# ^5 z) B+ o
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。: d. f' U  z  G* P% R# C
) u. O2 p) `6 e6 `; N! K" c4 t

2 F( q: }; m- f8 A: C$ cd /root/modsecurity-2.9.1/
* j- K# g, j: s: b  \5 Y$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  , m5 z( i2 _9 J: u7 {# |
$ cp unicode.mapping  /usr/local/nginx/conf/
  E5 w# S$ w! Y6 |, Q6 V2 K将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。" A$ l& _) y7 z8 O
8 x" p0 y$ b# B* d
& \% l) X0 q' B% q1 k
$ vim /usr/local/nginx/conf/modsecurity.conf. x! {/ K1 p2 D1 Q
SecRuleEngine On
0 F6 v3 k( n$ d, r; |/ HModSecurity中几个常用配置说明:
6 T: n6 K5 X9 S. G; J& {- D. S; m! p* W+ n: s& _
; n7 [% C8 N0 W; s
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。" H' L& u- l9 E( U- v

+ l6 |9 K6 z; f/ m
( n- F1 B3 H) R* u2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。1 |+ M- d8 r& h* B) `

5 G( F% ?8 W/ b5 X: N
6 ~3 ]6 F  }0 m& }1 V3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。1 y9 ?% z- t( r6 g0 e1 m) `

0 y$ \& ]: F: c2 n4 B7 D( _, k) W5 G; {7 e+ u
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
$ k. P1 F8 Y0 n1 Q9 i# v2 E9 Y0 }" |
# ^5 H% h9 F3 ^6 z1 i
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。$ u# j' X9 C2 p: @
" |: U2 J$ C' N" D" Q' U

( p# v! }+ ]  q3 j8 s3.x版本CRS% _" z3 [1 ?4 `% @9 ?  o" z
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
- n! c# c2 b8 C8 [# F% D- c# 生成例外排除请求的配置文件
, g8 a# S4 A3 }* E4 A' O2 I$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
; o* G6 O% A* t5 Q, m- U$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
8 ^. |! o" W) u) a  P$ cp rules/*.data /usr/local/nginx/conf
+ P, K- H8 i; Y* V3 e. E& t为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。; p/ Z; j7 W- j0 N  T, y

1 ~7 @# k. @8 h
* k1 }: m' O: G% c$ vim /usr/local/nginx/conf/modsec_includes.conf
" D0 P# J. Q0 J% ]$ I$ a- S2 e( q6 |0 F2 N3 @. `0 k* B0 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

+ c" R, o3 R5 B" q' K7 W" Q! z3 W3 u6 m! N. C+ n
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
2 F  m. Y; B6 [! P( F3 f
: F0 m' @/ |9 f2 g/ }% Y
8 y& A+ r. Z, C! p( {配置Nginx支持Modsecurity1 c) D! {5 c4 I8 O) V
启用Modsecurity4 U4 y' n" h% S$ ]1 E9 P
使用静态模块加载的配置方法3 H9 G0 n0 D/ z: m
在需要启用Modsecurity的主机的location下面加入下面两行即可:: F- H2 }  Z6 g7 K5 z7 p$ ?
' k/ E1 W4 q5 Q2 k$ @

, K0 w+ z6 S. m2 pModSecurityEnabled on;
! X! t; T5 T: P, k+ nModSecurityConfig modsec_includes.conf;
8 h- p. g% I, p' l* \4 y0 ^* u修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。; u9 }. r* N* q1 a" B3 B
' K7 I6 p+ I- t5 ]8 o

2 U2 f) ~: T* o! \/ p- P$ vim /usr/local/nginx/conf/nginx.conf
* L& ^; c: H4 U. [) H- I* o' \7 f5 y% o; F! F
6 z3 P9 t# U; U
server {
" h' S" T. z+ w3 K2 z$ f8 p  listen       80;+ h- I$ G: s/ n+ y' ^" x0 t4 d$ z0 ~
  server_name  example.com;
( v; q+ D% J# L3 i9 H% M( s  B* T" ?" [, a6 `7 u: W
; Y1 B4 e- h- H1 ^& A+ M& f
  location / {
- U( T( A& |- _" f% o    ModSecurityEnabled on;
% z/ N+ v. l0 l4 t    ModSecurityConfig modsec_includes.conf;; _$ t3 W: x* @% `1 ]: S
    root   html;
0 g6 {# c4 {7 O/ x9 H    index  index.html index.htm;$ J' R1 I9 S. b# F1 s& M
  }7 k$ ^* @. Z' i3 H& [7 p
}9 W* y: _& P8 c' c/ p
使用动态模块加载的配置方法
3 h1 e2 `0 m- ^" a在需要启用Modsecurity的主机的location下面加入下面两行即可:
) d; B+ Y. G, p# b$ I& u5 I  |8 l, F1 }1 @  m7 ^" h" g! a+ K
4 H0 q" `5 [0 u+ `
modsecurity on;
( X) u1 f9 e4 \8 ?# ]7 wmodsecurity_rules_file modsec_includes.conf;! b7 v# W2 F6 K4 j- f1 ^
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。$ N- w* g8 Y, t, c7 B

: M3 q; g. [8 j4 ]* w
2 l: [- H5 o6 @2 f4 f/ {$ vim /usr/local/nginx/conf/nginx.conf) o5 O# m, f) V$ H5 @
* U9 F% f: W4 g6 y; _

! W4 u4 U* Y8 \* C* a% _7 Iserver {
+ v5 ]. [+ H' Q/ S) ^9 N" X% I$ x  listen  80;
/ u: S4 |( f& d" L0 q; Q  h  server_name localhost mike.hi-linux.com;& m7 W$ e! p7 d2 S: G
  access_log /var/log/nginx/yourdomain.log;
# K+ ?* |+ S) z/ x# c7 `
. N* Q# g; R, \9 o+ @0 c/ \. {1 ]1 {; t
  location / {
& Q( ]+ c6 M. w4 O0 N
% k8 e6 w- h9 s, v4 W- `" F7 {+ V, b, T( N
  modsecurity on;
7 D6 n; V) z  q, u1 W  modsecurity_rules_file modsec_includes.conf;' ^. Y/ R) L. n& J+ B
  root   html;
) |- r% `+ e/ u" E/ D# l( K# z  index  index.html index.htm;
2 V1 b; }5 ?7 S/ N* o2 S' I}
6 i! \2 O+ Z* g% z# ]. R# C: F2 a}
0 J+ ?* R; Z" I: _$ }/ S; o5 i' l验证Nginx配置文件( N3 a. K! L  s  A! F( S
$ /usr/local/nginx/sbin/nginx -t
. _4 W% D% F5 j+ g; B2 Mnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
3 N2 j6 g, n, d* y, W8 E. [- Fnginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful5 U, T2 O, ?9 _  {
启动Nginx- O8 f# ?3 S; ~. z' h; b0 U. k* m
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf) u0 {/ z9 R& g) k. u0 P$ E5 w

2 G' I. f; ~, l$ [

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

! D" Z" d6 Q: L( \

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-7-28 20:43 , Processed in 0.077535 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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