找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 9906|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
- W6 X" L  k/ Q$ X2 [  Q4 M3 i$ K, k  }8 F/ k& p* h% S0 Y: t+ z* ?; q6 L

( y: o+ e8 Q1 C8 ~7 v4 A& L在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。. `, L% e  a( w  a: ~6 [
" Y3 s$ {% S+ K; R
. U8 W9 p- }" A& j1 g! J* T
什么是ModSecurity
. R8 K; A4 S, Z. a  yModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。, r% D- w* V3 P0 _
) F0 I  s; x+ B3 o5 r4 s

. Y) e7 F+ M* pModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
# M* r' G! I: R; l: |; d
; T1 e6 S' [1 }0 U9 s0 m4 M) S$ M, N0 B* m/ Y9 I
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
7 j1 u+ B+ t& h6 \: B0 l2 M3 J  I  g* \  B0 @/ p
8 d  I, G- d/ z+ l/ G
官网: https://www.modsecurity.org/
9 q+ F9 Y" H0 |, K0 X0 w0 J2 J& l, P! u- Q  a0 P! X
# q: I" O6 F! q' m
什么是OWASP CRS4 ^7 M+ @( L$ J( p# K' v, [
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。5 ]7 @5 u0 R7 s/ O
$ p7 \" ]& d9 x- H9 T1 r& C
& k5 y/ m' g/ ^! r
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
+ d( U1 ?  @/ H/ Q, n! K, A/ E8 g0 N. [% R
% m# q& N9 e% Y# p
HTTP Protection(HTTP防御). W! g4 `* k2 n& T3 r
HTTP协议和本地定义使用的detectsviolations策略。# J# |0 y9 p1 u/ j: R
, q2 K+ r* h; G  J+ W
) Z+ ^$ i$ \" p  F5 g
Real-time Blacklist Lookups(实时黑名单查询): R9 D* a/ _  G
利用第三方IP名单。3 y: H5 Y1 W* ~* o
" U) Z- k: r! C5 A

% Z9 L+ m! U5 wHTTP Denial of Service Protections(HTTP的拒绝服务保护)4 D0 I3 L% H5 R* I) u
防御HTTP的洪水攻击和HTTP Dos攻击。! k  d4 }! a0 n, W0 I* W) {. o

( r% P" [# ~/ k, S- _* O, \
  o& g. t9 P2 B, aCommon Web Attacks Protection(常见的Web攻击防护)4 y) t) z) g7 D8 \
检测常见的Web应用程序的安全攻击。; l; \" r* ~% \
4 c! ?& u0 r4 O+ B

' U  k# C. ?) u% c  @8 vAutomation Detection(自动化检测)/ E. ~# W1 [# ^* y* O  B
检测机器人,爬虫,扫描仪和其他表面恶意活动。8 K$ C' k$ c+ T
0 I% ]/ r! r' v* a* }& a
+ U- h2 P9 ]  Z. u- p4 k- f
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)
3 D7 \+ P$ l, @" Q1 L检测通过Web应用程序上传的恶意文件。
9 |7 ~  t" l! o; A7 O3 S8 L5 s' t2 _* N

7 o, ~3 A, G; N. B+ [! a" D1 h3 pTracking Sensitive Data(跟踪敏感数据)  O! Z% i: `, ^4 V/ L
信用卡通道的使用,并阻止泄漏。, G. L# O8 i5 ~( P
7 I$ T5 W5 E0 Q8 T6 g7 k% a

0 G1 G3 C" {0 r3 M* p! TTrojan Protection(木马防护)* C% m) B5 P- i; X: ?5 ^
检测访问木马。8 z: W0 Y+ b1 Z1 ]* Y# @- U

