ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
9 @! D1 k- t& f$ l$ X" E# i) p, p! |
$ G" H$ F# O f: B$ `- G
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
- V" i# S# d# Z% J! H8 V+ Z
9 y/ \# s G& R& W* i/ @/ @8 v0 l' y& _- f
什么是ModSecurity+ @; v3 U; z) x- `, A# j
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
) t( D2 C. q) m E& Q( ~; W! _1 L0 x
4 @5 X- }4 O% Q; B% p
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
. V9 v7 F$ z: n8 S1 I5 o: w0 b
. Z4 `4 W/ O3 |2 y9 o+ m3 }+ a. X0 u. v
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。" Q; F5 V- t3 U3 S4 M
: n& t1 F ]6 t, ]
% f& O% V/ m3 _7 b5 f6 W
官网: https://www.modsecurity.org/6 h* j# ?! }) r/ x# X
' j5 ^! ]; h" n/ O7 u; C8 p
9 x; i y7 N8 h( P i什么是OWASP CRS
7 U. a o/ X& B Q8 |OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。, P8 U) V9 o, n. l9 f& G# [! q1 S
& B& i2 E4 \# o6 C+ w2 N! W7 f! _# ]
0 r. O4 X0 S n9 x# a/ CModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
$ E$ Y% o; j" ]: I
% w. b' e+ _$ k/ }2 g0 P. I/ p1 u9 c% T5 _5 q2 D# k2 J
HTTP Protection(HTTP防御)3 G* O# r [0 \; W3 N
HTTP协议和本地定义使用的detectsviolations策略。5 _, O6 a( b2 _5 c/ a- t
9 }& e0 s% x- j9 i, @: w
3 J! Q" i. _# V% ~$ R9 E O5 V
Real-time Blacklist Lookups(实时黑名单查询)- K+ G) [* n' K0 [9 v
利用第三方IP名单。: ]) D0 b5 C* y4 z: M2 F
; M; _8 g1 L$ j2 k
3 ^" W2 I4 Z( P0 N3 I4 G! WHTTP Denial of Service Protections(HTTP的拒绝服务保护)
: s3 a! U& Z% r, D$ N5 ^防御HTTP的洪水攻击和HTTP Dos攻击。
6 V7 E! E" J$ F! {& {9 r3 l- ?; R1 Y) `' [1 y
5 H2 L5 X. i: Z+ h5 sCommon Web Attacks Protection(常见的Web攻击防护)2 q. L; O4 u6 M; ]4 i
检测常见的Web应用程序的安全攻击。
7 ^7 X4 _+ D; s+ {* k
3 H( M0 @, h( }1 Z& ]% A/ i& f0 o, A9 B( Y
Automation Detection(自动化检测)7 d [+ U2 x# P2 M
检测机器人,爬虫,扫描仪和其他表面恶意活动。; n( N1 a8 V; ^' B# v. [/ Y5 `
' L8 l. ~, O, g& u% n4 y
2 L. r, s8 ]# w" n
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)
9 ^: k! t; j ?+ `/ M# o3 ~) N0 `检测通过Web应用程序上传的恶意文件。
7 V+ _8 h2 l4 W
& x4 E* ~" J: h" b7 M' `# j. W* F- u7 O6 G4 F
Tracking Sensitive Data(跟踪敏感数据)
- A5 y2 D/ @) j, e( Q/ H信用卡通道的使用,并阻止泄漏。
3 d. {0 B7 R9 {% N5 v! u. t1 I# ^$ }/ g
1 V+ y3 n/ C. i% ]Trojan Protection(木马防护)) N- `+ a/ Y+ p7 `+ ^
检测访问木马。
8 E2 G* @3 t I; M* z2 X$ |9 Y; ]
J# w* y- v0 T! ?+ ?# T$ |Identification of Application Defects(应用程序缺陷的鉴定)
2 o: Q% K8 z4 l; h5 _# E检测应用程序的错误配置警报。
) D; t- h" {' d1 e3 @5 l7 N' E. w: y5 p0 h
% F" @- C1 Z+ i
Error Detection and Hiding(错误检测和隐藏)+ _' |& L& E1 j
检测伪装服务器发送错误消息。
) R' v6 O9 R9 Z5 M1 y/ O1 q5 l; @! M+ h) ^6 T2 |
9 {) h" v0 Y% m' w; Y
安装ModSecurity
7 O, B2 v- e" t. D; ~4 ]# ]软件基础环境准备
( ^3 V8 l/ ?1 i+ B9 \8 u& Y2 V Q( A下载对应软件包9 v4 B9 W9 E9 `/ [; O: K
$ cd /root
+ D2 H) _, H, S$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'8 o q8 R( b% X1 G5 f7 H
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz% X Z. J, J; o, C) w* |
安装Nginx和ModSecurity依赖包2 u. @: M' s! a2 l3 i/ m* @
Centos/RHEL' V( _0 g+ l% B+ `/ e1 w7 m* j( D; d4 H9 h, s
# z) K: S% l; K7 E6 g- U1 [3 W: @1 u
$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
- ]/ {* h& o! j" }! @* F4 E8 X LUbuntu/Debian
# p) ]9 G/ x+ }- H2 o4 v( q# t
7 }6 \3 k. B/ g2 \4 V# x- L+ k
$ ^, r6 p) n K$ h$ 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& d! D6 q k0 T3 L O B5 L- N
编译安装ModSecurity
6 K/ e6 ^4 c! Z) |3 @Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
' `. N" h4 h( Y' N4 |" t/ J! d+ [: \8 B& h
, I/ u' x, ^+ V8 D
方法一:编译为Nginx静态模块2 A3 \+ d- F) R2 W/ Y, l
) S9 O5 r& h0 v) h4 U1 a
- `- l; i$ I% S* d9 B9 n
编译为独立模块(modsecurity-2.9.1)& ] R8 M6 B8 s$ f" \( C5 u& B
$ tar xzvf modsecurity-2.9.1.tar.gz
+ M0 J+ L+ O/ p) k' u8 G6 s1 K# P8 P& `* P2 f$ cd modsecurity-2.9.1/) F/ F! o5 z7 Q, J( O5 o
$ ./autogen.sh3 b6 t) L. Q3 i% p4 e$ a
$ ./configure --enable-standalone-module --disable-mlogc
! `: x2 X6 R. M% p$ make4 T* R8 w3 ~. g% I* Y+ N! M
编译安装Nginx并添加ModSecurity模块
7 r! o1 x0 C- a/ h+ ]8 @/ {$ l6 X8 q$ tar xzvf nginx-1.9.2.tar.gz
. s6 l. w! p& ?5 a2 k$ cd nginx-1.9.2
8 H+ u" T0 t/ u+ `& }. ~$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/7 J% X: o. P! u$ y- S
$ make && make install0 r& m; ^" y5 `4 y: `
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块' F, F) v/ V7 c% M" L; R9 Z
o" C, r! ~5 V h" D
1 `- t Q; S- l. z8 B" Z编译LibModSecurity(modsecurity-3.0)
: ?" W3 I! J4 R$ Y- w" q+ | I$ cd /root
! F( ]* c8 n8 P5 g0 J2 C) t$ git clone https://github.com/SpiderLabs/ModSecurity
e& z5 s6 G+ E" S7 a: o$ cd ModSecurity% S7 z: e/ p# `. K* f9 R
$ git checkout -b v3/master origin/v3/master
7 _% \7 @4 g; S4 E* I9 i+ F; M$ sh build.sh7 O8 E5 X! G; {: T" U9 p& _
$ git submodule init
( |% \. K9 K) X$ u' }$ git submodule update
9 v! e) v, D' \( s2 [8 T$ ./configure
7 j1 u5 k+ W8 Q$ t/ Y4 X, u7 z$ make
' ]. G- f' K# F% I- E$ z$ make install5 F) z- A3 p% X& W9 a
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。; I" ^- G, b3 R& S8 k
/ _/ X9 a+ ?& }5 |% @5 C
- ?1 C' J0 Z6 Q% w
$ ls /usr/local/modsecurity/lib
" e$ \8 f3 S& N$ `# m4 a! a1 |libmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.08 x; Y E" T3 \( W+ @/ r
编译安装Nginx并添加ModSecurity-Nginx Connector模块
/ R2 M; @3 _/ q# d7 u使用ModSecurity-Nginx模块来连接LibModSecurity
- v, c2 ]2 x$ v# t% P& {/ k4 m/ q4 ~
/ F" j/ a' J X& {/ C- D, P$ cd /root
3 @& \* Z1 t' X+ s" v$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx9 o. F; C6 A$ d( f7 d
$ tar xzvf nginx-1.9.2.tar.gz
7 G7 M3 P" V) W% O- W3 x- L3 p$ cd nginx-1.9.2" X/ u: z# j. u) ?- S& V* I
$ ./configure --add-module=/root/modsecurity-nginx
0 C: K% }& \, n$ M x$ make# y: o# q7 @4 }' E' N7 s1 R
$ make && make install
+ B U3 C' _6 w! U' k6 W添加OWASP规则
8 C. v+ V* ]" d0 N. e4 [' R( aModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
. z5 z9 q+ e1 R* C6 x) v
+ R/ i. E/ I6 j/ H
. F5 A# Q' Q0 \3 g0 ]$ }下载OWASP规则并生成配置文件 [; D5 I* S1 ^' `: [
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
* B( |; J3 k9 u6 t0 z$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/
' a. v0 }) E- `( [$ cd /usr/local/nginx/conf/owasp-modsecurity-crs, ^# y6 }% A" e0 N2 y
$ cp crs-setup.conf.example crs-setup.conf0 ?; l" h- i+ a5 {
配置OWASP规则
- J+ t9 A6 g. _/ z0 `8 L4 m编辑crs-setup.conf文件
. X3 i. Y* }- U5 y }/ k" c
+ \4 R& |, {( f+ w% K
" A) M4 O7 _& j8 k0 m' ^" J: A. g! J$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
* E- X% F1 u8 Q+ W$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
" ]4 v/ P. p2 v% t$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf" q9 s" b$ _2 W) u
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
$ ]7 M% [- E7 I: L# h默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
: m/ y/ h. X, Z. @. p6 }: r3 R' B
8 v* ?. D5 M! P8 I8 ~8 L, E/ y. R! L! s' _3 D& _7 I" c
启用ModSecurity模块和CRS规则4 a, v. k ?! v5 ?, H4 D
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
: S, l& x q% u) ^7 n
8 Q9 _9 g; f' X C! ]) H) P; ?& Q' S# x. z7 z. U" s! P
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。" p) S6 ?: S9 q1 L7 O# h: _
* U7 F7 R8 k' J& t( }! z, A# C0 E! {) x, q1 e
$ cd /root/modsecurity-2.9.1/7 U; K/ Y1 E: Q# S; A/ p
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf 7 X5 @5 B9 H4 r8 f
$ cp unicode.mapping /usr/local/nginx/conf/
$ d& e: b6 p% A4 R7 r+ ?将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。3 R6 ?1 ^7 F& k5 {& A* N0 q4 h
* V1 J( ?) j7 H; \; i4 E% j$ G9 t; F. J' B0 f
$ vim /usr/local/nginx/conf/modsecurity.conf- y- c: [$ A6 w
SecRuleEngine On
6 o+ C' b/ `: I9 W RModSecurity中几个常用配置说明:
/ d3 l8 I& \5 j- }% t4 R7 A. g0 _; G0 d$ E# a& s
1 x2 j- r1 r- e9 ?7 ^) u$ H, B9 o7 |
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
% n( d( L/ D' d1 H. o3 ]3 p
a' M/ J# m& a
" Y# e4 ^/ A8 ^* K2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。8 [. Y$ U" z8 H: H& c1 F; @8 i4 W5 I
4 V& N' y4 Z" m6 q, i$ z
& r4 t! c0 S9 L3 K0 q2 W, K+ N3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
% f$ s/ O @* v0 g" H4 j9 z1 B$ S4 I6 g" K
" P p( U7 ?9 N) @4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。* ` p+ m9 p) P; x7 Z" V- G+ `
/ `7 ]4 s( S5 l5 k" R
2 Q; i+ [) M1 r' n2 f$ ^在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。! \1 E. _4 B6 b+ t3 c) D
* J' V# U% }0 _# H& W% j
! {5 n+ @4 N* V N
3.x版本CRS
- n; X+ P) b2 U1 ~& j# m( r# O' x$ cd /usr/local/nginx/conf/owasp-modsecurity-crs" r( I1 }# U, \5 Q
# 生成例外排除请求的配置文件. q9 B, H" l# h! y- |) W) e0 p
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf+ P0 |4 {. A9 x7 `# l
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf& z4 l% x" J- p; W% }- b* X
$ cp rules/*.data /usr/local/nginx/conf
3 f3 c: p1 \' d A4 y为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
9 _3 q1 k, P' P" N" r: Y' |. D
5 T5 T' H& d0 N5 `; S# {+ h
4 g2 V+ K9 f( s& D W3 u$ vim /usr/local/nginx/conf/modsec_includes.conf) f& a! v! N- Y2 o! a0 n
8 M; c9 i0 U5 D$ _9 ]6 B8 e[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 0 ~1 Z2 G% v7 h: i O9 Y
* O& ^5 g/ K9 z. @% U
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
- H0 i& G3 X) a* A% J% a
2 p ?. g' P: a9 D
# X# r& ]) J5 q配置Nginx支持Modsecurity) Z* v; y! r7 ~2 T( l7 o1 J
启用Modsecurity4 {, z1 G* g: ]9 W* C0 b4 J" ?' @
使用静态模块加载的配置方法
; h6 \( w/ @% s) P% I- ^2 q在需要启用Modsecurity的主机的location下面加入下面两行即可:
! G+ c5 t, ^/ `6 v9 y; V
: v3 D! p0 \3 k: E: U5 I2 {7 j9 \& Z) m8 k: E$ S
ModSecurityEnabled on;
# V* Z( ~+ P+ {+ _2 fModSecurityConfig modsec_includes.conf;
! F# J- v( I I8 l修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
* c" n) ?5 _) v: a
" n) I/ I& q8 u
; q0 ?. P0 t/ B) s2 Y7 L v3 S$ vim /usr/local/nginx/conf/nginx.conf% p" L$ Q z0 l+ A- K. u$ ~
" ~0 e: P3 p$ w3 p
) i* S& O5 Y! i4 j: Fserver {
# K8 f: E$ O z6 p0 R' H, A _6 l listen 80;( _1 B; i, O2 Q0 E2 i% q# @
server_name example.com;( ], J V( e: L
+ u0 {0 d ?0 W! H* A6 M5 t% L6 F, b* m1 H% U& j1 W5 b6 a& b
location / {
; C5 m$ ]1 n7 I9 U ModSecurityEnabled on;+ j3 n) T" m5 u0 t
ModSecurityConfig modsec_includes.conf;
5 t1 O. N @. _8 N5 s8 [ root html;$ C3 o! R$ \/ r+ I1 E) l3 `
index index.html index.htm; S6 N8 g# Z# `: `: f# G! @; k
}" A1 F: c7 Z' o- t& S# c* U ?
}
* r1 ` G8 b5 I9 r使用动态模块加载的配置方法* O. u" A" ?' L- s. E k
在需要启用Modsecurity的主机的location下面加入下面两行即可:
5 k* f9 C" M; Y$ o$ Z( f5 f3 q8 f. C6 Y2 J% Q% l. w+ [
: W) E. g1 B: q1 m+ |: k
modsecurity on;, o4 r8 v7 n0 J% N+ \& z
modsecurity_rules_file modsec_includes.conf;
, B3 k4 j# @6 {% Q& T修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
1 p+ n" i, ]3 ]! e- z2 k9 m1 J) b8 W6 C
# o1 R( Q1 {, V7 S& [+ i$ vim /usr/local/nginx/conf/nginx.conf
+ ]0 H9 d0 e) v" {
6 R* M8 J |4 j+ [9 c: s( |
) g- @! d- J3 |0 Gserver {
0 C3 V% Z1 {0 g4 b7 ~: t3 d listen 80;
9 f" C9 j* g. Y' y1 B server_name localhost mike.hi-linux.com;) r% y8 K. [8 ]$ P8 Y
access_log /var/log/nginx/yourdomain.log;
& ^( s- z7 [/ u( w( m7 x" n- `* g* I* R1 b( N
: ~" v/ x% y1 p* _" a) _: s
location / {3 u* b5 a# H' C9 N+ Z( J9 E2 G
* F; C% \2 K- p- _! O- U% V3 u0 f2 e2 h3 c# E4 W3 g: A" }5 {
modsecurity on;/ y4 I3 I T5 k( k) e
modsecurity_rules_file modsec_includes.conf; I' {" Z$ n6 J5 U( j% p
root html;# u: A, K: u2 `) {- ]" X0 [: F
index index.html index.htm;
5 e, a! D8 I3 j" y5 ^$ ^}
7 m% [/ X4 ^! T: c }7 ?}
) p! n8 n* D) K; k) u- I验证Nginx配置文件
, L8 O" N- ?+ B$ /usr/local/nginx/sbin/nginx -t
: h" |2 W: R9 T. V# d1 H$ anginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
7 y8 j6 I8 x9 e; Bnginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful6 @) a% g6 p a* k
启动Nginx; m% m1 H9 R3 r1 Z
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf$ ]0 ^5 |/ @! r0 K7 r
: C* i, g7 S3 u% _3 T3 i/ E测试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能够战胜更多复杂/未知/混淆的攻击模式。 : H: l7 u6 L9 d0 b! k/ V# W
|