找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11440|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
: c4 E( P( K/ ?$ p
; W7 _7 y1 Q; M  |; D. F" Z" K+ H- N1 B. [! F" V% v
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
- \# g0 ]6 s7 ~6 C
4 U6 D7 J, C8 D! K+ b% t) ?0 U/ C1 b' F1 J
什么是ModSecurity# Q" L  i0 G& a& s
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。& p" r2 ]' {/ D; Z

# y7 i% ]9 @% j  G' B$ `: E3 g  E
/ p) Y  ]: L& c3 v( f; k0 nModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
4 e, F6 P  \# G+ S9 l0 q  O! h) u: R# G

" r; }0 v0 j! E& c% P% U3 W, oModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
3 n" x0 ~3 K3 u' |: k6 l0 j
/ e5 ]' }( I1 r4 i9 G' V. l. e
  a5 O& B5 c5 I3 Q7 ^8 `$ n: s官网: https://www.modsecurity.org/
- M! e6 T3 I, b; A( C5 x9 o' C; `
: J/ y; \9 }0 X
# F3 E8 E! {! f3 O' g. A什么是OWASP CRS
) ]2 H; |% g; aOWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
* ^) y2 @/ n( Y. y
* x2 p1 B/ v# f( p( R  ?0 m3 v
1 \+ n# |6 ]8 MModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
6 Z( ^" z9 @/ C
7 {9 a+ a! K* x+ n6 V
3 t9 J% X* w7 F: M6 iHTTP Protection(HTTP防御)6 H; K! }. E  t# \. `
HTTP协议和本地定义使用的detectsviolations策略。
- V9 q, C' h, n' r' Q7 m; H
* `; n' L  J, b; a5 |, t% u7 P$ I$ D, m$ o& `  y
Real-time Blacklist Lookups(实时黑名单查询)
: ?( P  t0 V' o4 x3 ~- S* ?利用第三方IP名单。1 L2 P" v' l$ ]' ~3 u% w
. E& d" V* Y  `: Q. l3 r4 b7 {
! L5 g/ s+ s( e. h. {6 f9 b
HTTP Denial of Service Protections(HTTP的拒绝服务保护)) s: N0 K- [  g% k4 S
防御HTTP的洪水攻击和HTTP Dos攻击。
' @. L  ?' \0 W/ ]1 p, L7 G1 D  F7 p2 X1 Q& _

; F. S: y) `. h+ d' x/ mCommon Web Attacks Protection(常见的Web攻击防护)
- [1 h6 _9 G2 E4 O5 Z0 i检测常见的Web应用程序的安全攻击。
8 [% z8 m* u7 k$ \( \
  F6 q; e3 c8 H0 B6 A
; F0 H( @5 r# ?+ v0 @$ S1 ^4 vAutomation Detection(自动化检测)
3 E+ r8 D0 Y8 E+ w0 @7 H% N9 Y检测机器人,爬虫,扫描仪和其他表面恶意活动。
( j: [% ]0 x' D. c, h1 R* c2 R. y7 q# t+ t& L  b
4 T9 B7 `/ \9 I/ h
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)
2 R1 w0 ?/ R, }1 p7 p7 w检测通过Web应用程序上传的恶意文件。, ?$ h1 {# y/ t6 X
4 q& E# Z. s2 E  C# P9 d

% N: x2 a# c7 CTracking Sensitive Data(跟踪敏感数据)
( l% ?9 T% C' S* E4 `信用卡通道的使用,并阻止泄漏。5 N2 T# J+ t$ s' H! O  [; P$ k
8 `  B; ~; X: u! @
! O4 i( h0 d/ q2 G, M$ g
Trojan Protection(木马防护)0 M8 n' L8 V/ I  B. @
检测访问木马。7 s) G5 A9 ?0 Q1 }4 k

% i) Q' P! c  L" w; r+ {; \7 ]" P7 K; h1 `
Identification of Application Defects(应用程序缺陷的鉴定)
+ I; U: D5 [5 @! h. t检测应用程序的错误配置警报。
" R" A4 Y4 P0 h. Q+ K
. ]) k. p3 o5 m7 `  M& y+ p
/ t& ]7 R; Y1 Y) \7 v) }4 |Error Detection and Hiding(错误检测和隐藏)( K) M) Q4 T1 n! @& d/ `
检测伪装服务器发送错误消息。
' H6 B& ]8 c4 x' M% ?# D
4 [8 w9 i* [/ B, ^1 }8 N2 R
  U  l3 b  `4 [, N% P安装ModSecurity) ~# U& u/ N/ n4 g' Q* n/ a
软件基础环境准备
; P" ?# j( q. r1 A2 _, M下载对应软件包9 {! O7 g1 c% p* H2 _1 |$ t3 Z
$ cd /root' `( p8 h& ?# a6 h! K/ y4 u  g
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'8 c. T) h3 M% E2 u# s
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz3 R2 Z2 |) p# F# p1 J
安装Nginx和ModSecurity依赖包1 R' c. a4 \; U- F! C
Centos/RHEL
3 o' u; ~6 o" {8 g( O  Y. n9 U$ `) C8 n5 m. n! N
: W3 `) J2 W% ~4 T1 p
$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel7 R* m! z2 _% ]9 S& Q+ E
Ubuntu/Debian3 h1 S$ W/ S& D+ Z& k( O4 R' v$ Z: S

/ f5 L7 F+ x6 k. @' S
: U/ S4 q8 W3 f$ f$ 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
' q4 Z0 u( D8 [; M% y编译安装ModSecurity3 I  L- |* W7 ~( b6 Q! t1 A
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
9 t- m; ~  K# G/ ^; a/ o( e
5 F* g8 R1 ^6 _( {9 R% ~, }' u- a4 g% J: I* d+ A0 ?( `7 j, k$ x
方法一:编译为Nginx静态模块; S: |. q2 Z9 @( |6 x
' m! I! ~5 N( s/ m) p7 f
9 u# z" d0 }- S, d1 g
编译为独立模块(modsecurity-2.9.1)
$ F9 j& F" H2 J$ q% k! n) G$ tar xzvf modsecurity-2.9.1.tar.gz. w2 e" d' s  e* H& X
$ cd modsecurity-2.9.1/
( N& J( u3 T, X8 Y' G* Q5 X$ ./autogen.sh! X, j9 T/ ^; d5 {5 e3 B" Y
$ ./configure --enable-standalone-module --disable-mlogc
4 f6 h3 `+ }  h( ?8 w% ~, F$ make
% T' Z" Q3 \* J编译安装Nginx并添加ModSecurity模块. f7 z( L9 Q0 X8 U/ i, k0 P
$ tar xzvf nginx-1.9.2.tar.gz
- c- v( d3 Q" i3 o# t$ cd nginx-1.9.2
" i$ [6 t+ s9 S, R# i% T3 o$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/; x! C" n% y# w
$ make && make install  g) U4 Q! Y% t, D, P9 F
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
/ `" M' p1 Q5 n6 B0 k! _, w, E; Q
# E) Z2 \; e" m( P! j' ~( |. g$ d2 S1 N1 g
编译LibModSecurity(modsecurity-3.0)8 y& h' T2 q) d  E. i  x8 K
$ cd /root
& ^1 Q. P" e7 N& x9 j$ git clone https://github.com/SpiderLabs/ModSecurity& {+ n- t. M7 {
$ cd ModSecurity9 u! W. m; K4 d8 E( n& [
$ git checkout -b v3/master origin/v3/master8 Q# y7 h- f1 t! f# P
$ sh build.sh
; L# ^% H& C+ B- v* |& p4 u$ git submodule init
% k2 J& V+ `, ~1 W$ git submodule update; }! i3 }4 q/ z; k8 J1 |: ~
$ ./configure' E, l% G* {" M6 F9 l6 }, k( o
$ make$ {6 x5 A5 `6 c7 D7 S7 ~5 g* K
$ make install
  n  b. t+ M7 u) q8 NLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
& ]3 L, U2 ^" O5 [# [: l) h: x: `2 `, A: P

" X) Z  B% e) f; t. Z$ ls /usr/local/modsecurity/lib
% I& G6 v& _" o0 b9 d6 L9 W$ i  llibmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.0& B6 o9 d. E- d% g" A
编译安装Nginx并添加ModSecurity-Nginx Connector模块
8 Q+ J1 {- E2 _使用ModSecurity-Nginx模块来连接LibModSecurity$ b5 M4 s/ h* ~! J& G$ U- C! k

/ N+ f: f3 o$ S& I9 g9 o, Y) ^7 Y3 o+ q
9 @$ B8 \9 w& y0 A3 C$ cd /root
' k! G/ m9 {- }7 e: k$ [( p2 h$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx1 |2 j* F2 K- I# L6 Y9 G
$ tar xzvf nginx-1.9.2.tar.gz# x# |: g8 V8 ^4 ~! r
$ cd nginx-1.9.23 A, K6 ^5 u) \1 `
$ ./configure --add-module=/root/modsecurity-nginx
7 E  T  [0 [) T8 b$ make* L1 D& |) H/ ~7 U" S; `
$ make && make install
/ k1 f' O, t4 i添加OWASP规则
& o8 Q5 f% @1 h0 i) q: F  ?; @% QModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
7 |- x8 f4 W6 q5 K' Q9 q$ G
1 w, q, B4 }, y# E' x& s2 ?3 e
8 B5 H# f- |& T4 i- s- T/ @下载OWASP规则并生成配置文件
# G1 Z' H' w! O6 c: C1 g) b$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git, [& ^, x9 X, X2 k6 ]2 O' c6 T! M
$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/2 [( t: d- U: ]7 m
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs  v1 Y( B$ _; B
$ cp crs-setup.conf.example  crs-setup.conf0 P, d$ a) E9 D4 i# t
配置OWASP规则. w# i! l* X  Q( j6 ~/ N; h
编辑crs-setup.conf文件/ a  f; N: e& f9 I/ o3 }
  e4 ?' ^& o9 z- e4 d7 U, Z
3 p5 `' C2 \; a3 M
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf% x1 w8 ]+ Z/ F: v+ t! r- M: K9 B
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf/ s" Y; D( p2 A0 b; ]: V$ Y4 Y8 l3 u
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf! a: O- A! N1 M
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
# m: ?1 d0 ]9 |5 L0 F默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
% m# V9 T. a2 d. v
" e8 }& S2 r4 A$ C+ o
' F5 r) ^. k# J" G" T启用ModSecurity模块和CRS规则
+ }9 G8 N  v0 E3 ^- ^复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
7 z8 ]% m7 g1 i1 }! a! \0 q
4 m9 \0 f# |; b/ ~. c' p4 Q
6 M& V8 z4 u6 ]modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
) q6 R0 O0 R! Z. E5 _4 x3 w
1 @) |. ~0 @1 I$ v9 L$ l9 U
) ~# j. z- T* k1 Q1 c$ cd /root/modsecurity-2.9.1/, V; ^) t# E8 o" S5 i+ \
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  0 Q0 f+ K9 ~6 \8 v7 P' S
$ cp unicode.mapping  /usr/local/nginx/conf/
& m5 V5 G- j. t. \! \) n% [将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。" _7 }# J( z& I: h, g$ x! V2 I
% w8 v2 t2 ~, ]
0 o7 y* w8 u* {- J
$ vim /usr/local/nginx/conf/modsecurity.conf  F) [: [6 E) _
SecRuleEngine On
) j/ F6 y! p! x* g$ }5 N; {% cModSecurity中几个常用配置说明:
4 V3 _! z$ E0 b: E$ {; K* J! p! L0 ?! h: ^% s, L4 q

' z2 `, X2 x! h, V- m1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。: M' \- V. o' z+ B- r

9 H" r. C# v/ b( w* s- T) t
0 }7 h) J4 ^( H$ Z9 R( a2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。  U; b/ w& M6 x, |
3 ?( D' o) K7 c  p4 i
/ F4 ?- i/ d) N  r
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
* W( O) G4 a* d, o8 l: ?8 m* {# R! ^& ~! m9 ]9 E2 \
7 P0 F, x3 A7 a9 c- ]  Y; b
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
- [0 H: `! P* k/ R% q+ V4 N  ~( s

% N; `+ L* ^, i$ u在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。! b, {6 @7 Q( @+ C' b3 O4 z! E, h
4 V! P) S# L" b; v1 z- h* b
( \6 ?3 ^3 X; n/ e9 H
3.x版本CRS0 Z$ c4 l. p$ m, O) S5 {# t2 @
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs7 t; d& v3 x; d* ~% j$ U) P/ D
# 生成例外排除请求的配置文件
2 v* K2 M0 m' }. P$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
) N/ |" X. D& ~7 Z% f) N! h$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
0 m& R1 L+ N3 b* ^$ cp rules/*.data /usr/local/nginx/conf- V  V+ b9 H* W+ G. d" {) h
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。" N/ @- \  K7 ^7 e; k1 _

  R( T) t" H, r7 B1 H( Y
3 B; b2 N; R; T! [4 }$ vim /usr/local/nginx/conf/modsec_includes.conf
9 e& T( a: T$ ?$ Y( C
' L' t; x& e, c% _) M* V
[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

; L1 D3 I$ v5 }) s
7 M. G: E+ x* c! p1 {注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
3 {0 @5 B7 n6 m  o) d2 L* r6 i
) i' b. X, u2 i9 H$ Y7 v( |; C& c5 e
配置Nginx支持Modsecurity. }8 _; `; b1 S1 l4 |1 w, W
启用Modsecurity- S/ b- v5 n7 s; `
使用静态模块加载的配置方法) x4 u6 J- m6 O8 _& K
在需要启用Modsecurity的主机的location下面加入下面两行即可:+ o3 x6 I& J  V; _

! `$ T* Y% p3 @0 M
- B5 j. T, j- x0 a2 j% kModSecurityEnabled on;4 \/ V2 H) f7 w$ ?" g
ModSecurityConfig modsec_includes.conf;7 f: k! k- d. S% Z8 J
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
+ S. W" K* I1 c7 W4 p1 e& j$ Q6 p0 ]/ E
3 x# L' s7 {1 D. X2 C9 `& Y6 w4 G$ a, f8 \( {/ m4 f
$ vim /usr/local/nginx/conf/nginx.conf# Q' T! W2 `; T0 p5 `9 W+ ^
! c9 [  I' S; A* s5 J' w# n7 C' R
2 |' U$ J4 F6 B4 W/ g" j5 ~4 ]
server {
( q  b1 G0 @$ o6 w0 W" X  listen       80;
( T# S+ c4 k# N# s4 I- _  server_name  example.com;
8 z, i# [+ M# n6 O9 i2 q' G4 r4 f) F& I% |' A" r# f  h
0 L/ _1 J, h$ {% q* l+ I5 S" l$ _" E9 Y
  location / {, T$ k( k" ^& B+ v9 A8 b
    ModSecurityEnabled on;& ~/ i  u6 l7 p1 H" g
    ModSecurityConfig modsec_includes.conf;4 X, r0 K! m3 X0 E- k( N
    root   html;
& x1 z2 I. U: E9 m9 n5 k    index  index.html index.htm;
8 J7 \9 Z+ b  ~& h  }9 {% Q4 E" X0 L( v5 z* U: m
}
; u- `) m% h% H, ^8 Y' W使用动态模块加载的配置方法% j" u: r1 }9 B( P- w" s" `
在需要启用Modsecurity的主机的location下面加入下面两行即可:. p, G) j5 C, M5 w0 M2 H* G. e8 B
) ]' ?7 S, g! f5 [" i7 W4 J

1 z! \2 N9 S6 x/ A2 wmodsecurity on;; F/ t( ^% i. j# q7 s) U- M
modsecurity_rules_file modsec_includes.conf;
6 P* _- [) H& H+ |' d: w4 J修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
0 w' e1 u% e1 H! Z! X; e7 Q& ^  D' w$ g6 y
4 W0 X8 M8 M0 j4 X: Y
$ vim /usr/local/nginx/conf/nginx.conf; N6 z7 m6 V( b

' I. u5 A& t8 j. ?# t
( K2 @! d% s+ ]% A& u1 vserver {) V1 A9 o- G/ N9 T" {: Y9 r  p5 }) W
  listen  80;
4 P' E, O& H2 X6 a: N) F  server_name localhost mike.hi-linux.com;. I3 O1 r) a1 f9 N8 r, w& q5 N: E
  access_log /var/log/nginx/yourdomain.log;
( U, S" x+ o. p+ j
3 k$ @/ @4 ~! o2 w
5 h8 R- n' J$ K7 L5 g8 l  location / {, |# r9 }5 u* P/ F
' @% g9 H, r7 z7 P

$ [5 s4 W- \. M1 ?" m  modsecurity on;
4 }5 |+ E* l3 Q3 A, _' J- H& v  modsecurity_rules_file modsec_includes.conf;
4 y: i1 Z) c& ^, D0 p+ a, o  root   html;
$ P# |4 E7 A' @) o$ t) S) F3 t  f+ S( E  index  index.html index.htm;
6 P  ?: Z7 }. n' r% U& F- d8 e, @- b}2 @3 c2 f5 a6 J! }5 E% Z2 o2 J
}" {' T9 H; ~% W9 k
验证Nginx配置文件
8 N- {3 Z  M3 u. l$ /usr/local/nginx/sbin/nginx -t
4 |) @2 h0 @; |8 V* y& ]! v0 Ynginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok! u! S2 }8 Z1 l6 u7 u) a0 i2 p, \/ C
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
. V2 I0 U8 R2 F9 P  h( I启动Nginx
4 A3 z4 w0 B, P( V2 {9 V$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf6 H. \3 ]4 Y/ h) U# ~. e

. q; ~+ `0 b9 ~. g+ l0 f5 \* C

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

9 F$ h1 l3 r! a6 d/ g9 Z

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-6-11 19:59 , Processed in 0.075698 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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