找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11928|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。& e. a: _6 _5 P9 O
) `$ V, Z: q) N1 [. j, e- }

% n* w1 r) a5 A" |  z6 a7 K- t* O在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
" a$ d! \+ x' r. h% d
9 W2 g/ x- ^# h6 L& G
; w7 D- R% z% G什么是ModSecurity
" p' U4 L1 F: z) O% ?ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。! t8 v2 M' a  Q4 }0 x" J

8 {/ I. b0 O6 m) o4 M7 B# z7 n2 m9 `/ z( Q& A
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
' v- N/ [. X# g0 v5 [" d3 r" [
% u: v% _( Q- P, E% p+ S7 o, ?( a8 B8 u8 p
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
8 ~& t4 Q. d4 P; s9 h: N& z
* I6 R; {/ G0 S! H. Y% I; d  ?7 z; Z7 w) K
官网: https://www.modsecurity.org/
- M$ C2 M1 t# C! y
: y3 b1 z( z, r8 _  k5 _4 W- @/ w  \
$ O) K( l* k8 z0 G什么是OWASP CRS2 B6 w, B* s: B' U& s% ?3 R
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。/ K6 f5 C( Y+ M* r6 [( k

4 \" @  U% y/ x  _
+ p1 O& X+ X" o+ SModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
6 [* m: c1 V/ q7 i8 t1 s) ^$ v* H  @
3 `+ d6 v$ [- D3 f& m
HTTP Protection(HTTP防御)
  {0 n$ D, m3 D( D) O, A& ^4 f3 }HTTP协议和本地定义使用的detectsviolations策略。
4 B5 e/ e3 B6 f
, O' B* A) r" ^' a! Y9 w
. B. Y1 K& X' i/ N0 K( T2 t7 H$ FReal-time Blacklist Lookups(实时黑名单查询)2 J6 k0 l2 l: a) O5 Y1 }$ x( I; ]
利用第三方IP名单。4 W' \# M8 e2 o( B
( X/ N% V8 I' B+ a0 s4 B

3 p5 b/ N, p: N$ L( o' F, BHTTP Denial of Service Protections(HTTP的拒绝服务保护)
. P( Y+ v- v( I防御HTTP的洪水攻击和HTTP Dos攻击。
1 y! R8 V" Q, `; [# Y7 J# W1 F! r" u* Z; W1 C$ w9 D% z9 d. x
+ N6 Y' q- H  n7 J
Common Web Attacks Protection(常见的Web攻击防护). j2 z& }' z7 X' }/ x$ T
检测常见的Web应用程序的安全攻击。
4 L: P, y: a# ~1 S: ]* G; h
$ l( \  J! k; N- F+ d+ ]" q
, M9 A: h# L1 _: {9 _0 y( I: _Automation Detection(自动化检测)
4 o) Z* L8 E! a检测机器人,爬虫,扫描仪和其他表面恶意活动。% k/ `9 J3 l# z9 v  y# d

3 d% X# ~5 p( O! ?/ ^$ [! e5 Z* z8 [* F9 T; y0 F
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)1 i$ t3 T+ B' J; u
检测通过Web应用程序上传的恶意文件。
! U' i: Y' @1 u+ r7 ^  i
' l1 @4 a0 g! R8 r0 ]. C7 s. G4 D' A! R- Q) n$ }
Tracking Sensitive Data(跟踪敏感数据)( ?6 P& r' t6 w7 Y: s* X
信用卡通道的使用,并阻止泄漏。
/ t: o: s) c$ V4 ?" z: [
4 d1 [5 o+ y3 u, ^; R
& N% A& Z! c. h' n9 ?# JTrojan Protection(木马防护)
* O2 W4 g+ \$ j$ V0 y  b检测访问木马。2 R( }: h% {! T
5 q( R! F! o7 r$ p
1 a! Q% m  M. k: [
Identification of Application Defects(应用程序缺陷的鉴定)
5 y" E; U8 D! [0 @9 x. X检测应用程序的错误配置警报。7 i; t8 g( D* Z
' J# {! O: g0 z! k5 F9 E8 c
% z4 [* n8 f* ]# z& x% [
Error Detection and Hiding(错误检测和隐藏)8 n4 L4 M/ H5 g$ q4 q
检测伪装服务器发送错误消息。
/ x: I% U9 M" e- J0 E) o0 w$ J( R# k% z! f( \' X" A( `$ x( G
' l. e7 B1 \0 E4 z6 d
安装ModSecurity
9 X) B" a5 m+ ^) S, K软件基础环境准备2 Y" U) n7 j5 ^; t
下载对应软件包
: T8 u+ ?+ E; }6 h1 s' [4 O$ cd /root6 V7 \0 {8 n7 f. Q6 r) O! E( {' E
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'% L5 y. }) s2 d6 T
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz/ ]! W- q. G! e8 q- E
安装Nginx和ModSecurity依赖包  J  \- _7 t1 s+ d6 }1 K
Centos/RHEL* A; n+ e( C6 f. p

6 ]* W2 S$ E2 R+ `: c) @% L+ L+ D% c6 O- D2 [
$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel4 Y! h' e5 X4 G0 T* \
Ubuntu/Debian+ h  S. S2 G) A6 A

( n; _7 o0 j( d3 N& b- l; j" S; P2 d8 f3 W$ f5 R' U
$ 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
" ^5 y& b7 Q. s* c; U0 q6 a, t& O. I, ]编译安装ModSecurity$ j; w) r& U% j8 k
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
3 D+ g% W- R7 H  z  c. U) S: ?2 E/ U3 Y, `  z* M

. F* D; q& c5 a2 r) N: a3 U方法一:编译为Nginx静态模块" `2 ]; [/ [" \, u1 K6 R9 o7 C6 @+ l8 q
/ Z$ W% s- i# H
- @8 V' j' n4 r6 m$ q8 m
编译为独立模块(modsecurity-2.9.1)5 w# i$ L% r! J0 I$ p
$ tar xzvf modsecurity-2.9.1.tar.gz
) d5 F* G0 z& x, P7 b$ cd modsecurity-2.9.1/
! _% M" W5 _: ?8 j0 V+ ]  R2 H$ ./autogen.sh- W- R" t! Y6 w/ x# {5 {
$ ./configure --enable-standalone-module --disable-mlogc
7 A2 V2 G# B7 F% J: ?$ make
! F0 g6 ?& t5 {6 F# Q) P5 X% J编译安装Nginx并添加ModSecurity模块
3 C+ R' s1 e- _! P0 i1 W1 g$ tar xzvf nginx-1.9.2.tar.gz/ e8 B3 }- A' F" f- H1 h
$ cd nginx-1.9.26 ~# k* v+ |3 z- \- A$ i* W
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/$ a. X5 k9 j6 v
$ make && make install$ m4 |& q4 c; q4 X" `. R& q5 g
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块% ], N! P# _1 G1 X( R. v