/ v! ?# Z5 W( o( _/ D  I
0 a9 a5 B1 K/ C/ B$ Q9 g/ N0 RIdentification of Application Defects(应用程序缺陷的鉴定); E  p( X( {, g/ k; b3 J/ D; k
检测应用程序的错误配置警报。
2 F3 X+ H% Y; ], c5 @5 l  w* J8 w- O

' ?8 Z9 h- f  ^" BError Detection and Hiding(错误检测和隐藏)
$ Q+ K  I$ ]' P5 a+ O$ V) t  z检测伪装服务器发送错误消息。7 j1 N" ?$ I; Z' _; h! o8 r' I+ Y

/ W( E& G3 {; R. H* F" V1 g7 [: F
安装ModSecurity3 W* \9 h- v. O; k7 F% R3 m' [
软件基础环境准备
  e8 e- s. g7 ?# Z- C4 d下载对应软件包
$ `! H7 O6 |8 \6 k. @$ cd /root
: V! p* l: f# K0 d" [. e6 ]& ^: {5 ~! r: `$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
6 d1 ]1 g. z$ 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+ T  {7 ~' [$ e6 `2 y
安装Nginx和ModSecurity依赖包
+ `5 I  n) F0 G) S3 DCentos/RHEL  t" ?" E! r6 o9 o  q! h
: p. k. D- z5 f% U  z8 Z# E3 I

. y# ~8 x1 \, u/ q+ u$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel& U" ~5 }: B. ^2 l% Y$ V2 V
Ubuntu/Debian* s6 L& I1 g9 V, a
3 G, Z' d0 _4 X: H2 K, \" j2 M
* P9 k, |6 O: v. T& a
$ 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) h6 r+ B" N8 \' [
编译安装ModSecurity3 }6 _1 A) i0 N
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。; p, f  Z$ e) \- C

: O/ S+ X' s3 E- O7 F1 S4 R# z; }& _' Q$ C
方法一:编译为Nginx静态模块
# z, h  V) q. L1 a6 w! [
* H" s  h( |7 _0 W: k
, P5 _, J+ _* }* V! M3 R4 @编译为独立模块(modsecurity-2.9.1)
4 m: X) X5 G  e3 ]! ^$ tar xzvf modsecurity-2.9.1.tar.gz
% P+ H. d* F  g1 T' B$ cd modsecurity-2.9.1/3 l3 N6 {  N0 _
$ ./autogen.sh
8 ?, r5 c( U: ]4 V: o. K$ J+ v1 r: u$ ./configure --enable-standalone-module --disable-mlogc
% z( g! K& Z" I( P! A$ make
8 f4 n$ h+ h9 Q! Z编译安装Nginx并添加ModSecurity模块
3 g, I1 H1 @: E: h4 R$ tar xzvf nginx-1.9.2.tar.gz
6 Z5 n; s  B5 K1 X2 m$ cd nginx-1.9.2
" w) o6 S9 @  O3 l" W$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/* i- M# Z5 W+ ^2 B
$ make && make install
8 m2 L; G" S& U! d+ x3 F( a+ F方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
( m( @5 a# P, t( b! h7 R4 a" Y: d7 d  f( [

& {5 a/ y* e8 D编译LibModSecurity(modsecurity-3.0)
( {$ _! F4 D5 K9 w$ cd /root3 Z6 n8 ?: y1 S5 L* v
$ git clone https://github.com/SpiderLabs/ModSecurity" n; O& ]2 [* ]! T; \
$ cd ModSecurity$ H, c' [) x8 t2 T7 e2 P
$ git checkout -b v3/master origin/v3/master
( W/ _0 Z4 p5 k. @8 ]0 H$ sh build.sh9 o. G, v  D7 r( t% K) ^; B
$ git submodule init
1 {0 I9 z3 v, Y6 Y) ]$ git submodule update
, @) w7 O4 ^) Y5 a. F$ ./configure
0 `, S. Z  G9 v$ make: i: B) r7 F$ u* [
$ make install
( c2 |. K. D9 X7 X6 X. `" o; lLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。2 X+ U! t$ T/ q; ~/ E
" f# ], \7 a7 x+ K) ]$ `

7 v2 u# v3 S1 k6 V& n$ ls /usr/local/modsecurity/lib
5 {8 \+ ]+ x' ?  H3 f, glibmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.03 c4 x1 B! g3 Q& O
编译安装Nginx并添加ModSecurity-Nginx Connector模块
% I4 O! x2 y, k* N. K6 L, `% L* e使用ModSecurity-Nginx模块来连接LibModSecurity
) N- U  U* e7 h; L, v' D& U
5 S+ y) R" ?$ ?: e% j2 n
% C- ^  F2 j0 q$ p% P4 w) B$ cd /root
5 y3 S! l2 y) j1 |8 v  V$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx! q& o) ?% N5 h1 H
$ tar xzvf nginx-1.9.2.tar.gz8 Q- `. ^3 M% I8 W5 ~( I
$ cd nginx-1.9.2  T+ z# l# e4 i+ s0 l5 r
$ ./configure --add-module=/root/modsecurity-nginx5 Z0 P7 ?$ t& a7 J0 x0 U7 ?
$ make
* V  Y& V8 ^% r' n2 |1 }' V" K$ make && make install( ^" u0 D, A+ S! i7 Z# ?
添加OWASP规则
. w' Y! @6 P) L2 TModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
/ w! f8 n; O1 k5 [
; C1 W  l# Q4 p$ [. W2 b$ V, l
" q# B9 |- L9 \( A* f4 Y# }下载OWASP规则并生成配置文件: W. C8 D7 M2 R( [5 G# Y( ~- Q
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git0 Y- h! O, I7 }2 F: v
$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/
. q- ~( j" t/ B$ z6 u$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
- t- B6 ~* X3 M1 Q" S6 w- t$ cp crs-setup.conf.example  crs-setup.conf
  i  H2 q- K- z% X! \配置OWASP规则
! x/ x! b6 r1 p# _( n  ?编辑crs-setup.conf文件6 O/ \4 O+ A0 T

, \  X' W. A3 G7 j8 {! g% l( r: z9 ^* p- @" Y8 ~' o
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf3 k& Z9 x% f2 S3 `
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf' l* r+ z! I0 k" J0 l5 x. U
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
3 N& p: X7 r$ E- _- l$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf3 I+ t8 q' q$ p
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
/ t: ]$ \  M; M# B$ u4 n: [/ o  U& s" f3 b2 V. f7 H+ o8 h7 D  O
$ ~- b* C4 C0 Y9 _: u) A2 i
启用ModSecurity模块和CRS规则
: n* a$ G5 f) s复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。5 w/ l) z; `# x& X, n

4 E) T4 g! L& e* l# ~4 F  C$ x: f
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
# s4 g0 L$ I1 w' f  ~- s* d, s* c7 P5 d
" F2 Q- T& x8 Y) N6 s0 A$ }; B$ }  W4 G* x( K& |
$ cd /root/modsecurity-2.9.1/* \9 x1 l* c; P$ ~9 Y
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  & o" \$ `' Y: F  Y
$ cp unicode.mapping  /usr/local/nginx/conf/
. y9 A; g4 C2 N6 X, F& K$ B将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。$ w$ }$ ~2 s+ W% I  c

& l1 o. M8 }) X5 {  [+ R
% j! ~& }& s) R  j' \. m) ?) Y$ vim /usr/local/nginx/conf/modsecurity.conf* T  s5 M8 G3 M, ^$ w
SecRuleEngine On+ `7 ~6 a6 H, O" t# u* _- b, W
ModSecurity中几个常用配置说明:
1 A2 k' W8 k- o" u. P, r2 ^6 ]1 I6 B) y: i! J
# b3 F# W4 N1 G% [
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。* d5 b. h" t( f" d' _/ n  b
' g6 ^) |! y: s; W8 C
# n5 A3 |: M& c+ W
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
* {+ q( ?( ^: }5 R& {, b. S# w$ Y1 _5 j" e' O5 ~' ?1 d
, b" \3 P- F3 n& M
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。% ]) v* ]% W. n# z% ^6 o
6 c: w3 c+ s( D4 ~, G3 z5 R

5 K+ Z2 X/ C, ^/ F' |% g4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。7 U& Z3 ~2 `! g' O, N, H" R  y; u; K
2 r( X+ D( E; F  h0 k0 o" u8 L

! X3 m2 U4 p  l/ Q& t. h4 H在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
. B9 r( B3 I% ]6 u  ~- o
" u' t1 n. U/ n4 r. a  K7 @1 N+ Q" w+ l; s* [
3.x版本CRS
7 V, H3 Z* L4 X' ], h+ W" ?$ cd /usr/local/nginx/conf/owasp-modsecurity-crs( [4 {( h6 j+ R& N5 V5 H
# 生成例外排除请求的配置文件
( h* R9 H/ z  ?7 Z8 d! \$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf$ d7 c1 A' l  L! U3 p
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
! o- O" r4 K8 T6 T/ M. ~$ cp rules/*.data /usr/local/nginx/conf
# X* q) O# _7 Z: y' x为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。3 r& Y, d8 v, j, G
: W7 V* {* [5 D1 J, x

+ g7 I( W3 K6 {! f/ N# z& o: P, n$ vim /usr/local/nginx/conf/modsec_includes.conf
7 v% V; u6 m& k% l* {3 C
' ]% j* n( D; L* I; U! n
[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
: G. l# A3 u/ W" H. q0 e
0 [0 `4 I/ k, H$ B; W, R8 l6 O# G
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。; U, a( x& x9 ]6 S: z+ K  k$ {
8 \# q3 {2 t' d: X* E) M

) p1 V9 r& A" e  |配置Nginx支持Modsecurity
& C9 x: V9 D- d  w4 ?启用Modsecurity' k6 \5 X: U2 ]) `5 |+ w8 h
使用静态模块加载的配置方法
, b4 G+ b0 o  J# A* y) ?在需要启用Modsecurity的主机的location下面加入下面两行即可:  B3 v" a  Y/ z) [, E% `
2 [6 i2 `* l6 O+ f( r

0 D( ~( v, ?$ nModSecurityEnabled on;
2 d" K8 o7 ]' sModSecurityConfig modsec_includes.conf;
; P8 R. ^0 b  ^) p+ O: U$ ^修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。2 _) N% `( W+ I* b  d$ h  _
. @3 V0 m9 f: d7 j& G
% J& T; C  E# g/ l. W
$ vim /usr/local/nginx/conf/nginx.conf
6 [- p8 d0 Z- ~, [3 ~
! s, g6 u$ p+ Y/ V9 Y* I) g0 R$ I. ^3 s: M' u: c
server {
) y  N& Y! J, x9 M3 L  listen       80;5 g' a1 r9 ?1 v1 }: p; B
  server_name  example.com;1 n, _& l% L6 r- I6 B

5 L. r" e" A- r2 ?
% \  v8 T' ~% o5 U  location / {$ F  p* g- C3 l6 ^) O9 T* ]( K
    ModSecurityEnabled on;  M9 A8 ?( |6 k
    ModSecurityConfig modsec_includes.conf;
: s! o) _$ B8 X    root   html;
8 l9 Y# A8 m6 U2 y7 z9 z1 o    index  index.html index.htm;
- x; ]2 |" P) g4 l3 D  }5 }; J+ a4 _1 \: g. l3 B. O
}0 o; q% K' q& J7 W( g6 E
使用动态模块加载的配置方法
1 i7 P+ _- ~1 j. h$ n# X$ f4 p在需要启用Modsecurity的主机的location下面加入下面两行即可:' q* c! y2 O. Z; m7 V' @

2 q# c; B4 g7 M+ S+ y" l
/ c) I4 G4 B" X4 \" Amodsecurity on;/ P0 m! g4 R8 j9 G6 }
modsecurity_rules_file modsec_includes.conf;
) N1 ?: q6 L0 p' f! ~% V修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。) V7 f* u, W# X# l; o
2 R0 m4 n5 k* Z1 [
+ p3 w# f8 H' B6 k/ b
$ vim /usr/local/nginx/conf/nginx.conf
! P8 O6 O5 u; a7 u2 i* H# O" H8 b) O8 z8 L& X3 H. C- Q& P

% K+ G1 _* f# X2 V) Kserver {% U# m' [" Q5 U3 `3 @
  listen  80;( o8 y$ r% H9 T9 ?% i
  server_name localhost mike.hi-linux.com;. P' m- z- c" y2 b7 o" I3 D7 B% T
  access_log /var/log/nginx/yourdomain.log;# D, h$ W' V- _0 {% G  c4 x& o0 x9 ]

* N9 u  s+ t$ y1 \& }- g! P- ]
9 I5 a- v! R7 V+ _- g0 W  location / {
# \, ]& d9 Y" ~" a, Y0 T! h/ f  z9 E2 z( u# D/ K" c: A) @
+ C* Q' v3 ?7 ~0 p8 j% ?& Z3 ~% m
  modsecurity on;7 r3 d$ t  R' o( ^  D
  modsecurity_rules_file modsec_includes.conf;
2 b4 g- R* j8 |8 p& h$ ?; f  root   html;
. `5 h& t7 P2 ?) Q  H) k  index  index.html index.htm;
% v0 X+ G& j* i  l0 ]+ k}+ Q1 ^+ w$ R! n5 O8 }8 |0 I- k; p
}
2 E; a4 l7 ]' J" J7 P& O4 }7 T/ F验证Nginx配置文件4 a( c2 Y, m: x
$ /usr/local/nginx/sbin/nginx -t  v7 E4 p$ j: u" l- P
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
. I" D8 z1 M) g- hnginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
* w9 C0 l0 a  r2 R- l% K; H启动Nginx6 p3 z4 I. ~2 U7 }  V( \6 G6 a
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf; z7 X0 E! ~6 S! C/ g

& A! p% }% K% `

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


# ~" r: X8 T1 f* T: l  ^- e

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-1-10 02:37 , Processed in 0.050097 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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