找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 10427|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
/ c7 |( Z+ o0 P0 m. z$ W  m7 i8 [- B  l; q8 s7 {
; k. Z% o) S) I7 D7 s
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
5 ?2 w' K6 H5 X! R8 K' W! B7 I' x" r  S" m5 A8 P: v1 B' a, \9 n
) Q7 h: t& I; o- t( t& a
什么是ModSecurity
$ o5 U9 I" g6 h" n! ]& o. wModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。* k; W; t3 v9 T# @8 A+ r
/ E  W. m- ~* K8 b7 C2 H

( J" |+ X7 q/ a4 n: A7 `ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
0 J$ q' s% w7 R0 M% h4 Z( v* U" b9 S) e/ s8 ~7 `  U3 D0 j
0 B; v$ T* W' \* U! S5 k
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。+ e, a) t3 u1 U* d
4 v; M$ V9 x; l$ l, {8 C% C
( t, D) q% n' H5 |  u
官网: https://www.modsecurity.org/
( W6 ?8 D9 |+ v: {2 X2 [4 {, @& @4 }) a" R# x* Z* T
6 X1 }# c3 I% y: t
什么是OWASP CRS
' [5 ]# C$ `3 a! j+ o9 _' E& c( OOWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
) L: v+ @8 O# W, k( v
- h6 P5 N0 [3 @
$ p, |& {7 S# ^7 ^ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。5 _7 L9 h: Z% I/ G) R

/ j8 C: K! U* i0 m5 Q4 v
$ F# C2 E7 Z% m5 z8 y, k# ^HTTP Protection(HTTP防御). C, s& G9 S# Y1 z0 Z, m) v# v
HTTP协议和本地定义使用的detectsviolations策略。
4 W$ `3 J! e. N0 B6 T& A+ a% {" ~; Q

3 ]$ S6 \( C) \" M5 q# mReal-time Blacklist Lookups(实时黑名单查询)
, d% h: {$ O! s3 h. v; s5 A' Z利用第三方IP名单。
2 [) q" y, `2 J, k" Y1 n; P
; F8 x: Y7 Q, r7 ]6 D' c# D( i( B" D+ e, ~
HTTP Denial of Service Protections(HTTP的拒绝服务保护)3 w7 O! X! q# S' r
防御HTTP的洪水攻击和HTTP Dos攻击。* d: m3 h& z$ _8 k

+ E( |# p) V" G) O, E4 `  A4 }: i) q( k* p* w8 {) a
Common Web Attacks Protection(常见的Web攻击防护)
) N1 r! s( \$ i; N. }检测常见的Web应用程序的安全攻击。: [1 d. y4 _7 \8 \7 W
, f8 _$ \! }0 I; b( S  q/ E, k" o
* R- }9 R( r: [+ Y3 M# |; J
Automation Detection(自动化检测)3 g" Y" ]6 p( [; u0 U+ d9 h5 k
检测机器人,爬虫,扫描仪和其他表面恶意活动。
8 {, f% j4 g- E6 J4 i/ U9 T7 T; |; G- T

" g9 r: n" r3 A! C, N; Y& S3 [Integration with AV Scanning for File Uploads(文件上传防病毒扫描)1 N4 u/ [9 Z, V: }* a$ ~/ i9 W8 I
检测通过Web应用程序上传的恶意文件。. |& o3 @1 P* f% e0 T, o
$ `, L8 y; c# S" E
4 {% ?' p; r' a; {% ]# _
Tracking Sensitive Data(跟踪敏感数据)% d: S& J$ y1 x6 g8 z$ t0 Y
信用卡通道的使用,并阻止泄漏。
! I* u% K& e; I( V; H. S9 b. q2 ?; D$ W$ f  B7 n3 i0 T  l
: z  j0 U! X7 T( `
Trojan Protection(木马防护)
6 |# t1 W4 V4 _; Y检测访问木马。
: p& u4 d% c; Y" n
; e9 J7 P8 [& l6 i3 ]5 y/ D$ Z9 l2 H
Identification of Application Defects(应用程序缺陷的鉴定)
4 D( K9 |6 v  D检测应用程序的错误配置警报。
+ j" c7 n6 q0 a; J/ |& A, y
& D8 r! g( ~3 s# F2 @5 ?! \; t0 c% E0 p
Error Detection and Hiding(错误检测和隐藏)
1 v, h% Z" {; h检测伪装服务器发送错误消息。
0 M! c9 L- I3 M6 Z, m4 Q: ]# @" p: i. p8 ^' c5 ~+ t. A9 k  k- V+ J
  H/ m# @) j: A* d  c( c0 S- _
安装ModSecurity
0 R5 k( @1 n( N& n8 ~# r软件基础环境准备( |1 e3 C3 V/ u6 g: p
下载对应软件包
+ j$ T1 V( w: Z4 C$ f8 L0 e+ K: [$ cd /root
% h2 @: l# G6 s! T* x( c; S2 {$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'- v. x; ~) M, [- m$ b
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz
$ g8 Q+ i& M& k, a# S8 S安装Nginx和ModSecurity依赖包
: A; W/ X7 @, a! NCentos/RHEL8 z5 B& X9 g" F3 b' h. S* F2 ]6 [
- h/ y8 y5 d' ~2 S* X- L& b6 I+ S0 C

( g) i2 T+ M6 K0 I7 z' t& L$ I$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
) b) P/ ]: w- z4 g, _, kUbuntu/Debian8 A' p) f/ I4 C4 M( @
; u4 s0 w& a5 k3 u* J, y

1 e6 |9 N' O5 `0 J$ e* Q8 O$ 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
+ m7 }/ @) Y0 M- X/ V3 U编译安装ModSecurity( i( }6 W- `; d9 U6 U
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。6 h; e7 s5 {3 Q8 E8 {) R- b. ~
( v: \: @5 ]4 K8 m9 H. c/ P- r  R

2 w0 I- U. A5 E  E% G+ ?; B方法一:编译为Nginx静态模块
4 J! W2 E, g( P  X+ K4 k0 }, O& P$ ]7 m/ |

* d+ @9 T2 p7 {编译为独立模块(modsecurity-2.9.1)' }+ X: @% n# W5 s0 g
$ tar xzvf modsecurity-2.9.1.tar.gz
% Y( Z; b( V) Z: Z; B0 G$ cd modsecurity-2.9.1/+ o( `  w" ~+ \' G& A2 y  L$ m
$ ./autogen.sh
/ [5 m" M) C0 S$ R* c/ j1 H$ ./configure --enable-standalone-module --disable-mlogc
# g# K6 l( g( a1 t, [" M; K1 x4 N$ make8 C9 o5 `% f1 X
编译安装Nginx并添加ModSecurity模块0 L% P! H1 ^6 C) X: `. M
$ tar xzvf nginx-1.9.2.tar.gz) }5 j5 T# U7 }+ i3 z* _
$ cd nginx-1.9.2% F4 a4 k8 Q* t4 ?. C3 i- i0 C# o# b
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/* |( w7 K7 h6 t7 s2 f' G, T
$ make && make install
+ A1 z& G% v& `7 `方法二:编译通过ModSecurity-Nginx Connector加载的动态模块" `% [( {7 `4 ^# m4 v) T

: [1 j1 ]2 _+ O% t& O0 `/ j9 J* r! E" w7 y$ m) W- x: o- p8 t
编译LibModSecurity(modsecurity-3.0)
4 {  V/ \, z4 G3 h+ O$ cd /root) Q/ J0 E8 A- w8 ?$ j  e
$ git clone https://github.com/SpiderLabs/ModSecurity* K& d; x7 d0 ~3 H% G, \
$ cd ModSecurity7 d5 Z! }+ n0 g$ T) ?" R
$ git checkout -b v3/master origin/v3/master2 h' T2 u' H+ P; ]8 B8 D) |
$ sh build.sh; l3 |* x* `& x/ L
$ git submodule init7 \8 t$ c/ T3 @/ u, e# ^
$ git submodule update
+ L/ h; `$ }' h. E5 }$ ./configure
* B& }1 t/ T* {$ make1 A2 J2 }5 d7 n5 w6 l3 U( ]
$ make install
$ Y( Z2 H! h& BLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。' I+ V) n! s' y6 K# T  f- i; y

" A5 D# Y$ {5 _
. L+ _+ J3 ?# O: P$ ls /usr/local/modsecurity/lib
, ~4 |, O5 ^* m7 q6 Z4 ~& s2 Dlibmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.0
4 X6 D: Z0 N# x% z; ^1 q5 O& _" o/ ^编译安装Nginx并添加ModSecurity-Nginx Connector模块, r8 f" L3 \! D# {3 X0 n
使用ModSecurity-Nginx模块来连接LibModSecurity
* j5 x, _* {- W1 j( I; O# `$ a( t8 w8 y+ A, C1 z

! g( j+ Z* ]& V$ B" c% E$ cd /root
3 C# N$ X0 O& S$ i$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
; `2 l5 `  c* X# J5 f# E$ tar xzvf nginx-1.9.2.tar.gz
  T1 o$ O! l: c" P7 e$ cd nginx-1.9.2
  {' n+ M0 P4 k1 h" v8 L$ ./configure --add-module=/root/modsecurity-nginx
! o/ P* v, c0 }! j: L) e$ make$ `1 v1 S, G: S/ _  f# W
$ make && make install
4 X- N9 z% }( I, J  h) j添加OWASP规则$ [$ D8 ^# ^" x( A
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。" y" p% b8 s6 O* J8 z$ ^+ V. R) V
6 {- K. r) A3 T# t. ~

1 ^. S' X: W+ a8 D4 W* O% t下载OWASP规则并生成配置文件
  O4 @' v- V+ l# @! L3 j% _$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git6 f+ p1 n+ }. [+ M6 [
$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/, A7 W( e. g& F9 R5 F' U; ]
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
+ v& F: e( `. l) O# a2 h1 I4 d9 D$ cp crs-setup.conf.example  crs-setup.conf3 s- E$ T" A5 w" t  Z! f- z0 T
配置OWASP规则
$ f/ x3 i1 R7 V( H' L# N2 S: j9 B编辑crs-setup.conf文件
* S1 r3 g6 {2 v" l+ D0 t6 y$ L" @/ G' I% e' {
- a0 d2 k+ j8 \1 p( G$ l3 I
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
( I, B% z# J$ f$ s; U. m( @  f$ G$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
. I9 [1 t. `' k( i' X$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
3 Z; B1 k5 {/ U6 U- Q) i$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
$ O) c- z9 t; J. z: s/ ~# x默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
8 M' g: v& g/ j# |/ S  F) h$ {) W; b( |$ E
/ H3 K5 t9 `: g6 W# y
启用ModSecurity模块和CRS规则: X9 z9 p7 a% _) r: L1 r
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。- z! S* p0 r4 [. h* i. w  u
! c) Y. P: Y0 o4 E6 n$ u/ p

. a/ k: H. _0 Y7 _8 m! imodsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
" @" {- C! w9 q5 a
& P0 Y$ s6 n+ }% `: M
; `8 q  w% [! `" i( B$ cd /root/modsecurity-2.9.1/9 K% ]; X- Y/ F
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  
( q! ?- a1 k1 W. F$ cp unicode.mapping  /usr/local/nginx/conf/8 A+ s  q! [( A6 G; t* x( P
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。1 F2 w2 H: p# j( @

; B5 c4 \2 g" U1 b; A
5 @4 n" ]4 K7 ~: ~7 P$ vim /usr/local/nginx/conf/modsecurity.conf+ R# A- m, O5 v- j4 H2 i
SecRuleEngine On
: _, H$ ?# h3 l, q( u  `+ w' YModSecurity中几个常用配置说明:
6 L: y, i' a' q6 ]- F
7 X$ ^" }* b- T  l
) R6 V4 N' B6 r1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。0 f* x8 [7 A0 w2 P) h5 Q

7 F9 M5 _4 W7 \+ K% A
7 M# o7 `" q! W: O6 {: }) h2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。$ K2 X$ Z" x6 D# U+ i  Y

* |# z/ \1 W4 o8 E$ P) q$ @
; s% f# Z4 x5 x* K7 q3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
8 R% {& _9 l  S1 }% w- I; j: H/ t$ ~, x! v: z' z" [  R; V) S7 ~

% d) O+ B! M2 g4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
; Z. a7 a. f) L, h/ \8 H, B& E# b% e8 o3 h) l" c6 R. F5 `5 w; r
3 _! P5 b* C+ d( q
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。+ e+ I9 ~! P) H4 N# B' A" V

: j5 ^. C: e& E/ h+ F. \
, K# {5 h) v8 `6 x. y1 z. I3.x版本CRS* ?1 q) y3 X1 |2 D
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
! r! T9 n- w8 m! X1 G# 生成例外排除请求的配置文件, f  v5 t6 f0 Y9 T. A5 W- l
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf' E* B, E8 M& I$ u0 E! l+ |
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf9 I5 D) J; Z& _3 A2 X- C2 M: d6 _
$ cp rules/*.data /usr/local/nginx/conf
6 T6 W" z$ J7 Y! W. s为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
2 M- @6 I( J2 B
8 s) _  y$ X5 }% l1 {
" G* ]/ k4 u1 M/ b$ vim /usr/local/nginx/conf/modsec_includes.conf5 [: F: E+ q6 M/ I& W
0 [  p8 y( j+ E$ 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

! X. l: D( D- F1 x; i, v2 v; T% j" M  ~6 i1 ?4 F" R
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。* v  b( j. \7 v
$ q  H! }9 w1 Z8 g/ B* x& _, R

: a3 X* _/ F( U2 }1 t" m* ~配置Nginx支持Modsecurity
1 C: Z0 K9 Y1 J8 S" L启用Modsecurity
( _, I9 t4 t: o( Y使用静态模块加载的配置方法% f0 Z/ P; a+ L  l8 Y
在需要启用Modsecurity的主机的location下面加入下面两行即可:
) i- f5 U* ?" v1 h6 g5 e. d0 L. C) {" p
- P( m& {8 _# Q
ModSecurityEnabled on;
* d# I& f1 `! I$ \ModSecurityConfig modsec_includes.conf;0 f4 _8 M/ R. ]% X2 ~+ u9 `0 e
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
' m9 r, @: i0 N4 p; h6 m) Z; _% q( Q; L) k2 j; I
  t" O7 f1 q! f4 N
$ vim /usr/local/nginx/conf/nginx.conf$ V* E7 u5 i% C6 q( @+ H

# @7 d0 g' |$ e  m4 h9 @6 A: I3 L* k) o$ I4 y5 Z- S
server {
# Q& _# s+ i  Y1 ?; H: Y* {, [6 R  listen       80;
: n" x' X3 H! z2 q7 {  server_name  example.com;
) E8 F; \& U# M" n4 F, m
2 G) R4 q" w0 ]6 I) m% S" k: e" v+ X# n. t* J1 ~# d8 M9 G. J
  location / {$ k( `3 }5 H2 i& Y! k
    ModSecurityEnabled on;
1 H- T$ ?2 j: }' C  b* f% z4 g. e0 h2 o    ModSecurityConfig modsec_includes.conf;
: |) K7 b/ ^4 o+ ?    root   html;
3 ]  Z0 x  f" a' m8 m  `5 k    index  index.html index.htm;" \0 @) l3 x! V
  }
1 i' V- y& E" [# p0 J& s}0 ^: m  a" ]% J) R/ V! ], E( y
使用动态模块加载的配置方法
* A# Y2 L# ?# Z$ j/ H4 S) n在需要启用Modsecurity的主机的location下面加入下面两行即可:
0 @' t) T, H0 A2 [$ E7 h
  Y. J" o8 }9 Z& }1 ~& o& g% L" O) Z9 `' \
modsecurity on;
! \0 U, {& ~1 {8 \& y/ D* \modsecurity_rules_file modsec_includes.conf;
4 S' n5 h4 }* `$ f5 i修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
8 c1 S8 L4 L2 A7 k$ R2 ?* z/ ?9 w# g- _6 L: |8 _* m
) H: ~' S) q2 Q( e- @! O" n1 L
$ vim /usr/local/nginx/conf/nginx.conf& R0 {8 G9 ~2 t- l8 ]1 Q( J# _* g1 x
' g8 m! k& D/ D. m2 a4 @
7 b+ X3 ]% H) n! z- A" k5 L
server {4 E9 J. D6 Q# a& e% Q; `% D4 l9 y
  listen  80;/ @! M0 _. W$ C# F9 t# }* ^
  server_name localhost mike.hi-linux.com;0 i7 [/ H1 A& o+ F; c: q
  access_log /var/log/nginx/yourdomain.log;9 F! u2 l7 e0 `$ P1 U9 O

9 g9 Z# Q  ~* [( y: V1 S4 L+ A
' w. w# p# I4 o& \  location / {. ~$ b6 J2 |: {5 e9 Y3 d( p7 j

$ G2 H  w6 Q& T. O' i1 U- g4 x: A3 }6 X
  modsecurity on;
" {* L$ ]- j. a$ N  modsecurity_rules_file modsec_includes.conf;( \- Y- ~, c, Y8 b
  root   html;
- F" M# S+ p2 `( N4 o- L" W  index  index.html index.htm;
, s& t) S& }( A/ b) V) c0 G! M) e6 B}+ j9 d" t& n( |; F" b
}5 N# ]. k$ F% k: U: p
验证Nginx配置文件
" T  K& w; x% s9 v) {9 c$ /usr/local/nginx/sbin/nginx -t* m! p% i$ |  Z4 h  i' [
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
) L4 o& h% P3 T9 H! q- y/ Inginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
1 a, |# P4 p1 ]$ w; j- v启动Nginx
7 a" J) s7 h' b9 m  }$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf0 H* _2 q/ E# m! a! U- A

' _) s/ K9 Q# 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能够战胜更多复杂/未知/混淆的攻击模式。


; }" d! L- s/ j2 c. g2 B% b

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-3-5 01:45 , Processed in 0.083101 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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