找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11735|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。- W# G- d% V' v& ~9 A& x, h
; f1 K. ^% V& _

7 O4 l* Z! b4 U* U7 x4 T+ r" s在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。$ \5 e0 z) ?# h( r5 u8 j6 b& {3 [

5 h8 L& C; A4 S3 k4 v. a, b( ^/ |
什么是ModSecurity
" s  y8 G' }9 p+ y! |, rModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。9 i$ Q  }6 x  Y, G

8 F- P2 i* K, b$ m/ H; l6 ^4 a  j+ O4 B/ A6 _
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。! }7 c* f1 M9 z; ~$ e# m

5 \6 e$ n, Q9 s1 S+ R7 [1 R. n
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
, K+ l* E( N% t' j# f% A3 Q* G6 U% F, x. T" G6 l; d
# K* W( u$ Y, C  F: }
官网: https://www.modsecurity.org/
8 ~6 P4 |4 M' c; m" z, ?5 D/ ]
% P5 t. t$ W+ [4 Y" S1 y" ?/ {: r9 O7 `1 G
什么是OWASP CRS) c! U) x& k, x+ f$ a% o6 ^
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。) M9 J0 p# J1 p  t2 L4 p; R
) o- C& Y5 G- w' u2 F9 \* r' b" B

; E/ W. w- f2 H; v/ w6 kModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。$ p8 F2 F3 P. v

- t' W( {5 ^5 C4 k  x" C! p9 ?$ [' i' Y1 l  R
HTTP Protection(HTTP防御)
: p" j! j% a# \- fHTTP协议和本地定义使用的detectsviolations策略。
1 d- G* n  U, g$ u# s7 x  X- ^. [
- R* j2 [: J7 d& A
3 X) P, D  M# z3 a4 I" d: FReal-time Blacklist Lookups(实时黑名单查询); B3 `5 N/ h7 c; _
利用第三方IP名单。
8 o) c. e0 C3 n3 R) Q& J& E5 O. T3 I! c3 ^/ [0 B3 A

, x; w# ^( M# a4 o) zHTTP Denial of Service Protections(HTTP的拒绝服务保护)
% d/ C8 t9 O$ p0 k7 F' v* A4 V( S防御HTTP的洪水攻击和HTTP Dos攻击。
# Z% ?+ f% D) ^  s" J! G9 p6 u* n1 m6 i& R/ Y
! M/ E/ \4 O3 t: S% V' T3 B
Common Web Attacks Protection(常见的Web攻击防护)
+ q0 }  X2 a2 |检测常见的Web应用程序的安全攻击。& {3 o$ h3 x2 |
' l( P! r; P! d3 [) J: b* [% e

' \" C, Y: y  Q8 Y. T" TAutomation Detection(自动化检测)
: z$ C- \1 D* \检测机器人,爬虫,扫描仪和其他表面恶意活动。3 x; ~, U+ z" Q" m; {
- ]4 K1 M  t' }% Q) k
8 Y! Z  h( Z0 a9 e# [$ N
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)5 y( a( X8 e/ q6 y8 w8 \
检测通过Web应用程序上传的恶意文件。# d  C$ `5 V2 q) Y; _( P

+ @3 W- ]/ M  j1 I. L) e8 N# G3 @  [# z1 i" N3 y, f. `, j
Tracking Sensitive Data(跟踪敏感数据)
4 ~' H4 H1 {+ ^1 _信用卡通道的使用,并阻止泄漏。" i6 ?& s7 |3 N% v( x/ p
+ y: ?5 Q: A8 E- _( @) |# N
6 M/ w" B. g) V
Trojan Protection(木马防护)
% h0 l2 @' O2 ~% o/ P. x8 M检测访问木马。
" ~/ q  h! E$ D# V4 r' I+ r2 H  L  o7 Q- e: k1 L" y7 L& t
5 s4 R; m( g$ Y! d+ Z+ o% c
Identification of Application Defects(应用程序缺陷的鉴定)" g9 I4 Q2 i: Q! K, ?
检测应用程序的错误配置警报。
. y! P# A0 u, r
0 }* L8 K" H; G; o6 U. I! n# @3 E! w! \; f
Error Detection and Hiding(错误检测和隐藏)# b) N0 r, ]6 k6 }" P0 Z2 [% [
检测伪装服务器发送错误消息。
$ z( \; N) A8 @! I0 F0 r: y; F8 j* r" t; I
3 g/ o9 B$ X: o$ f
安装ModSecurity
& }9 U& N7 z$ L. {% [2 ~软件基础环境准备
0 d4 [% {3 Z) x, B# I下载对应软件包0 Z% ^; K, e9 ~0 C1 f  `' a5 j
$ cd /root, Q! y  q( W( r. s
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
0 X" m% F: M' A- J" L$ [$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz+ |9 v3 ], z& v+ d
安装Nginx和ModSecurity依赖包
& Q$ u" D  w# N. M5 X! pCentos/RHEL
6 O! C- ?) P8 s. `: v! k. K1 K. [- c$ a: Y& j* W( B4 Y2 O

8 h6 }  Y2 g3 d# a+ g; h+ M; h$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel0 s. [4 P2 L: M- c; B4 @* K
Ubuntu/Debian
& U0 J9 z* b5 G) J9 H3 ]% N3 X, A) E  ?2 h: V

- M, [+ F$ r7 q  B: D$ 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
0 z0 d6 ]% Y( B  J编译安装ModSecurity  J# C2 {, I4 H) F# W% O2 ^6 l+ ?
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
# J) M) c" ~5 U& S* k) r! [/ P# o  |3 C# Z# a2 i

( d% F. Z, {& u方法一:编译为Nginx静态模块
: v+ \- N2 ]/ o
2 b/ a7 _% ?( d. u& L( @# X- `% ?, i' C4 k  c; y  |
编译为独立模块(modsecurity-2.9.1)- {8 q* s4 L% \8 C
$ tar xzvf modsecurity-2.9.1.tar.gz
. Q) _$ x: F8 m3 T' I; p5 U( x$ cd modsecurity-2.9.1/5 a: b+ u2 O0 z- D
$ ./autogen.sh4 l5 ?- R- y5 v3 I4 a- ~
$ ./configure --enable-standalone-module --disable-mlogc
" h$ F% \. x, g2 M1 f$ make4 F2 j8 K; A5 w' B' R
编译安装Nginx并添加ModSecurity模块
- u9 u  T- [$ l8 K7 @1 p; O$ tar xzvf nginx-1.9.2.tar.gz
! c* B. [( R! |2 `% T0 G2 D$ cd nginx-1.9.2! [$ k" m1 o/ i$ R( H. m/ ]
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
: [. d; r) M, {$ make && make install: s, u" g7 E( B( e3 q. n1 N
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块0 Y' c4 b; v; M6 A, w

+ X+ F- G# V& _7 y% z3 w1 a  ]' S8 H  f9 x
编译LibModSecurity(modsecurity-3.0)
) x$ `$ ~; }" E& R% ~6 E) }$ cd /root
! ?7 H, N+ \6 J0 F  j$ git clone https://github.com/SpiderLabs/ModSecurity, B( l4 a  ~/ e- C
$ cd ModSecurity
- u4 }# v  h" q9 M0 R$ git checkout -b v3/master origin/v3/master* V* s! R  D# e& V  G9 ^- C
$ sh build.sh4 @. y$ o1 C# [0 u# A
$ git submodule init; z: z  r% }/ \  r
$ git submodule update7 f* z% x2 A( L9 K$ A" O5 ?& ?% F
$ ./configure. I! M7 X- }4 R5 T
$ make1 l; w& n  ^7 P1 a. m) `! n  b
$ make install
4 x4 l& H6 L5 D/ kLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。( |0 Z: z9 i0 X! ~4 c: \

( q) M$ S- F- ~2 q, |6 Q( p
8 \8 i; w7 e  N; e$ ls /usr/local/modsecurity/lib$ k0 t5 @7 K7 H
libmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.0
1 u$ q4 n1 m" W7 T编译安装Nginx并添加ModSecurity-Nginx Connector模块
" X6 j% C6 w9 P, C使用ModSecurity-Nginx模块来连接LibModSecurity
8 `5 c, Y2 G+ e9 H8 z7 F& ]( h5 `- R9 I3 [9 i8 Q
+ D$ Y. {% n5 q! _
$ cd /root
9 m  {2 Z7 v* m" s# H0 a$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx% D; U0 S# a+ k1 l; Y
$ tar xzvf nginx-1.9.2.tar.gz, _- K0 Y$ l6 R
$ cd nginx-1.9.2# T4 g' r9 w7 t+ H5 m6 w! y
$ ./configure --add-module=/root/modsecurity-nginx
$ B, {4 l3 i$ [$ c$ make
5 K0 k; K6 }. T* I$ make && make install9 y* `) n- e4 _, @$ l5 v1 x8 h) B
添加OWASP规则
5 W6 V# I* V& `& L$ zModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。7 M% t2 ^3 X* z$ H' j# |# u
9 t8 j' r3 u- X) ~2 y- W
% \9 Z1 B' X* H5 R
下载OWASP规则并生成配置文件8 p" a  k" `9 b8 v
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git- i# l4 ~( S4 S' o8 P6 @- _/ E) l: G
$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/
1 [4 G* a6 U4 Q2 B1 f$ cd /usr/local/nginx/conf/owasp-modsecurity-crs. @+ l) W* T& g) R% m( e. S% e
$ cp crs-setup.conf.example  crs-setup.conf0 I' \1 a0 r  q3 E
配置OWASP规则
7 ]/ J* y& p$ y5 ]( V, \5 ~编辑crs-setup.conf文件+ A& {3 [! C/ c9 h5 A9 d
, E5 _! }) c$ y# `) T, e

0 j) }  Q/ o/ L7 f+ c, f+ W5 i  h+ B- D$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
( p- `9 P; p7 H# V$ A, T8 ~3 u, j" a$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf( i! B: c0 m9 v! P8 y7 K
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
  X2 l- H5 x! r8 e  _  x0 `  J$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
& c3 _3 Y- Z6 N) L默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。6 }6 n% j7 h! ~1 X. S

