找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 9777|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
+ r4 o9 H1 e' O# t. f2 o! R# r7 p7 |) R1 H- K$ T0 g, C. u

  J4 `3 A: \2 B5 S在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。7 s: b5 X; s# X2 Y. \1 e% a1 l( v

1 S) S+ F$ a, q+ o& j- U$ k" d: P+ n. g, E
什么是ModSecurity% V1 |, }4 y9 ^1 z
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。; i- ~' X* q1 f3 ~
3 B) J! y! A  N3 I* B( e# X

% z: n3 z0 I- S5 i( R7 t/ R7 jModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
3 H1 D- x; z5 O6 n* e/ c( H, c$ @6 i& \6 X* b: ~5 K. e

% `- ]' o/ Q/ q$ H1 ^- v; K7 k1 w/ |ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
1 k" P# p/ t* a3 w2 m/ x5 b3 B' l4 h2 `5 m" d( e

8 N4 l" V3 Q8 i官网: https://www.modsecurity.org/
, s  I  E! }7 Y- q: e% [$ {: o+ ?% ], A% X" z& C) }

- I+ i( X. M, ~6 k什么是OWASP CRS$ U- V/ ~+ {; p  ~7 ^" ~2 W
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
4 o$ ~9 J' w9 A! W& }6 ~. j  S4 z
9 M1 o* {6 y) p% \
+ Y0 J- y* v- \* F' `& ~ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。/ R4 `0 T" u9 X  [0 S1 P% o
7 ]6 f9 j$ H, v& v' J+ V  c, s: R7 b' G
+ z5 ~- P, N' C3 \5 M
HTTP Protection(HTTP防御)
' m/ z# H/ M& U  W1 xHTTP协议和本地定义使用的detectsviolations策略。
5 _. @* ]' Y6 ]$ h2 L: m2 T( a" `' _5 C: q6 e/ ^- r0 m
- M! z9 Y! N6 x7 j# M5 U. M
Real-time Blacklist Lookups(实时黑名单查询)
' {2 r( w9 j- V  P利用第三方IP名单。
& c) N4 @$ C2 l3 i8 b3 _7 }  `$ _0 F
: H; o4 I3 e& E: t2 B! {# V
0 G. h% F3 |: c7 m8 iHTTP Denial of Service Protections(HTTP的拒绝服务保护)
% D" Q3 y% M6 V6 z+ u5 V- H  Y防御HTTP的洪水攻击和HTTP Dos攻击。) I2 D) w. [% p9 `6 S
" b2 v0 q; B& N9 U: |- h/ S

2 j+ M, I# A6 y7 iCommon Web Attacks Protection(常见的Web攻击防护)
( y0 }9 r' [0 I& @7 m  _# w检测常见的Web应用程序的安全攻击。" ?8 i. A* d3 R$ ]

