ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
! w7 B: S$ `: E2 `- W9 K
: L" l# |0 E. q! [/ X- d- ^
% a+ q8 a) [0 d) F9 s在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。" f' W% T8 k0 F; C' K5 q
! A( h/ S r$ r& B- ~3 v' s, q- G# ~1 b% [7 K5 U
什么是ModSecurity
2 R7 i& K9 i# ?8 @( m2 x+ R4 N8 s5 ^ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
( p7 y* D% S0 ^. C4 w$ Y9 c
+ n- T9 e5 j& c0 x
) L0 T3 a: N. K# Y0 t! B" Z$ ZModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
: E3 X" W! q2 K" Z0 B) h. W
; j }( {1 K- w) f w; U) R- @4 |5 q- x" x' h" q/ J
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。' a. a( D& N2 i5 S& @+ B: m( K) g
6 ~ |( x" @ A3 \6 o( c5 W0 ?' \& L- t g
官网: https://www.modsecurity.org/
1 ]( [& A4 M1 P f# P, p. A1 G& t2 B6 O3 L- D
( b9 O, S* @4 p6 ~8 j什么是OWASP CRS4 u2 B7 D% s. }' M% E
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。# R/ f' K* f- u* m' p
3 Q0 x3 k4 k0 z
: w+ b# b7 F$ Y# @0 sModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
1 [# e2 }4 x9 q
6 L- y3 {) [5 F ~0 Q0 }0 c) Z9 Z6 e# O, ~0 n2 ]( |
HTTP Protection(HTTP防御)' V" O! ~& y/ B+ E* m/ `
HTTP协议和本地定义使用的detectsviolations策略。5 R {+ M3 y( L; b/ s
/ B4 b \( j* h& G! H# W' Y
- {& V) A' a1 l# h8 ]6 g- l
Real-time Blacklist Lookups(实时黑名单查询) V9 Q( Z! G# l- d4 }" V
利用第三方IP名单。% C! j" }8 L- D5 O
6 ]* D( N0 w2 \: L
1 t# O9 m1 b7 Y {: eHTTP Denial of Service Protections(HTTP的拒绝服务保护); N. h; R+ U: q. Q5 |- V0 {! d8 Y4 _ |
防御HTTP的洪水攻击和HTTP Dos攻击。. _0 D: W& I3 F$ \1 [6 d4 ~1 l2 V- v
, R# v/ }# h0 S2 p1 c/ G5 ]
* x% U0 \, T3 gCommon Web Attacks Protection(常见的Web攻击防护). D4 l/ u7 o; d. D5 N
检测常见的Web应用程序的安全攻击。8 j: v7 p3 k6 R4 |+ e7 ]- g
1 X) V6 {6 D3 F2 x6 B4 Z4 p) C( _& ~9 X
Automation Detection(自动化检测)
* y( S* `' r2 L8 T4 b+ F& U" a% D检测机器人,爬虫,扫描仪和其他表面恶意活动。+ A9 S; h. _ ]+ K4 {# S7 f' {, D
" n5 n+ E0 v# V- w7 i. E; @" e7 l
1 T. w" h1 Q1 s7 O9 z" ?2 bIntegration with AV Scanning for File Uploads(文件上传防病毒扫描)& Z' V# b) b) L' J
检测通过Web应用程序上传的恶意文件。
7 b$ h4 \; Z0 |* N N& L+ }
. ?) T6 F% {' u1 @) p- [ P" L
) d) e" n# d5 I6 S BTracking Sensitive Data(跟踪敏感数据)7 @( k& b$ V( g; e
信用卡通道的使用,并阻止泄漏。; G3 |7 h2 ]$ I2 Q* W: Q* i
! V9 m2 l) R. q E! {3 P, q. Y
3 @* `2 Z- g, W
Trojan Protection(木马防护)
$ `" f: f8 P8 d2 \4 `检测访问木马。2 R6 f$ f1 p3 Z% k
4 H `$ G( s5 F1 q
/ T3 r( `& @* J3 b M
Identification of Application Defects(应用程序缺陷的鉴定)) u- a- ^- m. f+ c2 |" y
检测应用程序的错误配置警报。4 u. b2 r) D7 m6 A* Y
! @; n9 \1 f; ]" O: J7 Y% s* u7 b- t2 y( T2 S2 Z
Error Detection and Hiding(错误检测和隐藏)
+ n: w( l* ~3 C3 y2 ~7 C检测伪装服务器发送错误消息。. `* g) t7 {( e" g* P4 B% N: D9 t
4 j% ?* B) x" A y m
, E) j9 i3 R) E7 [) h4 f安装ModSecurity
. |# S7 l7 N& z3 e& N软件基础环境准备
* W% u7 ]9 ~, \8 A3 J& |5 D" f5 X下载对应软件包6 {$ ^1 |8 g: D( C2 F2 N
$ cd /root
- W8 w& J9 t- U- ^$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'' L0 A+ S7 ?3 Q& K
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz* \' V5 X: s; L- H, t" ~
安装Nginx和ModSecurity依赖包
# L2 W' F B$ J0 x: K% R* D% yCentos/RHEL
& }& y0 A! N r4 d
3 K9 f4 \4 s4 X- G( z( t2 o+ s* u9 g6 m8 j# L$ Y) f
$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel3 P0 g* p8 J Q# U' o4 t
Ubuntu/Debian7 B: \- R4 w/ Y, h
7 O& H2 |* l$ w( v8 X9 ]9 q8 H" Y6 Q. A! Y; @5 ~8 M2 _4 B; k f4 B, S
$ 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; ]+ W; X% i, p
编译安装ModSecurity1 C( D( n7 H8 @& E: ]% C: y
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。. {- D# @. W. V! Z2 S
7 |1 Y4 j! @/ p" w! b( I ? J0 r! {2 z( H: e2 ~
方法一:编译为Nginx静态模块
# P- i# } f4 v( R3 P# P. N( C9 ?0 K; h6 K7 B* r: Y/ G3 [
) U" g4 X/ v2 r4 U
编译为独立模块(modsecurity-2.9.1)( s' P, @" `) M" S
$ tar xzvf modsecurity-2.9.1.tar.gz
- D7 T, V2 u3 r$ cd modsecurity-2.9.1/
9 c/ [& x- M$ \$ ./autogen.sh' B5 D9 ^1 Y$ ~
$ ./configure --enable-standalone-module --disable-mlogc
% B% E# \6 j: l! L% ^- C$ X6 b# M$ make6 {+ U8 H/ }: i& M0 k7 e
编译安装Nginx并添加ModSecurity模块$ Q( i9 a& z# v+ d
$ tar xzvf nginx-1.9.2.tar.gz, a# M2 K; F8 ~+ R
$ cd nginx-1.9.2
9 T5 Z: j% \- A) u( I7 B- g# L, D5 _$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/7 Y+ b# g4 a+ Y# `$ R6 x
$ make && make install' G3 ]' S9 d/ k8 p6 X0 _1 Q
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块* o i+ a. Q- ?
' ]; m, j8 b3 W! E _; s, _. Z2 Y; h! i6 ~& r' ?
编译LibModSecurity(modsecurity-3.0)
# x. D5 j w- ~0 y: j1 C ?$ cd /root
9 v5 N4 q) g" a9 m/ {$ git clone https://github.com/SpiderLabs/ModSecurity# q" d" A* t; Y7 z1 z& G5 p
$ cd ModSecurity
9 i( w+ g/ N& p% P _7 d7 b$ git checkout -b v3/master origin/v3/master" d: k/ H" @: y/ v! V
$ sh build.sh, ^5 x7 [# T4 J1 b1 ?2 a" Y
$ git submodule init1 S+ v; |/ ?0 [( ?7 N Y
$ git submodule update+ d( C& d$ X1 m8 {
$ ./configure
+ \; D8 I0 D, g2 S8 `$ make4 S0 a6 g) V" z+ ?0 y" d2 { ]! O
$ make install
, o* ~3 N7 [$ P' P, {6 S6 yLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。 v4 ? }% z% g! f1 G8 U# _' x
( X5 I3 V# L6 `/ W% T
! P! X, t0 S/ Q! ^5 z: P- G$ ls /usr/local/modsecurity/lib
$ F, G: f4 A! h- w& Z+ ?: Tlibmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0! l& }9 m! [3 ^- \ s4 v
编译安装Nginx并添加ModSecurity-Nginx Connector模块
; D! ~. M2 _% ~使用ModSecurity-Nginx模块来连接LibModSecurity- C$ z5 g) P) D* | A% K& o$ b
, ~* X. {- U+ N4 ~$ D" ]6 R
" ^' g9 |4 I, ~6 z8 V
$ cd /root; }! F! ~# G# F) q( N
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx5 A m6 A$ {/ A# o6 E0 F' |1 f
$ tar xzvf nginx-1.9.2.tar.gz
9 k. X# y' k) L8 Z' Z' w$ cd nginx-1.9.23 x" X7 g8 z' N+ y5 f# A& J
$ ./configure --add-module=/root/modsecurity-nginx0 J! Y! I& ]5 A. B
$ make
: v' Z" r8 ^% f$ make && make install6 H T/ @% Y5 b, n* p
添加OWASP规则1 q# y+ }* _. \* U; k0 B
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
3 g; v2 v7 T4 B" F; q% G% e9 E! x# }5 n+ [4 D
. j" ?$ n; D& K; o+ ~( ?3 d- }
下载OWASP规则并生成配置文件
9 I& a# S% P# T6 E$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git3 B/ k) f4 O# \2 `7 m7 i& \% {0 l
$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/
" f9 N- E9 p3 I. e$ cd /usr/local/nginx/conf/owasp-modsecurity-crs, }" n+ {& G' M6 B
$ cp crs-setup.conf.example crs-setup.conf
" A/ x. b- s8 K* e9 P! ]配置OWASP规则
5 h) g4 N9 e: p编辑crs-setup.conf文件
$ `- ^9 @- G1 |
4 M0 _, \* T2 c9 C, C
4 v* U) |7 u; ^, ]- ?, M0 T! Y$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf% w8 K% z( ]1 G' R
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
& w' \9 N5 G3 E+ n5 z6 m) h$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
4 U' O& U/ r, ]& E' C$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf: u4 B" P* D6 |) _) j2 S" n
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
% B1 T; s- c. V$ s! t5 s* l7 k G2 S; B+ x6 E/ _$ P
% j) e) ?- f0 o: R! W% Y4 _启用ModSecurity模块和CRS规则
2 v* C9 G: R7 J9 P' o复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
4 f9 o) r- r% k1 _$ E* m- n. P' a
, r: O- \% a. C; G1 B+ `" C3 g9 c2 r6 n2 x5 w$ T
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。! ?( p% n5 q: l4 r( A0 b3 a& v
1 Q6 A5 J& X. ]) c6 o* S6 x
- [: ]: T- C1 d& i9 E5 @ A' S6 `* t$ cd /root/modsecurity-2.9.1/% x- w0 R' l5 `* H2 i
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf % m* G5 B: t* C- U6 d
$ cp unicode.mapping /usr/local/nginx/conf/. w1 G+ w3 o# J, ~) r
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
) U' F B, t( K J+ p( y; b. ~& ^% A$ w- e
9 e3 `8 z8 \2 r" |! K$ vim /usr/local/nginx/conf/modsecurity.conf9 r8 i7 [6 P- u. A4 [
SecRuleEngine On1 C2 @9 E! y9 o$ N& V4 z8 D+ B
ModSecurity中几个常用配置说明:8 U/ x5 R' S4 S7 U; {* j8 `
3 q2 T& V# Y- X. D* X$ X- h
' c8 C! O- j; B1 @# M+ `/ C- d! z1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。5 ]0 e# t2 e! v3 f6 I& d$ x- j
: Y3 p8 y* {4 P2 W) @
# J6 m0 T% {9 p/ G2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
/ c2 U$ P- ?7 X& n, p
t8 R" p) a. M) E, z; k$ K% ^" c
- H) T; X U" T& A9 `/ H/ |/ V3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。$ K* c) _2 P% V" A3 T
+ T# c" L, m/ O: L/ v U
4 t0 ]4 {8 q/ x: D% c, Z$ L4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。9 T) ~+ D2 Y0 B$ n, |; N
# R1 S8 @4 J4 Y9 f
. g4 f q8 n8 s0 m! D: S5 f
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
. w8 R/ |7 L0 X4 c" y/ V; M w& e) V4 b' P+ A
5 ?- U, r/ I8 ?# A2 S
3.x版本CRS
" o% c7 L# q7 u" o, k& ~. ~$ cd /usr/local/nginx/conf/owasp-modsecurity-crs: t! F& T9 }& d: T Y
# 生成例外排除请求的配置文件
8 Y8 @/ V) Y; {1 r- i$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
. q5 ]% N. D; Z0 Z& W: d6 Z1 k$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf- r, e# A. Q# p: T
$ cp rules/*.data /usr/local/nginx/conf. X/ b7 r$ {3 ?5 d V' B
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
$ p0 D; x% v& }' q- `) J& s ~: U1 E" l8 M
5 ~( R( c4 _+ D7 A; L" i
$ vim /usr/local/nginx/conf/modsec_includes.conf( A) Y* z* A+ c7 ?* B9 B A. U
4 ^ i, N5 [2 _/ B6 |3 Q[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
( y3 Z& h! f5 n! _# \6 ?' V! o
- ~4 I5 o% F3 T注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
) \! P h, V+ y: m: M
# r1 _, N8 k; d: C7 Q# R; t. X8 l9 j8 d. k1 b: V7 O
配置Nginx支持Modsecurity$ E4 z6 [& E5 T" u T$ X3 n! U
启用Modsecurity
# I+ O4 Q9 C8 x8 R: S. k使用静态模块加载的配置方法
% v- w" n4 L4 Y; m! r4 ` W H在需要启用Modsecurity的主机的location下面加入下面两行即可:. O" m" S# \; c- F; I
8 o4 W8 V) y2 K; z# X) \- K6 O( [3 R
ModSecurityEnabled on;
" r/ n+ Y- A {% AModSecurityConfig modsec_includes.conf;! Q3 b4 }# n% M' w9 n4 q
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。% u8 O+ x* z! p" r* Y
) b) w$ i7 S5 S+ c7 Q; j) |
. d# C% [; Z+ Q W) C8 @, U+ n
$ vim /usr/local/nginx/conf/nginx.conf: x% M* Y8 o5 d0 J4 Z" F: U
2 t8 J! T' n8 \1 l. v1 ~6 g3 d. n7 R
server {
( t% w6 s# h/ k {, ` listen 80;: j" Q8 ~9 H, Y0 x; \
server_name example.com;
5 V7 }) C4 ? |( u# N5 r( s
4 W, B2 H0 D$ M P6 s9 M7 u2 T% F7 m! y) [
location / {
7 F; C- ?, m& N" [$ O ModSecurityEnabled on;* e N: }; H/ w. p
ModSecurityConfig modsec_includes.conf;
_- s8 ~6 Z0 Z m1 }0 R& R root html;# @2 g1 s. Y1 d2 ?/ v5 j
index index.html index.htm;6 M& `6 B: \, l( c$ v
}
3 Z; Y& m! T9 b9 y1 F, E" {}
4 v5 X, Y$ l4 g7 i2 y. ?% d使用动态模块加载的配置方法! i' w0 v/ x) e4 x/ r" T
在需要启用Modsecurity的主机的location下面加入下面两行即可:
! T" R6 q5 M3 v" Z4 C. S9 c- A" n: H4 r% y
' q6 _" x2 E: E4 x Xmodsecurity on;
) n' |" V5 ]) O8 tmodsecurity_rules_file modsec_includes.conf;: L- L1 j/ c* l5 c; B/ J' s
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。; U' e; `% e" Q( I+ w' z% b
1 r! M( ]5 x% K- D/ f
8 Q* x7 K& O$ L8 {/ @$ vim /usr/local/nginx/conf/nginx.conf
& y9 l+ e$ r, ^6 k" N
- g3 I! ?% @8 _; R P1 H4 a6 G% |0 f' f
server {2 S2 p, ?" V7 Z4 q& r6 Q/ z0 k# G
listen 80;
# _1 D1 d( i- p* [& O9 _7 i2 M server_name localhost mike.hi-linux.com;
0 {$ B. s O1 G1 h access_log /var/log/nginx/yourdomain.log;, w& @4 t+ l# N9 `$ D: |
+ i" m( C6 B# A3 n1 T
N* ]1 z8 j- b8 X$ e' ^
location / {1 h) ^0 W6 y+ z5 t) c9 E9 W
9 j1 C+ o* Z+ o9 \
. {8 C/ I* ?. v. D5 } modsecurity on;. q9 a) {. E# _1 Q8 a1 {% h$ {+ y) U
modsecurity_rules_file modsec_includes.conf;
! k+ n' m, A7 I" e root html;
; B$ c/ ^" f. ^& v+ e# | index index.html index.htm;; W( n; _9 ~6 a" I8 s3 W
}% ~9 P) @. s/ [; n Y: k2 ]
}, f2 }2 E4 P; N
验证Nginx配置文件
! m- \* M$ [/ j, o6 ^$ /usr/local/nginx/sbin/nginx -t
% X; I. j7 e# n2 \3 Nnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok2 `7 _2 Y" s, b% T0 }: X
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful: z* h" m; z, H/ m! j: D- j: p
启动Nginx
* E* R5 U% t1 m) |/ t$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
5 e6 W% Q! j5 m0 {4 q q/ I* Z2 ?$ M
8 a6 D# @ Z3 A j8 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能够战胜更多复杂/未知/混淆的攻击模式。
, g+ H/ O: f9 @ |