找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 10199|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
$ ~5 M5 f5 P/ O/ E' q9 i  A$ @
2 B  k6 d; Y9 [. u0 }8 Q  _
1 f9 q  s- f/ P2 N在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。' ?7 Z  T/ c, m( \

2 [7 h6 N% i: m+ |# a- @
; }" Y4 p, g; s3 V3 h什么是ModSecurity
" n6 e0 I; [: I* ^) i; V/ i. pModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。& B1 f8 I# j" f9 ?0 S3 j

, V1 \& \0 k* M- C4 n) |$ ?& t1 m5 g* ]* z$ O: d4 Y4 h" \
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
" A2 @* w+ f4 v, H# l/ S; m4 z* Y: B. ?! H+ F0 k! m1 Y
6 D# o  q6 N) C: R4 G- Q
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
$ n5 b* ~1 ^* I! i# _1 M5 l. R8 i4 K5 @& N

+ _7 [. t) `) X, B官网: https://www.modsecurity.org/, N5 ]. _' u# q- M8 z& z

$ C, T" L. }, |" }/ ~: R7 z* Q
! ?9 V3 X4 y; u0 ^% ^  o什么是OWASP CRS# l0 ]: c# C8 F- j% |+ M1 v! K
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。; t/ K5 \4 h8 C& E
) ?+ I2 n  }+ [" r

# l! V* K+ \0 j( D1 {4 F- Z% pModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
0 ?* w; Z* ^  `& M& T9 J5 O% [& p9 Q4 l) `5 _
, P; ^- T$ n, E" W9 |5 _2 P
HTTP Protection(HTTP防御)
. U; V5 \2 I4 Z& q7 ~- K- \7 fHTTP协议和本地定义使用的detectsviolations策略。
2 O9 B' S& R6 t5 v
9 }" G' C+ D3 p2 \
" d. H8 F5 T& _Real-time Blacklist Lookups(实时黑名单查询)/ C) x/ N3 Z7 \) s6 {0 l9 _! m
利用第三方IP名单。" a/ I4 @2 h! I8 o
+ R" T; K2 r, _) ?( K; x

8 W6 T  r" }! {1 J" h1 ?4 |HTTP Denial of Service Protections(HTTP的拒绝服务保护)* F) c$ y( n% ~5 H. X
防御HTTP的洪水攻击和HTTP Dos攻击。
* \2 L* k4 l: C. n3 c
3 Q9 M- G; f3 p+ r
" |. c; c$ {9 S" Y" w/ C( c8 `Common Web Attacks Protection(常见的Web攻击防护)
. P' S: p. l: [/ y检测常见的Web应用程序的安全攻击。$ f  ~3 H+ |' A) ?' `( ?' [9 `# W

+ N1 e& g  D  d
& D( ^0 Y$ k7 b1 z5 LAutomation Detection(自动化检测)0 n0 _- v$ l/ B7 H+ t
检测机器人,爬虫,扫描仪和其他表面恶意活动。4 F/ i( ]8 R; W- }, U
- f9 A  c3 [; i3 ~" h

+ G1 w8 M! _5 r) }9 @* w; ZIntegration with AV Scanning for File Uploads(文件上传防病毒扫描)# {0 }2 L* U$ C4 @
检测通过Web应用程序上传的恶意文件。
# d' z7 Y5 K  {6 o" g8 H( v  R1 P9 ?, Z! w) n
8 P# l+ d3 H. Z/ o) X; ~
Tracking Sensitive Data(跟踪敏感数据)& Y; D5 n+ H" |# H$ i+ y
信用卡通道的使用,并阻止泄漏。7 c$ ~' c* m: B+ F

8 f8 _$ I: W6 S9 m* H  o
# }  B1 E2 o3 I0 [. nTrojan Protection(木马防护); q* s% G1 ]4 M" s
检测访问木马。' Y  d3 [( y- E# S2 r/ x: K$ ]
3 B* m% Y3 H% d$ @* r  g0 b$ u+ y" P
8 H# J' \8 T. ?2 b$ m* S  Q' X
Identification of Application Defects(应用程序缺陷的鉴定)/ `$ g+ y3 [0 b# Q( G
检测应用程序的错误配置警报。! r" {/ c* ~1 ^6 }. }1 D

: V4 ~% M7 ^' M7 W. {  }
* e! U5 F8 N5 l1 N5 G5 m+ QError Detection and Hiding(错误检测和隐藏)$ x! `- @1 c- p
检测伪装服务器发送错误消息。1 K5 N" {* l- L) f
$ @5 M  f& ]- B6 n7 x4 i2 ?& J' \
8 U4 T3 Z; f) S& A
安装ModSecurity
; e! E4 P5 \7 j5 T. n" u& y软件基础环境准备
; m) F. g' r4 i) d下载对应软件包
- \  P+ F& A" Y# n$ cd /root/ e. B- R* _; z" F% L
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
  N5 T) @' i* Z3 {! o% c& A$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz
" J, W/ q' i3 T7 C9 P9 k( \安装Nginx和ModSecurity依赖包! Q/ L- d; w5 ?. N3 W' F3 i. e" b
Centos/RHEL
8 T3 g2 _8 ^5 P& H; }# V8 Z0 }! C3 T; I* u8 K* ]

) j# e- W% w& \4 [! z% w$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel- F" `7 J* ~3 U, c' s
Ubuntu/Debian1 ?- D. K! D( D* |
$ I1 b% G2 U3 p! w' U7 }/ f7 |
; S0 d- B# ^. T. A! 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
& I8 ?3 }/ w7 a3 l编译安装ModSecurity
- a0 y3 Y5 `3 K* I7 {  HNginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。7 u& }% @" p% K; `
- j+ j5 u% }, L$ \
. I, H/ N+ n' [4 N2 [4 T; y
方法一:编译为Nginx静态模块9 Z+ {3 u/ z, z( `% {& W
+ \0 Y0 G' {2 M

( N; }- L4 c  w, F8 s( Z编译为独立模块(modsecurity-2.9.1)
6 B9 C, w" U5 N  f$ tar xzvf modsecurity-2.9.1.tar.gz
( S* N" P8 Y1 m$ f3 \9 }+ o$ cd modsecurity-2.9.1/! x9 x* K3 G$ p7 a. e
$ ./autogen.sh$ y6 W* {" ?( S- |! E5 j
$ ./configure --enable-standalone-module --disable-mlogc
* y/ \, e( W* W1 ^4 O$ make9 ]) N# l, |2 T7 |0 d9 _
编译安装Nginx并添加ModSecurity模块
# l1 d' ]4 C& V$ tar xzvf nginx-1.9.2.tar.gz% k9 N' [" P! P, K
$ cd nginx-1.9.2
( w! c7 ~0 f# E3 V; |1 I' {# W$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/( s3 B7 |. \& z( q8 W; v
$ make && make install1 ]6 e; Z" v. e% I2 \, C  g. y
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块# d% k  {4 i* q! \9 P
( C; x8 Q6 c/ b& P+ E" p- ]

- P' Z) n; l8 }; _编译LibModSecurity(modsecurity-3.0)
. s* S) s4 @9 F0 X% H$ cd /root/ A6 }# B' E$ h* p
$ git clone https://github.com/SpiderLabs/ModSecurity
9 r/ x4 w7 T, o$ cd ModSecurity
3 w# v' [$ M) O! H; J) R$ git checkout -b v3/master origin/v3/master" M+ H" U  A$ f
$ sh build.sh
9 X3 E, j$ h+ z; P+ y7 D7 a8 m$ git submodule init
% ~, P# L7 `! h& _' c+ a: M" z$ git submodule update& j" O9 g0 x8 U0 O0 P. a
$ ./configure
4 j, X: Y  d3 C1 o+ S8 `$ make
* ]8 Q# n6 O3 z1 z/ V* W9 e$ make install
/ y& y- b) m% X2 v6 C( QLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。- P! y2 s8 ]* a: v

( B6 n3 Z% l9 }4 @0 ?+ V
* h* R, ]2 C& m4 B$ ls /usr/local/modsecurity/lib
5 d) y) S( |4 C, I  rlibmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.0" ^$ K0 \/ w9 Q
编译安装Nginx并添加ModSecurity-Nginx Connector模块- v* d" T4 Y  |. o
使用ModSecurity-Nginx模块来连接LibModSecurity
/ n# m$ a* l: }/ ]
+ ]. H# }8 _- B' M/ S" ]! t1 d# Y4 F
$ cd /root' Y6 j5 L- ]6 w$ c" e
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx0 c% w3 A2 ]% @$ {- B9 j% J' p5 _
$ tar xzvf nginx-1.9.2.tar.gz
0 F: c, u) ^: X. a" ?+ I$ cd nginx-1.9.2& U0 _# k& l5 p, d) q+ L
$ ./configure --add-module=/root/modsecurity-nginx+ q5 z( ?  v' h$ z$ \
$ make
" V3 J  ~' U  W" x: r; u$ make && make install
7 S) i* R: m" ^& R( T添加OWASP规则9 J; b6 f! c3 f3 x
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
, F, S! {! k7 J4 @
( S3 n, o6 W! }& g
4 H$ @. B$ k5 ]- K2 V. Q下载OWASP规则并生成配置文件
9 O. {" Y0 L8 |$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
: F9 v( o4 g1 U# h) P$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/
7 u. Y! a' i0 B) L* H0 G1 h  Y$ cd /usr/local/nginx/conf/owasp-modsecurity-crs- R2 S0 ?8 m# S) e
$ cp crs-setup.conf.example  crs-setup.conf
+ p3 {& [  i5 \5 w2 m0 G4 @配置OWASP规则
; u5 `4 }2 F& q+ T5 T/ D5 w编辑crs-setup.conf文件6 Q( K- b% _: C; ?6 E0 y
) R- R* p) X2 o2 D: y5 y

% z' p5 z+ M* s+ C1 e/ o; @$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
% R' F+ O9 E6 k% u: F' @! k$ ^: v& E$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf/ X. Z/ b% E* P3 I
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
) ?& w7 F$ }" [1 C4 _$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf, |/ `- E4 x# V) M8 C4 f
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
. f" l# P" m. Q: k; j! b, c4 m
3 \, Q$ }! ?' @% I6 U' T( y" f0 C# K! d
启用ModSecurity模块和CRS规则
  m' x- r% J5 }, q8 h复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
: y5 G. }6 H  L5 M/ _/ U2 f) F" ^9 R& g# _# F6 Y8 y& a/ a