: o# S# @% X) k: _
; w0 B; }" ~4 I3 t- zAutomation Detection(自动化检测)
6 R. Z% o# h3 v9 _0 [0 h+ m- d检测机器人,爬虫,扫描仪和其他表面恶意活动。
, X2 K* f' V9 o
9 @& c& s- ?& Z4 j7 t1 \0 N
2 p+ Q, z4 v2 f+ ]4 PIntegration with AV Scanning for File Uploads(文件上传防病毒扫描)
9 b  C. Y7 P- G! V2 t检测通过Web应用程序上传的恶意文件。
2 `4 O0 u2 P# `4 S5 \: g0 O  I  F; {% m. _' k3 V- o* @0 s

# ~7 f, G; u) Y5 C& O5 B8 Q$ JTracking Sensitive Data(跟踪敏感数据)# ]& _# Z) g" x' j
信用卡通道的使用,并阻止泄漏。; y' }6 d* Q0 \: o4 G* m8 Z

; G  S" I% O  y/ L* h5 V' C0 K9 w( ?
Trojan Protection(木马防护)
1 i5 |9 o& N9 }! i检测访问木马。
; j: S! [* n. {
7 S% ~% [/ u" ?# Z" ?
% z* }- O$ M/ D: nIdentification of Application Defects(应用程序缺陷的鉴定)
4 I' q1 T- K! j* S, o3 i; Y检测应用程序的错误配置警报。: O& C( a( R6 Q  p  `

. g# N2 S: V" s3 U! D6 `. t: y! F& p* Q
Error Detection and Hiding(错误检测和隐藏)
, I3 h& `6 e8 W- I1 \: c0 ^& V检测伪装服务器发送错误消息。
( b8 K! E, E  t' e: |; U1 w1 k' e: V* F' ?0 d* k
9 n2 _3 G: n# ?+ j
安装ModSecurity( ^2 `/ ~* X- n' ^
软件基础环境准备! |' f9 \" @) w, B/ Z) [: [+ U8 h! x% K
下载对应软件包9 K% a" `! |; c( d5 W/ j, j
$ cd /root- g# v6 G! p( }6 R
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
$ x( Q( q6 i/ H7 F2 Y4 Y* o/ `2 z$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz6 ?, F- C( |+ q
安装Nginx和ModSecurity依赖包
! l" x9 o. D7 Z" U- q$ dCentos/RHEL# B( O5 Y2 R8 V
! w7 A/ `: I9 Z# G/ Z8 F: A
& d- E/ g5 Y; n! k* Q, S
$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel: K2 Y4 S) N$ N3 |5 j! E6 t
Ubuntu/Debian/ r7 B  k5 F) m, d
3 b& ?; e& [6 Y! j" Q

3 C, u, k: m; C0 U- K1 \$ 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) D. X- _, v; B9 b
编译安装ModSecurity
& m1 Q& o) k# X& i. BNginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。' Q: h/ Q: k/ D! m  O- \( F( j
: ?) {3 V+ @) f) s/ h. W
' O' C$ i% d3 X% O1 L( n+ C' C
方法一:编译为Nginx静态模块: {7 f1 R& k' ~( d6 m
( T6 |& l' ?2 _
7 {( @% \2 y+ V8 |- t6 o" R8 K, r
编译为独立模块(modsecurity-2.9.1)1 W1 W* i; k& J6 C* C
$ tar xzvf modsecurity-2.9.1.tar.gz- }, q: v6 l) t) F0 a+ l( K
$ cd modsecurity-2.9.1/! W' k' X9 f# |* e7 t% M9 c1 r
$ ./autogen.sh7 k- r% s  ^6 a) y0 h9 ?& o
$ ./configure --enable-standalone-module --disable-mlogc
9 `5 I/ Z# h3 r7 X$ make
" E+ W( O( @% P" I5 O( u1 @- {" c编译安装Nginx并添加ModSecurity模块
, c1 n" z( Y0 x, O7 u$ tar xzvf nginx-1.9.2.tar.gz- y. ?2 n! @1 M
$ cd nginx-1.9.2% y% H& f$ k8 M/ v; a2 N6 o
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/( [. d3 J0 }  y9 m: C. P
$ make && make install
( [# u6 i) H# I/ g6 n" G+ o9 |! i( }方法二:编译通过ModSecurity-Nginx Connector加载的动态模块3 R% d$ p  @/ U/ |0 B

1 d4 J% u# p! `! h: f
6 ^* }7 L# L/ b- `7 V  l* s编译LibModSecurity(modsecurity-3.0)3 J) i. ^: g& \* N) T! m% w
$ cd /root/ W* H( ?3 X( A
$ git clone https://github.com/SpiderLabs/ModSecurity
* o  W4 g2 w1 @- o$ cd ModSecurity
+ F4 Z! S9 M9 T( _% [$ git checkout -b v3/master origin/v3/master
6 Q. C) O* s! T3 h- d7 t/ C3 q6 N' G$ sh build.sh! [6 r( |' P3 O- T" A2 J* P: i: O' z
$ git submodule init
& s0 r5 u# k; q% F4 }$ `, ~" U9 p$ git submodule update
1 c4 \+ Z5 F% w0 s0 V2 v. X$ d3 ]$ ./configure: L# |1 ]) K* ], K
$ make6 L2 p8 Z3 |6 Y+ W
$ make install
+ n5 B: Z2 a% f' [LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
( k) o" g* }/ `* M0 s
1 A3 [3 |  B) _5 K$ u, k7 c
* j6 l% v! R- b* M5 A1 Z! l3 m$ ls /usr/local/modsecurity/lib* `" c& Q. h  A0 f2 U
libmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.0
' E2 z2 Z- t3 m1 n编译安装Nginx并添加ModSecurity-Nginx Connector模块
4 [1 \* c) c9 I. U5 l0 x使用ModSecurity-Nginx模块来连接LibModSecurity* W! i5 ]( A) ^( u

5 d% L) E1 ~+ q
/ u5 a/ W/ w4 }# b$ |" Q* o" @$ cd /root
3 s! C- l/ T8 {' Q; `2 W, Q$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
6 s- v8 E* A* H" g$ tar xzvf nginx-1.9.2.tar.gz2 @$ Q& i7 r% e( y( }
$ cd nginx-1.9.2: p. ]* l9 X  c' a
$ ./configure --add-module=/root/modsecurity-nginx7 s" X7 w9 b6 k/ E$ H) ?, Y
$ make  Q5 g: t1 [; H7 I9 F
$ make && make install' S& t! D8 }$ Y& t" W5 L, j" @
添加OWASP规则' [2 |  L% o% Z& E5 o
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。3 N# k4 Q* }8 e: h
4 W; {6 Q& j/ {: ]$ H4 R

+ ?; O5 d: N  R5 G0 k% D下载OWASP规则并生成配置文件
: g- J; s" V9 I1 S# s. q& B$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
+ n! H- R" m( o6 \) U7 ?$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/
0 A  o0 a1 H: Y$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
+ i  @- ]! _& _5 K$ cp crs-setup.conf.example  crs-setup.conf$ o  g& J8 w, h/ u( a' Y
配置OWASP规则
. _7 F3 d) f0 t9 H, u$ ?编辑crs-setup.conf文件' t6 O! x, N$ M4 v& h

* p, I; V$ E( t: j1 t# ?3 R
- `5 ~1 u" H# |4 d$ a3 q$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf) e! f, V  D  n* ^
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf2 N) D# ^) V/ F# t/ ?- \
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
" @& U2 d+ X, D$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
& {- A( M7 n2 Q( I% C$ M默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。6 r- O* }, Y  Y8 \3 C0 |9 m

% w) d5 [7 k: G% U9 S! E  i2 x. v  n5 r
启用ModSecurity模块和CRS规则
& P  T& B. a" D复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。6 V* b6 a' V8 [: }, m8 W8 P; ]
" A5 A& M& i" L, h7 G) v5 `. {
; J) l! n% g; T5 m2 f
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。' Z; i2 N- X# b% k, x( a+ ]

5 S  d: R  D  ?' Y$ d. p1 D* E' K
9 [, E& D: ~& K$ v$ cd /root/modsecurity-2.9.1/
, Y' k* S/ P' L" @$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  % q. Q# }% P  K' N+ T/ F& N
$ cp unicode.mapping  /usr/local/nginx/conf/) B$ y+ K4 S7 I! x
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
; w. l0 j( N" Y# a7 v1 k) ^5 }2 p  O' [+ g1 S3 L  V

# V! ]* @8 s4 R+ R  y+ N$ vim /usr/local/nginx/conf/modsecurity.conf
$ o* p: R$ M$ p% a. C; M$ uSecRuleEngine On1 n8 S6 c- O% u7 F
ModSecurity中几个常用配置说明:
8 @$ \/ F! T4 V4 }+ l. {+ C$ l. o5 B" a3 X

! `* w6 Y2 I2 m. `1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。  n" f( z, l/ e3 N
" }1 s" ?  A) Q, {

4 R8 }9 U& B4 R4 K2 n. @2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
2 N. [% O" N+ k$ Q
# G1 d2 m6 h. \8 p+ z. x+ T2 W6 S& Q. B
6 d( @8 Q9 F* k% R3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
, x, ]) X" k( s
$ w, v5 L; u2 [6 x* h- i. F
6 E8 K4 `% T7 l) @4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
2 y) K# M: ], k$ }4 y2 l
* v( p- x0 F2 p) B
7 i( t* q$ J# U7 `# G- z1 m在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。3 a/ U: P0 [# h% n' c/ d' H

! n9 Y9 [0 g. v  R$ ~  G$ V8 ]- n) {8 |* t8 ]' j+ W; C' P
3.x版本CRS9 i/ ]: ^- h0 j% A4 ^! g
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs/ A: m- @# f( P& e8 X" a
# 生成例外排除请求的配置文件" E2 {7 W$ }- G) J
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf; \. K& _6 B) P- d& n8 `
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf/ V3 r% ]( O" Z$ M
$ cp rules/*.data /usr/local/nginx/conf
: i7 a( C5 I' C2 `9 y: C为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。* X6 k! |) G% y. |

- g* q( ^2 E- r5 {( Y. ?3 L! l* U/ j  b$ e2 o0 V2 H  k
$ vim /usr/local/nginx/conf/modsec_includes.conf
3 K% \3 p5 Q0 y3 N4 U, c* E: u+ m6 q8 }# b" \
[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
& f  N' A. T7 @  z6 g' S6 k
) C: O: W7 Z  E! f& h
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
# |* Y3 V8 H/ {" e9 @9 [4 g6 [
# O' ~9 Q) [# L+ B& E1 d2 c& c
2 \4 f0 H; }+ C; y" s7 _配置Nginx支持Modsecurity' }3 d9 x* X1 @  u$ ]1 @
启用Modsecurity
# w4 E8 X$ F, e) ~1 Q/ p( v使用静态模块加载的配置方法
7 N# n% q* X" e& k在需要启用Modsecurity的主机的location下面加入下面两行即可:
$ P; y  Q$ @0 ]6 D+ r* p$ p7 R0 p
. S7 R- e" d/ k/ O
6 M2 {, a# K; p8 b3 B9 p% [ModSecurityEnabled on;
  ]7 K8 |( b% @7 s3 S. xModSecurityConfig modsec_includes.conf;  W  L- C2 m" f) ]' o
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。4 c- [& @1 ~( y; u4 W9 J
( @- Z; A4 b) h+ A+ s
7 B+ O: i) D# k+ T) R2 w- C- u
$ vim /usr/local/nginx/conf/nginx.conf
6 E- P. ?7 _4 M  J, B/ f& a. V4 m- m# h3 |. F

8 Y' G/ A9 |% V' Q' wserver {
' X+ g% L' ~. T* D  listen       80;9 ?4 `8 O; b. ?2 x$ w1 ]
  server_name  example.com;
  {& _1 _! o6 p3 }$ X( Z+ n% A+ j& b% P5 q+ l" i2 V7 Z) q
5 H7 w3 _9 w5 N' j
  location / {
) w" V) p: l- ~    ModSecurityEnabled on;; I, [; Y! U  L8 c
    ModSecurityConfig modsec_includes.conf;4 w4 h! U; s6 v6 b* Q. M
    root   html;5 V  M! R! C7 F! x6 c# Q' g
    index  index.html index.htm;
& X, z! ]. E0 r2 y' l) d0 b  }
" h1 g2 T! z$ @" N6 R4 r; b! {3 H; ^}
, X1 w) o7 ]6 P: ~7 R1 Z; S使用动态模块加载的配置方法; K1 i  e/ u1 R. r8 J7 b% n# g6 M! L
在需要启用Modsecurity的主机的location下面加入下面两行即可:
7 B8 D4 @; J" S7 [% B4 e+ H2 K+ B, `5 }  R1 {5 G. x

% x7 }) G) V8 a4 jmodsecurity on;
0 }$ X5 t( ]/ V9 ]modsecurity_rules_file modsec_includes.conf;
# r+ W, m1 w5 k6 _6 j. p4 X3 @修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
* ~5 c( c" a" V8 o1 o* Z! v4 l

! y: B8 _. i3 ~( o9 Q: W' z6 d$ vim /usr/local/nginx/conf/nginx.conf
6 }) Q3 `7 e: ~* S7 N- L( f3 D* b

" P- T) k) g3 d7 P# O3 G- H6 N2 rserver {9 `8 H; f0 r/ q$ Y( W
  listen  80;
  t: ^  F' ]4 m7 {/ a! u  server_name localhost mike.hi-linux.com;9 b% r: e" W5 Y2 j. N
  access_log /var/log/nginx/yourdomain.log;7 g1 p* v: H- q8 Y
2 G- d5 {' A+ e

" |5 A7 W3 m3 V. j7 l) x. O  location / {
9 G0 t+ Q4 n) m% u6 B
) J6 |. m4 L6 Q+ z% k9 f5 \0 C* h) t6 t5 f" m" y' a
  modsecurity on;
3 g* b' L- X& m; {& M! D  modsecurity_rules_file modsec_includes.conf;
8 m9 g0 ^6 |4 I2 z4 J  root   html;
6 H6 t& z+ v7 n* |: }- Z  index  index.html index.htm;
4 E! [. s! p# f2 L}7 b* q; P( s! z# `+ t
}" Z, h' H  a' h6 V
验证Nginx配置文件
5 C- @; T( ~1 }$ /usr/local/nginx/sbin/nginx -t- x/ R& n  O1 r6 p+ K
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
2 ^! o" u, P- K! o5 E+ inginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
/ b+ U0 L- V- v! C启动Nginx/ W* {- A( h  V, d5 K3 r
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf- }' y% a+ f% `6 k4 M
9 o6 D. W2 e& p% I" S+ |

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

; F/ j2 Q6 C  T" _+ C& \" G

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2025-12-21 10:31 , Processed in 0.128340 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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