+ j& G0 ?& `9 g' Z% c9 v# g3 z2 v) K) o, J2 y8 C
编译LibModSecurity(modsecurity-3.0)' J2 a7 d6 k' C% d: D; g
$ cd /root7 J! L- M: ^2 Y$ `1 n( Y8 @
$ git clone https://github.com/SpiderLabs/ModSecurity& J0 H' M( V5 Y( `: v( s
$ cd ModSecurity
# j$ i  P; @4 z5 ]2 V' p7 I; a$ git checkout -b v3/master origin/v3/master
! A# M! v1 U# ]: o0 P9 k$ sh build.sh
! M# a- y, v. ~3 Y. d$ git submodule init
0 D; B  @4 T1 p! f7 J$ git submodule update
( L8 r+ D/ _# \2 J4 j$ ./configure
* [- e' w4 T" V% Y1 D8 f( t$ make
: l9 C8 ~& V1 U' W( Y) T) E/ ~; L$ make install
2 g  D4 m( _' ?3 yLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。" M4 B- [9 S* f7 U/ f3 Z4 X/ P8 _
# f3 {+ D6 L: l) ~9 y( v
0 ?0 \5 r1 R( q4 E+ u, D. e0 U
$ ls /usr/local/modsecurity/lib& H' K$ H8 f- P8 m, Z' J7 E" f3 A. C7 W
libmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.0
9 J/ Z' Z. f# n: w. y编译安装Nginx并添加ModSecurity-Nginx Connector模块
: Z4 n4 V; m- }使用ModSecurity-Nginx模块来连接LibModSecurity
- Y4 h0 q# e. M
6 y! r/ j$ q7 I
. e9 I$ X* t$ x* D7 m7 R2 l$ cd /root  B- c; |$ ~) Z5 m
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
: m% g6 e9 s( [8 a; W$ tar xzvf nginx-1.9.2.tar.gz( l3 W$ t  @7 H+ f
$ cd nginx-1.9.2
' x$ \: j4 _1 N2 r2 U% x$ ./configure --add-module=/root/modsecurity-nginx
9 y5 b' x# Y9 q  H& ]5 P; {2 [7 Q$ make
, B2 V" J& o0 w" y! ?: v$ make && make install
1 `5 R4 ]- z/ q" e添加OWASP规则
6 T* D. A, ?6 \/ R  zModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
( N5 [1 A  u' Z, }0 G2 U
2 [3 X" k/ g% V, E: |9 N" s$ x4 V+ D2 o' f0 @: x. ^3 W+ n
下载OWASP规则并生成配置文件) |" ^/ P0 i- i  {. v" H  ^3 y
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git& H, ]# @" h: |0 ^
$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/7 e2 @/ c+ L& s% f- c. w- b# e/ l
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs3 Z! H: Q: ^2 Q' i
$ cp crs-setup.conf.example  crs-setup.conf
5 k! V' V& Z" `4 D8 ^配置OWASP规则
, _0 W& V  X* C- ]' O5 G( A5 O, }编辑crs-setup.conf文件
+ o: ]: K. Y* ]* h7 R7 E) u% p2 ]" n+ z# C& D" x* C- A: X

3 p1 r$ a- X- D3 @0 l$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf( A1 e2 Y& d. ^
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf) X. o# }5 w% }1 h
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
/ s8 O7 ~+ l: C: X; x( }( @* f4 ~$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf& L- V  ?$ u. E) t& k/ T6 y
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
; Y/ T/ O$ O! H: s# ]) y" }# K' n
( _. z2 b4 p- K- @6 g
* E, n5 T& ?) G3 L启用ModSecurity模块和CRS规则
/ z  r4 {% u& ]/ {复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
. h% z) Q& I2 W+ t* E. q& U# ?/ B0 b  a6 V* \- i/ H$ {% k, r

! D0 `3 {* D8 X1 q" ^: g* a2 q+ F' i1 [modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
* z) w: O0 w% k$ I# w; U  z/ u! c7 E

1 j/ E1 n: A7 J$ cd /root/modsecurity-2.9.1/# i+ x2 U' L  `8 X8 a. Y
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  
- i9 L) W* w! b( p6 e$ `' n' ^3 G$ cp unicode.mapping  /usr/local/nginx/conf/
5 y9 \* ~! a4 {0 a1 t# Q将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
% J+ W# L7 c4 H4 j! p9 y9 Y6 B- }3 i: u6 {% s( }0 e# L
) b1 Q/ E- _; S/ g2 @9 P; [$ e* f
$ vim /usr/local/nginx/conf/modsecurity.conf6 |7 U3 j* v$ H7 R. c. o* P: n
SecRuleEngine On* {2 S/ e8 e& w8 j1 y* v/ x$ u
ModSecurity中几个常用配置说明:
9 ]5 M) u: M$ \7 N' Q% N: k/ a$ ^% G$ N$ t- s. g4 f
3 |/ N4 n- g& ]- @
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
  O0 d2 y% y& S. T2 H! @+ f
) q# ?9 P- }- q) d  ~" A  M+ w7 c7 x) R% L5 T7 G) B' N! H) J% D9 J
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。  Y0 h6 `4 v$ t( Z

1 k) Q, N2 t+ i8 J8 h( {
. f2 L. E" b& O2 H0 Q8 o5 @- T3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
, Z3 m% j3 S6 x+ M9 S+ K/ k! |1 z* j! A0 A  i, ^; K

! j( \# S$ x9 v  ]: z4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。& l% ^. D! I' [1 x1 y
0 H+ R$ Z8 o7 ]& ?. u
+ ]# z/ |! h3 Z- y& @
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。2 [% `( l. A+ a- q0 C9 R, T# G5 [' d

$ T' [* {" h! t- V/ [4 M
) p2 O: }' Y5 l) H( C& R( \3.x版本CRS
4 G6 [2 t5 P+ d2 V7 h3 m$ z7 y9 i$ cd /usr/local/nginx/conf/owasp-modsecurity-crs0 n1 x- \# @" d( }% a# K8 V; t* {
# 生成例外排除请求的配置文件8 L/ {0 J- f1 c2 J" q4 C
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf. x6 x% p6 Q8 Z9 F+ H$ o5 J
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf9 G- ]$ I7 t/ Q: y8 J9 W1 c
$ cp rules/*.data /usr/local/nginx/conf
9 w3 D' w, M, C$ v为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
: G8 ^5 w* g  E0 l; ]2 x) Q$ X; l1 v* X' Q+ k$ W) w1 B. X
$ [$ f3 I" i: y5 j
$ vim /usr/local/nginx/conf/modsec_includes.conf& P! X. ~3 O% q# n" \9 y( e  o% y

* [4 Q% U$ H+ t
[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

& E( }2 X9 L0 @  c7 i( V, N& Q+ I( _$ i" U+ E
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
& d9 K8 r; \% \; P& U
  ]6 A+ E/ P5 j
% ]# ]3 p& {* i. q0 s配置Nginx支持Modsecurity
- v* ?; s: ^) e- E启用Modsecurity4 W5 L1 e' P! A2 b/ ^  k* I
使用静态模块加载的配置方法
" `+ h! G4 U* S# L在需要启用Modsecurity的主机的location下面加入下面两行即可:! w5 r# O& A; J+ z" P0 g3 Y

& R, V6 [% k+ c+ B1 E$ v
* S# u2 ]: k7 QModSecurityEnabled on;
0 ?7 |& ?. R; m& {' zModSecurityConfig modsec_includes.conf;( b/ `& J0 K* _; M7 a
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。6 c% |) T# ~, A7 |" {
: K5 ]" [* C2 C3 Q/ o; {

; t* V5 E+ G# H, l. @1 \; K$ vim /usr/local/nginx/conf/nginx.conf/ y; b7 F# l/ Q; l( {

  `8 Z; {) L& H1 f3 p* x, p2 Z6 c0 J6 W& F! ^2 m% O2 i8 K( e( I& k
server {
# H: I( u9 G) Z  P9 j  listen       80;
. }0 C  C, p8 V; ~% K: G( o  server_name  example.com;+ w4 J' _+ @) @; x
9 z7 V: [* |  B1 B) Q, ?" L

- J, Z- V4 w$ K" |  c2 M- _  location / {
- c' ?! i6 }- z) n    ModSecurityEnabled on;
3 w, p/ W1 D- G8 f    ModSecurityConfig modsec_includes.conf;" D7 n8 b! ~* C
    root   html;! ]( V6 M' l3 }/ z$ }' z) M
    index  index.html index.htm;  L2 }2 t: ~1 ~$ B
  }9 M9 R3 f! C+ b, V
}% z: {4 Q2 x. X) r
使用动态模块加载的配置方法
+ x: T# ^5 @  I. m) P7 ~/ {; B在需要启用Modsecurity的主机的location下面加入下面两行即可:
2 O- a! |" X7 x$ o7 b3 @( e
9 T- p. a2 ~) n- F# S# h- w; d  K+ Y9 j4 S* c
modsecurity on;
% Q' |" {# b- Z3 ^/ Gmodsecurity_rules_file modsec_includes.conf;1 R5 }  r: A" |: `% f8 g
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。. x  n% {; `" L- Q

) \/ N2 e' T9 Q4 E' w8 \8 s6 K' R
  D. H. p  s6 b0 P+ j; e6 J$ vim /usr/local/nginx/conf/nginx.conf2 H: w$ u  Z) D# j, \+ ?1 y  g
+ w! F4 F0 s, A" h1 U& M. w+ c0 K

. V) y3 F- z3 e9 v# `server {6 y8 Z- x( c/ C  e
  listen  80;
1 ~, w! R8 c; R" \) I! l3 r) ]( }  server_name localhost mike.hi-linux.com;
. ?9 [  Q1 I/ p7 N5 i  access_log /var/log/nginx/yourdomain.log;
1 l0 e1 {/ j$ c3 _6 M8 U1 A/ l- Z. K5 \, B+ }: n7 y
0 m+ B2 T1 Z2 ^- [
  location / {9 z( ~3 y0 V# Z: W+ O

3 F  h6 o7 b& i# v6 ]! U; V0 I
8 z9 R. b1 E0 z; T  F# t& g  modsecurity on;
6 G& O& P9 L5 P6 e  modsecurity_rules_file modsec_includes.conf;
, m, q1 f  t5 `8 K; `% [7 W2 v  root   html;
: h2 w+ R2 k" M; D, N& b/ K  index  index.html index.htm;
  O! Z1 l- r+ v8 P}
" V6 i, P+ B# a% y1 l}
2 T* P: T; e. Z* ^- `# q! g验证Nginx配置文件
- F. h# L( x0 T. ?/ w. J! v3 d( l& Y$ /usr/local/nginx/sbin/nginx -t
8 r2 u) O( W: B2 {6 i, ?nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok# ^1 A1 h8 n( X; n; C) I2 b! {
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
# J+ K2 A, K0 s# {- {) l启动Nginx
! l* H4 O% V9 S' }$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf" }4 q. t* W8 I
& [  f6 Z( b, a% W

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

+ J. S/ A9 y( Q8 t6 \& s4 ^

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-7-31 22:19 , Processed in 0.078916 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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