找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11935|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
4 k# ~5 o- l& A" ]. S3 ~
3 a; [, M5 Z: V) C# y5 v" S7 Z' s, }; t; G, y. [' d# x
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。5 g' [5 C2 m( \

( C" ?- g9 ?8 d
2 `5 k6 P+ }' Y; W# b; g/ V什么是ModSecurity
  e: I# @  [2 OModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。% [- O- U- `! x9 D7 j' ^. p

/ W, q5 u6 q# B2 k! n, F- n7 g, k" l; F7 f$ E, D
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。  g6 @8 t  ^. s# }& f

4 k9 L4 W* l: R* z7 d
$ h# `3 D& \' a0 C3 `ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。6 P' m8 h( k/ w5 D7 R9 ?+ I1 T1 h
2 a5 E5 m6 ?8 q) w6 U; {2 C

& V* i% W) ]4 {/ H官网: https://www.modsecurity.org/
8 M2 U: g. C3 {0 y, H
% V( T8 U. R! c6 r
" Z  l0 \/ ]3 ~: S什么是OWASP CRS# C, e2 x+ I) k4 R, X5 Q  {
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。# B' I& O. g; ^( k) l7 P
/ U. {8 W2 I! o' [

- C) J, _! h; D; l2 b9 uModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
$ R  ^+ \+ V+ q, l% v# Y0 g: M" t' o

  a* @" b, i0 }+ _' S) XHTTP Protection(HTTP防御)
( t# [4 Z1 \7 q8 Q. |$ OHTTP协议和本地定义使用的detectsviolations策略。
# j- H  C5 T& A  m) g0 G9 r% ?. {! K$ O& T) G0 Z

( A5 V, D' R0 y0 Q, HReal-time Blacklist Lookups(实时黑名单查询)
$ }. W8 m9 B( g7 L" Z8 C' g/ b! n! V利用第三方IP名单。0 t% Q0 t& {  S

# Y! q" w: o2 M4 T* T8 P8 A( @4 X; W
HTTP Denial of Service Protections(HTTP的拒绝服务保护)
7 P( A: m' y5 ?' Z防御HTTP的洪水攻击和HTTP Dos攻击。
4 V' q2 q* \' M8 ]/ [. f( q" H+ M/ c* U2 y' ~9 f- V, e

+ K: Q$ K; d( U  u3 WCommon Web Attacks Protection(常见的Web攻击防护)$ W1 V& H& J9 d2 G" T
检测常见的Web应用程序的安全攻击。* E; F0 A2 A0 b3 }: `* R5 j6 T

! y9 g+ v* ^$ @- l8 M4 J6 n4 g, {$ l; u  J, D3 H
Automation Detection(自动化检测)
: p! H) E3 c+ l3 X) r检测机器人,爬虫,扫描仪和其他表面恶意活动。& m4 ?+ w  Y6 T- i  n0 S5 s% i- z

# w1 r8 n( Q( {, I  a0 h) c
' H5 L' s0 k- I1 T/ [4 WIntegration with AV Scanning for File Uploads(文件上传防病毒扫描)
' r  }& L6 g5 j" B检测通过Web应用程序上传的恶意文件。
/ D/ X" E$ x1 C" K: Y  c) ]' R& G

( I2 D- q* f% O3 [: f4 ZTracking Sensitive Data(跟踪敏感数据)( R' S3 f: J0 N- p9 o2 L4 }3 B
信用卡通道的使用,并阻止泄漏。
, e/ @! q0 V6 C* j2 {
/ a" `- J5 d( y1 [9 o8 C- A
# I) i9 ?0 u2 G# fTrojan Protection(木马防护)/ r5 q( [- D5 J6 O1 @$ k
检测访问木马。) W$ `* L! S0 b0 }( V5 b% U

. e9 z, }; c7 r# J7 t
8 ?4 A6 e% F" \4 l! DIdentification of Application Defects(应用程序缺陷的鉴定)% g. s) B. C+ T" x
检测应用程序的错误配置警报。1 Q; _; p2 M  Y* T+ I& b. j1 |# P# \

% F' u* A" o/ \3 W8 c. k& v
! n$ _7 u7 m; K8 y0 t; E* u( YError Detection and Hiding(错误检测和隐藏): q( x$ o' z1 G& d0 l
检测伪装服务器发送错误消息。
0 b3 n9 }6 m) `: U& Y) J& F) z0 b1 E) ?9 B  n2 ~( y' Y3 `

7 a9 r$ p! A0 m5 {安装ModSecurity
1 W1 t4 d5 j3 `: I1 B软件基础环境准备
9 k8 v9 G5 V: J' L% s* ^7 H' j$ ^$ V下载对应软件包% [3 e( a0 t$ U7 S+ e* W
$ cd /root& a8 c% B3 w8 S
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'7 F4 w3 h( q! j" p" _( v
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz5 J8 J; G* ^' x
安装Nginx和ModSecurity依赖包$ H. `1 z5 u, c3 p( x! I
Centos/RHEL2 `( f+ P5 J/ Q4 I) Z6 v
7 D0 C% U1 Y# l5 x0 Z

, g- @: E. Y* y, W$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
: W% A: ^! j( L: K" EUbuntu/Debian. a) g  L$ k* w" w8 v
# Y7 ]/ D! ^1 l4 r6 w5 `6 [- I5 Q

1 ~6 _( s9 b4 X% b  h/ m$ 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( f+ z( d( y) H; R0 B
编译安装ModSecurity
0 G5 d( [# X, g) kNginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。: s* E7 U9 r$ M5 p+ ^" q& a' }
; a3 ~3 ~& f6 ?
- {) q" t4 _7 P: ^! z* [* w/ T
方法一:编译为Nginx静态模块
" X6 G4 C$ g* r6 }! F. q' [; `, o: z, t4 W, z( x0 C* \4 L

7 m+ R$ b) @- b编译为独立模块(modsecurity-2.9.1)
& U7 ~6 W2 R. U+ B+ V8 k8 q/ v# l$ tar xzvf modsecurity-2.9.1.tar.gz
& u1 x; I& a7 K  N$ cd modsecurity-2.9.1/
! B" ]1 i5 q1 ^4 V4 Z) {  h" Q$ ./autogen.sh9 z  w7 u* a6 \& ^
$ ./configure --enable-standalone-module --disable-mlogc* _* a1 X6 U+ m/ I0 B
$ make1 _2 `+ J2 R* ?% `
编译安装Nginx并添加ModSecurity模块, Y9 l0 P) m; Q/ t: F
$ tar xzvf nginx-1.9.2.tar.gz$ K' N$ k4 U8 Q
$ cd nginx-1.9.2, V7 U8 i9 o6 h- Q
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/$ s) w: |& d* V7 w7 f! P( |* |
$ make && make install
0 t( D; j' D9 I+ E8 f- k方法二:编译通过ModSecurity-Nginx Connector加载的动态模块, z0 `8 T: Q- v* Z. W% x1 q
! y, \5 ?$ M1 Q) S4 o
; x/ b- g( }" Q' `
编译LibModSecurity(modsecurity-3.0)' X" h- \3 l- z" ^
$ cd /root
1 {7 {! l+ _8 ^; E+ D( V3 w$ git clone https://github.com/SpiderLabs/ModSecurity, J- W% l0 T. f4 k: X
$ cd ModSecurity
0 j' n4 W) o; s) y3 J9 A$ git checkout -b v3/master origin/v3/master
* y/ X1 x8 c8 [2 h- _$ sh build.sh) S/ {5 c4 X  G  f5 u
$ git submodule init. I, e$ H( ~  x8 m
$ git submodule update
7 {4 p) O! p9 F4 v* D, Q8 \6 u$ ./configure
' `' ~9 u' C; ^% u9 Y/ {  I$ make+ a/ u  P* w' t/ ], A
$ make install$ J( j: s1 j4 o) P4 t+ ^- E
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。2 P$ C/ D& }7 E) C

" Q; u! g, M- o2 `9 L
. `6 W9 ~! Q4 r/ Z* f- g$ ls /usr/local/modsecurity/lib  c4 R8 Y$ C: W& m2 M8 d% m6 S
libmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.0/ O; N$ i: h8 p5 J0 x' Q9 o
编译安装Nginx并添加ModSecurity-Nginx Connector模块! Y4 f. g$ W. U2 E
使用ModSecurity-Nginx模块来连接LibModSecurity
8 b) p2 X. @: m, V- _6 l' f* T7 V4 X# y$ ^' @

) |% {* e1 n# {' Y% `: l: Y+ E& i% j$ cd /root
* r- N9 C. M8 O# Z' x& M+ S# y+ i4 [$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx) a+ P) z  s2 H* ~  b% \
$ tar xzvf nginx-1.9.2.tar.gz
$ ^2 k! j) [3 K% W' i$ cd nginx-1.9.2
. `$ F( o) \5 P3 B$ L3 M/ w$ ./configure --add-module=/root/modsecurity-nginx
; Z$ b" X' `. X. U9 U: U$ make" u, D$ h* H8 G. r  N
$ make && make install4 h5 Y2 h! G5 N3 ?1 l
添加OWASP规则; ]  Q; m0 z3 ~7 r4 [% p
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
+ |7 [9 [5 ^2 `8 s! k. k! ^; Y, N3 B3 y& u/ {0 G5 Z5 \0 M) Z
$ ?4 \. }6 |6 Q& Z* u5 j# N$ D- C
下载OWASP规则并生成配置文件. c' l$ k% X6 W0 ?' c" x2 E8 S
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git* N5 [3 g9 B" }% Q& E4 l( d
$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/
/ r8 y( v' E# q7 R- N$ cd /usr/local/nginx/conf/owasp-modsecurity-crs9 d2 u9 S1 j* p  k9 e) U
$ cp crs-setup.conf.example  crs-setup.conf. `! {% g3 C8 y8 n& T
配置OWASP规则0 u# O4 y% d3 Z- @- S4 Q
编辑crs-setup.conf文件
8 D0 e( c3 a: y
  P  T6 D: N4 x* X2 ]" t$ @# l# n0 O  w+ s8 Z' }$ }
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
' ?: J. {2 k/ Q/ O5 ~$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf! D) |5 M1 l, N2 F
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf1 j& m1 a  ?1 E+ V! R
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
5 r$ Z8 C* A/ ^; I' J默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。6 m3 @- L3 B' b
9 u+ z8 f5 o/ |. h" K1 z

4 @1 t( b0 T/ }0 H. J) F' u启用ModSecurity模块和CRS规则! H% y* x4 O. r
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
+ Y9 T3 ~; Y/ N, n" Z& m# m5 m
2 n4 m7 b" g# H- k" C0 z) l  D! g. u( e- S
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。. T  U" H  }4 q3 W! p$ J4 n* v! n
7 e9 P) E! n! ~2 q! X, q3 z

; K0 N5 W. w, J2 ^" W8 x% S$ cd /root/modsecurity-2.9.1/6 }4 d7 `# }1 ]* V
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  9 }' d. V% Z, b- Y
$ cp unicode.mapping  /usr/local/nginx/conf/
- W% k6 P% s/ P: H) b  O/ f将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
+ f: b5 l$ B% ?! ^: J; s/ T4 @
7 e5 a( j: t+ R" a% H( ~. U: D: q5 [. N: D+ D; y
$ vim /usr/local/nginx/conf/modsecurity.conf7 e9 B6 E9 ]4 Y8 N4 I3 l. `
SecRuleEngine On
) L0 U& ?+ o& t8 [ModSecurity中几个常用配置说明:
9 v4 D3 S/ |4 `
# V! ~+ c4 s( Q
) e& k6 T2 F) _! Q7 I5 y3 H' w1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
  i4 f) i- [$ K6 a. i7 w, o9 C: T9 [2 [* ?4 G: i

# m5 D; Z2 T+ n( E' s2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。$ e9 x$ e! X* {' l' P

( q, T- k/ \6 \: J. i: w3 C7 s' T/ E9 O* n, q# T/ ]
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。4 t9 ~7 n0 v% C6 R7 \

+ j, D* j* N' N% s
+ i. X. H6 i1 K4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。; N" i5 X6 I: y. l, |  G- i

( |, K+ l5 b, U4 W) t8 W- b" R
" _5 v' q: K# q* u+ t1 ~; t' G在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
! G7 `9 a3 l% v5 D0 V. P$ {* z3 S$ f0 J; a- l+ l# o) ?4 J" j  m
$ ]% w0 b* P! c* N( N
3.x版本CRS
0 n$ Y- h& m, @5 h$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
* @3 ]# X! R5 N3 w1 v9 Q# 生成例外排除请求的配置文件* {3 E, i* C( t  S3 d. s+ s
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf: z7 V) s3 j- c# J  X3 g: b- U+ c' l
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf# s5 n3 E. Z6 i! m( A! J
$ cp rules/*.data /usr/local/nginx/conf$ Z0 _1 }* N( J" z4 ]/ {5 [
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。0 Y% ~7 L5 r' T# m* [- f
# \5 j9 I4 v$ v

6 f4 @# q6 o6 n% [$ vim /usr/local/nginx/conf/modsec_includes.conf
) W  a. ]$ v* [2 ~, O% s0 H, T3 p+ s4 a3 K* Z- i+ |5 E
[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
  U. w6 H2 v8 W- ]$ b, X

7 j: i; ~0 G% ]3 v$ P* E注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。4 X; \1 z" f7 z5 Y6 s# N& s+ y

& L2 ]- x9 v* b: l* J/ {
) l, Q7 S3 O0 W' F5 H配置Nginx支持Modsecurity4 [+ j/ }! ~9 v) K
启用Modsecurity
8 H! y7 O; }( ^使用静态模块加载的配置方法
( \* o/ Z$ q& [# v' |3 I在需要启用Modsecurity的主机的location下面加入下面两行即可:
4 `5 O3 r  p: @7 h2 N9 h
4 ^1 O8 C+ I4 V3 W, \
2 u* E  e: b" S" Z" y+ _* yModSecurityEnabled on;- V( x7 c/ _3 P( P7 |
ModSecurityConfig modsec_includes.conf;
5 ], h# P7 k! v0 H& t0 _  L7 h修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
! m; L, @# f  {3 n2 ]. p% c/ H0 _/ V  N
7 x4 i2 s' Y( s6 e: f
$ vim /usr/local/nginx/conf/nginx.conf4 C$ [* d3 r1 `

) g3 X: }! k! p/ o9 K+ \
+ a/ D$ \3 H# M% }server {
" g( V: ~( D) O- W. A: |) W$ G* ~  listen       80;
# t- P/ @5 H. j/ `2 w3 l  server_name  example.com;
: ?" @0 U& C7 L; k4 Y4 \% P0 W- m+ g
$ |8 b# r7 W1 p/ W1 S  j  K) L: r  i
  location / {6 d' b! f* u3 l4 A
    ModSecurityEnabled on;$ e; G. M. D6 [  S8 H0 K
    ModSecurityConfig modsec_includes.conf;
& {! T4 }( Q/ S    root   html;3 O  O  A8 P5 x
    index  index.html index.htm;
6 O5 V6 d7 F$ e% ~1 x* S# u  }- h2 A/ J' w7 M' }+ D; \" u1 E6 O: V
}
* d# ~0 ?* F3 O: U8 B# v7 s使用动态模块加载的配置方法
: P5 a# |! L7 h' u; H) k- w+ j& C& m" w在需要启用Modsecurity的主机的location下面加入下面两行即可:6 t) @& l! I7 G+ ~% D

* Q" G0 G/ E1 l; i
% I; K: Y& E5 vmodsecurity on;
' ]0 o2 ]# r/ i3 k& [modsecurity_rules_file modsec_includes.conf;7 ~: Z& F- x2 }3 W* n9 X
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
, U4 C! u5 P- V5 F
/ k# |9 x/ W/ T$ {9 N" s( x% I. @3 q1 [
$ vim /usr/local/nginx/conf/nginx.conf) z' l( t+ X& l$ D
3 h* k3 B: Z3 ~& M6 @9 S; g
: @) F6 V# o! z) H
server {- ?8 o  S% ?  A5 j2 N" P5 J! _' j, t
  listen  80;, |# B' a2 v9 ?% V' M
  server_name localhost mike.hi-linux.com;
" O* ^) G$ U. H1 [  access_log /var/log/nginx/yourdomain.log;
! H) i; d2 X9 E
, s" ~% x& e* J& m5 b
2 w& a2 Y% L- H' O1 w3 d2 I4 H% F  location / {
- x/ f0 |) j; o, @2 v) T( @* U
% @2 Q8 |" Q# k8 o4 a& E! q. z5 |: ]! A9 ?* _
  modsecurity on;
4 Y" B  n9 P! H  modsecurity_rules_file modsec_includes.conf;
! G. m, R8 H+ r# x% \  B  root   html;9 h% S, T1 G4 p; L
  index  index.html index.htm;
& {" }7 x$ u* s& Y' z}% J0 V) K7 x4 m0 i) z  m7 N  w/ d
}
. N, U* d$ Q3 L8 U验证Nginx配置文件: q- A7 {* ^: Y6 j8 F% p
$ /usr/local/nginx/sbin/nginx -t- l, q1 M- o  @8 u" s
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok& w6 u1 \% ]) w
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
  K2 w5 _' ^" B/ M1 K% g启动Nginx) A$ |! U2 x. S/ Y3 X2 d! h
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
" v. @, u. |) Q! \( q1 w1 U# T% n- f% f% ~$ Q6 k1 g8 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能够战胜更多复杂/未知/混淆的攻击模式。

* p* ?: k+ W- x% \

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-8-1 22:45 , Processed in 0.084369 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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