ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
G) _" G8 S1 S5 G' z
% C' v0 Y8 G4 Y# O
! l+ c; t. \) j在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
8 m ?- S) E- ^+ h/ ]5 I" l: e i2 V. t/ |/ L
( W4 c2 D1 P( j. [ |
什么是ModSecurity8 y/ v' N4 v# X# R8 h4 D6 w
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。# [1 c7 o" U! g! n0 o
) {6 d5 l. V U# _
( U6 T; A' Z5 e# J1 ~( _! s7 c: q
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
/ i6 `' S( c# p1 y) M. `" l2 N: g4 Q
8 m4 c: }" A4 V, ~8 z/ J7 n) D
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
. x H) y0 S! \. V; h! g" Q/ f
0 b; ]' Q1 [+ J( }& t
6 d8 W z1 H, I" |官网: https://www.modsecurity.org/2 F/ r- M+ N+ z
6 X$ f. ^# G; l9 |- D1 u5 R8 {" z
2 N& s9 \$ W0 t$ @6 U什么是OWASP CRS
+ H/ ~! ?" F8 G7 p* rOWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
- b9 a2 P; a9 M& X: V
% T- ~. Q- ^3 d" _! ?5 B, `
2 x) Z( R+ d% FModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
9 g/ A( x" n7 J8 T# X3 v5 e* Q, _2 u, a. o& O# c9 w8 k- q
8 H( a% \& R- }" r3 n, h* pHTTP Protection(HTTP防御)0 b+ G4 A8 m0 |6 i0 s3 }/ j
HTTP协议和本地定义使用的detectsviolations策略。) s& o" C2 u2 d( V0 @
# ^5 B7 l7 M( H. j) F( h
: W) i/ G4 X0 O" ~% x* uReal-time Blacklist Lookups(实时黑名单查询)& q r6 J- r" z* q& e: S5 y
利用第三方IP名单。6 Y% O& B i# o. i% J6 Z
- N: ?5 q7 C. G' b) Q; n
- Z& F9 Y, {2 ?( W7 ~' f$ qHTTP Denial of Service Protections(HTTP的拒绝服务保护)
2 {% q' u+ {- M5 o4 \% Y防御HTTP的洪水攻击和HTTP Dos攻击。: l4 ^ N& J) }0 i
$ ?" t' P1 I) P9 S
+ ~+ V* W( x- a! v& T! @6 U& kCommon Web Attacks Protection(常见的Web攻击防护)4 K" R- G# ?' o) w y" W: V1 f; L
检测常见的Web应用程序的安全攻击。
: D) q% A* e% a: A
; v/ s0 A. @4 x" t
3 d9 H$ t2 j! X8 X' w, n" P: @" XAutomation Detection(自动化检测)* U$ S" u" H. n8 c
检测机器人,爬虫,扫描仪和其他表面恶意活动。/ t5 X( h' }/ r! k
# T) J$ I* M3 T0 {9 `* \
7 N1 Z2 _1 Y% G+ d; i/ R3 g/ n
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)
5 o* p5 g$ o8 O& y4 K检测通过Web应用程序上传的恶意文件。
6 ]3 l& ]/ i2 j, }( x; a' {% {$ K) ]7 ?( N# C5 f7 J" d
* Z% y2 v; _4 a8 J; |* ~
Tracking Sensitive Data(跟踪敏感数据)! N8 O A7 c, e
信用卡通道的使用,并阻止泄漏。
$ _# p. H" o1 Q0 i1 e3 r6 g3 P5 K- }% L# a, k* c5 y$ c
$ [$ m1 c" t& W7 I( Y8 R/ bTrojan Protection(木马防护)
& o7 f9 b; Y, ^" \% n0 |检测访问木马。$ R0 O4 d4 _+ m6 T
% ~! L, A. { q: m- Z( j3 ?% X9 @- C1 J" p* Z$ a
Identification of Application Defects(应用程序缺陷的鉴定)5 I6 j x9 f [1 d" N6 k7 v, Z+ Z: ?/ o9 i
检测应用程序的错误配置警报。
8 B5 `2 h6 }- S8 D5 \! Z8 E, ]4 k. h$ v1 z7 C ^- p% k3 x
: l( S7 B' z$ M% vError Detection and Hiding(错误检测和隐藏)( H! I9 v! v/ m3 j8 m
检测伪装服务器发送错误消息。
* B! r7 c0 Y4 P% ^( W; A. c: c2 L& O) Y/ Y' M* u& [
0 E5 q" N' P0 {2 K
安装ModSecurity; i# W1 o6 G: J6 L: e; Q4 ^
软件基础环境准备! N8 `7 r2 i( b' |, ]
下载对应软件包8 I3 z& H/ }+ x& f
$ cd /root' K5 O \! a0 `' t! V* G' I6 p; b, F
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'2 \- Z& d6 r" M: t+ |7 Z0 G
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz
7 h7 `4 D3 W& x6 j5 ]安装Nginx和ModSecurity依赖包) x& P; `! }0 c4 l4 o1 e9 H0 M
Centos/RHEL0 E) N( `: Q5 _ W3 [
' M8 ^7 J- H0 |0 S. G
4 a8 |. g3 x7 }' l0 q2 q- c6 y3 l$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
" S; B9 K J( k( G6 J9 gUbuntu/Debian7 ~1 W" F: | y; t
( Z) x4 |8 E% I+ [* t- z l5 }" K6 ?# X4 j/ _# T
$ 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++-dev6 J# @$ ` p6 `) q% z
编译安装ModSecurity
4 g+ b4 T# n& g6 SNginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。3 h( Y! @7 G% o* g- Z* m! Q
: s' v! E q( b$ i5 [
" G9 ^0 ^: H7 e# g4 U
方法一:编译为Nginx静态模块: ` ^% q* j8 Z% a/ a
" }' e; N) k/ e
% S+ R; f1 ? e+ w- a" u: S! h* l4 x; d编译为独立模块(modsecurity-2.9.1)' ^$ Y5 O8 n! Y, d2 {
$ tar xzvf modsecurity-2.9.1.tar.gz
/ h( q. B* `; G* ]& k" l$ cd modsecurity-2.9.1/
0 T' t ?$ x# p7 [) x5 P$ ./autogen.sh
# [& ]3 E% S! W: O" f! O" m2 S$ ./configure --enable-standalone-module --disable-mlogc
' A$ ^' T- T9 n' `7 \. e5 k$ make1 E% ?5 P; s% r3 b
编译安装Nginx并添加ModSecurity模块9 v$ L/ i# y3 Y) O
$ tar xzvf nginx-1.9.2.tar.gz4 p1 `; b; b# K" `" N% V& u
$ cd nginx-1.9.22 M% |9 `0 T7 q/ `
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/; O& z4 P L0 }4 G
$ make && make install
) @/ J0 b0 @+ N3 |9 a4 i, r) E0 w方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
, U! `% y: d& _1 Q+ i( A8 _; O3 X8 e r! S% O" V" e1 G b" {* R
- t( O8 {- ?7 _# S8 Z) L! o编译LibModSecurity(modsecurity-3.0)
. g6 D: H% K8 }# p+ C+ ~$ cd /root
# \. F6 V2 n) W$ git clone https://github.com/SpiderLabs/ModSecurity+ _+ k; N/ ?. }# }
$ cd ModSecurity
: V! Q* Y4 ]2 L: D% N3 w$ git checkout -b v3/master origin/v3/master
! P. L7 X D' |( `% K% J) ?2 R+ `$ sh build.sh
. O! J$ w( F) v7 h( R$ git submodule init: q+ @9 F7 \& a1 B
$ git submodule update
* t" I: m+ u+ R' Y. N$ ./configure# W3 U9 ^5 {% M7 ~: j4 W9 S) W% ]
$ make
9 e3 O. i8 H0 @$ make install K6 i2 k& x* l& K& ]& n! d
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
& ~0 ^! a% s! ~% h% y6 P% b
; g6 x, V0 L9 S2 I& b6 m7 p) d* x, e3 U& G2 e
$ ls /usr/local/modsecurity/lib! k, z! E0 A' Q% T" F1 h
libmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0
" L- u( i* W- W& F" I- V) D编译安装Nginx并添加ModSecurity-Nginx Connector模块% i2 v3 u' C# H3 A- g; L
使用ModSecurity-Nginx模块来连接LibModSecurity& c! M8 x( {8 P( M' E
$ d) n6 u* p) f4 K9 J5 v
! `' }" l" m+ u4 A% |: x( [$ cd /root
8 a) u: W3 V2 o9 v( t$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
, x2 I* e. c) q# t0 @6 I" t$ tar xzvf nginx-1.9.2.tar.gz. q6 @. G4 {% X1 D1 K6 @2 \
$ cd nginx-1.9.2
. y) m2 O5 o+ f4 W4 V$ ./configure --add-module=/root/modsecurity-nginx4 }" ^" r+ U$ G1 A% c5 v2 T# |6 J
$ make
; o4 F0 r! K j% g/ p5 c! y$ make && make install# U8 n m% x: ~2 k- [: I
添加OWASP规则9 V- v' I% n- Q I! d: W
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
6 d2 S% ^& d* U1 ~0 `3 J" }9 m4 i- y
% o/ [3 C; V9 T/ K
下载OWASP规则并生成配置文件6 K }1 ?4 x/ d" x
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
$ p+ m- P1 g: h/ x$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/
' Y. W' A. Q- i' F5 Q* u! _; r7 F8 |$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
) y7 v9 H: C) ~5 t$ cp crs-setup.conf.example crs-setup.conf* n7 i! p' k, o: o. H
配置OWASP规则0 {! ^0 Z5 I+ @( |" C* ^
编辑crs-setup.conf文件
g: l" H( I/ W [2 w4 h7 T; q& U, K: k8 f/ g' s0 J. o* R5 h1 P
1 i' h1 u/ I9 N
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
0 F+ W: q) |2 U O$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
5 v( C" }; U! D: Y V; W$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf7 l6 T: [/ f: W% W- Z! R
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
' n2 L8 ^9 d( t7 D, o默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
! t) D* M7 F, [& E" @6 Z0 r/ G6 J+ E1 @4 X; X5 d5 r9 X2 @) v
5 h) c* y- \. [1 }1 P4 |8 @启用ModSecurity模块和CRS规则
2 d* }% q9 @5 Q0 z8 y复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。8 v: j2 c N5 I& y1 k' I/ o' n
2 \ ]) [. O1 T. H Y; P' g7 w3 [4 B; I+ U$ N+ d
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。/ f; l. J- I2 J2 D1 C6 d
& X- X/ e; c- z k: Y0 i' n6 D+ }' B, T1 ]. V% `+ R2 p, P5 A
$ cd /root/modsecurity-2.9.1/
1 a$ z' W0 i7 a+ m3 u( [$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
3 B5 v: k7 W# `# @ T: z; U$ cp unicode.mapping /usr/local/nginx/conf/
4 X% @5 B5 W# \+ n2 }将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。0 |; h6 }/ w- y* I$ ?4 f( a, N
- k6 v6 j% q# J
% j7 c) F; ^+ X7 g# j& A! H$ vim /usr/local/nginx/conf/modsecurity.conf/ U2 q- V2 t8 X6 d# K9 ?; B, v
SecRuleEngine On
( ^/ q q' \/ a. nModSecurity中几个常用配置说明:! u; ?# J+ \- m
[$ a2 j0 M4 F2 k/ I: }0 i
3 \) L9 a4 f8 q8 I" a* t1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。" I6 l1 E! R7 t( \
& U7 a, [4 O8 `& B) M/ s/ F* V
# u H5 ~8 [* R- D" E& K1 V
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
" x; R0 {) j- l3 r: v" |" R3 J9 W2 _1 A
) A0 L" J j6 w# \) e. R0 Z1 C
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
5 g2 P# q3 ]% P5 E* s
# @0 V* D0 ^0 Q/ C6 b; P
" K$ \6 N5 c$ i% j( v: k/ y# }/ L' ~4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。. l, N" [; c/ I- M: w$ k
; \1 d' s% x, w9 N
' R1 D% C6 p& r$ O' K. _在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
5 a9 t7 J5 G: n' [4 p
2 Q$ B# a* B5 b, ^- [" b9 p$ y) z9 w/ B6 p$ e
3.x版本CRS
" G$ M" u/ _3 x- {$ cd /usr/local/nginx/conf/owasp-modsecurity-crs# E" }. x; o. a d* _
# 生成例外排除请求的配置文件& S! Z; [1 z C4 O; b
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
/ l7 `! C5 i! F9 U; ~9 N" R! `' b5 [$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
! N$ H4 R. O$ ^* F( s6 f- V$ cp rules/*.data /usr/local/nginx/conf( }( Z, h" w7 `3 I/ r
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。! b3 g6 p( }1 |1 i/ w1 h
/ U1 J! O: T1 ] K8 A
# b# N8 Q+ K$ ~6 C
$ vim /usr/local/nginx/conf/modsec_includes.conf$ a( U+ h0 m P8 P0 W
( {! r) N3 U- ?* H
[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 6 I& Y, L6 x- v5 v& t+ o
' ^' u2 B* e% r% J& |
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
8 F( F4 H% m [2 Y( ^1 y2 C6 v7 W& X, ^1 g, l3 P) m: h* R9 d
4 p& W9 P' i, p! y5 `7 L配置Nginx支持Modsecurity
$ n4 D: `/ K% C, M, Q; F启用Modsecurity
: }, `1 t" i( I9 p. N使用静态模块加载的配置方法. o4 o D+ i* j Z
在需要启用Modsecurity的主机的location下面加入下面两行即可:
8 h7 x) A! @: q5 e* R; W+ x, h6 }. L3 o% Y# I
5 k; L* S7 e: l2 S# c! T
ModSecurityEnabled on;4 ]0 m* o# C* u5 S* e8 F6 W
ModSecurityConfig modsec_includes.conf;& m }, A. [1 G: w( j, E$ C
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。( i' V" p0 o; G+ b6 x$ b: w9 u
1 n% g+ @- j J0 M
1 X$ q$ ~- k8 ]7 O& @1 W) p
$ vim /usr/local/nginx/conf/nginx.conf
1 I- R' J3 Z. s K$ [' u3 T, \% V \8 s6 v2 Z
: A9 B4 l0 q$ ?/ f1 T, \( H4 bserver {
~, P8 p, l" T: B) M# C3 Q R listen 80;# D. N3 k2 J/ b( a3 M+ l7 S' r
server_name example.com;( ]% f; ]$ @: ~' F, ]- U+ C- q
1 B! T1 J! }2 w) K/ p. v5 m% K z: i5 C
location / {/ D) _- S4 k0 Q; j5 L! E
ModSecurityEnabled on;
" G+ z3 L5 z1 W, F* m ModSecurityConfig modsec_includes.conf;( N W- \, {( S. |( \( c. A; p
root html;: m+ `$ ?! R) {4 q
index index.html index.htm;5 ^0 W# ^8 n$ k/ t5 \) ], U% \
}
" c4 F1 ^: _+ a}
# |& f, [+ _& F7 X3 Y( s使用动态模块加载的配置方法& w$ @4 `( k! P6 g
在需要启用Modsecurity的主机的location下面加入下面两行即可:
0 x; W/ N2 i X. r/ L9 ?3 ~- L7 E0 D. s( F
) Y. t. ?) h" L7 \; Xmodsecurity on;
6 x$ U! o- ~$ B% gmodsecurity_rules_file modsec_includes.conf;& `* }; M' | y
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
, ]' x1 q W* p4 v- v' T' E2 A9 A l
, x- s4 S: d5 P( E. s2 d% ^; V
$ vim /usr/local/nginx/conf/nginx.conf2 g2 @" r" p$ D
$ I& w3 r" j+ V* P( }0 Z
5 j" Q* X9 \% z. I& Q
server {
- k) z6 }' m! i3 F' L6 `3 \4 W listen 80;& |5 |6 t7 ^! e- R
server_name localhost mike.hi-linux.com;
% R% K: z# D# Q" B5 \/ k Z access_log /var/log/nginx/yourdomain.log;! m- \; J" N9 I/ l* ^! @$ \ S7 v
- e' `6 N1 W9 t! H
; Z/ @, ` p$ `0 ]3 V: t6 `
location / {. i2 R+ u# k8 W+ R
- r3 b( E/ K9 O2 Z7 d
1 V2 z" X6 L4 E& f
modsecurity on;
! \( ~+ r- P& M3 e, n- K$ w modsecurity_rules_file modsec_includes.conf;. d. w6 E# M0 f: a/ m) S/ s
root html;
% g4 t; E( U0 P" v5 t8 D index index.html index.htm;
+ u/ R; i4 q% b6 K4 [}
$ ]( ?7 W9 u5 C; b, T}( \2 _ g# D4 y2 t3 U& c
验证Nginx配置文件
5 U- E' H5 \2 F* n8 b& ?+ I$ /usr/local/nginx/sbin/nginx -t
; d2 X W. o- Y0 R1 hnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok" U. i" B t4 f9 w6 u5 I! q. c
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
& J/ P+ z0 j. y# @启动Nginx
. s8 t9 x1 A& J/ F$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf3 {- @& ~! n6 M2 u9 `$ _5 @" L
$ p+ a# f* p7 `& Y( \
测试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能够战胜更多复杂/未知/混淆的攻击模式。
- n# c3 H* r8 R- ~% r ~ |