找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11309|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。1 @# R3 r5 M, L

7 o* L$ H# [# k- s" ]
3 A: p$ y; y0 d% \$ D; N在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。" f1 B* a2 Z& V6 y4 i

% I3 o( X$ l, R  t/ l; s& E. l! }  |/ ]
什么是ModSecurity
; K9 B' r! s4 x- d; _3 v) RModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
! m5 r! Q9 P! W/ D' `) s* i9 j' h7 @. l+ k

9 |; ~/ N3 n" i3 h2 R1 \* AModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。5 ?  r' N0 Z2 b6 S5 W' V% }

/ }# [) R* [0 u9 K  |$ B9 B- Q/ f# h' a
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。9 Z$ p, n( P" {* I5 z+ m+ |+ [! n
8 t9 `" }- D( F& R5 b# k' l

2 z" x$ i0 a6 y官网: https://www.modsecurity.org/1 \. |9 p% L& _
6 C% b7 I1 D3 G6 g7 a
6 l& i* c/ E& H
什么是OWASP CRS
! r+ o; I1 n# G$ q7 g0 SOWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
& [+ n" {1 f, P6 P" Q$ y6 S' A+ S
1 [$ O6 n& L5 p' u" f, x* c: a2 h, `$ |5 Z) t: _
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
1 z5 h) d& j5 H. \9 o( U% F/ B4 N, e
# V' N* e6 K( z5 `! R" q* A3 G! m* c& z$ \
HTTP Protection(HTTP防御), B( l4 A" Z8 }2 r- K, }( T$ i, @
HTTP协议和本地定义使用的detectsviolations策略。
. f" E1 B0 A/ s" |( P7 o" ?; Z1 c0 K0 g( _

8 g& g- z# T% S' O+ \4 VReal-time Blacklist Lookups(实时黑名单查询), r% M! m0 V. D2 B9 N; b
利用第三方IP名单。6 J7 v& H3 i- V( g  C2 _% Z: q) `
+ Y5 |, j# m+ t5 o  E$ P4 d
8 R& g: ?$ X* y$ {6 N' t) i
HTTP Denial of Service Protections(HTTP的拒绝服务保护)
+ W: E- O+ D7 I; \8 t, R, Y* j防御HTTP的洪水攻击和HTTP Dos攻击。$ |4 v( G+ O* w/ u! I

+ C& ]4 W4 D7 T4 N) X6 y. C
+ V* Z; X/ ?/ ^Common Web Attacks Protection(常见的Web攻击防护)
; Z  O5 _% k1 E+ `4 E( Q2 U4 `检测常见的Web应用程序的安全攻击。2 s5 K& ^4 I' N: M1 v' ~

, o, X% g2 Z+ s% V4 B! U* {/ @0 b5 l
) X% d& v* |# n7 GAutomation Detection(自动化检测)% _5 \0 H9 H7 z/ M& z7 t
检测机器人,爬虫,扫描仪和其他表面恶意活动。! {' }- ~2 D/ W9 H1 V

+ p) G; f+ J5 g5 y7 L$ B7 J# k6 y% Q# d. R3 V; ]. d9 j1 |
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)
. H8 z6 F& p. D2 ?检测通过Web应用程序上传的恶意文件。7 }: w6 R6 R" ?7 `2 ^- j4 P9 Q# {, H
" w. @, B9 F! ~( U* s

# k3 {0 i1 S* N3 s7 z* ZTracking Sensitive Data(跟踪敏感数据), d8 Q+ Q$ Q+ a/ W7 K
信用卡通道的使用,并阻止泄漏。( @( t& E1 a$ X, G% G  ^9 q% G, o

5 y* Q: x. D7 B5 Y- w/ E% w
; ?! h9 R  E/ ZTrojan Protection(木马防护)
8 T7 p* j+ z" F5 ~! a( Z$ _检测访问木马。7 J) f( f. F+ ^% g! Y$ D

( b, M9 ]: a# [7 i1 P6 D1 Q
1 ]: F) h+ N( @: c; n2 D- `* h' S6 RIdentification of Application Defects(应用程序缺陷的鉴定), c# p/ |  k0 x
检测应用程序的错误配置警报。
3 u3 _* c/ x! A+ g! K: n
3 q& N2 t+ i& M3 ]* Z. F9 E2 b' h' w7 W8 U- Z# Y* o# |1 F
Error Detection and Hiding(错误检测和隐藏)
+ \! v/ z% V+ i1 e检测伪装服务器发送错误消息。5 z" L: B9 O. H; @! M2 A# I

0 M6 E0 k4 p- \. G+ G/ E& J8 \0 a3 G6 p, z$ ~. l4 N" @
安装ModSecurity  t- L+ y+ v4 ~2 b0 w6 \( U0 @
软件基础环境准备! v, {' c1 R. R' |/ ?$ w
下载对应软件包1 S4 q/ |6 I8 B& e6 M" J
$ cd /root
$ u- m* `% U, |2 D: [* i. Q$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
" ~. r+ @% ?  B! M3 Q$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz. g) q& _" p& `9 j4 [
安装Nginx和ModSecurity依赖包
  `3 {, g; Z, x- uCentos/RHEL9 W1 R; T- Z1 k5 {' O' X  R3 t

& R1 @  U+ i2 c0 C1 w: M2 A1 q& z" A8 [# `8 {/ @- _8 D
$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel8 e, |/ p& j0 x
Ubuntu/Debian, C) o4 @( N- ]+ i' ~6 ?8 Y$ K
4 k! V, W% n# |# ~  N. D

# M( T6 x- x/ [! Y) D9 `( V$ 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
8 u! C/ ~" O& E/ U* b3 `3 [编译安装ModSecurity5 W+ }/ Y* D- B# o- z! o
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
$ c" i" x% \2 T# u# ^" }' L5 |$ p' I4 W0 ~+ v

8 y" V; N: M7 Q% Q, {- J% l方法一:编译为Nginx静态模块
0 w9 E0 u0 w8 g- a
2 G0 k! Z7 [; A+ r+ ?9 b3 ]# ~7 H/ Q! L, l+ I5 K, @8 m
编译为独立模块(modsecurity-2.9.1)8 B1 ?+ d  p% P9 [
$ tar xzvf modsecurity-2.9.1.tar.gz' w5 Z- u' R6 y6 V7 y. q! a6 R
$ cd modsecurity-2.9.1/
, e7 I5 o1 K4 Y/ M2 w* R$ ./autogen.sh
4 [+ ~' h6 z& E9 ~0 q, N5 V$ ./configure --enable-standalone-module --disable-mlogc9 g& N5 _+ o  g
$ make- Y  T* B$ L5 V' N" g
编译安装Nginx并添加ModSecurity模块6 \3 K6 O  x; x# q% d
$ tar xzvf nginx-1.9.2.tar.gz
" W4 J; ~5 q! {6 t( N$ cd nginx-1.9.2! M* [) ~- |0 i4 o
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/" a  X7 n; ?3 u. X4 B7 Y
$ make && make install
5 d- N# c* X6 M5 e方法二:编译通过ModSecurity-Nginx Connector加载的动态模块* b& O  ~* U, N. X' {6 j+ h
+ R5 U8 _4 {' Q, Y! L

! [- u, i, c' ~1 P/ a- ]编译LibModSecurity(modsecurity-3.0)
8 M7 y. v- b/ _$ cd /root+ A- ~. K; n# e& j3 B* m! _% T0 F
$ git clone https://github.com/SpiderLabs/ModSecurity7 L! ^# d- W  r( s# T/ M3 e5 t; Y
$ cd ModSecurity
$ q* q9 b, i+ z2 X1 [+ y$ git checkout -b v3/master origin/v3/master% z2 `1 l) U4 {& a, s
$ sh build.sh) d8 ]) I' d# N3 a, q0 S, ^  J9 m. V
$ git submodule init5 E4 m7 z" V  \. T) Y( S
$ git submodule update& m# j) }, @- M' m3 J
$ ./configure
9 S4 y2 e1 D6 M+ ]! u- f$ make
) Y/ K" {% j) P. \" q9 A) @/ C$ make install
1 y) @# C9 C- F+ l+ Q; C" iLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
/ b3 ~- l, I% w" _9 e- }# A3 l+ L8 y  M" ^, S" \3 _1 f9 L) v: j: U
/ s5 r. k9 o0 O
$ ls /usr/local/modsecurity/lib3 i4 `  c: Q4 `% l
libmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.0# |' g: |% _: ^+ b
编译安装Nginx并添加ModSecurity-Nginx Connector模块
  j5 @& d; o6 _8 t7 {( y2 F; [6 Q使用ModSecurity-Nginx模块来连接LibModSecurity
; z/ g' T- }2 u: s- X! p2 e4 V9 c; y' p! S; i# B( f) d

: e# m3 }. I. l2 M" v% D8 T$ cd /root
2 n+ L5 ~: g0 D2 a$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
) l& o) F. S" q. i# c$ tar xzvf nginx-1.9.2.tar.gz9 x3 ?- X, t+ T6 G' v
$ cd nginx-1.9.2
5 M; L6 z& ^( d: t( J$ ./configure --add-module=/root/modsecurity-nginx3 {6 @3 {5 v1 ]) v. C
$ make
: ]( Y$ g! x9 e1 k& N3 j2 A$ make && make install
6 e1 c+ y! e% ~( D0 q添加OWASP规则- g' y0 ?8 W# @9 D8 O1 z4 {
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。; |' X3 j' h( c2 O- A" Y7 [% F3 x
* S% z3 [3 d7 y% \% X
8 y3 ?2 d! l. V( o8 b+ \) w
下载OWASP规则并生成配置文件; A+ a- ^3 Z; T% u
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
1 A7 G' _" v- y$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/
: V- M: Q9 z. b& i$ K$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
- P- A- z. `/ Z/ ~$ cp crs-setup.conf.example  crs-setup.conf4 g9 y- l$ O  {) {! `; q. B( x4 v
配置OWASP规则" C+ ?6 K" j. ^2 o# m# E
编辑crs-setup.conf文件8 {  e/ r0 z# L$ `
4 i2 \- [0 O! e; G, v3 a
* q) d+ h6 y6 y
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf4 z1 g9 k  \0 s
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf4 H. c8 ~$ J/ O; \
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
, }: p; H7 o/ `* v2 _$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf+ ^( f1 E( g* f/ N* ?
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。' q: s( P: `% [; z& e$ }2 |
) f6 n; i9 w- u* R* f* i2 ?
  i% f9 j* U+ {  S; y
启用ModSecurity模块和CRS规则3 I! \& ~/ g5 Z" T( l
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。& K; S. |9 s- ^% v! n
: {% p0 k2 d4 u. h' X
( `- F! h7 {! {: U% O& h
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
8 X9 M/ e; L) W  @* |5 ~" Z
' s, v3 E) G3 c' j3 ]' H/ N) E1 T
# z# I" {2 R6 F2 V4 B$ cd /root/modsecurity-2.9.1/
7 ^7 n- v/ W1 a/ j3 [$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  
6 Q+ y" L  D  |* ^8 w6 b- a$ cp unicode.mapping  /usr/local/nginx/conf/9 S, C1 N: g9 n8 ^+ t
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。8 S/ Y/ e1 E/ W7 Y

0 X: \) a. L4 B, h9 V  }3 ]% o6 s1 o; ]
$ vim /usr/local/nginx/conf/modsecurity.conf
3 M1 H8 b) y  {! Z  R, nSecRuleEngine On
, |- C7 q+ ~$ X1 L+ cModSecurity中几个常用配置说明:) n# N" F. O9 N( J

* _) P& }& _! q( i9 Z2 M. [
3 D( y: E1 o4 J- g. z+ D4 G' \& s1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。7 ~% [  ]6 |+ z8 S% a

4 _7 m( D( `/ Z$ z( N- O
: h: F( Q  [1 o# P* B- |2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
( _  s- P# W$ A( w7 i$ H- r+ e0 L" N* v

" U& k% Y# Q; _* V  l- e3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。4 U! v- m- |& a/ s/ l

" f( n+ Q$ u- T& j# D6 T7 n% W8 A3 i7 _' B) c
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。& `; S2 V/ ?5 G9 Z
2 J) A- o0 v, q! M- K7 I+ p

" m4 ~4 o, K) Q* Y( [在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
9 C4 `' ~) @) q1 b- s
+ F1 W9 h: B/ ~- ]' S% g/ _6 b8 Q* p1 H* b% [; ?/ W
3.x版本CRS$ B& }3 h2 W, ~% Y# H
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs4 ?( q0 V( C4 o- z
# 生成例外排除请求的配置文件
8 r+ k" `! L( _& O2 r9 [! b$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf9 a4 I7 l9 Z3 h# _
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
9 k6 e! A: C0 e6 Z# S$ cp rules/*.data /usr/local/nginx/conf( K( g  {- j- q
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
, L- p. ]. T" h* t2 n! z6 d) [5 M( g' p; _! @' D
" x) R3 ^9 R# V+ w
$ vim /usr/local/nginx/conf/modsec_includes.conf
8 H! }% U" U2 |8 y# n  X0 p' ?% `
[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

- @8 r! M# f! l" O3 A8 B" X0 ], u7 f. C9 W
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。, y+ m7 d% Z0 x2 I' g9 e2 L; _

! J* {/ G/ @. H$ |  M5 w: c7 Q! o# o. W5 l: k
配置Nginx支持Modsecurity
7 E% [# n' `9 l( ~8 ?$ d9 f/ V启用Modsecurity
% Z4 I3 V! R& A9 E使用静态模块加载的配置方法
" Q! L$ I. f: T% v在需要启用Modsecurity的主机的location下面加入下面两行即可:5 b1 e, C4 _+ [0 _1 d$ ]
* _/ o0 i* L9 K

! `* w7 x9 y2 J" c+ W% I4 |$ hModSecurityEnabled on;
4 t2 |3 D  q2 T) W( sModSecurityConfig modsec_includes.conf;
) [2 O! B+ ~8 K* W5 t( c修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
  t4 m  {+ b: U0 a, l% ?4 Z. p7 x+ C9 M9 f( J

9 b4 c# [4 I, x7 Z3 S$ vim /usr/local/nginx/conf/nginx.conf
, D% m/ D0 K6 s' Z- R- I3 @4 N
, B2 L% T2 V1 p8 w+ F5 Z- Z5 _  v
/ M) @3 f. C+ m& w6 K# {. Lserver {1 h; v8 i0 r- Z
  listen       80;
- y8 U( Q9 s1 Z0 }& J  server_name  example.com;
5 G( n  u1 o: q: S
6 v6 z1 ?  u) X  Y% P1 b; l3 u# }2 i9 J1 d- E
  location / {5 m$ X/ P2 W9 G% g5 y+ K  S
    ModSecurityEnabled on;
6 y' d" R. C' L/ G    ModSecurityConfig modsec_includes.conf;4 U4 w5 ~! H; W/ v
    root   html;$ x, r. X0 o9 o- a
    index  index.html index.htm;
7 H! Z0 ~' p& K5 p% u  }8 I  }  d9 j, T" Y
}
# E4 r0 M  n9 e使用动态模块加载的配置方法
# o& H. M) [  p" y0 F% p在需要启用Modsecurity的主机的location下面加入下面两行即可:
$ Y. f" s" l" {! E" L, s, y7 C" E+ o0 Q/ w  q+ C# z, b

* @* ]! Y  B- C$ n# \6 Xmodsecurity on;
  q: }+ b( K6 Z* B. rmodsecurity_rules_file modsec_includes.conf;
2 P" }8 ]3 i8 d& ^) t* B" x修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
7 Z% v0 o6 z1 a5 M; V' [5 ~
9 [8 B: m6 A' e: G1 s9 J( N) A
5 b1 G  [/ S+ a1 z2 H$ vim /usr/local/nginx/conf/nginx.conf' a! z# q* S; `( U# z
9 R1 p* G( `( b( v

( E- f9 W* }3 ^3 k7 {, i# a& ^server {) b- v$ t! i$ _9 @, s6 t& n
  listen  80;; B+ K4 x0 Z  s
  server_name localhost mike.hi-linux.com;, R% G; y! O" l5 ?- X, k, r
  access_log /var/log/nginx/yourdomain.log;- U/ i) l( `4 ^, z! y1 c: {: i

: K0 O+ l& U! j, d! i! M1 t
, z/ T2 m7 p% R* G# K  location / {
3 w" |6 h2 [- R9 k2 l1 B6 q! |1 A
; W& Y# _" {: }. M3 r! z0 A0 |' @. B7 ^4 f7 Q3 F: X/ N
  modsecurity on;0 [' c5 C( s* q! Z: H$ y: _2 `
  modsecurity_rules_file modsec_includes.conf;
* f- J0 A3 c5 X0 ^: [8 E  root   html;
) M7 i2 C6 ?5 e6 l. e# T  index  index.html index.htm;
2 s. _+ f) |4 s7 P  k}
& ^# O& T" S0 ^+ i( ]' _}
- z( o' u  L" j; ^8 ?% o验证Nginx配置文件
! V% ~& C/ G% A0 P& h2 e  w$ /usr/local/nginx/sbin/nginx -t$ X  H/ W9 C9 n+ z) V
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok7 {4 S  y5 v7 p, @4 }4 ^
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
2 |% N. E, V& |( i  k7 w- B启动Nginx
( @9 A7 D6 V! K. @& `$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf" b- x# |$ Y7 Q/ T3 t
) |! }6 ~* d% V9 J  x

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

- s( |! i/ V6 a6 W& o1 W

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-5-28 19:55 , Processed in 0.083117 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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