ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
. Z/ Q, @+ L! v* `, m% L4 X \; Z/ V
$ L* Y+ E) I& }) e, }0 G
4 \$ Z/ r$ C9 a& ~) W* c在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
4 d9 j! [! V+ C- {1 P( O! G# E: L0 W0 U/ N; s
+ \. y; y" T1 F {% r什么是ModSecurity
; X- N; D& s5 nModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
+ g W/ o0 c+ y% a$ D2 T" b X4 T* p7 F% y
9 ?7 E' |! o* M" t, }ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
, \+ U: G. w% P p" ~+ V3 n1 U! A2 v) w7 q
' Z- W6 Y; ~; o. q$ j7 K
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。* @; S8 X# N) ]
8 {' j b8 x% ^
X$ B$ R/ }7 |5 s. W官网: https://www.modsecurity.org/
5 v( ]% m6 p+ L/ T3 L0 x& k6 a. e( j3 z- H- W" a$ c6 O
+ T3 v1 n" w- I7 M5 R! P& o2 f i什么是OWASP CRS
- u8 J& ?* x' W) f7 jOWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。: d, E$ p; c4 _+ V \* [
9 S3 b# N/ [7 x- y- F$ x. J
3 U, K o4 U3 i5 H; a5 ~4 W1 m
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。: o1 `: {. ~8 y( U5 v8 l" W
2 ^! x5 u5 a" @. a, S( J! t
# t, F/ s+ G, ~* ~* O4 n0 k" UHTTP Protection(HTTP防御)- m& C3 L0 j4 c1 ~+ R$ A
HTTP协议和本地定义使用的detectsviolations策略。& C4 B' N9 u Z$ q% {. o
: u; j8 W8 y5 P9 r: B/ h! V8 X8 L
# Z, _! u# K2 i2 ^2 I) c, _( ]Real-time Blacklist Lookups(实时黑名单查询)
% m% B; k5 n1 X3 _: z% ~利用第三方IP名单。# `" ?( F5 W3 k5 F8 e
2 f8 s3 y: d9 E
- U3 B: E, ^3 q$ a# J5 ]' sHTTP Denial of Service Protections(HTTP的拒绝服务保护)
- I6 S8 S3 g S) n# M6 ]防御HTTP的洪水攻击和HTTP Dos攻击。
3 A7 F* t9 k1 f' O, j5 {: \* _; C* g- Q3 K$ u3 s
) G o/ l5 F; h6 W9 m7 S, @ ACommon Web Attacks Protection(常见的Web攻击防护)
, C$ D7 K* Q2 R检测常见的Web应用程序的安全攻击。
8 J( v; G( o% |8 V& D
/ r# @2 D/ H( _7 F: T& y* Q: J4 F
8 L2 B$ S! ^6 xAutomation Detection(自动化检测)- s& d+ X6 N* `5 }/ }& V
检测机器人,爬虫,扫描仪和其他表面恶意活动。
+ S1 c! q+ Z4 ~ Z/ O1 a
; k9 @* C0 D5 w' Y v) Z) Y' h5 ]; ^$ {" n/ h, ~$ t5 J$ ~! q. O$ V. u
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)
) v( _- Q. J7 J! @% y* U! W6 C检测通过Web应用程序上传的恶意文件。
+ a" O* @6 L. L; w6 G, O) T$ s/ H0 z" k1 _2 f) Y
# Q- s( j* e$ R0 R: C% K0 E
Tracking Sensitive Data(跟踪敏感数据)6 s! H, e1 E+ K Y& ]
信用卡通道的使用,并阻止泄漏。% u0 Y2 O- P# _, A5 h7 p: C
4 e( ?. [2 S \% R6 s
, n# k* e% D/ @+ BTrojan Protection(木马防护)
' S$ k5 T1 p! Z2 Y; t8 ^" \检测访问木马。# v6 q" p9 n; h8 ]: ]
: m8 x& @0 x+ _: G
3 N: m* A: K/ s& m) |Identification of Application Defects(应用程序缺陷的鉴定)1 S( [- D/ }7 t4 J F
检测应用程序的错误配置警报。
9 J' D" N6 k6 d0 H( i7 r
; y) |4 ]; @2 E; @2 {3 A: x/ o0 I) ?# r% g6 f2 t! i# h6 N
Error Detection and Hiding(错误检测和隐藏)
7 L; R# y: J+ h2 h' U4 e' F检测伪装服务器发送错误消息。. h( c$ k. p3 @5 h$ A, p3 p+ ^7 h
5 F# i# I, [% s; V* h! ~
9 D+ \- |0 X- j+ P6 F& |安装ModSecurity) P' ]+ J6 R( t
软件基础环境准备
: W9 D' f# r& Z下载对应软件包
# \3 A: x+ E) q1 w+ E% C s# X$ U$ cd /root6 ~$ ~, K4 K5 U7 s* |
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'8 e- s3 W2 [8 _2 f8 ?
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz. r" p7 \2 D# s9 X
安装Nginx和ModSecurity依赖包3 J/ ]) n- w8 t
Centos/RHEL
! _- R, G( k# [; l8 j9 K! S! t& ~6 g
' E; W- @2 @. K5 r4 I* N
$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel9 a& k( E) S; {7 Q
Ubuntu/Debian
W& T- V- ]) H3 X
$ W( t& ]7 G: L$ c$ m' Z8 {- A `
+ X3 L! t9 y4 ?. \$ 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++-dev4 V0 {+ s( w3 B, @* D. X
编译安装ModSecurity
9 C2 X" \7 B& e3 Y; t1 q, b! CNginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
* j T4 |2 D9 g6 a c1 |+ j( p; L R. W
+ a1 p' ?! v, i) p6 Z f' x4 [1 l( c
方法一:编译为Nginx静态模块
, s6 t% |4 y5 }
( b! U+ n- D+ w$ T* g9 t2 ]
% y, v, D0 S. {' J' ^+ \; U; x编译为独立模块(modsecurity-2.9.1)+ s1 r6 w- D3 B+ c) n
$ tar xzvf modsecurity-2.9.1.tar.gz; ^* i( F6 |" x% ], E/ U! N
$ cd modsecurity-2.9.1/" O+ [4 ~; o3 t! Y _: m
$ ./autogen.sh
& o9 d5 M$ _( r, G9 s. {6 i6 A$ ./configure --enable-standalone-module --disable-mlogc" b( P# K/ a$ C0 v" i
$ make0 g% d9 ~/ X7 v+ J- \
编译安装Nginx并添加ModSecurity模块
! I5 z* {6 s* m, L5 ]' j$ tar xzvf nginx-1.9.2.tar.gz6 A; @( G- C6 T0 c# y
$ cd nginx-1.9.2
" F- Q& J+ A" c/ @& @: z1 L$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/9 g* c8 a. O% x9 F
$ make && make install
% w3 P! I/ z% K) y( \# ^2 V: n3 n方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
& F- R0 N& o" t/ N. I& N. n
. n) s8 ~' ]1 c4 A
6 }/ T% C% x4 e! e- z编译LibModSecurity(modsecurity-3.0)% s! f3 w8 G/ r
$ cd /root
3 w$ B. B. d6 @% O& B4 J6 q$ git clone https://github.com/SpiderLabs/ModSecurity% N$ J! F9 F! k
$ cd ModSecurity* a8 J+ `$ X4 G
$ git checkout -b v3/master origin/v3/master; r0 Q, Q, E* D% Y! f3 l7 \2 t
$ sh build.sh8 _, Y. \9 c7 U8 f9 l& d+ o
$ git submodule init7 T* e2 U& s* j; I
$ git submodule update
. ^; F) r+ U* J1 r$ ./configure
) l* p5 U9 [( N$ P$ make
& G. z# U( @# [1 n2 K) o$ make install" D3 p" i% U7 s) ^7 k
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。. y/ w. h2 u$ i; [: o4 h
! p; m' u5 c' s
5 \+ B$ I# O% F1 d2 ]7 k2 C: r$ ls /usr/local/modsecurity/lib6 p }, x9 ~+ C" _; b
libmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0
: \7 @: b: v8 K" ^2 z4 I3 q n编译安装Nginx并添加ModSecurity-Nginx Connector模块0 f: R/ p, s) p7 g+ B4 v6 M: ~
使用ModSecurity-Nginx模块来连接LibModSecurity' M( u" O. I# D+ j- ~7 V# F% b
* ?& y3 ^* J- U8 i
; B* D- j7 d* U6 r8 ^/ i
$ cd /root8 I8 b0 N* n& _0 N) N9 h( M
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx6 X; E2 h6 v* z% W" {
$ tar xzvf nginx-1.9.2.tar.gz7 h1 x9 M1 o1 N$ w3 R H6 L
$ cd nginx-1.9.2
* `0 j' M8 k. W$ U( j& W$ ./configure --add-module=/root/modsecurity-nginx. z8 i$ ?2 {2 d) D# J
$ make
5 S* K* R% |" c0 E4 N. w& C5 g6 W$ make && make install
; p0 w$ d* E* @添加OWASP规则 J, K, e# E# }4 P8 _
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。: L+ _2 C* F2 Y7 S2 e1 B S" I
+ |: w: c9 i4 V% r @! L
- N3 V W% [) ?1 |( X$ b9 H下载OWASP规则并生成配置文件& l9 r/ \* t1 T9 @6 X) }- R
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git* B' }) k3 ]3 t. ]8 ~# T1 R3 t
$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/1 y p; c+ I/ M6 T
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs/ m" @7 |1 e& O, E
$ cp crs-setup.conf.example crs-setup.conf! B8 i" M R5 | x
配置OWASP规则9 @" M6 [- X' [0 A4 P% S
编辑crs-setup.conf文件
8 A6 n2 e, E [7 D5 q5 X" z! z1 h, M! l! Y7 b z. K
8 ^. M. ~/ J" [- o7 p/ V
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf# c- c8 y0 }) U& Y9 [3 b
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf9 R- Y( ?9 d0 A* u% j
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
' F; J! \2 c; P; O$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf+ w" [: U4 J( B8 F6 q1 O/ O- q
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。+ @/ T8 c5 m! ?& h' o# P2 g
- s4 S5 j2 I) \. @1 y( |
2 r* f. ]0 h5 t h启用ModSecurity模块和CRS规则
( k, R& M+ t c$ V0 Z- v3 M+ v复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
5 t& \5 U$ H" g7 H4 z! v; H$ D/ U1 j/ Q% ]( V
% r2 M% X1 v3 q& u! @& j7 b, y
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。5 M M( {8 c8 x' m1 Q ^* C6 ?9 _
: t5 m+ o% H: Z9 o. z& l- \
+ {1 z! V6 G; L. b% ~* c
$ cd /root/modsecurity-2.9.1/& F" D* ~" j) ^$ J+ X( F: P
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf 7 {- d) C1 l" k }" C: _) [
$ cp unicode.mapping /usr/local/nginx/conf/# F- }" a0 T1 c- z( _) R% Y
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
9 Y5 u; Y' H5 s% {/ I! T: H2 M( L( j/ Q# y& E2 Q8 u
1 O$ M0 y* [+ w+ D$ vim /usr/local/nginx/conf/modsecurity.conf
1 J+ x! E' Z7 J, ~SecRuleEngine On
% w7 f8 Z$ s5 @" u; QModSecurity中几个常用配置说明:. _7 O+ Q& a) |/ l4 S
0 f: {+ G; h7 N
1 ~) P* l& r; b0 c9 M0 |9 q- E
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
9 z6 m, G" G9 G. O' z
9 N; k+ h" u1 g! u) X
3 e2 i4 A7 C$ d# ^2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。# M# c' k( _* J/ B
5 ` {9 `& P2 |
3 W0 c7 [) c: `7 r' r3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
% G; o8 v5 `8 k1 O
9 \, f4 k2 k. }! J
& K* j- }9 H0 W% i4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。5 x7 b/ {/ |! T) }( `( t5 K- k
- \/ U5 t- u: v; T
: n* X" d; Q, m' L0 L
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
! J. P+ b, G$ c# ?: v5 r/ q; x" ?9 G. E( k% ? u
* C1 O& e6 I( Z* ~& M. q3.x版本CRS
! h0 M4 v, ]) n( i$ cd /usr/local/nginx/conf/owasp-modsecurity-crs& T4 e6 }% ~) r: y1 C U
# 生成例外排除请求的配置文件
( g) x' @/ S$ u4 |4 S$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
( S4 g) k; q7 R% k% ]- w. V$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
* Q5 u6 @, i# q b# K2 T$ cp rules/*.data /usr/local/nginx/conf$ Y$ F9 Y9 }# f: q1 u8 X
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。/ R/ ~7 m& Y+ @: {2 |
# Z. Z; k( M8 ~2 f% e3 t- G+ ]& W' a9 n+ D0 @
$ vim /usr/local/nginx/conf/modsec_includes.conf
/ ^5 m8 {2 {. Z% L& G V2 ?) _9 c4 d4 q4 W, t i8 }5 l" y
[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+ o/ e6 H! q1 h2 ^+ o9 r
2 [1 n4 j5 k/ l: Z5 V# t" p2 t注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
3 Y5 j2 x+ X: t. n6 H/ h5 d
8 d; k7 A5 w% ?* ?' J0 [6 i# {/ X( v$ \- _, y6 ]( N
配置Nginx支持Modsecurity
; a# `* j( M! C启用Modsecurity; i E" c" U/ v( i
使用静态模块加载的配置方法
9 _+ v; t0 p" N k: E在需要启用Modsecurity的主机的location下面加入下面两行即可:! z! T) x* N3 |% }! l1 E6 W7 y/ c
0 j- _) V9 g( C0 s" ?( [7 c: Y6 s) E3 _
) D; g+ |% H* q, l7 u. pModSecurityEnabled on;
& U2 n( Q3 h4 I! S# y0 q5 J0 xModSecurityConfig modsec_includes.conf;
( K! X+ U D. h& j/ d1 @, r修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。' w; G8 _1 s( W0 J% B
7 S/ n2 O# ~% k& V. S1 D9 }
B- K3 H' L! ~ V* d0 T T
$ vim /usr/local/nginx/conf/nginx.conf
' E; C3 k# w6 ~" O t j9 O! i* C) L3 B; s
0 ^0 |, m9 W# t- B' u
server { q/ l, l5 t. d
listen 80; ?) Z. I! T9 Z
server_name example.com;
# M$ d, y( Y+ k$ @- E6 E% n$ b
- w& G% D$ V8 z- q; `
/ I5 o7 d1 `" s9 c+ D location / {2 i9 }4 J8 G+ k( M. `
ModSecurityEnabled on;
! s+ s, x* K/ S2 G- H( T8 R( u ModSecurityConfig modsec_includes.conf;
+ A- Y) I4 `2 Q root html; g+ X3 z+ J/ l: F' }
index index.html index.htm;) J; S, J) J$ S# p( _
}; ~; ?/ H) d% {4 ]# G
}
4 X: x& V; ^3 @1 a4 G* f使用动态模块加载的配置方法
- x/ r& ~- c( r' X4 D在需要启用Modsecurity的主机的location下面加入下面两行即可:
! Z) \5 s' u3 ~) o: A
. a* |1 q! y% A% m. j2 V
; d& K& s9 z5 gmodsecurity on;# \3 T' R% J" k1 l- b
modsecurity_rules_file modsec_includes.conf;5 ]" s/ } ]5 \/ w1 Z
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
5 G* f" e4 V1 l, E( W5 i, y# @2 B
0 C5 E t2 F/ ?. C$ vim /usr/local/nginx/conf/nginx.conf
+ K3 b/ _8 n: u! d& z' I' O% [6 p) s& W3 z# i
: ]# w" U0 O( a; j! kserver {/ B9 H/ E+ [; v: S* M: t. h, r5 e
listen 80;
. C: @2 h' v" l* I6 k' I% c server_name localhost mike.hi-linux.com;
: L1 T3 p$ ]5 w7 { z. C. u access_log /var/log/nginx/yourdomain.log;$ T S# y1 \. V( ]3 V% r# z3 a8 Q
B6 ?. f; S6 ]/ N
, R4 K, x u7 e& l' r
location / {
4 F) ~% R( L6 K6 D+ `2 U7 i4 }. O7 u [ q
" p: j! O, ]: P- I modsecurity on;
( B# W# b; f$ N( F9 S% y! u& }2 p R modsecurity_rules_file modsec_includes.conf;# b3 l* C7 D1 q- N# V
root html;9 r. ?7 z- G! ~ l
index index.html index.htm;* F- d9 N! O* k0 n- z9 q9 n
}7 w* K, V5 c( ]' }3 T( T# k# q. ?
}
- U8 |) m' e- P0 y- f验证Nginx配置文件& s. |; C1 p( o0 A
$ /usr/local/nginx/sbin/nginx -t
6 Y( t8 X. F0 w ] D1 Lnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok& t/ c* l) ]6 I b; ~0 Y
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
/ m$ k* ~% k( R8 _1 t启动Nginx
3 P% u( C1 v0 K4 v8 P# d& o$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
! c7 z5 K- {! D( _6 }$ g- d2 I
! {$ B0 f9 X2 w5 D, z ?* X6 L1 ~测试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能够战胜更多复杂/未知/混淆的攻击模式。
1 m9 Q' o8 t4 H: z# k |