ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。1 B1 M, l( M6 J) M2 q2 p
' f2 d# b' W3 A
& l N: z0 g C( _在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
* F# \0 @$ a& N4 v
) a" N3 m4 ~8 e5 u
0 B/ u' a/ n& a4 S* n6 Z什么是ModSecurity) s% S3 p8 @# u8 [* W0 c' f
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
1 c; ?5 o/ H/ E9 O- i/ J: @$ L! G; S- O7 g+ D
9 {& B9 {& m# L" o i, C9 OModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。0 ]9 w6 [ W6 c, y6 }4 _, Y
% m3 `1 g7 @1 E f' X
1 g1 i' n) ]& t+ G/ o- YModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
0 y, m7 I: [( ~9 }) E7 C1 Y) R' ^
& u# @3 U8 @* N* s
" X* D2 Y* I5 p官网: https://www.modsecurity.org/
6 ~+ {8 r0 ^' d8 A) D: B- O+ O# b1 P& w$ ~6 J9 |
5 u8 m: F: Z9 A4 G3 p$ H
什么是OWASP CRS
; m) V1 ^2 k7 k( |6 SOWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
% P# \5 E2 z: [; t& h2 s- l
$ @; [: E7 i; |8 O5 _/ X' D! f
5 {( o0 t. W9 q4 RModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。- F4 S3 |) F( ~4 j/ E
% _& ~9 j3 ^8 t0 q, C, {" E, k0 `/ C# P) ]6 j8 G, w% z
HTTP Protection(HTTP防御)
, g6 B) o4 [; n7 K* |& g% f2 Z2 `HTTP协议和本地定义使用的detectsviolations策略。$ x2 _4 [( a7 v
2 i+ {8 T" ]0 ]! k U% x8 D$ j0 z$ ?) _- J. l- k; @ c
Real-time Blacklist Lookups(实时黑名单查询)
, ^! o3 D& e! J利用第三方IP名单。$ [4 R% m$ c. Y: z- f2 g* s
& O( c% Y5 U, S+ \
( W/ Q: \( X& C, y6 [0 N$ THTTP Denial of Service Protections(HTTP的拒绝服务保护)
3 X c$ L+ a& G防御HTTP的洪水攻击和HTTP Dos攻击。 s; x+ `3 a' c. o$ P+ M
7 E3 O' t( `: t' f
% H* A4 g+ e' v' p, u3 v6 r
Common Web Attacks Protection(常见的Web攻击防护)
6 J- u. l" U+ h7 s# W% e检测常见的Web应用程序的安全攻击。% s; L* m: b. Y- Z
( z/ \# H0 r4 Z" l* K, D
, {( K" _! j' ~* `
Automation Detection(自动化检测)1 m+ m7 B3 h: [, ^; F3 ?
检测机器人,爬虫,扫描仪和其他表面恶意活动。; v; C% l0 F( m8 j2 q$ _, n: J
. `7 o8 F% y* s- ^$ E" f
! e7 n4 L0 F' f! OIntegration with AV Scanning for File Uploads(文件上传防病毒扫描)
8 r8 b1 L7 U' @% ?+ f检测通过Web应用程序上传的恶意文件。
2 h5 A" B- I! m) u: B+ g: N/ Y
7 T& V# i) j a3 Z8 L3 G; x8 j! Z% O6 g/ _# U
Tracking Sensitive Data(跟踪敏感数据)
! G$ v) ?% l# C信用卡通道的使用,并阻止泄漏。+ z% T2 k! m4 e. \5 P* W
# n0 F9 Z" r: o9 Z0 `+ ^& l* p2 d8 u
Trojan Protection(木马防护)# N: ]5 P! A5 {' `) s: j0 B
检测访问木马。
& u7 F3 D& ~+ M! S' }- ~8 Z3 T8 c) ^. o$ Q
: O' V9 o) X: }5 M& t' }
7 t7 ?% M+ O9 M& AIdentification of Application Defects(应用程序缺陷的鉴定)9 R5 n! f" c. n2 F- w
检测应用程序的错误配置警报。
4 K: Y' V/ Q( C3 t, a+ S* u1 ?; E( J' D8 [9 h+ _; T
1 G" N( W" Q) J
Error Detection and Hiding(错误检测和隐藏)
5 d- o7 |, e" w3 b检测伪装服务器发送错误消息。$ u! a9 T j* j9 u& s
+ c0 [0 F" A7 e5 b9 F1 @6 C) A/ W h* }/ Y) ?
安装ModSecurity; @# {& ]$ s1 w2 l
软件基础环境准备
) i @9 K& A+ B8 E$ q ~7 G, D下载对应软件包
$ k& P8 Q' b' c7 j$ cd /root+ S: _2 D/ ?/ Y( z' D
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
# `: X/ m; j1 i# P x$ D2 C$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz0 ^/ k+ t3 _! B
安装Nginx和ModSecurity依赖包
: T5 \9 G3 s% c+ S: X) \9 z) e w H bCentos/RHEL
( c, B0 k: f# j. \6 Z: D. [- ^. T2 F+ K: b$ @2 C) G7 y0 f. k& C+ t
* R- ~$ ^, f# t! {' a4 R2 ?* r$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
" G2 Z: R" s# y: m% l( WUbuntu/Debian2 }; b' c. h9 f7 ^# I- p9 D3 j
( E/ @9 V! Q# @: k* ]7 d o0 G+ a' O
2 ?% C5 W, m8 v6 X2 J% X
$ 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++-dev5 g& C, {6 Q# u) c. g6 P8 E
编译安装ModSecurity
0 C& t3 G; k8 H. JNginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。" O- l1 N& G/ o8 J# u$ ~, U- M) |; I
. l1 W1 D" z8 H( f: K
8 K8 }4 E% ?5 Y! Q, F方法一:编译为Nginx静态模块
a5 o& d5 W, O; b7 {4 M+ U8 |; e2 Q0 M1 m. V2 ]
5 C1 F: n$ k6 _6 f
编译为独立模块(modsecurity-2.9.1)
; v8 \0 A. _ v- R3 ~$ tar xzvf modsecurity-2.9.1.tar.gz
1 T7 V" r: C' G! B% ?7 L$ cd modsecurity-2.9.1/" C. i% B# ^. S9 w; X: X
$ ./autogen.sh/ d+ t( y+ }2 Z- b7 P, t, O- X/ w
$ ./configure --enable-standalone-module --disable-mlogc
+ k g) z! Q# F$ make7 S' j; _4 m( ]) V3 p( S
编译安装Nginx并添加ModSecurity模块! V# a- u" \# [0 c& T- N+ g
$ tar xzvf nginx-1.9.2.tar.gz
2 e9 o2 u v8 K d$ cd nginx-1.9.21 t/ U& e$ f* O
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
1 n# d9 W9 Q" y$ make && make install4 y) w" M) M7 ?7 r# x
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块/ q/ r6 D2 [% F/ B. z
6 B0 `/ ?; U( V, _
0 f3 a8 }1 V, [: Y
编译LibModSecurity(modsecurity-3.0)
5 _! W3 Y! I0 P. A$ cd /root) Q& ]# c! E3 S+ f2 x6 ?# C6 T. D
$ git clone https://github.com/SpiderLabs/ModSecurity# V. s9 m9 O1 C# L; B3 Z) d1 ]
$ cd ModSecurity' c8 q% `; f6 m6 I7 y% H1 p7 p
$ git checkout -b v3/master origin/v3/master
: x, o& g& k3 w' F5 u3 ~$ sh build.sh
7 J1 W) ]; u: l( ^; }. ~$ git submodule init5 f$ u9 o" [; e# Q
$ git submodule update$ c/ c1 C6 A: o X1 O0 k" M. L
$ ./configure; |/ k( p- q6 Y$ ~6 {
$ make4 j; b. b$ z9 p% n4 B
$ make install
; L# m/ E' f |+ b4 u0 d& G& XLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。0 C* `+ W4 {, F. Q9 K! ?
@# V- E) ~' J# \; d1 J* j) ~ G+ P5 d9 i! N0 L
$ ls /usr/local/modsecurity/lib
9 A4 [4 r0 q, B7 Hlibmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0
0 N A, q9 f! C编译安装Nginx并添加ModSecurity-Nginx Connector模块 }! m! ?7 \# i/ k, G% V& N
使用ModSecurity-Nginx模块来连接LibModSecurity
2 C) A$ a$ d% _, {. C
5 s5 }% I0 c$ r- A! y" o( V
8 o5 Z! y, e5 I/ I. h" V' y$ cd /root" R( O6 U. [& v/ e: L7 M
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx' N% d$ X) r; M( l1 W; z
$ tar xzvf nginx-1.9.2.tar.gz# G/ X1 F7 O1 d1 _& v1 E7 @+ q0 |
$ cd nginx-1.9.2
2 n5 H8 F, I1 X. _ _/ C$ ./configure --add-module=/root/modsecurity-nginx
+ R" `) Z# x; Y$ make
3 Z0 b7 e; H* w1 |! M. T5 W$ make && make install: j2 |; v$ k8 O4 A3 z
添加OWASP规则; k1 G. x& F* |3 V2 o8 p4 r. s
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。8 a, U, e$ _. ]. n, j, F* B7 x
) _( M& Z, g6 O1 w% Y8 g& S$ d
8 F: O; D W. z下载OWASP规则并生成配置文件+ ^# k J7 q$ _- N. n
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git0 U- {' v( P& z5 k: B
$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/- o W6 h* b+ ~* F ]# i
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs$ r5 P9 `* t1 P5 S- {8 \
$ cp crs-setup.conf.example crs-setup.conf
& m! e0 Q+ t; L n配置OWASP规则
) f3 T. p/ f- C' S, e1 b编辑crs-setup.conf文件
- w, c/ D' H0 N- P
! D) T" F3 _/ S$ t" s1 }! B% b \: P# Q5 o. _( l# X4 [
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
8 j9 _; a5 D/ H/ h5 h$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
: L3 F8 [% h1 ^$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf* K' p7 K. I( ?7 Z5 \* o0 l- \; E
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf+ Q* h# K6 y, {' D/ L
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。. m% z5 ]: w1 G1 ^+ S
7 ?" F! t, G9 R! q5 m+ s
! i( a- j" f. C启用ModSecurity模块和CRS规则
3 X- D: u! K, k; @复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。1 c3 u# O" K& o X5 L+ E' o
! O, q! b/ @0 s9 k& k
" Z$ | U# ?1 P# N( n0 gmodsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
" H+ R8 H+ N6 [* f
0 M3 j1 s8 v2 U2 j* Q$ Q+ A0 L! Z9 M6 S$ ~+ v$ f5 |" Y
$ cd /root/modsecurity-2.9.1/6 T0 R$ h* I8 }+ X* W* k
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
; a J7 `2 G5 G$ cp unicode.mapping /usr/local/nginx/conf/2 n: L+ Q+ H% E8 y- P: o
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
- W0 u' `! u8 r: p9 A
+ P+ `5 i9 l/ f4 d, p5 X, s' m' O- j, w$ I4 E1 Z8 J
$ vim /usr/local/nginx/conf/modsecurity.conf) l1 T- s9 h @3 I
SecRuleEngine On) S9 t$ U+ G* \* H, I
ModSecurity中几个常用配置说明:! o6 s6 j6 x( F! y' b+ s5 M
2 {" h% {% G' p, R
4 B& u% k$ k e8 Z$ m; b$ ]1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
Z9 D3 k0 o3 }% _4 I6 y) e& o5 c O" u( c k& ~( {" m
5 y1 N: _" V! p2 X8 C
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。& k3 r' M* ?6 n) \
- I" Y o8 f3 h( u0 R! d! e
- H* t* n* m- M. V8 S, k3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
# J) n0 Y( B2 N7 D2 r
: L" ]- @. ]) D
8 U/ [. C% H, B% c; W# T" y4 p4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
5 c" }7 x4 h4 W& a6 h4 E4 D( T
3 {+ S9 B: m! |: L- }4 r5 ~6 X/ L' I) u4 B0 K& X
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
9 R5 T1 [4 |$ x* b% M4 ~" Z6 r$ @: R4 o/ H
$ l% N' t! g/ D9 ]8 D
3.x版本CRS% V% H/ f3 o6 g8 L) K
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
5 v9 r( n( ~4 j5 D9 Q# 生成例外排除请求的配置文件) E( p5 b# }& V. T$ F
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf# {7 V. t, m- D
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf5 U/ {, v5 n3 G
$ cp rules/*.data /usr/local/nginx/conf/ N2 L; R' X& M" y9 x5 M
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。6 y ~) u4 \ L( H4 w4 K
, J" V: d7 N% Z7 ?
' ~* V e+ |- Y; C
$ vim /usr/local/nginx/conf/modsec_includes.conf
7 h4 g6 e! _5 F: Y* m I( C2 W4 m
8 l/ C( h2 n- m( I; d6 ?+ s9 s- ^& u[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
% W* K! X+ i# P5 F# H7 V: y. A# {/ H/ Y: Y
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
Q/ ]% H, M( a5 \* i2 e( Q+ u6 s2 t' i
' K' ]8 a2 e/ [6 y* d! F
配置Nginx支持Modsecurity7 ~% _& v: [) f/ x! Y
启用Modsecurity) b$ |( [0 h1 R }8 l
使用静态模块加载的配置方法5 ?7 C- h* W% N5 S3 f2 @- t( ?
在需要启用Modsecurity的主机的location下面加入下面两行即可:) p* c4 z) Q6 H$ g1 u1 ]- w5 m) r
1 m# H/ \. E' z8 l% o8 t
3 F( U. Q0 a$ `4 {ModSecurityEnabled on;3 f$ _" \1 B( G# q
ModSecurityConfig modsec_includes.conf;
" N9 C$ P+ S! K0 k; f+ e$ P2 |. ^) l修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
) d5 a" [( y3 `. y4 g0 V3 U* m% _8 g& ?9 j# M# d! V! L
/ z: C- o: q0 M$ P0 N) v; @, Y s
$ vim /usr/local/nginx/conf/nginx.conf) W+ D6 S$ S6 Q3 @& S$ z
" k9 @( ]% `& J; d U, Z# s1 E
- ^1 F) Q; f; {* }8 Dserver {
u& H/ x" ~2 M- ]3 U7 r listen 80;
, u) P' j% f) n8 E server_name example.com;
8 a" }' [; D% V4 l& f6 T8 L& s8 V) H$ n
1 R/ Z$ s- l, Z
location / {' A! g4 V+ a( T' u- U
ModSecurityEnabled on;
N# w5 Z M, X6 A( L ModSecurityConfig modsec_includes.conf;# m; O/ g U% S8 u
root html;: ~" C/ C5 \) @4 v! }
index index.html index.htm;1 q5 c5 K* l9 m' a$ j3 b; A4 Q+ x1 x9 g
}/ b% m2 I. w: L
}
% y$ T3 g5 I5 D使用动态模块加载的配置方法' G, ~/ u! ~9 c" C! A% o- w! e- g$ F \
在需要启用Modsecurity的主机的location下面加入下面两行即可:
/ G7 i/ t+ u& s s& l, C$ g) L: p0 _% V' |; U' Q2 ~9 F a
5 G0 c# X @4 W$ v j, x2 Z8 ]" U1 R, Dmodsecurity on;" Z" m8 \1 b9 |0 h8 z
modsecurity_rules_file modsec_includes.conf;
4 f% K) R; n. m6 W! B! f修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。& p; g% {+ ~ c4 Z4 i
0 s$ V+ d' e4 \. N B! ^6 n: m5 K3 S0 E( m3 g$ ]8 i
$ vim /usr/local/nginx/conf/nginx.conf
2 X2 H/ a( j: g+ s- X+ C: ^' r- T$ n- ^* [7 N- I) ?
5 p6 S! ?+ Q* i2 a) R
server {- ]% w0 P3 C' ]4 Z/ m
listen 80;
5 G9 ]+ H/ D t7 u5 \$ _2 O; A server_name localhost mike.hi-linux.com;
5 V3 R1 l4 W0 I& u0 W" A access_log /var/log/nginx/yourdomain.log;3 e& } w: F; g( O
$ h b+ `6 L, ~" ~ s4 U
, E' z0 c0 p/ U. L
location / {
, U3 b0 o" ^2 n/ D) A5 L: B* o5 N% p& n0 C
* R/ G0 `/ y- y) k h; T modsecurity on;
' |# G$ }. `. w- z! H modsecurity_rules_file modsec_includes.conf;1 K/ Q5 t6 u: ]
root html;
5 ]: ?" O" s, N& i, c2 n6 t" u index index.html index.htm;
2 Y3 I# }6 V; v}
0 m" u& X( s/ o! i8 k}! i" e }) t( H
验证Nginx配置文件1 ?5 u" X+ z- M9 `* |
$ /usr/local/nginx/sbin/nginx -t
% E8 D7 g6 k! l5 O( h% F4 mnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
8 ?/ R. A" W# M5 ~/ [3 Q/ ~nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
/ v' `1 x( I# `* D6 d启动Nginx4 s0 C& c* W. A' z$ t
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf/ @0 v4 Z# E* G0 l- ?/ W
6 e1 q3 n8 f/ j
测试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; Z k2 q4 O
|