找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 12095|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
2 t" P; R+ N: W( `/ K0 T+ g4 K
9 a) e) A) v' u+ x+ o$ V3 Y4 s, j6 ?  g& P( ^, V8 c
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
- ^1 t4 q( c0 t, ?
6 M/ Y- `* L: a3 b& i! g
+ D" p' Y: S7 H2 ?什么是ModSecurity
; B; H8 p9 q/ TModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
7 ?; i$ f; ]$ l' J" S
, u' g4 L$ [/ U, p5 y3 |9 L2 X
) o1 M. r7 u1 m9 ?+ q/ W' K) PModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。- p' x6 D+ d6 T7 X1 J
$ K6 s0 ^! V- `' S
: o: S4 R4 L: q" w
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
% r; f, e  A- \" B4 g' K
5 e5 j% T% ~  }. |, e
+ p/ z0 j4 Z! v, X1 C官网: https://www.modsecurity.org/
2 @' ^! N, S  j5 s9 M% {4 |9 ~. V/ i( i  t7 h/ w* b

! z( O) @( y$ ^什么是OWASP CRS
% n: h' c+ u; H! v5 yOWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。& i# ~3 G7 G- d

/ t# z6 L9 u" [9 z# n( o/ C, B3 F* e( e7 s$ _* c# F/ ?/ T
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
9 {4 U3 e5 Y9 [, h; M- a$ q8 F7 X

$ r( u6 W, z3 j" q7 W0 SHTTP Protection(HTTP防御)
% N* }, n5 D, A4 h6 |0 r* ?2 BHTTP协议和本地定义使用的detectsviolations策略。
# P1 V) [5 ^- |3 b
' c- k! ?0 M: z$ I" i( g& C
  b( ^& w, L/ p8 n* B( t* uReal-time Blacklist Lookups(实时黑名单查询)) t2 a1 Q$ c* Z4 z/ _1 @
利用第三方IP名单。2 F3 d# C6 @+ n5 o" M  ]- R$ N
) H4 T& U% U7 ]

5 S: G& R" a: \+ vHTTP Denial of Service Protections(HTTP的拒绝服务保护)
, G' N4 }9 ]. y: Q% l防御HTTP的洪水攻击和HTTP Dos攻击。, e: L5 A" u4 W" \; w1 a& }0 N, y
8 P. g3 l* o8 W4 q
% T7 ~; P  S0 ?
Common Web Attacks Protection(常见的Web攻击防护)
8 W$ b6 y, R) B1 X检测常见的Web应用程序的安全攻击。# x0 Z6 ?' x; S" _* z- g

9 M/ \' Y3 D  |" m9 Z
7 D% R* x2 O3 M5 M7 K, A1 QAutomation Detection(自动化检测)' _; Z: e: p; y: j# M, z2 T  T, X
检测机器人,爬虫,扫描仪和其他表面恶意活动。
9 D2 {$ `( t! c1 q$ Q0 X# {4 T
$ ]( H6 h7 P* h2 l4 F5 H; E0 Y# f
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)2 Y# `; k2 ?. |- D9 c; [; f' V+ h+ a
检测通过Web应用程序上传的恶意文件。& }0 t; L" c0 x

  E# b! a9 n- V* \, a+ C: ^! n( R6 F% {
Tracking Sensitive Data(跟踪敏感数据); `# }- w  a3 f+ V* m: Z/ Q! d+ H
信用卡通道的使用,并阻止泄漏。
- O' }& ^, I+ }9 q" h$ _; G0 A# y* g8 a' l3 d

4 J8 `& l& O  N+ N  \# D( c- y+ ?Trojan Protection(木马防护)- {# V* D  _: j2 N+ Q7 R
检测访问木马。
/ F  {. ^' N& ]$ r5 @! m+ b+ d" ?& _* b

" h/ K# j9 ^. F3 ^3 QIdentification of Application Defects(应用程序缺陷的鉴定)2 z* s$ c: Z6 }' x
检测应用程序的错误配置警报。5 n: K; c* L# r3 E7 N
# [4 ?8 f8 p6 f, J* r" s
5 [8 z. v, P% V. {, e4 m. d
Error Detection and Hiding(错误检测和隐藏)
$ G3 L2 f) `% H2 l检测伪装服务器发送错误消息。
( P, Q3 F4 e6 I
6 J" T/ D8 p- I4 a1 r
  P. _1 D, F( p$ e7 P) t5 K8 w( P, l安装ModSecurity
+ B7 C* t, t: B5 F: Y5 G软件基础环境准备& X7 Q: R7 ]+ K% T2 |# N( ~; t+ d2 `
下载对应软件包
9 n& o/ U% n- l* \0 t: {8 i" m$ cd /root
7 X/ U- N- s/ j' {4 U9 G( }. V$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
5 i- Y8 S1 k0 e$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz" L! y0 _- p" p. n& J
安装Nginx和ModSecurity依赖包3 H3 f% n# U$ ]1 U# q8 n
Centos/RHEL
; k! f' N, \3 R4 b' B4 ]
6 P' E( o0 v. a- [' n# N( g( ^; N$ v
$ A) F( ^3 L% p. s8 q6 A$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel7 R# D/ Y- C# v. J
Ubuntu/Debian
9 V1 F7 |( m9 @) t6 u8 k3 U) @, ~5 ^( q
" q8 Y  B! Y- X, @4 j1 o. ?% A: X
$ 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
' T5 p) r0 o0 }) C编译安装ModSecurity
3 F+ Y( o, v6 a! I( P& _0 W, WNginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
  K8 h1 o( }: I/ T8 j2 a* F: U2 k2 j( u* A! C" T7 N
# ^* Z/ w  k1 V
方法一:编译为Nginx静态模块
1 Q: G0 C/ C/ [0 Y6 V3 B$ O& L+ P( `
& I5 b9 o# c5 ^
编译为独立模块(modsecurity-2.9.1)3 ~' c5 Q- k+ i8 I+ p( _4 s0 W
$ tar xzvf modsecurity-2.9.1.tar.gz
3 _- l! m$ S: L! }7 B; A* \/ j$ cd modsecurity-2.9.1/; f0 Q, }$ F) F
$ ./autogen.sh, @% f; B0 |- s8 `. n! x4 e
$ ./configure --enable-standalone-module --disable-mlogc9 z( n, j. [' L4 I6 c
$ make3 h+ b& \$ c) Z5 J1 p: I1 Z! i8 y
编译安装Nginx并添加ModSecurity模块2 X  E  _$ u$ z! I
$ tar xzvf nginx-1.9.2.tar.gz3 O/ S% f+ v9 {. K3 P& }3 i
$ cd nginx-1.9.2
: n3 i: K8 V# |* e+ c$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/' g5 H8 G; l% V% J5 d
$ make && make install
0 T& b- T9 w& V! B: |$ C7 m方法二:编译通过ModSecurity-Nginx Connector加载的动态模块, l8 Y9 B* M9 Q4 J
6 w4 I4 O: f' s

( s1 S& Y. ^% a2 X) J编译LibModSecurity(modsecurity-3.0)9 H5 G/ Y8 z( U6 h8 D1 a/ P
$ cd /root
7 A, l1 K4 W" G7 `8 ~) e$ git clone https://github.com/SpiderLabs/ModSecurity7 C* N( K" v; i+ _" b
$ cd ModSecurity. g! P9 c5 k8 @. U# x3 c+ P. M; `
$ git checkout -b v3/master origin/v3/master
2 \1 S) t8 M. W+ A& N5 k; G$ sh build.sh
& k+ t) a6 c( ~& Q. L3 u0 P1 ?$ git submodule init1 w& z- V/ r6 a4 o6 S
$ git submodule update
0 i" T- m$ _6 F/ G2 k  A1 t$ ./configure! t5 \& g9 U3 z5 t$ i! x
$ make
+ g; W8 }; _( d* i, w5 O$ make install
2 A9 S# l0 h+ O: W9 wLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。# p# x4 y1 p! D( ^

4 b: D& W& W1 @1 G5 y( |
  M, h5 l0 t0 ?$ ls /usr/local/modsecurity/lib$ `" Z' E( H3 O/ G3 U
libmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.0: Z1 _9 V! G* Q7 \) i
编译安装Nginx并添加ModSecurity-Nginx Connector模块
" E8 |/ G  r. B$ [! r" G使用ModSecurity-Nginx模块来连接LibModSecurity
  }7 C, t: u1 l/ N$ W7 T1 U  _6 b
) c" k' `8 d3 ^) T. S' k+ P3 F  {% ~# ~' Z6 p' ]/ w0 D$ D& @. G
$ cd /root, A3 W( q; e* \' z
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx0 b  D0 o& f- x0 L4 q
$ tar xzvf nginx-1.9.2.tar.gz
: i& R% T3 }) z$ cd nginx-1.9.2
  B9 \: b3 {7 W7 t! {9 o' S$ ./configure --add-module=/root/modsecurity-nginx
* s: c. d5 A: R/ w. N$ make: A) n% y4 ~1 b, M5 A6 T$ E
$ make && make install/ S% P, q# T) F; L
添加OWASP规则
0 z! A( A4 ~) w6 b$ }ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。$ F- @4 D. M( L) B6 o, S% d

. u7 |6 N: a( g5 c7 B4 @4 N2 c0 P- r( U; D2 }' C3 o
下载OWASP规则并生成配置文件# C- Q, E7 |7 N( M
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git+ p: s& G. ]# S
$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/! E1 E9 Z! C' G& p8 X/ ^) ~! n- S
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
1 Q- o+ B+ w6 z. _2 v$ cp crs-setup.conf.example  crs-setup.conf* E" \9 K+ Y& y8 q" x$ O% z
配置OWASP规则
- v6 r2 D; k$ I# S( K' [编辑crs-setup.conf文件/ M& t) }$ l" u5 [" P8 }5 D0 J" ~

, ]! v3 Q' _5 [$ h8 b& y: ~8 V1 q3 Q1 v# [
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
9 j" F0 B0 E+ g3 q, f$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf5 N! r1 h0 H/ Y6 I
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
' r: q! l' ?$ Z4 x0 y$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
1 j& v9 L  Y. L6 T4 o  Y+ u1 N默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。# a7 ]3 k5 |# b5 n# X6 {* \, J
. u' q7 G: D6 i; v4 P

" B' {" J0 G5 z8 X! J8 h启用ModSecurity模块和CRS规则
5 H( Y& {* _, j" q/ A复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。" S; C6 I' d- k) e
) l% G* |. s  r0 ?; W# R9 i
( I, F0 S  W* h3 z) x# c$ `
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
/ i5 B+ C" L. @7 Z( ?" \* w5 ?' _6 A) w/ W1 b
$ l) z* h, {3 |) m  c: D
$ cd /root/modsecurity-2.9.1/
1 G  h, {- r2 d) f4 W$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  2 I# v% b9 D! T7 ]9 S
$ cp unicode.mapping  /usr/local/nginx/conf/
  O* z7 ~9 M9 n  u将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。, S/ g7 L' P$ R

4 c; N. y+ f1 F( x7 ]/ ~
, i( r; V5 Z, S$ vim /usr/local/nginx/conf/modsecurity.conf6 p( M) e. e, H' s7 g" S" h/ ]
SecRuleEngine On' j# Q3 e" G! ?" I. }7 t2 Z) g
ModSecurity中几个常用配置说明:) d3 V9 u  o9 D) w( L. V
1 ?6 `- O# v/ }
5 o  V8 f# h& l" j
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。1 |9 y) ]  ^9 T

  \. p( T" k7 f2 u3 ^% r/ Y# s5 E# h4 v4 R& D
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
9 p! g' @9 [/ l3 A9 r) ]* H3 l% N6 G
6 ~$ w6 W4 d- K+ q6 j. V. A/ B
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
* t7 _! G/ a7 b$ i2 S; D
/ i$ W4 _0 P- `2 |" a4 r% {# \4 J1 B4 r1 T, i2 s+ P4 |
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。, I6 r1 U' X8 v6 Y3 f3 y7 W8 a
# k! b" x' G  @0 d

# u8 c( y  ?3 G2 S8 d: R, d在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
+ f, m9 L2 C7 \) v5 G  z8 e# B
& p) [7 M  O( K5 p% K: a& M1 w0 z7 a9 S
3.x版本CRS  Q+ t2 M: Q' E% @) l. m6 D
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs# y" S) k' q$ i; j- X' s
# 生成例外排除请求的配置文件
7 g2 X, @6 Y0 I# G$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf# O. W) A  T1 C- v' z0 m
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
. p. {: n. d; x7 ]" ~3 ~$ cp rules/*.data /usr/local/nginx/conf' s5 b) i; n# Z" b
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。# O: \* ]9 x2 N1 ~! ]2 x
4 p/ o1 a8 _/ L; K; X" i
3 T: i( ~4 ~- m$ \
$ vim /usr/local/nginx/conf/modsec_includes.conf
; B# C8 Z# f) N
/ Z7 `4 M, m3 R; ~8 J" 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
$ b  \5 t, D+ P: w

" D5 i' Z/ G" H$ c* |1 `% V注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。, s5 m; f! x" m- S8 n9 i  r

3 o* `2 {+ y; [0 A: E  l
- i! K' _6 h$ r6 s5 C$ D8 ]配置Nginx支持Modsecurity' B$ X8 p6 W& D. Z" A& M2 G
启用Modsecurity
+ h' H0 }% S. ]9 q) x0 x9 e使用静态模块加载的配置方法4 `; Z% ^+ r" Q0 [$ n* o' x  ]3 e  g
在需要启用Modsecurity的主机的location下面加入下面两行即可:
* A9 a& x( y: O% O* P& S* B# ^) [# b* W6 J7 X

. }& A  w! F( S) _, ^ModSecurityEnabled on;
! m2 F) A4 ~( C7 gModSecurityConfig modsec_includes.conf;# h) V, r! z8 k* J% i. S
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。) o- i! |- j% x* U: q+ z9 U; T
1 p( P- r' F$ |% U6 `# ]+ `! \

/ x/ d; D* m$ [: P8 G$ vim /usr/local/nginx/conf/nginx.conf
& B2 }' h- y# c% ?; E% W2 y" ]' m/ `  Y5 v
$ R0 S0 P8 g& S9 }$ z
server {
8 r% n$ G: T' @0 d- P( o! G' S2 b  listen       80;6 Q6 X- u3 y, e
  server_name  example.com;* j! R0 d6 j, k' @

5 j1 N' _" [, L* k4 S* {$ @2 y3 |
9 g7 ^5 {* ^2 ?  location / {
; E$ x, n. C3 \7 D9 q# ?" v9 I    ModSecurityEnabled on;
- _2 @1 K2 m& ?% q    ModSecurityConfig modsec_includes.conf;5 f3 Y  @7 F$ `% y
    root   html;3 V3 n+ r) `+ T) `- c( H# G! \7 w4 J
    index  index.html index.htm;
1 n" r1 U( s) L& D3 X, i  }$ I1 n( ^5 V6 ~& j9 l/ _: t; A8 b4 o9 e
}
( n/ U5 r$ J: m+ U使用动态模块加载的配置方法
2 F1 R4 E8 }  F8 |' I2 w在需要启用Modsecurity的主机的location下面加入下面两行即可:/ \+ L- j: ], r8 N+ Z

& S4 h; ]8 ^' y8 s1 ]8 R: s) G4 v3 ~+ t
modsecurity on;
. g( K1 U# [9 l4 Emodsecurity_rules_file modsec_includes.conf;
+ a6 q1 d: c; o( e% f修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。- g7 t8 s( p9 S

/ L6 N, P) y. S. `& W- _; ?' A& c- P5 M' @+ f2 |
$ vim /usr/local/nginx/conf/nginx.conf
+ d( b7 D$ b" x; g9 w4 o& f
  x. u* d8 C$ b8 ]( J6 I% `, P: t
6 S( Z( v# t# w( dserver {5 |9 x; p; y# k" k- `$ [
  listen  80;
! ]( C' i- f1 F% Q* `& h  d6 M8 g  server_name localhost mike.hi-linux.com;5 Z; l. @3 h( O) {+ O" r" b, A6 o. j" M; t
  access_log /var/log/nginx/yourdomain.log;$ e( V6 _1 f& b# H# a
* g; A8 H+ b2 c% H+ ]! f

2 Q0 F6 [7 N$ B$ [  location / {
9 U# M. j5 K  Y, H8 R- Q; Z2 i5 Q; x6 q, [6 M) V
( p+ \. Y' A/ }1 ]7 P: u" T
  modsecurity on;
$ i" l7 L  y( E1 \7 G$ q' l  modsecurity_rules_file modsec_includes.conf;' u9 q# p; K7 G* O0 o& J2 i3 h7 e# X
  root   html;
8 Q6 L* u3 x  b. w5 {' T3 q( c* Q" @  index  index.html index.htm;
  v; d% `2 d2 a' \  _( Q}
$ E1 \1 p0 ?: A5 e' C  a}3 _* h, A2 Q8 n: ]
验证Nginx配置文件- }1 |- }' G. ]1 r/ D
$ /usr/local/nginx/sbin/nginx -t
6 g- a* X, [  y5 Vnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
" h/ _! H( H8 c- Unginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful* z7 k3 N" \  Y, k) C0 \% k
启动Nginx3 R; n: n" G4 w# C) c, S
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
" I4 i' W6 S& M- v2 F0 L6 c
7 l% a( P) n5 y$ P! 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能够战胜更多复杂/未知/混淆的攻击模式。

) t& K. S3 a5 J8 l2 b4 [& d

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-8-16 09:37 , Processed in 0.074539 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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