ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。. D4 z. S. k2 |' f F: ^! A/ D
# K1 p) d$ D. S
7 t E; T% J8 ?. ?# I5 m在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
- J8 Y; S: L. R. N) G: k8 C! m% r0 a2 b" Z( F: f; y
: i, V, p" V& y2 P- V1 T什么是ModSecurity
5 V) x9 @2 D: O9 ~0 ` E* _6 \ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。 t6 L9 J6 q3 @- t" P
$ a6 R2 H' D- B* x, x# V3 R3 [! H; K4 S* S. U7 T, l7 a6 x% ]
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。0 d* s, b0 t" a
0 }# @! [# ?( A& O" R
' k+ u7 y! |9 @/ wModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。% C% S2 g" r1 ~2 F
. A; o2 i# i$ [. ^0 {
& o# q0 t2 e) L9 x5 d0 N
官网: https://www.modsecurity.org/
% F% F9 {/ S" f( |1 p
% W( K' U% _# v1 l( @0 ?( P* ?
6 w N7 t% z/ q, h什么是OWASP CRS$ ^+ D: u# s% w& F, z: C, V, |
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。: b7 r1 v- E8 S G9 ]: g" ], u
* O F) e5 i7 r U' I$ g
, r3 |+ @1 G: k$ U. X( d
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
* i5 ^! Q) n$ M# k |6 S. F) O! u" G; {+ n3 c5 {4 _
7 l; F" g# |; x1 X* THTTP Protection(HTTP防御)8 @2 V+ ~, }6 A: W* ?. D2 z: I& M6 ]( [
HTTP协议和本地定义使用的detectsviolations策略。7 \4 k- e. P& r2 I3 D: K* v. y
9 h( p9 Z8 Z |5 b
2 n* P1 t, e, d+ _& q8 z* ~Real-time Blacklist Lookups(实时黑名单查询)- A8 I9 D# `" n3 F
利用第三方IP名单。
, x# B+ a7 j @5 d8 A# n' n
! r2 j' R' _8 b. ~7 \2 W+ g) g2 \) o& N6 P2 o. |# ^1 ^6 y) I3 H
HTTP Denial of Service Protections(HTTP的拒绝服务保护)& Y# W9 V( A& F
防御HTTP的洪水攻击和HTTP Dos攻击。
( x# S6 a0 H/ V6 X7 q+ r2 F, O( B
6 N1 }$ ~; \+ ACommon Web Attacks Protection(常见的Web攻击防护)
* C! B4 }7 ?& [, Y, E- z* Z& N检测常见的Web应用程序的安全攻击。* K* m! o9 [& P
8 c& F! l6 U/ K$ @) g7 f" v" H2 r7 [- L7 j
Automation Detection(自动化检测)+ h" W- ?3 s$ ~( E- w; F/ P% ~
检测机器人,爬虫,扫描仪和其他表面恶意活动。2 B; K: R. Q6 a' Y: c
1 h0 N6 v- y! A. J
: B4 }/ _+ ]5 |& {4 y
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)
h0 M7 Q. n/ @检测通过Web应用程序上传的恶意文件。! m0 y- w' G8 N8 o! a
( W0 ]* Q) J, z8 @. o
0 R5 q# D+ l4 s" a. i$ Y( p
Tracking Sensitive Data(跟踪敏感数据)- k0 d/ A4 J! a. [+ v* E9 Y
信用卡通道的使用,并阻止泄漏。( _' F: f9 d4 I6 {6 O
. e; S' ]* F: z, P$ |/ y& E2 X
# O3 e/ f$ [, X9 }2 o- e
Trojan Protection(木马防护) e/ R' P4 Z4 C9 X4 {' [" a! L
检测访问木马。4 m% _# ^3 S5 M2 D
) i" O" {9 y, w6 u6 ~
6 t4 Q8 i% A% D ^; P' A
Identification of Application Defects(应用程序缺陷的鉴定)3 T0 o t) {1 L* z. i0 ?' {
检测应用程序的错误配置警报。
T6 Q/ i) v: p0 B0 E+ R
+ N% I! l6 T2 y8 \5 M$ F& }/ u) m) s! t
Error Detection and Hiding(错误检测和隐藏)
6 H5 v+ Q% L( Z, E- T3 R( V) k3 [& W检测伪装服务器发送错误消息。
, s- h4 Z# v2 L4 p+ h+ N5 Z, d* p5 \2 I1 I4 e5 b& x3 r# `
8 S b* |7 E+ @4 K
安装ModSecurity% f6 z5 F- L) I
软件基础环境准备
$ z1 g! \! w! e; j+ t下载对应软件包
2 w/ E4 {# V J$ cd /root& y y4 j1 b" [) Q3 W' C
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'$ X) R7 p0 Q2 {8 m
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz6 v, x8 `$ P% i, ~% c8 b% ~
安装Nginx和ModSecurity依赖包
% Q. H1 y3 I) ~6 OCentos/RHEL4 x0 _* Q0 n! s* {1 T
8 B% U( a C' L* u4 T9 A9 w0 ~5 V$ A9 n, f5 Z! e4 @/ Q
$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel& j$ d: D+ E* @+ E3 V8 S1 H5 _
Ubuntu/Debian
: E# A( _5 s" H( U) A% b/ R8 D# P; j! A& x, u4 j
. K" |2 u& m9 e- i" ~$ 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
$ ^- @3 ~; G0 a7 Z( o编译安装ModSecurity3 \6 V' a5 \7 w9 [
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。+ \4 |9 d; t" r
7 w& B" e2 b( x- @8 j: s2 `
3 ~! [; x( l# }9 k方法一:编译为Nginx静态模块, I9 A, b' V) I7 u6 `" f
, A4 R9 t- U8 ]$ u5 c: `
! ~6 d, z; \8 m, ^; J* d! F8 @4 M编译为独立模块(modsecurity-2.9.1)
" L6 S) X7 \4 J2 k9 _$ tar xzvf modsecurity-2.9.1.tar.gz
( X( U9 `% p0 L4 Z) h$ cd modsecurity-2.9.1/
5 p- M3 T% o" u1 l$ ./autogen.sh: c" M1 w, K6 \& r4 w c' M3 Z# S
$ ./configure --enable-standalone-module --disable-mlogc9 w9 z" r2 l' D
$ make
* V) t0 B4 k' R4 j& M% n0 {编译安装Nginx并添加ModSecurity模块
+ p1 `4 O9 U$ ^- i$ tar xzvf nginx-1.9.2.tar.gz
7 ~5 t Q! _5 T$ cd nginx-1.9.2
! `1 C ?5 s! @4 G9 _$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/- R7 F" |* j W. g& ~6 ?5 J. c) n: E
$ make && make install
8 W( [3 _% m! ~, v+ M方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
+ k9 e; I" Q+ H4 @
" B3 z O' E5 b" J R/ m
; O3 k2 B% e1 O# L编译LibModSecurity(modsecurity-3.0)
* |& A8 O1 h5 m9 w# B# r2 [$ cd /root- @# ]0 N9 j5 P
$ git clone https://github.com/SpiderLabs/ModSecurity. ^( M7 w, y4 w2 p2 {' Z
$ cd ModSecurity
; W' d, |( N4 P0 W2 ]. Q$ git checkout -b v3/master origin/v3/master4 P; G+ Z6 ~0 _. j% v4 ]
$ sh build.sh
$ m7 K. p) k: {! J6 J; Y8 }$ git submodule init
3 G' P. d7 V( M% P2 m4 S w8 Y$ git submodule update& B5 a1 O9 J/ i( `- i8 x+ [ p
$ ./configure- J6 [& D# X& c
$ make! L6 g8 y' _2 r+ b1 M) ^
$ make install* Q+ H# v- O6 M/ u3 e. }$ V
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
/ @0 w7 U( k" m& @9 P+ j
* G- L& z: F+ G. e1 R! d- j- f% o! @/ z3 O
$ ls /usr/local/modsecurity/lib
$ d5 a& M8 f! ^. Y3 k- w! s' z. nlibmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0
: J- y' ^( ]7 ~7 Q编译安装Nginx并添加ModSecurity-Nginx Connector模块' d2 b' f) n+ d! N X. w
使用ModSecurity-Nginx模块来连接LibModSecurity
& N: C$ A" Q& U% N/ a9 d+ Q) F2 R& X, d, t- ]% e. s6 D' H
- g& p- f3 b4 M# {7 U
$ cd /root7 ?# m$ {$ @ y3 F# I1 g. y
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx3 A: O3 x* F6 G$ f
$ tar xzvf nginx-1.9.2.tar.gz
. h. N. c- S# o$ e! o0 c H, F$ cd nginx-1.9.2' s d( z$ d. w5 o' f1 P* c* \& Q& M
$ ./configure --add-module=/root/modsecurity-nginx" O' H: j' E' f
$ make5 |, i+ c9 U5 J, \8 x( S4 T* R
$ make && make install
1 v6 N3 T6 X2 M* F: _3 g添加OWASP规则
8 e' e" X7 E/ s6 i' _1 E7 wModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
) h- B4 S5 z6 d! H4 ]3 ~2 H8 V
0 T+ @- [" |0 w* F6 j
下载OWASP规则并生成配置文件
- D5 i4 G3 {* v& l; U& D) M$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git, e# s6 P" ^, K' ^, y
$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/
# Y. v R. U0 A0 R; U; w6 t& V$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
+ s- h/ r. C' E* `0 v# b( I% Y, l$ cp crs-setup.conf.example crs-setup.conf6 b, m K' @: K8 R" Q
配置OWASP规则. @. {3 q' u6 n _* U9 s
编辑crs-setup.conf文件0 K! @4 a7 G8 w1 H3 ^, r
. E) U! r- m& O7 ~9 H% Z! h$ \0 {. v# M
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
4 D# z" P* K. W5 i1 ]6 k$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
$ }; n" R Z2 ]7 ~) q$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf) f1 r [% L2 l9 W! f- L. H! Z
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf! h) f, N B/ ?% Q P3 o/ {
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
9 ?- X, M, ~8 x N7 j. T$ p( Z5 N
/ Q1 W3 Q& |! e; c, V& s' W, g0 \0 B* Q, ]0 B+ X! _% h) X( T5 ^. Z* W
启用ModSecurity模块和CRS规则
* E3 R& n4 k" c* ?$ t& R: O复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。& ^3 W6 q3 } W
5 Z- D! C+ C* u( B. n
+ M+ ^; U2 ^& t3 Z6 d) Z" U! P
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。! `7 W6 j: Q! M$ _: @: l2 {
8 I [7 |) \: z; f7 P
* u9 H2 X9 d! [& p$ i0 U X$ cd /root/modsecurity-2.9.1/, _ E: J' t/ V9 _& B& z2 a, z! o; z
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
/ }) ]2 x/ j/ N0 u! ~$ cp unicode.mapping /usr/local/nginx/conf/ z4 V- i8 \+ R. X8 @
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
& e. p8 ?7 p- d' y
6 Q. r) ?1 i7 O
9 A5 @; P" H9 c+ S2 \1 U& ^$ vim /usr/local/nginx/conf/modsecurity.conf
1 O6 z, y* d9 J8 e( c6 CSecRuleEngine On
( J: w. _% ~- H5 j9 ~& e$ }ModSecurity中几个常用配置说明:
- U3 _* V4 B% K) J
5 l4 j1 k# S J& m* e* v6 K( Y8 T2 O
' r0 r0 I5 x' `4 W. p) d$ ~1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。: c# Y1 R7 R% |: G0 C( |0 C5 z
- f. D5 j) c( a8 L# J
/ S; U& O1 p2 G5 m+ ?/ U# Z3 O9 n1 v
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。6 t0 Z0 [% R e$ ]- g X, X
* a j% J$ O8 [( ~
) E( L) Z6 v5 g, m$ c9 J3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。* f3 d6 N! w0 h4 w# S6 G8 W
) m4 m o# M/ c. Q6 q/ C g
+ J* A: E: {5 {/ b" x8 Z6 M' M
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
' J3 c- H: y# }. t
9 J7 v, j6 X. g( ^; T. [
2 B9 s' ? }2 ]; m3 V- Z9 u |3 J在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
; C/ i ~- _. N; [
6 M8 r d! G& M+ a
( R; o7 i8 k2 y! `+ { a" L2 _3.x版本CRS
8 ^* O- B) z3 h. v. E, L3 F$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
% ~5 ~$ d+ Y, a( ?# 生成例外排除请求的配置文件7 h7 L; D1 a# v% w9 f% ^
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf3 I5 }. |% l6 x
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf0 G2 {5 [1 A& Q7 D
$ cp rules/*.data /usr/local/nginx/conf# Q) Y& _9 u4 v% y
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
1 o6 F' y- O0 S# k6 U
2 @! d, D. \* m9 ?9 B, t1 @; u* o8 g
$ vim /usr/local/nginx/conf/modsec_includes.conf
( U: v$ i7 o1 |
2 m& [& {" g3 T0 ^+ }[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
' {% l; b$ l1 w: X5 S
" w6 K, k0 O1 k/ R7 @8 p5 u注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
: b4 B t3 h' x5 A! c
4 z* A6 d0 Z2 O/ q5 o
/ O* ]& C0 s1 u配置Nginx支持Modsecurity2 U2 {* g+ ^+ E0 V5 Z7 p: P
启用Modsecurity8 E, A. x; E! O+ g
使用静态模块加载的配置方法( S4 j/ E+ J1 k8 L; G6 L6 _
在需要启用Modsecurity的主机的location下面加入下面两行即可:4 p/ E4 b5 s. X
7 D6 n% m+ U$ P
, V; x: o, u! j9 n2 s# m3 ?
ModSecurityEnabled on;
- c4 v0 ?$ N& _2 v5 b. ]0 Q# iModSecurityConfig modsec_includes.conf;5 z+ r1 S D6 ?6 E
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。" t8 \ l4 \9 ]8 j5 W& L8 T
2 l# @" {0 e* n: n3 t
0 f o" F. ~( h$ vim /usr/local/nginx/conf/nginx.conf1 l- b/ C9 H5 D( w$ X6 L( v
9 G4 p6 F) _& l0 ~6 `! ?
4 Y( i& K3 e+ ~4 p8 F# Eserver {
b8 B8 Z, j; h* V0 d+ G listen 80;
) `. r2 e/ H5 {) i7 n server_name example.com;" L& ^& C4 w3 _; E- b1 X, A8 D
1 L2 o6 b& H* {/ B) F: _/ y2 r4 T
$ V& l7 X- R2 `9 f" H0 t3 U) H location / {* x( i5 [7 `1 @* p
ModSecurityEnabled on;% O. g. k! I) L7 e* p6 }3 c
ModSecurityConfig modsec_includes.conf;
& o2 V1 I7 R$ [$ m9 {/ _1 I. A root html;3 G9 l. ` a, ?% N) K
index index.html index.htm;
. Q- v+ V6 i3 |2 ^0 B; n& g4 K3 N }
; N9 [* H! J0 O% o$ \7 X% M& L8 W}; n' G8 h6 Q3 ^; |7 ^
使用动态模块加载的配置方法2 h v* R& l4 m+ t. } j, L
在需要启用Modsecurity的主机的location下面加入下面两行即可:; A3 @5 h6 J6 m- T% O( K
* T8 J/ x: w/ W' J
7 H/ U4 b) o Z9 pmodsecurity on; \* k, x( I5 |5 M
modsecurity_rules_file modsec_includes.conf;+ O8 e6 m3 t1 A/ \9 D" F: \. R. K
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。1 z. w( w" s8 F0 ~- u% Q
l. K. U# t7 \5 [3 n \
2 ]; ]+ l6 @, h$ vim /usr/local/nginx/conf/nginx.conf
1 t9 B& a/ \0 {% N
2 s; h1 w) }( R8 {0 b2 @$ E3 T$ D1 t# j
server {
6 w& U f0 I7 k, E; f listen 80; R9 Q6 {. D! t. u& w( y/ H
server_name localhost mike.hi-linux.com;
% H" b( t" g; o7 h access_log /var/log/nginx/yourdomain.log;
3 d: h3 k2 i! b$ g4 u5 g) p
7 c$ n( v. Y: T+ {. y- M( M; v! t# }$ a( j- o
location / {
8 H/ p- P x$ z% G3 W
U( W" j& K% o* t/ v# {
$ ^3 O/ E' k1 { modsecurity on;1 Z" p! Z3 n/ b8 n' A
modsecurity_rules_file modsec_includes.conf;$ j9 {" B+ W% \; k
root html;
9 G: w! N$ j4 ^5 n, b0 _; v; r% m$ A index index.html index.htm;2 S9 r8 E/ Y- T% F4 N
}
; U' ~: v; @8 n6 O& {. s+ Y% U& b' R}
) M5 A! V5 u6 h验证Nginx配置文件
! H a \' l; D# h$ /usr/local/nginx/sbin/nginx -t
+ d8 L; `( Q; T- _) w/ Q4 enginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok% f3 Z P. k# _. m; Y1 r# f8 z- c" a
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
, z. ?5 X2 l' r; J+ x启动Nginx
, l- E3 I4 K/ o$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf( `3 J# h: W, o9 w
8 J1 e' g* m$ O( z( 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.logModsecurity主要是规则验证(验证已知漏洞),Nginx下还有另一个功能强大的WAF模块Naxsi。Naxsi最大特点是可以设置学习模式,抓取您的网站产生必要的白名单,以避免误报!Naxsi不依赖于预先定义的签名,Naxsi能够战胜更多复杂/未知/混淆的攻击模式。
& z6 k$ Z! D) u5 q" S& t) V- A$ }1 ] |