ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
7 S- b' L4 |% \+ p" Y4 o2 h( c: X$ C+ Q7 x
. [# ]! L( M, o" z
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
; N- N- W' U; [& m5 K
/ P5 m* G6 W" \" `+ O( D- K* t2 B/ A* p! ?& a
什么是ModSecurity8 Z k$ ]$ V5 Q" G3 ` q
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。: A# l$ n9 K6 S7 V) N' b
2 h3 _) ]: z) T* u( w4 Y5 U# d4 I% m
0 j) y+ F6 J" B$ [ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
& ~! O2 |8 r: c( \" ~4 Z8 `+ y/ w( c4 f3 N1 l) o* b# u2 i
, q* X9 y! c8 ], A
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
7 d( J& y) R& \* r0 y
; S3 n$ Z4 ^% [% q6 X6 I R3 [- b, ~2 h( f+ D5 t8 @+ u4 G
官网: https://www.modsecurity.org/
. V3 D( S8 ~6 ~+ M- x2 g) m: `0 i: Z$ d6 n
, O2 d' }# W* t$ ]( t
什么是OWASP CRS
7 r2 q& z; M7 i. Z# |; ?0 c+ bOWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。' F |( E# t8 N
2 g# B! d/ j. Q
3 R: t: N$ ^; v6 D+ P4 F9 UModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。) g/ f/ }9 c9 C( B
. n$ f* l) X( a; T g% w
/ e9 p$ ^6 N, O$ A% Q" [HTTP Protection(HTTP防御)4 @/ G* G) [5 G1 F
HTTP协议和本地定义使用的detectsviolations策略。
( H( a5 S- t+ t) c) l2 H( ]0 `- O7 C3 q
- ~. z( l, d, }Real-time Blacklist Lookups(实时黑名单查询)
, g: o1 _" @ G n利用第三方IP名单。
" _/ t5 P# v9 Y( }$ I% B! J2 k3 P4 E4 x3 i
' v, N' I8 g- v8 L( DHTTP Denial of Service Protections(HTTP的拒绝服务保护)
3 R4 M# S/ b' ~. x防御HTTP的洪水攻击和HTTP Dos攻击。) o1 X+ R) M y/ g
8 S6 d& J: ]+ w& m/ J3 }. I
: ?. b! o e- s' x* V/ {Common Web Attacks Protection(常见的Web攻击防护)
$ k1 z& x7 h0 @: J检测常见的Web应用程序的安全攻击。# M# m' S( ]5 d" h
3 s% n5 H7 d2 {" C6 y: D( p& w9 v
- }+ r. B# A8 s7 i) W) e; PAutomation Detection(自动化检测)
3 ?4 l; f6 ]* r) F/ K检测机器人,爬虫,扫描仪和其他表面恶意活动。& q" j2 t& B2 d& N
$ O) ]& B+ b m! {1 \4 n) W
% `1 }: r7 o% `- m
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)/ `- X+ \1 Q' I3 l& T. ]: G
检测通过Web应用程序上传的恶意文件。
8 m6 h+ `; B9 e7 J m% A+ q' p, a* N( G, ]/ O
" G% M0 z2 k9 g, r: t% s- ?# ]; b# c
Tracking Sensitive Data(跟踪敏感数据)
: V( ?0 W+ c, z0 |$ _信用卡通道的使用,并阻止泄漏。
. Y7 j, R0 P: D+ Z7 v2 o) {, f2 P
1 z6 l6 S. ?' z5 c6 a) ATrojan Protection(木马防护)
i2 H7 \- e9 q& D j% J检测访问木马。7 F N% g8 Q- _( m& _
" |4 r) c( [; R
* P9 C$ c( z5 Q _9 jIdentification of Application Defects(应用程序缺陷的鉴定) u$ ]3 ?1 b9 B* H2 {' I# w; f4 T
检测应用程序的错误配置警报。
, Z* v8 m' c+ C3 J
9 h% [( [7 g" L( O! y* D# T" ]6 ]; M' W1 G3 t; x) R: L
Error Detection and Hiding(错误检测和隐藏)
9 c1 e$ s5 k; ~; ]2 i5 d' Y4 _检测伪装服务器发送错误消息。
7 p8 e. p0 f% w/ k2 P" M
( \1 u5 t% T9 }) T9 X
* L% s- Y# a$ P D9 D/ Y安装ModSecurity# L" ?4 X% Q- K$ F
软件基础环境准备+ B; `- d5 z; u! q7 g- E A
下载对应软件包. |% T# \ x! K% `
$ cd /root
- V' h3 d* }8 X; \9 @$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz', d6 V; W* N5 O! r3 ^) N$ P4 ^% z
$ 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. P h* H. B1 o2 j安装Nginx和ModSecurity依赖包% `! k% x' n$ v
Centos/RHEL5 W3 o7 ]4 @- L- a0 j7 r8 ~ ^ ?
; H8 V4 x4 t( G* B6 L+ b
7 t2 R1 e! ]3 K6 l6 _) N% h
$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel* d4 V) X! L% e1 c# z' v3 `9 c3 {
Ubuntu/Debian
! a& G7 O- f, k0 N- |
( r* Y- v5 [: Q, b' D: f, v& W5 ~0 F$ D' S3 o
$ 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
4 K' k9 z$ ?7 u! _1 a2 m0 j编译安装ModSecurity V0 U! b; R1 t5 p% _2 ?4 P
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
4 a) G" x4 ?$ N6 @+ z; B, a% ]" R" X3 J) q5 n/ r
2 u" _& C: Q; }1 w* \+ b4 j
方法一:编译为Nginx静态模块 n" L" \7 `6 a4 W5 _+ _
' ?/ P \3 G S$ ~ l% ~3 w! V5 p
' t {7 d* c7 V编译为独立模块(modsecurity-2.9.1)
/ P/ j! F# O* \1 r$ P2 ?. {$ tar xzvf modsecurity-2.9.1.tar.gz3 a% A. T2 i/ ]
$ cd modsecurity-2.9.1/
$ Y: \" N; F' Q$ ./autogen.sh* D: h. H- V/ i: q. B0 Q
$ ./configure --enable-standalone-module --disable-mlogc" I2 g+ U0 J; [, B+ J# e2 J3 W$ b/ B# j
$ make6 Z$ _! \5 l6 G( v
编译安装Nginx并添加ModSecurity模块
. a6 U* Z0 G2 r4 P7 S5 J$ tar xzvf nginx-1.9.2.tar.gz6 \+ S3 \( G3 w" G
$ cd nginx-1.9.27 x+ m. N! r$ ^* E! [% Y
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/" S6 c3 K6 i y1 \: \- b
$ make && make install
1 I5 B* u V! Z5 `, F方法二:编译通过ModSecurity-Nginx Connector加载的动态模块) F6 \3 \* J+ R$ Y4 v8 [
3 y4 G3 v" { f
" i! m# I3 m+ }编译LibModSecurity(modsecurity-3.0)6 n7 o$ L7 R* w% u8 W
$ cd /root
7 a5 p# @8 b$ W0 M! u+ u$ git clone https://github.com/SpiderLabs/ModSecurity8 L5 E' q N) g D
$ cd ModSecurity
4 q n# k* ?) Z$ x' T$ git checkout -b v3/master origin/v3/master
- p1 Z9 v/ j7 [( u7 ]5 g$ sh build.sh& g5 i1 r2 E5 U2 k V3 \4 ^
$ git submodule init0 I, _: h7 f7 n! f, K% h2 G
$ git submodule update% J0 |) b& f* k8 k
$ ./configure
$ X& t: H: n5 ^0 m$ make
7 i4 G6 s; P) o# f$ make install7 l5 }1 F. g. g" T6 u
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。' s! c2 f8 T+ W4 @
: O. `2 Z4 k, b) e) M# `3 e9 D7 Z0 ]% k6 g3 F# O; G0 r! [/ z
$ ls /usr/local/modsecurity/lib
- t$ k& H4 r0 b- z# Z$ Y% Rlibmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0" {8 x c7 t9 a7 p8 m
编译安装Nginx并添加ModSecurity-Nginx Connector模块
4 w$ X8 \( o0 j$ s' F( X( J+ V$ L使用ModSecurity-Nginx模块来连接LibModSecurity
' T, N" P Y" G( d6 T* o- I) r' ?* t: m R2 t R
9 G' o( o# k. W4 {2 K0 W
$ cd /root1 M! k! a* @3 H
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx: P- L9 }, N" G0 V# C; p, v
$ tar xzvf nginx-1.9.2.tar.gz
0 p4 o: b+ n, A# q: m: u$ cd nginx-1.9.22 y" c7 @( t1 }) a
$ ./configure --add-module=/root/modsecurity-nginx
" l& q2 _% z$ [( U: h- g* u$ make
4 K5 n1 ]" v8 p$ make && make install0 h0 U4 i) z3 F
添加OWASP规则, S- ?2 l) k7 c @' W
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。% X# @* u( x1 y n8 b+ \" }
3 v; c8 ?: }7 o) C5 E
, V. Y& I; N* |5 g+ v: b下载OWASP规则并生成配置文件. ~, {. W/ @, m9 U; m" P
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
! O$ M- t8 v& X* n$ Q% B# i6 O$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/
' m8 _' v ~3 }7 h% |; v, P+ ~$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
" J$ M, b7 X2 { e3 t& K$ S2 S$ cp crs-setup.conf.example crs-setup.conf
9 G1 C+ ]$ T6 \* q* v# |" g配置OWASP规则
! G/ X! d" Q8 c! b8 q- g编辑crs-setup.conf文件
; W6 N4 Z# H7 Z6 o. }' @+ B
, J5 z4 q- Z9 _% _# j* t; V1 |/ l! C0 F& l! g$ D7 R5 H
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf1 {8 O+ {& A1 n' u2 a
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
e/ d& S* H9 @. k" h! v- x$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf( q4 t3 b" ~& o) x
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
8 V( Z0 k$ ]0 F- b7 k默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
$ O+ X% K, ?( F; |
) z* C5 E. U0 g& Q
! y7 Y* q7 h+ } P' ^7 u启用ModSecurity模块和CRS规则' s" T }. K* a. d7 F4 [# o
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
3 @9 _ w8 i* S# }3 G0 t" F# V# C% E% l
% E5 P# j2 Z" w& emodsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
6 [% u. i& W# X, T% h9 H% g2 u
3 j7 O3 n( @3 j/ T( y4 i0 R/ F; }/ L% s. r! y F
$ cd /root/modsecurity-2.9.1/ F" z' E4 y9 }3 Z9 a, t
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
9 l# f8 m/ |$ V$ F$ cp unicode.mapping /usr/local/nginx/conf/
* H$ }. d5 } f4 c# h* Y% r将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。+ c' T" W$ n! f
+ y; L& E F% T& K6 K# ]# D F
& m B+ `& F" Y C$ vim /usr/local/nginx/conf/modsecurity.conf
8 M1 m" Z% f8 D8 r( g3 _9 kSecRuleEngine On/ Q1 [" \' L$ `( r+ d. Q! ?
ModSecurity中几个常用配置说明:2 P k8 l; v5 {6 d/ e+ {" r
& R+ H/ C( r% D' J M, ^( k: O
1 P5 f; `2 I9 f2 C' P `, L5 Q# r1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
" c2 M, S3 q" Y5 C' @3 y9 `% P7 n; P: @
- {& F0 A# K9 H: ~2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
8 e2 I. x* E9 @) j3 t3 M o% D* q1 U
8 b L& b- _1 Y/ n
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。, c5 I5 ?' r8 o3 B8 `+ T
" a* ^5 y4 r: N3 N! R
1 y1 Y$ Z3 C, ^2 u' F; Z* \. W7 G3 R7 v4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。3 h* j- \! Y7 ~" y* i
. | B: A+ E; E U
. ?9 w2 F+ u; p5 u5 p Y* Y& {2 \- u5 s在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
5 P2 }* d' b3 s% x
) \6 Q$ I0 ~- S
+ I& {( D) a( |3.x版本CRS+ U3 w" F; ?0 [2 v
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
2 W1 t- C% c6 J6 ^9 y# 生成例外排除请求的配置文件" ]+ w1 o+ K8 l& z4 h4 b# r% B
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
2 \$ L3 R* L& Y6 ?* b! {! R$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf+ p6 x; e; f/ F$ m
$ cp rules/*.data /usr/local/nginx/conf7 {" \7 q/ b& }, {
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
7 Q! o+ x6 i& h6 s6 \3 B3 u
- R3 `8 J8 J/ r0 l7 W( K2 D0 E7 W' K o
$ vim /usr/local/nginx/conf/modsec_includes.conf! S) ?7 G" U, o, ^- o3 d# b) `' c) y
; @$ S& v5 z! [, {# L[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 + h9 H. ]% q2 E7 x+ @
$ c9 k; L7 E/ b8 ^2 i注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
. F4 U. L2 ~; T/ x* l$ t, o& g. H3 j* I) J9 f: d; p
0 V$ t- r$ k5 T( O# C7 P
配置Nginx支持Modsecurity6 I4 C y5 V2 ~: u0 d
启用Modsecurity" i" E8 ^; W- [3 ~( I0 U t* M
使用静态模块加载的配置方法
% @1 M5 E3 S' G/ u* E+ Y1 h0 }在需要启用Modsecurity的主机的location下面加入下面两行即可:
: Q" Q2 T/ w* x/ j" B4 H1 |
% p! s; Q& `5 u! D" x
# G4 }# A( ~$ W5 V# h& w4 w3 z5 ~1 _ModSecurityEnabled on;, t: Y- @" V: Q( @
ModSecurityConfig modsec_includes.conf;
% H. E9 S' Y9 i! h5 `修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
- |; f+ |1 Z( X) c& V. Q8 E* J3 i! t/ ?9 R) z
3 r4 @* o) ?$ c) _9 r$ vim /usr/local/nginx/conf/nginx.conf- P& X/ T: }8 f3 [. [
4 W3 v5 K% e" \- w5 { \. m' X
server {* B4 F ]$ X/ E" M( `7 Q6 H
listen 80;
% k% _9 L" M0 `6 | server_name example.com;% @7 V) K4 m0 k9 K5 W: t* n
5 h3 B1 y; g& |( Z0 f _$ W. ?" N: b; P* [
location / {
- }2 \( @0 Q1 C( @' O1 _ ModSecurityEnabled on;
3 N" h; [2 s' `. @% O% g& N2 [ ModSecurityConfig modsec_includes.conf;
% H, D, |- c) E7 ^6 R: y- T root html; o: `- ^3 H' l* Y! m0 j
index index.html index.htm;: G& L; W' B1 @3 j( B; \5 q, @
}; Z4 i0 i. i* t( `' N$ ^
}
- `/ f U6 A% V8 p% r) Q使用动态模块加载的配置方法$ G }7 v; p6 L% Q4 [! R
在需要启用Modsecurity的主机的location下面加入下面两行即可:/ {; {; z$ A$ w7 m5 @4 r
$ N& x! c* U: v/ t# `9 O$ N
+ Y) c* M @% |4 Qmodsecurity on; R% w( D X& J# d7 j' L& ?$ I
modsecurity_rules_file modsec_includes.conf;
2 w/ F7 d8 }; z& b& } z2 h& f修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
. S+ \5 j, Q& D7 A' H/ S
$ w2 U" B4 M) R- E- `. W n1 G' o; n7 Z7 r
$ vim /usr/local/nginx/conf/nginx.conf
* U- T4 Q0 Y; x) m; N3 _
2 [1 k$ w5 G6 W2 Q& i3 i* `. n1 g' X2 M
server {# y# Q+ t8 M) ^2 V8 i+ K
listen 80;: K) d# i& h6 Z) \
server_name localhost mike.hi-linux.com;
* g( I! j/ o! O z( `4 | access_log /var/log/nginx/yourdomain.log;
; G( p% N: s1 r1 c0 r# o \! ^: Q, W$ F% B3 f& Y3 y8 E; o4 C& ]8 h: @
. o, {, H( f' b9 Q" [! y
location / {
6 w( Z, T* h2 z" n# ~) w% a) }7 Z5 F0 B
: c9 e% Z- c7 a
modsecurity on;
! `. g- w4 L' o/ @: Z7 B' u modsecurity_rules_file modsec_includes.conf;
/ M. d* L) y$ B- I3 L$ f root html;
, f( M& g. S+ z" U7 {, O* l+ {" G index index.html index.htm;
4 R9 ~" {. {$ a$ j! s}4 X8 @/ m$ f8 A8 M/ N, }0 V7 U
}- g+ e% R6 U8 Z3 z c' ~2 }
验证Nginx配置文件
: W! }1 Q5 t6 D6 A+ u. t* g# J$ /usr/local/nginx/sbin/nginx -t
; ], _4 y. t; B c& i3 Wnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
. l7 r( v& R( n0 ?1 J' t5 wnginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
9 L) j d' a/ t5 ~; Y启动Nginx: I7 J0 a9 P5 i$ Z* T3 { d2 i
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
- h b: w8 n+ b3 y5 S8 m+ H
/ a4 q# G! @+ P0 W- {测试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能够战胜更多复杂/未知/混淆的攻击模式。 - }- t3 Y, c; N) h+ f. u
|