# S; g% `0 ]0 l) a: x
' f; q: i, q( t2 V6 C: Z$ X$ N启用ModSecurity模块和CRS规则" H  d) m7 _0 V. D3 Y
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。& w+ m8 a+ f6 C$ R) }% \& `

2 L  [# Z, W8 s  d% h+ G4 c' d' t% a3 ]
. i$ `# }  n! G% x* Pmodsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。9 t5 [3 d. n, `1 A% J2 `: S

& f* ]6 u( s# I  v& `' S
% t# `/ e) l+ T$ cd /root/modsecurity-2.9.1/
+ l) a0 F0 w( h% |. Z9 Z6 ]4 z$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  
0 U& s9 F( H" m& |$ cp unicode.mapping  /usr/local/nginx/conf/
' ]: N3 P7 y$ `0 o* E, [9 q7 c将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。% h5 O% V! U* z
0 F/ m" _: R) F; W

3 u1 m' @* G/ R3 x$ vim /usr/local/nginx/conf/modsecurity.conf
  N/ z6 q" n# W5 `* L$ O) sSecRuleEngine On
+ o6 m  ]! E1 f' GModSecurity中几个常用配置说明:
0 z3 ^7 J; t; q" k
8 q7 K: V/ b, \8 \7 G) `6 I
2 m; C- F  l; g# F5 e1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。4 I, r7 A8 @3 G0 ~$ g( Y4 x
3 E3 ]6 Y9 f- L0 P) L4 e& B
6 O" r3 Q  X/ b, _* o  H. d/ E
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
, o# @! e- |. }( t4 G4 L8 T- B2 a/ F; `0 N& s. y
/ P  {3 I( w' ?
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。" L/ c+ ?. e* s  T, I7 q

& {; }/ n* p+ v4 }: G, L. L9 R  K7 H( i
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。7 a+ K) }! p! J' k9 Q6 u% s4 v

