找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 12258|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
6 W8 k0 }+ }9 i: Q  x/ m$ e) L+ f  G: g% i" `

, C1 E% P& ]) x1 p在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
, h" Z' h. O# g8 h/ w7 X2 \9 y
; }, W' `) }/ \5 V. @. J3 d0 a
什么是ModSecurity
& a5 y3 h- T- h0 ~4 MModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
1 A" k* \" w; n  r) J8 S2 [6 w
7 H9 `: Y: Q/ h4 `, \" y6 v" U$ f
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。6 ^- O- J/ |6 n7 N. J# Y

0 X+ |$ }* ?; ]% z& W$ r& z& R. q
; u' W0 U( r+ l' `* FModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
5 S5 H+ F" c0 a; m" [4 ~* y2 M0 ^' \9 V$ o( {

% V: S5 n% R) G官网: https://www.modsecurity.org/3 D& @+ ^6 f( e7 j9 w
* n4 s( k  k4 Y8 i5 J6 U; }: s' e
6 N9 a; u" G; F
什么是OWASP CRS
5 h: [2 p( N5 m; X4 UOWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
" W3 d' y  Y" k$ p( [0 A# P& i: N7 m$ {6 k7 O
  G+ S) J( O% f
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
: L0 X, a; m- q6 t6 S" Z/ ?' i* b& P2 I5 A# ?$ o  V

5 n. `9 r  \: A) T5 o: _: h1 rHTTP Protection(HTTP防御)3 R2 `( i' o0 g
HTTP协议和本地定义使用的detectsviolations策略。
; @6 ]% g6 E1 d( V3 f2 Z
. ?2 o" C& ?) V/ Y( C2 R6 l$ d5 H- ^  H
Real-time Blacklist Lookups(实时黑名单查询)9 p+ _1 j* J# S" N* H
利用第三方IP名单。! U- \! C* M/ r; p3 E. ^

% K. {- M7 U  k- ]8 r8 y& `
, D0 V) ?4 H5 x0 [" ~HTTP Denial of Service Protections(HTTP的拒绝服务保护)) e" D2 i- f4 t# ~
防御HTTP的洪水攻击和HTTP Dos攻击。
3 g! R& e$ F( T( A; @' y( I5 U8 g0 q/ y' R/ |; N1 l

# s/ [* q* l: r  VCommon Web Attacks Protection(常见的Web攻击防护)
& O5 C( G" \  @5 K5 ?# |检测常见的Web应用程序的安全攻击。
9 N& K" U2 w8 o* p" j7 Q/ m9 W$ T) I( u. c- T+ b( _) }3 E

0 L" F$ V% R* @: HAutomation Detection(自动化检测)! m" Z1 i2 n" M; b
检测机器人,爬虫,扫描仪和其他表面恶意活动。% d* K8 ~( }" {: |& G2 r; q
8 R0 J" N3 I% e1 Z, [+ B
4 F1 P) j+ W, m& T! m- K" O
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)& k/ Q. e0 N" a8 c( n5 {
检测通过Web应用程序上传的恶意文件。/ H, Q6 a. T& o  X# q0 p* Q

/ `- ~$ c& j8 F( G8 P- w  e$ {, G' z) H' {$ r6 g8 W& T" M7 y
Tracking Sensitive Data(跟踪敏感数据): B( t; \4 `. F  @0 n. h0 [9 j' V
信用卡通道的使用,并阻止泄漏。
" _4 p  T0 k$ l- I0 E7 i. v) _8 U, o+ y8 M4 q: S# s
& C* ^( G( S) q# |; e
Trojan Protection(木马防护)% @! y; d4 {& r5 \- e* }+ x
检测访问木马。
" d* b, I+ i- q) S# x2 ^! O% H4 ^" Z* s. f

, f3 p- a. t" V7 ?6 a  SIdentification of Application Defects(应用程序缺陷的鉴定)
7 {, W4 T4 E* X0 G  ~% S检测应用程序的错误配置警报。, A4 U7 e$ I- J/ `' y# c

$ f+ U3 M% b) |  s; s. Y- h
7 {7 E" D9 r8 L* I. gError Detection and Hiding(错误检测和隐藏)+ U" ^& O7 S2 K( r' i) v
检测伪装服务器发送错误消息。* j. m: w2 q4 t+ i1 X4 p# N

" N. x" n! Q) b; d7 J; p2 u
* E0 q1 I: s2 x2 |9 P9 p安装ModSecurity; J  K! k  S% d1 [
软件基础环境准备
, ^8 g/ v+ T( f0 O0 f* C下载对应软件包1 f# \" N8 @0 g5 h
$ cd /root
- X- Z6 D0 t2 w/ G+ G$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'6 |' t2 N$ J4 U$ K$ }; x( I
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz- e4 z2 G" q! c+ m5 S" U7 ]" p
安装Nginx和ModSecurity依赖包- U6 G! E6 }, f) h* Y
Centos/RHEL' ^+ W. g) |1 y8 y( G( `0 [1 v
+ ^9 k- i8 D7 M, g9 {# t( r8 y

# @& Q7 C1 t5 v3 d: s$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel) Z) E, L. ^( {  w$ j2 d. Z$ ?
Ubuntu/Debian
' p/ b: U8 s9 I* O
( N6 R" A5 Y; A* y% N0 k2 b  I' G* Q9 p7 z
$ 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
* k+ Q+ {% h& b' H; U编译安装ModSecurity5 F6 a# X6 A* o/ a; {
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
- L4 B8 M, p# e' Y2 m0 N9 l; e( z' |! l7 n5 G, r; j

- i' C, g1 N( f0 ]: T方法一:编译为Nginx静态模块; a! Y' O: P( l+ P  P

& l2 t& L; o) [) Z, j+ m- i
9 Q% z% m8 t( f* C3 `$ y7 C编译为独立模块(modsecurity-2.9.1)
# ]/ e/ D$ x2 r$ tar xzvf modsecurity-2.9.1.tar.gz
. }9 d$ j& @3 @8 G% t$ cd modsecurity-2.9.1/
& X% m, U/ z  ]0 i$ ./autogen.sh
: l) Y$ Y1 A% V6 E( |$ ./configure --enable-standalone-module --disable-mlogc
0 O: F1 v$ I/ Q. O/ a$ make9 g' _8 x- c3 ]% s5 P
编译安装Nginx并添加ModSecurity模块% I$ q% }) |+ V6 M
$ tar xzvf nginx-1.9.2.tar.gz
0 d) Q* j( T5 i& d8 ?6 o! A% g$ cd nginx-1.9.2
7 h, O4 F8 {8 x$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
* S8 v! S$ b! q9 v$ make && make install& @& e1 D( g: ?, o1 q
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块/ B9 |' h. X- a7 i: S2 @

/ \( B: S* b6 ], w. H+ Y0 d' {& c2 a& g( a7 f9 U: N) G
编译LibModSecurity(modsecurity-3.0)5 S# @6 H8 [1 q) z, ~
$ cd /root+ r) N  n  ~: Q) `# }
$ git clone https://github.com/SpiderLabs/ModSecurity5 L' U5 Q" x2 e1 \% w- n* h$ F
$ cd ModSecurity4 b5 _- m  h9 S  m# ]& F' Q
$ git checkout -b v3/master origin/v3/master" O/ j0 u3 J$ L, I+ s3 @
$ sh build.sh
* F2 S  B' R8 }" U; s$ git submodule init
! X  P# z; Y! _5 A; K/ i2 @( x$ git submodule update8 R  X- B2 _/ x; m) l( q$ ?8 F$ K+ T0 [
$ ./configure
* o  {* y) o  t3 ?  R' E1 }$ make( [' h2 `6 f/ d! Z" {
$ make install
" i8 q# Y; Z2 S) y8 }- h3 @- KLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。! n% N; V" c8 \: Y% ~9 V
1 J: G$ N' p3 D1 @* s

0 s% D# {6 ]9 U1 E7 w# U: y) U! b- q$ ls /usr/local/modsecurity/lib3 a2 }8 w" k( w2 ]8 b' `. h/ Z1 l
libmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.0* t$ v' q7 X1 B1 _
编译安装Nginx并添加ModSecurity-Nginx Connector模块$ L7 E: K0 n) s1 c6 D# s  G
使用ModSecurity-Nginx模块来连接LibModSecurity
1 U) g5 r0 y7 q+ T! s. _3 D/ i: o" L6 @4 e% u4 G( D5 K
0 o$ V3 `7 @! J) d- n) f
$ cd /root
6 F' L# g5 O0 R, B8 e& c1 o* @$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx6 }2 R& P. M; W* @
$ tar xzvf nginx-1.9.2.tar.gz+ `3 m" m' @& w, f1 X- W5 j% ^4 s
$ cd nginx-1.9.2) a0 h  d' J( g& Q* v
$ ./configure --add-module=/root/modsecurity-nginx! J2 z. ~( b9 s' m# ?" P3 B) T
$ make/ r$ a: k- q2 w2 b3 p
$ make && make install: D3 ~9 n" t1 z: F/ J2 M
添加OWASP规则
' p1 ^& f$ n1 E4 n- q4 u, b$ d% KModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。) b) I5 x. V# D  j; L% Z! g) R' t

1 s$ ~; P. y4 B5 A% n
( Y6 T# }  }* Q下载OWASP规则并生成配置文件2 Q2 N  F" R9 |5 K9 q$ ~
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git1 C) _4 t) o4 U
$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/
+ t: K7 ~! T4 }9 P$ cd /usr/local/nginx/conf/owasp-modsecurity-crs* L2 C: C1 B, s; m
$ cp crs-setup.conf.example  crs-setup.conf# L; N7 ]! a4 e9 [6 U
配置OWASP规则
+ M: N1 K  V* J8 {* p# |+ z' _# X$ [编辑crs-setup.conf文件
! V/ \5 l' V) J2 C& l5 X# R8 c2 L4 W5 V% C
! k+ ?% a+ a& p6 k
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
. `7 i: h# D; l5 [+ n$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
1 ^2 o" j3 }! I$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf( P$ E9 K8 u* l
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
6 I! L8 n: N$ i# m! z9 E  [3 e默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
% z0 n8 E) Q2 r" }- l* x8 q* e7 a7 q, m

7 @4 S" \& y# M  U启用ModSecurity模块和CRS规则
) f3 b$ q5 s: c0 R. Y7 L5 |复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
: ]$ `( T  c% P( l
1 y8 [  ]* ~! n6 f' I1 J& Q
/ U- G/ }3 y) r2 nmodsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。8 ?; y6 b/ X2 d7 w7 B( j+ |) \

8 K9 T1 i. ~& g" M5 ^$ X8 v( Y5 R. l% B
$ cd /root/modsecurity-2.9.1/+ P& O6 e, H* d1 J4 I. G
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf    z  T3 ~( y+ a: K5 u9 W9 m$ l5 M
$ cp unicode.mapping  /usr/local/nginx/conf/; s/ t8 j$ G/ d6 y
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
* {' D( b; z( j) m% ^& g6 q4 B. e/ v3 o" R! {
! {6 j# T0 @$ q9 |
$ vim /usr/local/nginx/conf/modsecurity.conf  p8 x* n4 J  F% r2 @0 P6 O7 u
SecRuleEngine On6 q, Q, e9 O, M2 X1 |6 {
ModSecurity中几个常用配置说明:
) K! S4 r8 m) k+ l
; b* W) r' k: K$ J! G9 N6 y/ V9 |3 m1 r" `# w/ Y) S' }0 ^& v
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
" G/ }: T  a, T: U' d" h3 q) U. Q0 \
: I: s5 O. G3 L& Y0 p1 D. C7 m* @/ J% O
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
! p5 H/ Q4 L, q0 O' N) N& c9 i
# o8 U, M# A1 D3 B' C( }5 [1 Z  ~8 p; L6 G
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
# Q7 y( |' w- N  |5 w& M) }# X: W1 Y' n/ ]+ D% l9 B

! m1 P7 P6 t& J! E0 \5 a- x4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。& p- E" U  i6 \3 r, g' x) l( ?

4 |+ U. f2 H# f& Z3 _% U) B0 t9 I; V- S. g
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
9 e  X8 D# q5 X
/ G4 s% Q+ b3 K3 l
. B" W  |" @) C5 r* p3.x版本CRS) [( v2 N8 o! f- `
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs; G( |3 r8 }/ |4 C# c3 y5 ]* Y3 U
# 生成例外排除请求的配置文件# b4 D' Y4 Y' D- q: j
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
3 g& I) H3 r; D4 g' y9 h9 V* I$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
; F- S+ t. ^- s$ cp rules/*.data /usr/local/nginx/conf
8 G0 W+ c% I/ U为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。  o# a6 [) ?7 y8 t
( y" ~0 ?% e" m+ v" H2 \
% s% U- h% e* N! a7 k+ [7 X# k
$ vim /usr/local/nginx/conf/modsec_includes.conf/ T/ t5 O9 `. \. }; N

) U! [$ E$ X5 N) {& l
[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

4 f0 G/ c" M/ m+ U  S
, |; n# B8 H8 a2 y注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。5 h* Q7 A2 a2 `1 e+ o( e4 R
+ }; M( X3 o) @, A+ i* `8 _

3 a& J% \3 S( |0 S* P) [配置Nginx支持Modsecurity0 t+ p: K; L3 z
启用Modsecurity
% R/ h: x; P( |( Z, R9 o使用静态模块加载的配置方法; d3 e# Y- D, h
在需要启用Modsecurity的主机的location下面加入下面两行即可:
2 I, M- g: i' I) u# h' j! y) B" L2 `: x+ C
; p6 }$ ~; _# {' F5 \
ModSecurityEnabled on;/ u) A4 \3 ?8 O" C
ModSecurityConfig modsec_includes.conf;
7 f$ v$ p/ b, T% n3 d: u' k修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。! N( y7 I; u5 ^7 s/ l

) W0 _/ b0 ]# r% W7 G; R5 z5 Z7 m- ^7 v0 y5 R# |: E* L' b1 ?& c
$ vim /usr/local/nginx/conf/nginx.conf
; W$ ]$ j9 O% W3 e: Y# {8 g+ `0 D" n' n; `; M

