ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。2 |+ E( @/ ?% g3 f: S
7 F- O @1 l( i6 n8 P
8 @7 e& ] F3 _1 j5 \
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
0 @4 u. n, S; U* R( n' [, I& h; V6 B# V7 f3 u7 m
4 A4 C* \: N( }1 u3 h什么是ModSecurity
: x! s' E2 j& P5 y! N: `ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
1 A2 M! R) A! }" u* P: I, y* f( B: h# W# u, t8 v6 V% r
8 o# W7 l& G6 }1 c
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
) K# i; ?, a% j6 K& _: @9 v2 w ?% f2 Y* C; H- r
- k. N) ~$ ]5 r, L, e3 W" CModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。. I8 t E7 R* |0 \7 |- v$ d3 @( L
) P1 E Q/ U" v$ L1 |# {: w8 }( }
/ d; K, q1 U' P) m5 @% F2 ^5 t. y
官网: https://www.modsecurity.org/1 ?- P- F5 F2 T1 o2 n8 v
+ j1 l; W! K, ]' `
" V& @1 T3 o( x% C4 [$ n
什么是OWASP CRS
% \6 C* r; m* U! l- \ _OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
8 n. A9 N6 d! F; ^# x0 s# P& n1 D) l* ~% q5 @; ?. H. [3 y
2 R8 n5 S0 Z0 r# Q- Q: \
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。3 r5 A/ j' r* z% r4 B
6 \' ?; f* V* {8 b( K+ }( W7 J
7 y% I1 R6 t/ \, y- zHTTP Protection(HTTP防御)3 f+ V4 ^2 N l5 @) t) ~
HTTP协议和本地定义使用的detectsviolations策略。
; @( i/ L0 X8 c Z; b
" ]4 L7 G/ F" w0 ~# e1 C) h! B$ _
A. i; I6 H/ O k6 d2 @' qReal-time Blacklist Lookups(实时黑名单查询)
- d8 n+ f9 J" k利用第三方IP名单。( O9 T% b# l, W; q) f, C7 y
3 Q9 I& e. i+ D. V
7 m9 |0 o# i4 W: ^( B, }HTTP Denial of Service Protections(HTTP的拒绝服务保护)' D2 x8 ?: B' A0 `1 t
防御HTTP的洪水攻击和HTTP Dos攻击。: y4 x5 P. d/ b% w
+ ~, R! O$ Q6 }: Z6 Z" [: K# X$ y- N
Common Web Attacks Protection(常见的Web攻击防护)
. R6 w' x- o/ n) a9 N8 I检测常见的Web应用程序的安全攻击。
: X; `0 y4 I4 Z: X) r: j- {4 p5 K# [6 T! I% D) T( s
. h- G; p9 J# n9 J" l
Automation Detection(自动化检测)3 z. A5 y( m% M# {4 F5 _
检测机器人,爬虫,扫描仪和其他表面恶意活动。
2 Y) U& ^4 a! Q: G: d% q6 y. Z
. P8 `! h+ `! g2 B6 {6 ~( I' b' z# T" h8 H( W# x) L
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)
7 G3 Z g$ `9 Y* x检测通过Web应用程序上传的恶意文件。" i1 ^0 F6 W& l. F
3 ^7 C! Z; q. R- ]& I8 {& ?9 |( T1 \; R4 E% ^8 a) H9 }: n+ O
Tracking Sensitive Data(跟踪敏感数据)
( E7 x+ P9 ~/ m信用卡通道的使用,并阻止泄漏。6 E" @. ~6 U+ E# N9 x
' w" W: s) o9 c4 y9 O
1 a7 m: |1 i+ `( _8 M7 {1 a; LTrojan Protection(木马防护)
6 r7 ?9 H" ?7 v. R检测访问木马。/ j1 v8 b" t L& i
! {# Z7 J, [1 t3 R3 G
) h/ w" X* m- m- t! gIdentification of Application Defects(应用程序缺陷的鉴定)( [4 I( m: u0 p0 T7 U+ U
检测应用程序的错误配置警报。2 D2 Q. g& c" P2 i" x; o$ ~
% f1 Q/ Z6 V, [6 F! K+ g
! ?: _% ]: r" B* g* s* Y
Error Detection and Hiding(错误检测和隐藏)9 Y5 M7 Z$ ^( ^8 R0 z: O
检测伪装服务器发送错误消息。
: i* t- |* B# n7 Z1 F1 ?* R) {* R0 f& O9 O8 A
" u6 ^/ l. H5 q; S% G9 x/ P) K
安装ModSecurity
) G' M/ ^$ g& l软件基础环境准备
! I3 @0 K" k3 b8 Z: x8 M; ?: W/ }5 D下载对应软件包
- u9 R1 l: T$ P$ cd /root7 r. Z1 u, _, n3 e: c
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
6 o5 p1 ^7 r# _ M$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz: }: q' H8 c8 E' F2 E5 o& Y7 y( X
安装Nginx和ModSecurity依赖包4 e; |+ D) f: K- \
Centos/RHEL
% a7 s$ c `3 A' P& @( H% c0 I: E- f/ T- G- k. r
3 L6 ~3 H$ ~- N" @! W% Z$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel: n! K B6 |: q" f: _8 g
Ubuntu/Debian6 E E, z* {+ U
' y, D; X3 O+ e
6 y! U4 Y* F% A8 j( B1 K7 Q$ 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++-dev7 r1 g; G: I/ W- w8 C
编译安装ModSecurity+ J: Z" H3 g7 b0 ^/ M5 x3 M
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
: u H, k5 ]# K1 E
" {+ x8 ~/ Y" M: e, ^8 o" M& \" ~+ g2 N
方法一:编译为Nginx静态模块! c! c! r, u1 F: g3 w2 C& ?
' s4 j" T: |2 g8 }: b) p/ H9 X2 [/ i J1 q
编译为独立模块(modsecurity-2.9.1)6 ]- T) j/ ` r {1 m: P
$ tar xzvf modsecurity-2.9.1.tar.gz
; |3 [ |( ?0 w$ cd modsecurity-2.9.1/
( v0 }: q6 Z$ e4 F' c8 K4 R$ ./autogen.sh
0 T* B* H( a8 j; M, Y& p$ ./configure --enable-standalone-module --disable-mlogc
+ E H* @( M% N7 d. c/ @$ make2 T) {1 c# [# y
编译安装Nginx并添加ModSecurity模块
, ]+ R+ Z. j9 [# Z# j& w$ tar xzvf nginx-1.9.2.tar.gz
* D& k; o* j$ j" h! u$ cd nginx-1.9.2
+ o( U- \; N1 v: P0 ?0 P$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
7 C2 l1 |. q) q. E" W2 \$ make && make install
# j2 O. f; N ]4 d9 A方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
D7 N9 d' }# U: H0 o4 S
, t# N( Z' R& E+ Q1 I% n% d% v" q: l3 j
编译LibModSecurity(modsecurity-3.0)" p) b& P3 t$ S1 ]
$ cd /root$ Y2 M' B) _: U% N
$ git clone https://github.com/SpiderLabs/ModSecurity
0 ?0 X" p. d' y5 {8 }4 X$ cd ModSecurity
0 S+ D K- Q" ?- [- v$ git checkout -b v3/master origin/v3/master; |" x4 T; @( {( _$ Q$ _4 \
$ sh build.sh$ h* U1 }: K2 l& R, C9 E+ W# d
$ git submodule init8 {7 s; z8 P, @* C# D- X! ]. |
$ git submodule update
8 {" w. k. t* V4 I' ?- Z' |$ ./configure
7 z* y5 y0 N# S0 E/ l( H$ make/ `( P; E' d9 m2 v7 d ?6 L/ i
$ make install! W! I4 m& ]- I4 Y2 J
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
7 G6 Z+ ?# O% I4 v9 n7 r+ E" F2 q: e5 U' G3 e3 J
4 R3 ]# H8 Y' W4 |: ]3 Y, i
$ ls /usr/local/modsecurity/lib# c6 c. d2 Z5 w% r0 b9 M1 c
libmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0
; c/ ~7 z# S. U( U. ]- Z$ Q. h8 W7 M编译安装Nginx并添加ModSecurity-Nginx Connector模块
E1 `. R, I$ l6 [使用ModSecurity-Nginx模块来连接LibModSecurity' W8 i' _0 m* _4 N/ X0 j! g
8 A# x U& l+ j& i
8 l# d) ?3 f6 p; K/ D- f9 ~4 X
$ cd /root9 ?) ^/ v5 {% l; m' n, H
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx; a; s6 a0 F4 c2 F {/ w8 l/ M
$ tar xzvf nginx-1.9.2.tar.gz
. ^6 \1 d* u o' o K$ cd nginx-1.9.2+ [) w2 z( M7 I3 K
$ ./configure --add-module=/root/modsecurity-nginx P+ {0 _9 l9 ` c# i1 l8 l
$ make2 T. a8 k( ?4 G- q' q; K+ Z. c7 x
$ make && make install; \ t; U& H+ E, G/ L( [
添加OWASP规则7 V7 `; j* y" ]4 g9 C- C
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
/ D% x+ Y4 T s: B
) I: x9 q+ j! h6 W3 O( Z. A' x8 k& i4 m$ O: m6 j4 g ]
下载OWASP规则并生成配置文件1 I8 m$ u% ?4 I5 N( }
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git2 S' V' W- M& \: ~2 g( V% y4 \- G
$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/8 I* v9 f9 k3 v- }# z9 M% Y. b
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs% S' K- ~ e# X C
$ cp crs-setup.conf.example crs-setup.conf, b X3 o4 y7 Z: f; w5 E
配置OWASP规则
& D" `+ Q9 j# x编辑crs-setup.conf文件- |3 @9 p% j) _; V
1 K- [. y1 c) b% f7 f, X* T* c( v+ ^
1 ?0 U, M3 k9 O/ D( w0 u; i5 `$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf% p, y7 r- }4 h: i
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf0 J% w6 b, @' |# p& k. o" f
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
+ I& _/ y J5 ?! w' G$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf" G! ^) w7 A5 |3 Q2 W+ I
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
: _& q0 r8 I8 k( \$ E; c) c- T! n6 Y- X/ C% W% L- C' ^0 ~2 t
3 e, @. L1 \# q) n! _8 q
启用ModSecurity模块和CRS规则% `- |- {, [0 \( H0 G: B) s
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。2 j( s) {5 y6 O; S2 r8 g6 k
7 T# F! [+ W) Y: _8 D: j, Z7 m& k$ M7 U4 X% T2 u) \6 P
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
- n3 d. {' `4 q+ A5 c& |' J7 E% B- f5 V
; y7 B3 |& L& z
$ cd /root/modsecurity-2.9.1/" Z( k* J+ e' f+ p
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
& a0 `+ l4 C2 Z" h, D$ cp unicode.mapping /usr/local/nginx/conf/
4 J! W6 X8 H4 I, C将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
2 X9 V! J2 X7 b" _' u% j# R/ Y/ ]6 ~3 P
. u* m+ a) T; r& J$ vim /usr/local/nginx/conf/modsecurity.conf
- K5 d6 o) u; J( }8 {% U0 P+ Y# ySecRuleEngine On
' X1 M% I$ F5 r! _ModSecurity中几个常用配置说明:8 C2 G' A4 A: U1 L" E( J! K: N
8 q/ E6 X% w. }+ D; [
+ N# q2 l5 f7 [% g1 _* S. }5 `
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。+ W, n9 @# Q$ ^5 N. ~& \
2 Y @+ d" s7 v9 r
- b7 L; s: L/ L" }0 I4 }3 S7 U) f
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
( ^6 }( o! H2 ]3 F" x5 u
* m5 x! W; ]& p1 K; P0 r/ z
m" t( s8 W: {4 o7 r3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。1 w( Q% h) u8 P% U0 c6 t }- Y
. H0 S: O9 q, N0 t' o
6 i3 {0 R" p2 ~. \+ w4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。: w) C$ F# V+ t6 i" r
# B$ x; x& M& V0 x0 Y* u( H) y- p3 V6 F l
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。% y. T4 v h2 o6 e c
! e1 R+ E7 r7 G: z4 `
( ]' T' U5 s& Z5 ~
3.x版本CRS% J' i: g# {* W0 z+ q- p% t
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs+ p8 i! |, f! i9 ?+ ^8 n6 ]- C" g( q
# 生成例外排除请求的配置文件
- [! _2 Q; W; L$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
4 Y7 f) a. V+ P5 ]5 n* q$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf2 R9 g# R( p" ^( {9 z: l X; p/ g+ H
$ cp rules/*.data /usr/local/nginx/conf+ }, g; Z& w: C: b3 g! t w$ A
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。; o7 I- K% r* S; f! a9 i$ {
5 Y) u8 F4 _, d# ~! e3 h8 C
8 y, O1 W2 L4 C ]" u0 f/ Y2 @
$ vim /usr/local/nginx/conf/modsec_includes.conf5 x# G U( f$ n5 p6 h( h
4 _2 ~0 H8 g/ P8 a, v, W[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 3 Q8 b! O, y8 u0 _$ I X
$ q1 ^ @( [/ F# q
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
5 L; q. E( @1 }' b' L
, x3 |8 B) v8 ^- V) }+ e" V( o. k8 X3 j; }( u6 \% ^
配置Nginx支持Modsecurity
5 h% S5 p# G: A- |0 a* j% R启用Modsecurity
4 k& Y, W# d; F2 ?5 d' J V使用静态模块加载的配置方法# O( ]0 Q2 {3 B
在需要启用Modsecurity的主机的location下面加入下面两行即可:
6 _+ W7 F' @( z, F7 A
/ y% [! V) P3 U" q% C9 J, o4 f- S
ModSecurityEnabled on;
$ b: ]* N, p$ X8 T; x7 |ModSecurityConfig modsec_includes.conf;
/ Q, o" H8 \$ r8 G9 [' u% R1 n修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。: R0 Z! {4 W2 R6 H* Q' N% b5 o* ]" E# r
6 _* \; e. N4 y) }1 |
! z* b& _% O+ I I$ vim /usr/local/nginx/conf/nginx.conf
- @: w7 K" X$ U/ }# l. v' {5 c) `( G* l0 G) R1 h4 b( T( T9 v
5 y- [& d3 Z* C- a8 s
server {
- p' `+ Y8 n* T6 p listen 80;
1 c( F' w$ j$ N7 L server_name example.com;# W" X0 G: i9 G" o/ _ ?2 q
5 W5 S5 g: P \8 c* M# ^6 ?+ H( R: L( u% R Z2 G
location / {$ d5 O% v+ T! M
ModSecurityEnabled on;
8 h4 o' \ Z" Y0 k1 Z- P4 i$ {0 v ModSecurityConfig modsec_includes.conf;
: U! [+ P$ x& C5 j root html;
8 d2 {7 a% R3 r9 h, \ i index index.html index.htm;' v* W) p) V/ ]0 a; M: ~. }
}
: f3 b2 e# Q* ^8 i* m5 Z8 a* n: Z}
, _9 ^5 ~% d! D$ m* G使用动态模块加载的配置方法, Q r) i \7 z
在需要启用Modsecurity的主机的location下面加入下面两行即可:( C, Z, w7 [) U6 j1 X
- P; O' @* y5 G# s$ d! ]. W% J8 a1 W/ H% I3 r
modsecurity on;& |/ D6 @5 }: M8 s. |$ ^
modsecurity_rules_file modsec_includes.conf;
) \- Q( D+ _; |5 M- i/ c6 x修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。7 q: [) S" Y$ ` @+ q" |
* |% ?( K1 r' e% |
& N2 C) E2 G, e! r% k# K) S$ vim /usr/local/nginx/conf/nginx.conf* g( H: U3 g7 o+ b
( z4 _" N1 x4 A9 N; j ~
) q! Z; i& ?" T; z- b( f
server {
/ e; E# C, b z7 x listen 80;
7 Q1 ]. {4 U8 X. F server_name localhost mike.hi-linux.com;
( V' Y7 i3 D! z( Z( }# m( J( F access_log /var/log/nginx/yourdomain.log;/ w; C- ^! n2 S# ^
; e* z( Z' n2 [) \2 G$ r N3 D, ]$ R% K& J5 g) \
location / {; v, ^3 H$ Z- ^. u- [
7 ?. e3 b0 }0 G' o1 T" J Y/ P7 ?
7 h: P0 q; M, W, i8 z9 C/ d; i modsecurity on;( ^* z9 r1 t/ `+ o4 c9 G4 X5 R
modsecurity_rules_file modsec_includes.conf;5 n2 Q9 Z1 U' r$ \) Z1 p7 F0 k! z
root html;- O3 x0 L9 d6 k( Z% T
index index.html index.htm;
8 o B" d s% V; U' L& Z}0 ~7 S3 p' N* [2 T0 y# z
}# p2 B3 k" @- t6 q
验证Nginx配置文件9 W: q5 J- K; v) u
$ /usr/local/nginx/sbin/nginx -t# C x5 }( a% G0 n! W. A
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
: X) L$ }9 z2 S8 N0 g* v ~nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
: I; q' v+ P7 b# m& d8 L启动Nginx
" o+ O4 E% M4 ~, D$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
, z6 s- j1 j4 y3 m4 y
4 T7 X9 Z. J! f测试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.logModsecurity主要是规则验证(验证已知漏洞),Nginx下还有另一个功能强大的WAF模块Naxsi。Naxsi最大特点是可以设置学习模式,抓取您的网站产生必要的白名单,以避免误报!Naxsi不依赖于预先定义的签名,Naxsi能够战胜更多复杂/未知/混淆的攻击模式。
6 P7 n: J9 m: v0 ~ V |