0 q( w$ h& p  E: }; z
* N3 m( L+ F; G7 B: @9 ?0 X2 I在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。0 [+ q& _9 `3 H* \
$ i' ]# H6 I: ]& Y9 I" ^/ q, r

. h: K' [% a% N0 ^* ]; p3.x版本CRS
7 {9 }; W: E8 t* J0 @$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
; R: c/ w1 V  i" U% h* O8 S  o# 生成例外排除请求的配置文件
+ s4 Y5 l" J+ k5 o: a; q! s" I$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf% D8 G  y* {4 U9 H4 `/ \3 R/ q
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf/ K5 g: U# E$ b2 M
$ cp rules/*.data /usr/local/nginx/conf3 U/ ~( W! O/ M" P. X
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
; F, @9 F- E: S. g5 z, Y
( G4 z8 e& Q1 o& ~% |9 W
5 i' U5 ~& c$ L! i" i7 ?$ vim /usr/local/nginx/conf/modsec_includes.conf( Y3 a/ N+ Y$ U4 C: s& g

$ W7 j: r8 C9 I" p! H- d& {4 h
[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
+ i0 K0 a3 [9 V# z+ I

1 k) W6 Y, q9 ?8 L) O. @注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。: V' U4 k) o8 h3 p

- q) S$ `& s. n0 U' I% u  x+ |
( |" [$ `3 w2 e8 U  I配置Nginx支持Modsecurity6 r9 T4 N" U) T4 t/ j
启用Modsecurity6 W1 c' X6 m& v8 I7 a
使用静态模块加载的配置方法
. i( v" }0 ]" O3 @! P+ O4 Y5 _5 U" g在需要启用Modsecurity的主机的location下面加入下面两行即可:
# I8 y+ V9 H  {' L8 {& r( C! a' U3 F) X
  X: @5 Y" h; ?) p& D9 b
ModSecurityEnabled on;
1 P  Y' N8 Z* E% QModSecurityConfig modsec_includes.conf;0 s: J. J3 ~" [, |) X& S! D' X" b( q
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
2 v3 m! q/ v, J1 B" v% Y
8 j: z+ f, \) q/ U0 ~+ [8 m- |2 g" g7 d+ E7 A; O! z4 ^9 ~. M
$ vim /usr/local/nginx/conf/nginx.conf
& E* f; G) }* @6 m# j
- @9 N( z' {: i; m! a
4 r" A7 g# k  ^1 Userver {% t8 z' O+ B, [
  listen       80;% p. A8 G" P* c6 B6 ?: \
  server_name  example.com;- Z: v$ p! S+ r& N  Z0 k
6 h- I4 n, o, U% o% A

7 b( X; G/ S: x4 k& d# e. y0 z3 f$ z  location / {6 X, y; q* ~' f
    ModSecurityEnabled on;% ~& J! U" I( W. s$ k
    ModSecurityConfig modsec_includes.conf;
, _$ s. z$ L( j* S4 [9 u0 x# R    root   html;, l6 @  m! j5 ~
    index  index.html index.htm;8 j$ `0 q) p6 H9 I7 A- S
  }
5 S) ~# M+ W8 j7 r}5 d/ b7 u3 j( Y6 n% G
使用动态模块加载的配置方法
) ]0 d4 y2 T  R" `: e/ E在需要启用Modsecurity的主机的location下面加入下面两行即可:
; d% @8 E" C$ p: Q0 K, f9 G9 C1 ^' U6 U

' \/ N% O- G0 L% omodsecurity on;/ o9 t7 c4 N! u; S% C9 v
modsecurity_rules_file modsec_includes.conf;
. V7 [. m- y7 R# a  a5 r! u+ b修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
8 a7 s2 F" f+ c! Q9 q$ V  S4 |+ l0 g* u5 r

; ?( u( \! X+ F. W3 K& ?: x$ vim /usr/local/nginx/conf/nginx.conf
; y8 c* c, c9 c, S
$ F! H* K8 }- H3 j
2 ?% a, g: T- y0 Qserver {
% R1 {2 V3 E! J  listen  80;
) \8 M- d6 G, P  server_name localhost mike.hi-linux.com;
' |* i! D5 @$ y( k# i  access_log /var/log/nginx/yourdomain.log;
& \1 i0 M" E! Y' e
6 q, l0 y) i  i! V- t0 _$ Z# E' W" z
  location / {
% Z! u  i3 D' q1 w1 m( x' A% a! U# ^& D7 K5 U
* @2 M3 b  p  ^7 r& d8 o% G
  modsecurity on;
* L( @5 R6 D' T7 u9 T# `" [1 X  modsecurity_rules_file modsec_includes.conf;+ u& h# i  h) f& S3 Y7 H8 u
  root   html;
5 D5 K+ {" r  N  index  index.html index.htm;: x' ~' v5 S- s3 ?4 [
}9 V1 o- z# P1 g
}" d7 ]6 H. e/ N
验证Nginx配置文件. |' y! v2 T3 T9 A  r
$ /usr/local/nginx/sbin/nginx -t: T2 t) {$ w* E8 y
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok5 e- b2 U& ~  T
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
4 s! O+ W8 z( T9 W6 t启动Nginx
" E; y7 Y: B  T2 y5 u# X* g$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
% s7 J& c9 R: T! k0 W% |* p% v3 Q. {/ R9 c' `

测试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 `2 K# o" S8 ~8 o. C

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-7-8 20:22 , Processed in 0.080695 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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