' b) L& }( O. a7 T7 ^server {
% J/ b/ D& Z5 W2 A  listen       80;
4 `& W4 n/ W- ~* p8 s5 g1 ^& T  server_name  example.com;
+ O" B# [) ~. B# T
: b5 ~$ R1 B) b% }  k
4 r& I+ j% k6 d" O, @8 u  location / {
/ ^5 G9 E, O* P1 B    ModSecurityEnabled on;- Z3 W  t9 R$ [9 x
    ModSecurityConfig modsec_includes.conf;
6 R+ |; m7 j; R    root   html;% S* n! ^2 d+ Y. g
    index  index.html index.htm;1 \& v7 q9 d+ d; o$ J
  }. z" O. e" _$ `
}5 ~$ q: T6 c( o6 P: L) W
使用动态模块加载的配置方法
- @  `! E0 D" p' x在需要启用Modsecurity的主机的location下面加入下面两行即可:
; M3 [' D# ~, L- |+ U
0 k3 p. N- s. R: |5 Q! C
/ E/ N/ g: [0 ~9 Dmodsecurity on;: `4 E2 \8 k, H5 C; D* j3 X! A4 f
modsecurity_rules_file modsec_includes.conf;
( P3 d* z  a* J修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。0 Z' C- L4 @! ]; k+ Q( J
0 g, R5 q+ s1 T/ Z. \0 d9 L
8 \" Y1 `4 `" }: I* S8 I0 j2 G
$ vim /usr/local/nginx/conf/nginx.conf
- @! p/ z- u4 \5 s* H7 I& i! h( M
2 p+ z5 Q  x  w$ I# Z( A2 Z
6 e. Q1 [6 j: o! Y* R6 k2 i# h. yserver {( |4 P- p  N2 Y5 l  }/ J2 i$ p
  listen  80;
% q8 F: r5 ?4 o  \5 H  server_name localhost mike.hi-linux.com;
5 o- ~- T3 D/ |- e  access_log /var/log/nginx/yourdomain.log;
* e9 R7 F9 b( J" o7 E7 p
, `8 a7 Q% K7 u; j8 @6 I% M; E6 h) g/ @1 N* U3 P" s" r% b
  location / {1 K! F* @% d. U) G9 O$ w
5 p+ `$ c1 e+ M5 @- M9 A6 U

7 R+ T' ~0 e, _; C  s' _" q  modsecurity on;
7 _/ T3 Q8 X# }& S* c2 ~  modsecurity_rules_file modsec_includes.conf;$ u  g7 ]9 B7 ^$ Z5 P: N3 |
  root   html;
! E9 I0 }& G- T. K& {9 W  index  index.html index.htm;
& \5 x  X) A6 R# P6 R' \}* m+ E1 g* c7 \
}
  G8 N* X7 R- \1 }验证Nginx配置文件
2 k6 a) O: r1 a$ /usr/local/nginx/sbin/nginx -t
& r+ ]  M# j$ v4 T& s% w/ \nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok( i. r: L0 @# e  y  W8 ^" K2 I
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
4 W. t, R' j7 \/ d1 @启动Nginx9 f% [. }9 ^4 ]2 o. x& U
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
5 m7 N$ x3 Z( p
5 a2 P+ O+ U: X7 b; i

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

/ _5 D2 ]3 Z# [3 r! F( {

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-9-5 01:12 , Processed in 0.109608 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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