3 g+ U# U- L1 T' I3 Jmodsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
) i1 g' V8 c* G/ H8 X' C1 _; K
1 c, y! ~/ ^$ k& G' N/ O
; b$ \* p8 M, f) h. p: k7 g# a* N$ cd /root/modsecurity-2.9.1/
+ K! ^0 L) F; ~. `% W  Q! C1 p$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  
' p, I$ o0 `9 @& G) b8 M$ cp unicode.mapping  /usr/local/nginx/conf/+ d- X4 o7 p7 `# @) [3 k9 {9 m  D
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
  w7 t* {& P0 D4 |8 s* {7 v: ]' b1 R2 y
3 B8 k! C7 R7 S5 u4 m; e0 d8 h) R0 j! }( @- C2 m7 u
$ vim /usr/local/nginx/conf/modsecurity.conf
$ w" i/ `5 ?- ~* ~SecRuleEngine On
0 {/ S7 j# V, Q  aModSecurity中几个常用配置说明:
. z$ [4 q" Z1 w# q% O1 v% w* M& s+ z" t$ U

2 V/ g/ b0 C8 N5 ?& K5 c+ ~9 L$ J0 |1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。1 X/ b1 M7 w  G; o4 ~- R% A
8 f2 N. h* [  j2 r7 I. K
/ b9 g  }- H$ C, ^( [
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
& h* w5 D1 d, C+ c" t1 }# ^/ t2 M8 ~) Q4 N" q# o% \

: ~6 S6 O, I5 h# B- ?6 u, H& r3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
0 ]4 r3 u" R: M2 q
- [. z9 z' O/ S: Y2 e# q4 [- J# m' p$ r7 D+ a2 p
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
) j  K+ A. t, X% R( C; n, p0 n
) |4 }3 Y; g7 A) W! ~) ]1 x+ h; r" O4 `
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
1 A, Z' J) ?& H* D1 w9 Y5 `
; {+ q4 A: w  r* h+ X% Z, ~
! g6 N+ Z% r. q) O0 Y& h+ t3.x版本CRS
. b2 J' `- F8 f* Z% \/ Q* G$ cd /usr/local/nginx/conf/owasp-modsecurity-crs: A: `7 g, V( ?, ?% K
# 生成例外排除请求的配置文件' w7 G# \1 l8 e- V0 s/ j
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
/ k& s2 ~4 F+ u9 @( N$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
  _! \* X- P6 f9 M8 c- Q6 J$ cp rules/*.data /usr/local/nginx/conf* x' y  |, g$ M
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。+ O5 u# s8 ?" M6 s: O1 |
8 j3 ?" D" h! c5 y/ i" D, N
3 u% O: J5 m( F, z
$ vim /usr/local/nginx/conf/modsec_includes.conf+ J0 y! f6 \! c( j
6 o8 H' ?/ h/ Q1 ^6 D. y; j7 {3 j
[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
" Q6 r+ T& O" }* v- @: [# K
, q4 ]$ O& R, J2 {& _3 K
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。  o& H( e4 t5 t3 n& g% ^

$ c! D3 `. ~- W2 e
( S& v' P9 K8 G0 v  \2 o: I7 x& I0 e0 w配置Nginx支持Modsecurity1 n1 C, ~5 ], K/ h! j* o2 [" [
启用Modsecurity
3 |8 W6 y8 R5 D# a& j' b* v使用静态模块加载的配置方法
2 c0 j0 \2 H$ ?6 ~) h7 N; |在需要启用Modsecurity的主机的location下面加入下面两行即可:* c  Q' {0 ~# ~2 |9 n# p
' e. P3 g4 o- Y2 q1 ~

4 v+ M4 b: d9 ^; LModSecurityEnabled on;
7 B% m! B7 h- `1 CModSecurityConfig modsec_includes.conf;
1 n# V5 F4 ^) _; x修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。# V* T& w! ]1 K* D: s# {: w

  N0 E% [! p4 T0 F+ Z+ a4 d5 m3 C7 l# W, p
$ vim /usr/local/nginx/conf/nginx.conf4 K% c3 R3 R; D4 B' M, h% j
# l: W% z' k  W6 w7 i# {9 c) F
2 c( u9 e* R. P' S! c1 ]6 f
server {
2 h4 M7 Q) P" R9 F& Y  listen       80;2 k" ~5 l% c1 o) _& |& W
  server_name  example.com;" }0 S5 d$ h/ G

* t) [/ h3 H# G$ B: M" v8 P3 u8 y2 I
  location / {
) z# d/ T1 \( D' Y1 Q9 b0 ^* Q    ModSecurityEnabled on;7 C$ {% U7 t4 j8 b( v' u5 Z
    ModSecurityConfig modsec_includes.conf;& D+ c# H# ]$ b% l1 U
    root   html;
0 @6 y7 N4 H7 B. y& Z. o    index  index.html index.htm;. u8 T6 J3 K- A$ G- B& q) R7 d
  }, R' Y7 |/ [' c) E5 v9 q) W  c) w7 g
}' M3 ^3 g9 J/ z1 D
使用动态模块加载的配置方法5 k& Z0 D0 x& `; {, _( P1 _, ^4 Z
在需要启用Modsecurity的主机的location下面加入下面两行即可:4 h8 ~* J: d( E8 |8 r9 g! b  Z

. k# H7 q, y% B! Y' ^5 f
) g, ]' `% n& P7 X* jmodsecurity on;
0 E  ~1 ^/ u# P5 z# Gmodsecurity_rules_file modsec_includes.conf;
/ {' M5 t, {5 L3 g8 |7 b修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
& `) I+ p" M3 `3 W3 r
1 R; o, M; m$ J" b( v) b8 x7 Q7 n! U% P: z! F8 L
$ vim /usr/local/nginx/conf/nginx.conf6 J# N* \, Q& F5 j5 `
# u& r) E) q* U
& w, o$ t8 U: `, y5 Y, L
server {0 H9 D; \2 }& G  G3 d0 T, t
  listen  80;
8 m, o3 z5 n5 Q6 N& I+ G  server_name localhost mike.hi-linux.com;
( t( S9 U, R  V0 w  X7 N  access_log /var/log/nginx/yourdomain.log;( V7 c9 S# f# b& |3 N% M

0 g+ ]  i9 Z- ^$ G
8 Z+ _- ]- T& Z: w. Q7 W7 w# m  location / {/ r( i+ X  P0 n! J- n( C+ [8 u
- ?6 u( X& w7 N9 i( z/ b# k

! F6 e1 H6 ~3 j1 S  modsecurity on;: _8 @. _: \0 I
  modsecurity_rules_file modsec_includes.conf;
& B4 x! S  d% a' a4 C# L+ E$ y; R" q% y3 U  root   html;
/ Y0 p4 F. ?. E1 E* ^7 ^$ n' V) }5 |  index  index.html index.htm;
3 F) C3 E4 ]2 Z' [* |( }2 x  D}6 B6 M1 F. u3 t  u+ _8 K  k
}/ W) Z7 A' T& T- u! q
验证Nginx配置文件8 m& X6 G$ z9 s0 K: e+ h8 I. Y
$ /usr/local/nginx/sbin/nginx -t- w* |7 ]/ ?$ j0 g# J+ r! J; `
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok  i( L7 @+ q! k, f  _% x
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful/ k/ x  J& [, u/ t
启动Nginx
; ?8 i; F# b7 h& T. C8 Q3 Q# i$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
$ S, b9 Y8 ]4 ~. i+ N0 \! B( r; F& J* P

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

; V! V5 ^8 V6 t* R0 C9 D

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-2-12 03:01 , Processed in 0.079031 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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