找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11214|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
" L! _7 T/ f3 P$ e- z/ w. e0 ]+ S
/ `# D7 h. H8 S5 I$ O; }* @2 ]% y6 Z# m; V' x+ o
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
6 r& w) E; l; L& M1 b$ T  W' K; V5 t! u' C
4 Z* Y* g$ K0 d5 }+ \5 R
什么是ModSecurity& \# m  c) F) T9 x. u9 W, F
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
; T8 M; n1 L; S0 d8 `) P3 S+ X* J" n, l  t' b

6 a- q6 R0 V& u6 K& \( Q2 p. fModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
, L, z, p0 {( i4 P9 D6 X( Q; d- S  S

4 f5 x8 V" I9 W! }) KModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。* S4 p. W& f7 k; Q5 Z0 Q
/ t" ^! r$ Y9 B4 R! R7 W

$ F+ N/ ^, X% i2 u$ Z/ ]官网: https://www.modsecurity.org/( I1 \# ~; {7 _& j. T4 e

/ ]5 o3 R6 N/ a/ x/ z8 f) I3 D- T. g/ y; n
什么是OWASP CRS
+ e5 z5 F! H+ q( pOWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
. r2 U: _3 a8 k' w% R
7 t/ y* |$ P, Z, U1 C5 y& J# U0 y, j- ?/ L- j9 v, Q" f# G" D- m
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。" f5 N! z( ^8 d* x
0 n) q0 W- R4 y; {% ?
  X# O+ N# f7 T( G9 k  R  t& J
HTTP Protection(HTTP防御)& }4 Y$ e: N% z6 s& N7 H- u
HTTP协议和本地定义使用的detectsviolations策略。3 P1 [4 H; K* W0 K' T/ {
! \6 \# K" f9 E* n" [
9 e  W7 v! I- P' u+ A, h
Real-time Blacklist Lookups(实时黑名单查询): ?8 C& Q* K5 r) i4 }6 S
利用第三方IP名单。& S. T' X5 `* w0 S7 c6 j
0 E1 h+ K% z- ~; [

' _6 A, w7 a' w* @- ^HTTP Denial of Service Protections(HTTP的拒绝服务保护)4 A* Z- J2 H8 u" u% U6 T; {: B+ @
防御HTTP的洪水攻击和HTTP Dos攻击。
8 ^( ~1 ]2 w! _4 Z7 p8 ?; H
9 \7 X0 l; @4 e4 X2 i  ]. W. k1 f% C1 W. D: v% }$ o$ x
Common Web Attacks Protection(常见的Web攻击防护)
" s- E/ B5 R+ I! R+ c% i  _检测常见的Web应用程序的安全攻击。
$ r; l4 V0 A5 g& F( w: M% Z# _) o, d# Z+ f, B8 u) u5 z  {6 `
. B  ^& g6 h6 C8 Y" c1 u
Automation Detection(自动化检测)  D* S6 y6 Q, s( }
检测机器人,爬虫,扫描仪和其他表面恶意活动。
/ m0 w+ w. m3 A  O! U/ Z! b; w# v' u" s# q7 N/ {
* o6 D; q2 t2 q9 \
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)
( S! U9 j* {( i, j6 O检测通过Web应用程序上传的恶意文件。
' y5 V1 B9 E; m8 y4 F
8 ]; }" {; D2 G: G' n$ A7 _( X: s0 [  u7 Y( w) |% a
Tracking Sensitive Data(跟踪敏感数据)1 R, A0 i; A6 {! `. ?: j" J
信用卡通道的使用,并阻止泄漏。1 u9 D. F  ]: E# G# N+ v

8 [# C$ J4 t+ `/ t
7 r6 @7 E6 u  O' ^Trojan Protection(木马防护)
) r/ M+ R& z8 r4 G1 ?检测访问木马。
9 V* V- h2 C5 f( P% T" V, u( e" h$ B( }7 m1 @& q4 l3 E$ P- U+ \) j! N

& e# S2 Q! ^* B7 a0 vIdentification of Application Defects(应用程序缺陷的鉴定)
3 [8 J: Z! U' Y; M检测应用程序的错误配置警报。6 M; }3 f+ P1 [

3 \1 U/ e1 v6 B& f/ c: G9 G; l1 u
7 D: V- j4 V& c  [9 ^Error Detection and Hiding(错误检测和隐藏)
4 R& I" b% L; p" [' o1 i检测伪装服务器发送错误消息。
; f, S% c5 t- l, }" w9 x& `# t, k- w: @4 Z7 l: ?

; h8 D% \" t, ?3 K安装ModSecurity
6 l; _# x2 c, Y软件基础环境准备
6 G0 i4 ]  Y- Z! \: q/ G下载对应软件包
4 F0 ~* P' |! b; G$ cd /root
' d8 W3 L# E; `$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'. [% q0 |9 b! z! [3 ~
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz/ B9 h5 c0 i9 G: s( X( O
安装Nginx和ModSecurity依赖包
& [( z  }' {# f( A7 G; E  tCentos/RHEL
7 P* x( j; g6 C" d& _, R; T* X5 J/ ]# m6 D- i& l
& ~9 n6 h6 P# U. [) g9 M( k
$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
8 `4 }* o" {1 L- dUbuntu/Debian
- l1 E) A! {% E" k
& Z, P2 m4 K8 C, |% c, P0 U
0 g* q2 h# p" H0 {% a& J- p$ 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, T" s3 G( |3 k2 v" {7 s
编译安装ModSecurity
# p2 a+ i0 F% T+ }5 B3 jNginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。' H, F) E$ d9 ^; \" h
) w* S! ^& j- L4 e; z

  v' ~6 U$ L* Z8 D4 U$ k( e方法一:编译为Nginx静态模块
7 j% n' q, g2 p
* n2 k( C/ o$ {. e) M7 m6 X5 N; K. L  I. K8 X9 B
编译为独立模块(modsecurity-2.9.1)" `, b) \; p" }! [/ k
$ tar xzvf modsecurity-2.9.1.tar.gz
/ h# b2 k; A+ C- G$ m$ cd modsecurity-2.9.1/
6 Y: E' U$ P+ h2 r$ ./autogen.sh0 B& ]; P8 x, ^" ^
$ ./configure --enable-standalone-module --disable-mlogc
2 O: k8 Z9 E5 G$ make
7 w: Z3 o$ {) Z5 R% N+ L编译安装Nginx并添加ModSecurity模块
# S% R5 o7 R0 ]6 F6 q$ tar xzvf nginx-1.9.2.tar.gz
6 E' c3 _8 _' y2 s% ?4 ]$ cd nginx-1.9.2! x- t" j0 H3 \) L5 d/ `( X
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/% X4 ]/ Y( G: ^- e
$ make && make install- |7 K$ z$ \- \- m
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
8 y3 W, K1 T* s; Z. t
+ F( X7 r$ {" f3 J$ N  e+ t/ O+ k# W2 O  f! O: d$ I1 M) p
编译LibModSecurity(modsecurity-3.0)
/ T9 H/ V% |" E: p- ?* b5 {1 o$ cd /root; D" o8 Q- P5 a: f; p" g
$ git clone https://github.com/SpiderLabs/ModSecurity% V. F% i6 d2 V5 r$ G
$ cd ModSecurity
! h% p7 ]' h0 n& p; W$ git checkout -b v3/master origin/v3/master2 Q  ~, B# R# x/ ?% E2 L# O
$ sh build.sh
. X4 e8 |6 U$ z8 k2 `$ git submodule init
. O6 Q$ O! C4 \, U' o$ git submodule update
. T( Q* ^  W* U& T* L! ]! }/ B$ ./configure% T5 j5 t; p$ y8 Z9 w/ z+ V
$ make5 A% I1 ^4 _; z' g
$ make install+ M, _+ U7 f1 i0 y! T0 I, e( ^1 p
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。9 k5 r) @# }/ ?  C* A
* x. f) k% f! f

2 `, P8 b6 v; G- w) @( ?$ ls /usr/local/modsecurity/lib
# l- i0 t$ S( X7 ^* J7 `; C1 U6 U# \libmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.0: p# C) j; y/ Q; |/ A* W, L" ~- }
编译安装Nginx并添加ModSecurity-Nginx Connector模块; X: n8 S- C; I- d, d- \
使用ModSecurity-Nginx模块来连接LibModSecurity
  K% y7 f+ c) @5 n6 g
8 y1 n# w1 T7 s
  F* L$ L# r# [$ cd /root. H0 |! n2 K; Y
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx. ^% Y  y' i9 r( {
$ tar xzvf nginx-1.9.2.tar.gz
' g% g' C! \3 D2 H7 k" G; f$ cd nginx-1.9.2
# n! A/ N) K# ?; Q$ ./configure --add-module=/root/modsecurity-nginx
  Y; H2 S: M; a0 r' _8 z4 \. G$ make
( B0 U/ x$ |+ G, A( y8 p$ make && make install& H- J$ B# S: P0 K
添加OWASP规则# H3 h, k" h/ X/ m8 W
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。2 P8 ^4 X7 q3 V; D% g

# c/ G! M, n+ E5 Y- J; s3 A
2 _' P& L2 y: m下载OWASP规则并生成配置文件! B  U8 K. f+ T" [; w9 y
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git5 U4 `$ e9 H3 y4 V" \
$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/( t+ ~2 a/ B6 H1 \+ M0 E% `) Z+ K
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs0 @, X4 F5 ?, D. e
$ cp crs-setup.conf.example  crs-setup.conf/ I  p4 w  _, n0 D7 N9 ]: u5 R8 c
配置OWASP规则( M5 n+ ?2 g8 X: F' H/ n2 ?% q
编辑crs-setup.conf文件+ p7 m9 c: g$ i$ X2 ?
  i& v, w4 m8 ^  k4 v( E
6 z3 b, V8 V% e( o" n0 y7 U5 }
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf, c$ z; d" s" z9 V6 b
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf3 r2 G/ Q* B5 u/ Z
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
/ g: Q$ }/ u1 o5 X% e1 G  N$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
1 Y- Z6 t- J( y默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。- J9 a; t7 v% ~

( |; ?$ P. m# A0 N6 {) J. u2 a7 j) R" o0 F' K0 h+ e( k8 G* e4 R/ l
启用ModSecurity模块和CRS规则
4 ~! ~. y' A& f4 @, u复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。& w: W8 f" f1 y6 ~% H+ {' m( y- e( {; e+ E

; w' g+ }  i, a) R3 v% m  V: B. g0 f6 V# P7 [' x2 j# @. Z
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。: r- D( S) F# F9 I
! A1 q9 m7 }1 g, |: i$ [
% p. Q8 [/ P: ^! L
$ cd /root/modsecurity-2.9.1/9 {8 a0 U* G' w# ]6 T
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  0 p6 l$ D+ d& Y- H& p  P# q( J
$ cp unicode.mapping  /usr/local/nginx/conf/$ p9 K! D$ [  n. L1 R2 v
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
0 K+ p) n" r4 H; b& h
7 O+ t* a& c9 r0 P
, @; a* R/ q$ W" A4 l$ vim /usr/local/nginx/conf/modsecurity.conf
  T: K3 Y( L2 y, [6 rSecRuleEngine On
7 e, o7 g8 b# DModSecurity中几个常用配置说明:2 c2 P9 m7 H9 z& [. t* G1 D

4 H6 ~' e% R& E. ^- A6 H! H
9 f( z; g" T0 W% [1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
( \; L8 s3 @2 Y" n! }- M! [, m' V" s: o# V$ s

0 Q" k3 r& a" g) L* p( N2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
! K& m% _( q" X0 A
2 M3 P' b% o. g. Z4 P/ r3 d3 f( }2 w5 y$ g* |  R  p
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
5 p) C" f0 v1 P! @! ^, q) E/ i* m7 i! P

# N& ^1 `" \0 r4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。7 d- e/ E* Q- _, _/ }8 i, Y1 ]

( c. D. r$ t0 k$ P& o( u8 P: }) L1 V3 Q! n
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。$ y+ ~6 \* n! n" n; M. A
9 y8 z) x& r& `0 a6 G6 }- {

0 ?! F' v. z9 C. V3.x版本CRS
2 I7 _$ B) M/ r/ ~: ~6 h$ cd /usr/local/nginx/conf/owasp-modsecurity-crs. q. r3 m' n3 O" e
# 生成例外排除请求的配置文件
  a4 x- t2 e4 E! \7 V! D' j$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf7 F! _0 A. |, l4 n: S' W
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf6 ]$ [7 d: b2 V# @8 H: k2 V
$ cp rules/*.data /usr/local/nginx/conf- ?$ m* }2 B2 U: m( d
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。0 d% Q. e7 a0 z

4 f, B3 i+ e) r- P3 b. B
8 ]" T% m& o. ]3 N$ vim /usr/local/nginx/conf/modsec_includes.conf
4 q$ b" K8 A/ I* p0 [) d% T( F% M$ m8 G7 p  `, G
[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
2 E7 T- T8 ]0 j
) Y) q# @: A6 R1 t
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。: ~$ I! Z# p/ @* y8 _
: `+ q1 h/ N" G8 [! A# g
3 [2 w' b$ I6 K
配置Nginx支持Modsecurity5 s8 k; O7 t- t( C$ ]& ~
启用Modsecurity
+ R$ y# d) }+ d* ~0 f* H使用静态模块加载的配置方法4 n! }  J% T; w) t! z5 m; W
在需要启用Modsecurity的主机的location下面加入下面两行即可:& }3 ^7 ~/ K, p  A1 b4 _3 [
8 k" J* M5 i: U$ @& \& |* c

0 m( x/ g$ V% o# J) N& l% hModSecurityEnabled on;( O) D0 Z( C+ D' V# \6 @/ l5 n
ModSecurityConfig modsec_includes.conf;
8 s& x7 z8 J' I7 Q2 j# J修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
% w2 J+ g- y' h- f" V5 y& a, S. t1 D
' x& d1 S& [5 z, G! t8 T+ y
$ vim /usr/local/nginx/conf/nginx.conf' g* i' W4 E% j+ S
8 f' Y& N0 _; Y

' m! o5 T5 ~/ k& C# h& a  |3 Yserver {& E. c! ^5 S$ D
  listen       80;
+ ~" q& v8 t# h; F( l# x  K  server_name  example.com;
3 S/ i3 b1 {6 r9 ^3 }) b8 U* S: ^" K9 f) f4 u" H. v
' o# X1 g# n$ P( w
  location / {
8 \- j5 Z6 H: b8 A3 B& E    ModSecurityEnabled on;9 U! N5 N; j( ^! N% }  N' A1 r
    ModSecurityConfig modsec_includes.conf;9 T% O6 s; W; `
    root   html;6 h2 P! a5 Y$ e
    index  index.html index.htm;* n8 e( R4 n+ y: q
  }
* e2 s+ x* c( ^" n  j. ?0 p2 ?3 K; s}3 X! E  P+ j# R; I
使用动态模块加载的配置方法
* h9 o) d. I& O4 T4 [在需要启用Modsecurity的主机的location下面加入下面两行即可:
8 s8 ~! x( o, m5 |9 \( I# u0 `& X; X, ~; B& Q- ^% F/ q
3 k1 ~# S1 x0 Y5 O1 b# _+ n8 ~7 n
modsecurity on;: P' m( P$ f( w0 ]+ M! p# x/ F
modsecurity_rules_file modsec_includes.conf;% b  j. m9 m' N4 G" \. O/ o
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。5 o" R- }* M' O1 V8 |

& b& r) L5 x8 a* e1 y* S0 G) K0 s+ G
$ vim /usr/local/nginx/conf/nginx.conf9 l& g5 @3 A# g6 }

( R' K7 V; ^5 D* a& W
+ A$ z, ]  o7 n) T2 iserver {
! }% `( H) P- L: l. u3 ^0 O) g- p# ]  listen  80;: A7 H& ?( {5 h5 m$ N
  server_name localhost mike.hi-linux.com;& s0 a4 u( ?6 c
  access_log /var/log/nginx/yourdomain.log;
! L  W& t" ]# }7 b2 s1 w* L
8 Y1 a/ i" T* F8 p' A2 {+ C. x* {3 s
  location / {& ^6 x  C; V6 x: q2 n! \
( h0 Z2 f4 H% ^; Y  u
, I3 z& Y0 v: c' D9 d& h  a+ G3 Z
  modsecurity on;
5 s" n& ^8 ]$ P2 s9 o  c  modsecurity_rules_file modsec_includes.conf;
: S2 O2 c& E6 S0 F' h  root   html;1 H5 B+ S( L; X/ K$ F8 \! u+ U
  index  index.html index.htm;! L  z8 G; V; o- a8 G
}
. m" J9 A% M% J( V}2 \4 `! u* s! U, U/ T* b
验证Nginx配置文件
, }3 q4 j( i$ J$ v, r$ /usr/local/nginx/sbin/nginx -t
5 T+ s* N5 K( O8 znginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
) y. _5 W" C) j4 e, e8 X! |3 `nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
' V" Q$ }) Y4 Z6 ^3 o. ^启动Nginx  V4 E6 y( o: [2 R
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf, S0 P5 e+ B9 r# b. w6 Q: ?

- U" v6 Y+ |' g9 t3 @9 N) E

测试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 a/ ~' V* L& m

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-5-17 19:33 , Processed in 0.073903 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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