ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
+ O/ Y, f5 I9 k
% i- x2 n8 d9 @) Q2 h6 E1 w7 E! e: W6 I' @8 ]! y: g. h! x
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。: G! D! k& ]* G* D/ d) T8 W
( {* V: s5 N6 H; Z* Q
; J, d- `6 o4 y3 v7 n什么是ModSecurity
6 _1 L5 H \- Z3 tModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。' ^! x4 o* Y. P$ z J
2 t4 W/ h: @0 x2 d. p4 `+ S' T4 X& X7 B' m3 `+ k3 `
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
" ~$ ^0 T2 p& ~. w- {) i" ~9 L$ X+ n/ p9 A' |
# I! m7 }2 B( GModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
1 ?0 x% e0 X6 n3 @1 \
6 f. _" X4 M4 t. B% x6 A6 t# E' P8 e- w
官网: https://www.modsecurity.org/% c! Q5 Z& U: L; U( B3 M
) w- }0 D) l+ D4 Z% m5 }2 A' c. T, m( P
什么是OWASP CRS6 h7 h3 j. `# A+ e3 i% L9 w
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。3 V! u; o3 z5 G% l# r/ Y; T( M
/ ^' {5 R! U* c$ x4 S0 H( X2 k% M3 c5 l8 {, d/ `; g2 e u) ~, u2 T
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
* d, M6 o, W9 ~% q& N! f# ^1 Y; {. [9 l. p/ `) I
& d, l R6 M. A7 ]" s P* gHTTP Protection(HTTP防御)
+ {8 D, h4 u, p* S/ l5 LHTTP协议和本地定义使用的detectsviolations策略。
9 E8 q& P% g! Q @- F* f) E. R: ^6 s0 |' z7 g$ r5 U" x
( L- f$ P3 @7 I% H: m
Real-time Blacklist Lookups(实时黑名单查询). y- Q' s! W. O \
利用第三方IP名单。
, M2 G) H7 p1 S A% O8 d; t2 O: \3 N+ r8 Q& x% b
5 v$ ?1 A _: L5 ?* j: GHTTP Denial of Service Protections(HTTP的拒绝服务保护)
% ~8 i4 E: Q1 \* J `防御HTTP的洪水攻击和HTTP Dos攻击。
. c6 A3 l9 T) ~% M, O& x x E' I1 Y3 X4 |" y9 P# P7 v$ o8 ]
: p4 H4 y \% q4 r1 ^" G% ^) ^
Common Web Attacks Protection(常见的Web攻击防护)
+ A, z0 N0 p+ ?% F4 k1 M5 \检测常见的Web应用程序的安全攻击。6 Q; p8 t6 z+ H. v! b6 y) `
9 L! M* X( e+ h2 S$ h
2 C' O, l5 J6 g: k- [- bAutomation Detection(自动化检测)
' r8 @8 s: m7 O& e) t0 Q3 m+ t检测机器人,爬虫,扫描仪和其他表面恶意活动。
5 {, U9 V: n( e4 x9 L3 m" {! R' F' K3 o- Z+ W5 G
. h6 E) W( {- U2 S' m9 t
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)
: Y3 B! y: S1 g1 l1 Q检测通过Web应用程序上传的恶意文件。
) O7 c0 q3 S `( U* U( P5 j7 A4 @: ~/ @- H6 F
2 a4 [- }9 v- ]" `- ]$ qTracking Sensitive Data(跟踪敏感数据)5 i d8 _: c, \- u+ |
信用卡通道的使用,并阻止泄漏。
5 B! N- O( e$ q4 q1 K$ {
- Y% D, P5 m, g$ x5 j2 ^' c
3 b# _% l3 h! P6 j, iTrojan Protection(木马防护)+ Z1 `+ c, s, K3 Z+ c7 |
检测访问木马。/ j C/ p) O5 }5 k! ~
5 \& Q# d/ ] ?' A7 s( q
' \& S2 o' _- N4 C% C
Identification of Application Defects(应用程序缺陷的鉴定)
0 _& v b& R/ a5 A检测应用程序的错误配置警报。1 n! F7 T3 I4 ~! b4 I( v0 J F
% @7 Z H) F, M: X; F
2 S* e) s+ }4 S3 H/ ?3 I& |9 r5 DError Detection and Hiding(错误检测和隐藏)
' `! S6 e6 Q# t4 a; N检测伪装服务器发送错误消息。/ r8 h( t. f! q! {
: ^- M! q) n4 m9 M$ U, j* j7 ^! W
安装ModSecurity; |! m- L6 H( q
软件基础环境准备6 r1 e: T$ W7 o' ]4 F8 |
下载对应软件包- b/ N, r6 C5 {
$ cd /root
3 U1 h6 R, A: z! O4 \$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'8 J$ I i" [2 d3 |' l9 ~ I; }
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz. y4 X9 m5 z; x. }/ S. i( f1 Q2 @
安装Nginx和ModSecurity依赖包
. t, n2 h6 c k' p4 R$ vCentos/RHEL$ y: H& y: m B3 x
% ~6 h }" a2 b4 T9 u5 H
; S# M* r2 z! s# F8 i$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
1 H0 k0 ` h6 Y) _Ubuntu/Debian
2 \+ }7 J/ x) l0 N% z! K) e
- o( }7 O- n J L8 s- j% v' k) b
. f+ ^# o" _+ z- Q# 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++-dev
% Z8 H$ P3 P* |# M编译安装ModSecurity
8 ?2 J) ]) ^4 |5 L9 |8 R- PNginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。9 z! T/ t- Y h. A- T7 F$ H
0 B" s" V$ Y# I9 v8 |- c" u/ N6 W( j O% M) _' o+ \
方法一:编译为Nginx静态模块$ E. b o' A1 P" f6 h/ r0 [
: ?1 F- j+ \7 o% O+ z
, o4 d- x) T; b5 u编译为独立模块(modsecurity-2.9.1)
( [# D; c* X* b: ]$ tar xzvf modsecurity-2.9.1.tar.gz4 l; M" y7 n6 d- o) F7 X
$ cd modsecurity-2.9.1/
9 {: _, e7 K3 K& R. k% m% P$ ./autogen.sh
' ~9 ]- ]/ E4 M% ]# W X$ ./configure --enable-standalone-module --disable-mlogc
$ p) T( U/ M& x) p9 z3 X3 Q+ b w# J; W$ make
9 W+ x# O& A8 J3 U# A- R. T编译安装Nginx并添加ModSecurity模块
2 G% t5 _* k- Z' i( F+ b7 u) y$ tar xzvf nginx-1.9.2.tar.gz
7 Y' P9 p$ F- Q$ n1 z2 |9 U$ cd nginx-1.9.2% ^ R. W9 c) }
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
3 X1 d7 X3 v. e: {( T, J7 M9 D. f$ make && make install3 p% S7 C2 O- h4 i" Y/ A/ o
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
V& Z( }+ b8 z1 n7 v8 h% `- E# Q! t+ Y' b0 C/ t, I; T
3 T2 _& \$ m. }5 R5 \2 v5 P2 a
编译LibModSecurity(modsecurity-3.0)
# }, {! @, I* r* }# X: w) v$ cd /root
& k K1 a5 b' j" s9 j$ git clone https://github.com/SpiderLabs/ModSecurity2 U0 J4 Y8 S' e& `
$ cd ModSecurity" T3 b) d- `! x* N+ r( A" U% b! y
$ git checkout -b v3/master origin/v3/master# A, I- P9 E6 h2 d# e' U; Y9 m
$ sh build.sh; w$ m9 a ~2 X
$ git submodule init/ G" L3 T2 b3 c% h" D8 Q0 n. R- I
$ git submodule update
+ _ x0 b8 C% V( l" C) B$ ./configure. Z* \0 D5 {6 G2 a, M. I
$ make( o# q# F% O+ Z; S' f3 N H
$ make install
" U0 n4 s5 W$ c9 o; F# ^; ]9 h+ JLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
! _- A' C. G( |& L: I+ r1 G. z4 o3 L% J4 D. ^9 u! \! q4 p6 k
. H( I4 a7 W$ v& X- `' T: U$ ls /usr/local/modsecurity/lib
( u' h& h' n9 O* _libmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0
1 V5 C# I1 Q2 j% c编译安装Nginx并添加ModSecurity-Nginx Connector模块
) J+ `& s9 `9 X% k使用ModSecurity-Nginx模块来连接LibModSecurity
8 m" L. o$ s& m. d( W9 O4 q8 ~# O( k6 c8 l- l! e
; K/ a* X- O" D8 b8 _
$ cd /root
9 q$ ~1 K( T* a2 N& W1 R* n4 [$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
F! c6 ~( B2 x: m* e$ L$ tar xzvf nginx-1.9.2.tar.gz7 J; ~1 ^. y4 Z# a7 R
$ cd nginx-1.9.21 M) B) O" `, ?! d$ x
$ ./configure --add-module=/root/modsecurity-nginx8 g# k" O" [, O, R
$ make% z ^. B, S, U) {- U) p, @
$ make && make install7 A, i& _- v9 v- f9 L7 e' F( x) I
添加OWASP规则
- s- I' r( r- S/ l; d+ j7 [ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
/ G5 W$ `9 ^: z* H" C3 Z3 a% }$ [3 a/ Q$ m0 s2 F
M) [* s6 m% P( P: P! c0 L3 s( a4 S
下载OWASP规则并生成配置文件
5 u" p! U) d" G. o$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
" B$ n9 R3 Y9 U- D) ~$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/
# H5 Y- G0 v$ }% R$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
4 u4 e4 j4 C# w. ~) z1 a$ cp crs-setup.conf.example crs-setup.conf
, r0 p6 T* b4 |7 Q& q配置OWASP规则
+ R7 _! a9 Q5 |编辑crs-setup.conf文件, f n# A4 S" {: v6 \- V4 `. \
# a6 t+ }7 n; o
M( H. G( t/ i6 @1 o# f$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
6 U" _' |+ D! n$ l3 u9 }3 L$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
; U$ H: ^2 K( w3 t$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf2 C) O" B! g) R
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf$ V' x% P* h8 [' M' r
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。1 l% d; N8 h- Y$ T
/ [3 G) C8 [8 }5 I
& _7 G, k& t! b1 z, a/ x
启用ModSecurity模块和CRS规则
4 M' U. l7 {$ C复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
2 _- y3 K7 e# l) K7 P f9 l- _% d9 @- g% S6 F
$ T1 q9 q( ~! V6 N2 [modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。8 q1 w1 p- G3 z# R5 [. d
( a# X, O/ v2 H* x, k3 n5 Z" B2 G1 ^5 ]5 ~* N& G1 ~ m
$ cd /root/modsecurity-2.9.1/+ g0 B. v. h2 O* h# K% l
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
4 k4 t) o% n l$ cp unicode.mapping /usr/local/nginx/conf/# R0 @! }; e: y# t2 b! n* a4 r
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。& {# r& v6 @6 w3 `& A. a
! P( T/ [' V" n' m) ?" _3 b3 r
' @# y& H2 ?+ B2 J9 Q( A
$ vim /usr/local/nginx/conf/modsecurity.conf
j6 j; I$ T! S9 [ _3 W( z( y. jSecRuleEngine On( |* y0 E/ F1 z4 K
ModSecurity中几个常用配置说明:
+ D1 e! t: m: p7 Y/ F' d7 ?, @ R* i' L5 @
5 f- V- _% e7 Y+ Z/ r9 q3 P
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
( s8 M) [# r6 R2 Q$ t+ H* X: J1 }& ^3 `1 W" Q0 J% ]
7 }" C! k: o- q7 M2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
/ a+ o! x/ N u3 u* [6 I- `0 j
+ q, N3 r/ {! }
- t4 [2 v7 G' g+ r# Y3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。/ Q# ?4 O* O) F3 B/ Y
0 L. N- G/ s9 y5 X- t% S- d/ V
& m4 v& S; C9 J H8 s4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。) f& m. u/ k# F/ E b9 U( z
8 m, r5 \' {5 v& c/ ^
8 `1 c. C U' Y在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
- z7 f. ]# w- C4 s5 o7 Q1 J% P9 H/ b
- O' A7 J/ l/ ?& I, M) ^' K* B5 F6 h! ~! w& p# M* K: l
3.x版本CRS' x$ x5 r3 B/ k$ m' Q
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs, t: u- X. T; k
# 生成例外排除请求的配置文件 a/ g# Z* e9 E
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf0 {4 }) U6 N. s5 `
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
4 ^4 }6 J* _4 u" Y$ r% B$ cp rules/*.data /usr/local/nginx/conf& y3 q6 W! c x5 G5 Z5 J
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。% W! P' {2 q7 t6 r7 X* ]
o( [" m. O7 W- p2 k3 x, e" Q0 G% ~3 m0 V2 ^+ k) G3 F
$ vim /usr/local/nginx/conf/modsec_includes.conf8 `5 D5 W& }# J' [: l
/ U. L6 ^0 J/ w. E; I3 G
[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 5 B# S7 I x& r+ j7 U
* u/ a# o$ p* v9 h7 v8 w' P3 {
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。* F1 z* x* s* G8 U5 Y
8 l J( ~" V7 x& D
" n4 _& A0 E3 W/ g& R
配置Nginx支持Modsecurity/ b% D, K) |" B/ D v
启用Modsecurity
: ?" m. R$ \' n$ Z- m使用静态模块加载的配置方法
. B$ K$ s8 o( D在需要启用Modsecurity的主机的location下面加入下面两行即可:
( }" b% Q, {/ r* \6 c5 U: O* ~3 u2 A6 C' G
* @: G$ P7 I6 I3 {/ E. C8 q7 SModSecurityEnabled on;
7 W M% J9 a! g: ]! J3 tModSecurityConfig modsec_includes.conf;7 S+ V5 Z' {# l/ r6 ~+ q! C
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。; c5 y& x: y6 f9 X7 [ P
! T5 p$ ~% ^3 s. C
' P3 O6 Y1 I7 f$ vim /usr/local/nginx/conf/nginx.conf
% D& j( x- Y8 J6 Z/ q& w
+ w1 X) }! {; q: ?% n* _2 j! F3 n, D4 b' Y6 p1 p. t
server {. k2 b, g0 j& D0 j* z% o
listen 80;
! B4 ?; z1 ~$ L- Z- S server_name example.com;" i# L/ _, C: O
$ c/ z4 B9 \" x; d# a( \8 q4 ^* y+ a ^3 ~4 c
location / {
! N2 r0 d5 c! \+ M! u8 Y6 R+ \" W ModSecurityEnabled on;
+ ?0 o8 T. n: m9 B ModSecurityConfig modsec_includes.conf;7 ^7 }" x9 \2 R' J) F
root html;
' {0 N! F/ J i3 Y2 B7 e/ u0 y index index.html index.htm;3 M! ?/ y* C7 X2 p
}% T* @$ Y8 y* @
}# P( q' T) O* b
使用动态模块加载的配置方法
- _ ?2 n4 {; q/ F' x8 X在需要启用Modsecurity的主机的location下面加入下面两行即可:
9 R$ i4 E7 C% }4 x: V9 o& Y' w5 D0 y, @9 z2 m) j# Q- E
3 @1 y1 E' D1 s$ _( D7 v X2 pmodsecurity on;
1 k) l( Y( U; p) a% pmodsecurity_rules_file modsec_includes.conf;1 Z/ S" L" r# i- F' b
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。. D4 \9 y1 y' d @; V7 x) k5 _2 c
1 Z& u5 a7 N; r$ I' q0 z; k
4 `; B5 R1 b5 N1 p. f- g4 G
$ vim /usr/local/nginx/conf/nginx.conf
- {) ~* S G# u1 i" j! s7 L. u( I/ f
* `( g) w9 ^+ p+ V% `( {" }server {2 s+ R: O2 A# T7 K
listen 80;
( N: Z/ u+ O' d) ~. H0 L server_name localhost mike.hi-linux.com;" @6 M, g8 z8 X' z
access_log /var/log/nginx/yourdomain.log;
# N" I$ f" I: e) l; U2 r
- x* L. Y0 u2 i7 _6 y
6 e7 g2 ^9 @$ H$ c) y% l! @ location / {
% F0 K$ H, P" e7 x. I8 {% r% d$ O+ d6 z `3 s/ x
( c& C1 W) ?1 Z modsecurity on;
9 T8 H7 @# @; t) B2 k' k1 ? modsecurity_rules_file modsec_includes.conf;
% e0 }" W: c/ h# e root html;
0 C/ v, c0 R) p; j index index.html index.htm;/ w0 m8 Y) Z& ?! P6 n* j
} `3 d+ R! h: s
}5 q0 V+ z# S) `! G* s) s
验证Nginx配置文件
/ q" l% d% B! ? n: o& O! \' r$ /usr/local/nginx/sbin/nginx -t; ^ p$ K+ }4 g
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
' O+ E1 C5 X) n Q( j% C6 Fnginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful4 C& @; d6 D" G, Y s% s- S
启动Nginx
5 b8 ?* O2 W, w. G$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf8 T+ [( b- _; j; _- M
# L7 u) [7 Y6 m( z
测试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能够战胜更多复杂/未知/混淆的攻击模式。
, Z% z4 ?0 X/ X6 V: l* @0 X! ^ |