ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。! r& y. {4 M9 o
. P0 Y" b/ B1 g/ b0 l
/ z8 T' j7 v: f0 g% B在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。4 U% W" Q( b# \, y" W' M o
( k" z: l5 e* N& S1 o0 o( N% q% l
* m7 l! b# |6 ^. ]' F1 Q- q* `什么是ModSecurity; ]- W7 Z9 j6 g, }6 j& W
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
: ]" A# W! M; m$ Y/ F0 v( L) D0 T8 m* V, r9 X3 y4 l
- ?% v* W/ I0 z% PModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。; S( {$ N. F6 g2 ]' Q7 q* P
8 Y/ H4 V% o2 q& o
$ h0 \5 t d2 |% m' f4 KModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。: R) L' R1 ~0 m) n
, B z( w3 e4 M
2 t; k% ]& e" G) V& l# O" Y+ l官网: https://www.modsecurity.org/8 L" g' Y: z" M& S# o
( ]) `5 i; s8 v% b
' u1 m, v% W0 ?什么是OWASP CRS
% _& a8 n% A" b2 S7 p0 f% NOWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
, ~5 H& G7 W9 V5 [; W
5 [$ c# {% L2 f( p, D2 c1 G" m1 K0 J+ u, m3 g
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。' P6 A5 g0 D: D: h
& x! h6 J) X% N- M# m# U6 b
* R }2 }' X7 ~HTTP Protection(HTTP防御). u3 z& V5 G) t; [1 p
HTTP协议和本地定义使用的detectsviolations策略。
( S+ A, o) |7 l1 d$ E4 T
+ o' N0 o/ p# n0 T
( [+ [, ]+ M1 ?4 y: FReal-time Blacklist Lookups(实时黑名单查询)1 G6 W4 i; ?* I
利用第三方IP名单。! u; }1 i4 q' c& D4 C
* P- F+ [5 J7 v1 _4 J1 O$ G1 t: `5 O4 E
HTTP Denial of Service Protections(HTTP的拒绝服务保护)
2 T2 |! T( M. ]0 f' ^( j防御HTTP的洪水攻击和HTTP Dos攻击。
7 G6 b w' C3 f) L& P0 \0 i
+ e4 h( }( J8 \- |5 G- H7 G* v+ A5 F% d5 L( V/ n- y# O
Common Web Attacks Protection(常见的Web攻击防护)
2 F% A9 |. r3 f; A( q检测常见的Web应用程序的安全攻击。3 _# P; I! ^. X; I/ ]8 u
! x0 H& k3 Q5 `; W- J) `+ d
. I9 U1 E) e( {% h) z, C
Automation Detection(自动化检测)
1 |- C! K. G6 v' U8 F检测机器人,爬虫,扫描仪和其他表面恶意活动。+ W+ @& S/ p+ P6 z4 v
+ ?& N1 @/ S# `2 N! h/ U3 Z3 p. u. ?7 O3 b7 k/ i. c
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)
9 h6 j$ }- z/ G/ f检测通过Web应用程序上传的恶意文件。6 G% v& P% {8 b; R1 |6 I
$ j/ \2 o! d5 @5 p$ ~6 Z. S. f6 v1 ?% x0 P; Y
Tracking Sensitive Data(跟踪敏感数据)) l: q/ [" j6 n) f
信用卡通道的使用,并阻止泄漏。$ e6 r' z1 H5 i2 o6 e
9 Z* D. P9 G; y. N. |# m
}% B& b# B1 z' K- ]8 YTrojan Protection(木马防护)5 e4 C0 {% z# A
检测访问木马。0 F4 ~' G4 `' |' k: { s3 q
" X+ [. s) e8 `0 Z" V$ W
$ I2 x9 X2 E1 N& j0 I. x4 b4 q: HIdentification of Application Defects(应用程序缺陷的鉴定) t# ]9 c+ ^8 x @
检测应用程序的错误配置警报。% a6 m0 n4 f) E+ h$ \
l8 |2 o* z! d& g; K/ H
2 n% p6 t' m: Q( T
Error Detection and Hiding(错误检测和隐藏)1 F }2 }! T% t
检测伪装服务器发送错误消息。: @! s; J6 ^1 E
* }, N1 R$ ?4 M! B# o
& S: p# E( X3 J8 s0 g; g安装ModSecurity+ \; h7 s' u, C2 l( p% c9 i) Z2 i n
软件基础环境准备+ d M! J, O' Q* `1 I5 M8 w2 O
下载对应软件包* l$ B7 S; u; b$ G" R; L% P
$ cd /root4 h# l$ b2 w" `+ B" i
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz') D: j6 H( e E8 c# m4 [; E
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz
3 i' E0 i" g' r9 h; [. `* y安装Nginx和ModSecurity依赖包 p; P* G" g. c+ i- n/ L! G
Centos/RHEL+ C- m" |+ c* r/ ?8 x
. t3 O2 ^. Y8 | q, r8 M2 y' X9 Z
% @) P' }& @3 z# T9 @4 B5 b* b. T$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
P) X3 F+ ^) R. K* J3 WUbuntu/Debian6 Y9 \, }6 J# i) c& t3 _0 l
0 q( e) L' T. m$ d+ M
3 D" t3 w8 U3 n/ K$ 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++-dev1 q8 J2 I3 t; Y+ V3 f
编译安装ModSecurity
2 {$ P7 A8 c$ P [& i4 K6 [! {, dNginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
; r& M5 [) e0 g! H& `2 g, N+ U/ n# M3 m3 Q: Z3 k& X8 l a7 u
$ @7 w) M0 e" u' I9 Y$ a; u
方法一:编译为Nginx静态模块
+ H1 a9 N& k! U @ O+ P9 n3 v9 z9 d" e: O3 N/ I$ D% v' m% ~ T- F
: o5 q0 L( k8 k2 U& S9 m$ x: w编译为独立模块(modsecurity-2.9.1)! v8 s( X/ J; w! U; o
$ tar xzvf modsecurity-2.9.1.tar.gz
5 O6 J( }8 L; J ^$ cd modsecurity-2.9.1/. j1 m! y$ a$ a
$ ./autogen.sh9 j' r7 {" I0 c3 ^/ U+ w" I
$ ./configure --enable-standalone-module --disable-mlogc" f4 {4 }8 i( ?! V/ n6 a. k
$ make
$ i! A/ i6 X* u1 O' `编译安装Nginx并添加ModSecurity模块
6 X& G5 s1 o- M7 Z$ tar xzvf nginx-1.9.2.tar.gz
. B9 P$ _7 V Y/ ~* \ u$ K% E6 P$ cd nginx-1.9.2
+ a F8 _! @$ S& l$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
! L# i# L/ \8 d. Z o) U% q$ make && make install3 A ?1 w4 N& C* ^/ W) ^% P. G" x0 H
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块- \$ D7 m5 z+ p/ p2 E9 [9 T# y, p
. @* `7 }" G. z8 |) ?8 l
/ r- {8 w" h; }
编译LibModSecurity(modsecurity-3.0)
2 P& s+ k1 J% O) O1 C0 H" d% W$ cd /root
7 ?! i" B, a3 i' P+ `$ git clone https://github.com/SpiderLabs/ModSecurity: l$ _+ G( S0 n5 c: ?
$ cd ModSecurity) ^1 k+ v5 v" V M) a
$ git checkout -b v3/master origin/v3/master7 e& d2 k3 b7 o% o& `& {
$ sh build.sh$ P; L$ d; U& Z
$ git submodule init/ L' ]) E" A1 [/ N5 V0 x9 y
$ git submodule update
3 @$ f' q8 u7 S, z. Z/ Y$ F4 {3 K$ ./configure
+ \2 m, W* u7 [, j- E0 Y0 [$ make
+ t: N6 t+ _1 v7 ]& E7 S7 |) T$ make install+ e$ h( w; }# d9 y
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
) h7 C8 g& h- M, l% D1 H7 a: e8 ]* m5 h$ j& \0 X
! ^, d A9 E( `) N! s/ F$ ls /usr/local/modsecurity/lib
9 G2 `8 G, u( ^0 X1 r Y7 flibmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0& c4 I3 o! L) j0 S+ b
编译安装Nginx并添加ModSecurity-Nginx Connector模块
% T. H3 C1 o9 u3 \; k, C8 p使用ModSecurity-Nginx模块来连接LibModSecurity
s S6 E/ E# h" v( k
& K, l6 t$ e9 t- S" f% n% K7 p
9 }2 q' \$ z/ K# v1 q3 a# C3 g, i, d+ s$ cd /root2 \; m6 x0 q5 |. `0 t2 b9 ?2 F
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx. k1 C/ F y; z, }& G6 t
$ tar xzvf nginx-1.9.2.tar.gz
# ~( q+ {+ r3 D. P# c' S* Y$ cd nginx-1.9.2
9 |! V3 w& I0 ?1 B( i9 a" C6 j# i$ ./configure --add-module=/root/modsecurity-nginx" u: ^0 V6 M# O( @& R& a
$ make q0 D+ D) s' h, B) G
$ make && make install+ i. K6 G3 m2 @& E6 b. u
添加OWASP规则- I' Q |* A) h
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
, y& i+ t( C9 N( |" a+ b! F S6 a0 s; z4 e& x$ a. ~ B
7 G- F6 C* _6 A' {3 c2 ~下载OWASP规则并生成配置文件
# ?' P3 L, m& r# t5 _+ \$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git/ o8 j$ c5 @3 C# l1 ?
$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/
+ }( |+ |, _/ u* w" A8 ?' ~) n$ cd /usr/local/nginx/conf/owasp-modsecurity-crs Y" y, J9 x5 Y. k9 g4 Y& |
$ cp crs-setup.conf.example crs-setup.conf/ I& ~: ]' \0 j$ y& |) E
配置OWASP规则
1 n5 T( g7 h7 _; K- V2 O编辑crs-setup.conf文件. n0 b V* p3 p
* G9 D$ @, D/ m
6 l/ W0 K" @0 _1 Z4 W$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf6 ~0 o7 |" X8 |# e
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
, G' G8 n& T" K. p: W) O$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
% m( G7 B/ E }; K1 m- g& o$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf" z" a. l6 w( j3 @/ I* g
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。* E0 t( A' q. R; Q( ^0 g2 f1 l, ~
: t Q' Y H$ a" M- X9 `( R6 E
4 |! I) _" ^$ a0 u$ L启用ModSecurity模块和CRS规则2 U- w9 [. ], E8 ~ l, m% ?$ [" Y& x
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
! l9 ]' k# B& [
: d! X- M; X2 Y/ }" q0 @2 o, ^4 Q7 l! D
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
* ]! M" t2 @0 j/ y X1 B; d1 H2 W1 C8 }$ e, N3 i
0 {; H4 W. A5 ~0 c. F0 s! E: v
$ cd /root/modsecurity-2.9.1/% T6 s$ w/ d* Z0 a% ?
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
+ U% D& ^) w/ Z m% l$ cp unicode.mapping /usr/local/nginx/conf/! F+ M& V# r3 n, M- H. U
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。% n' G5 }4 N/ Q* g- K# J% r L
) ?0 V, @6 Q R! f
) R1 y T( N8 Z" K
$ vim /usr/local/nginx/conf/modsecurity.conf, L$ l. j5 } l$ ]% a' ~1 A
SecRuleEngine On
5 F. @ i7 h3 S; }8 A! y# CModSecurity中几个常用配置说明: c3 b3 d. M0 Q+ C/ a% R1 t$ h
+ F; ^! K% I6 h# G
) z- i9 ?$ z+ g
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
+ |" Q4 y( i! h& `! w3 D# c. P3 B, H0 b1 q/ E
8 X, o5 C6 t( }! N6 s: \2 M+ Z% @
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
L; q0 `2 E5 s, @8 Z+ w8 R+ N8 c1 I$ J+ |3 T
' J: ]' Q- A- Z" _& z4 ?3 t# Y" y
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
( H7 Z! s) c; P. s. K& Z/ ]8 \+ `- G/ \' G9 \
! z& [1 ~; }; X9 }0 a5 s" h
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
: d2 M1 ^2 Y7 f2 Q( Q q
2 g" c D4 ~! M; q8 @$ Z( c' K2 p
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
2 B% o% f7 \1 `4 h% L: A5 b$ d5 O$ `8 x9 a
) B, s; y: L0 H4 T, ^ j3.x版本CRS4 `- m, E6 w& K# b
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs" b8 @5 n) i$ y( p
# 生成例外排除请求的配置文件7 Y0 [$ u) `& @3 i: l
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
. \9 y6 b7 ]: T2 |: |; ?7 w, W' {$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
8 ` F9 p }' ]1 G4 a$ b2 A$ cp rules/*.data /usr/local/nginx/conf$ ~" C& P& `/ A6 R% x# a3 V: r8 \
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。1 a; M. M, P( r/ Y$ c/ S
; b- x% K# a; j
3 z; e8 P! `! c% N- A
$ vim /usr/local/nginx/conf/modsec_includes.conf1 Y/ v4 g& d0 J6 M$ W/ t7 l
' D. W+ n+ a) x& a[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
- z/ b+ q: @# q9 T0 g9 z7 l; j. Y8 ^. e$ L6 J
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
( L* ]% l6 J& e: U- I( u
% }$ n$ D) x) T- D
* [" Z4 I( p# W" C0 i配置Nginx支持Modsecurity7 W. m; |+ q) u$ g
启用Modsecurity3 z7 w7 ?7 x$ q2 X
使用静态模块加载的配置方法
9 p; M. ~: `. B% Z2 b在需要启用Modsecurity的主机的location下面加入下面两行即可:
, p) }8 ?2 v9 @* l* N6 e& x% o% E; _2 R1 P
1 x; k- M3 O: H+ [ModSecurityEnabled on;* e+ q6 ?& l! F) B
ModSecurityConfig modsec_includes.conf;
' D; x" G1 q0 w* p# b3 w修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。. t+ h6 j( \0 _6 [7 G0 \
1 X/ Q) q0 E6 ^
* W( l( e8 t' m) E6 u; q( h$ vim /usr/local/nginx/conf/nginx.conf
* U: P5 a+ n4 Z- E1 K7 n: X; J9 ^4 K+ }# ^% z
) C/ V6 C6 O( a: v3 Q3 f7 t7 Cserver {1 H2 o/ x: A2 Y" Z+ V- q
listen 80;
- G, q4 j- H6 A2 }/ d" L* |* B& } server_name example.com;% Z% V. G& p$ P$ _4 ]* ~7 s
8 N5 i: o; P6 V* G6 W3 ?
& w$ a, h! Z7 o+ Q1 l( s0 G9 }
location / {
' |9 X; K$ B5 t0 [( R% q( e ModSecurityEnabled on; D$ M% _- X6 {, ^: L$ f$ U
ModSecurityConfig modsec_includes.conf;; C- Q' |8 }8 T
root html;
e6 v% D3 x$ ^9 W% a2 V index index.html index.htm;
. n& }2 O! E0 u; ?) V }
& l! F7 |" {+ K, G5 h7 s* @5 Z}- r7 ^ {2 N9 Y, c) P/ X
使用动态模块加载的配置方法
# r i" z2 v' ?/ m T1 j9 l在需要启用Modsecurity的主机的location下面加入下面两行即可:
- f, I$ R1 T4 C; g% N5 l/ U+ U
7 j! V8 Y0 U8 S/ ^% E
6 R2 h& z1 f; l7 L$ ~% |modsecurity on;
X; ^ c. h6 a `( g7 k0 wmodsecurity_rules_file modsec_includes.conf;
) s/ T, o5 y; P0 i, J修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
1 C/ L. e' W( [6 \; j4 W2 V% ?. h# s/ f' B; `& f' P) t
! n+ t: o# L! [: i7 m- [; A
$ vim /usr/local/nginx/conf/nginx.conf! `5 J; Z2 x3 U3 ^/ n+ P- ~
" S& e* o. o4 a" @# [9 B d
1 G; [+ K) I1 v; C1 Xserver {
6 x* W% q8 k% j0 { listen 80;
+ g- I3 z3 z3 X4 a% x server_name localhost mike.hi-linux.com;
: J' S0 Q9 ^* ]- K8 U access_log /var/log/nginx/yourdomain.log;+ m. T" V7 \9 C3 ?6 ?" d8 A
6 T+ L3 y/ O) P& S6 N5 |2 E ?" q9 a8 X+ [$ q
location / {4 h3 Z+ |: p2 e6 J; [2 J) t
; u8 @/ p. ]+ P9 B
4 J" C% K# C5 t modsecurity on;" _, Q3 N r" G- J4 v8 G, a8 ~7 q
modsecurity_rules_file modsec_includes.conf;
* L J$ {1 |* k0 T: i5 N9 X root html;/ a) Z- ^% q n9 n o2 a
index index.html index.htm;
4 d- k" A; o" L2 I}
: |- o3 c4 U# L# T}6 i" ~/ b* q, b$ K5 e6 X
验证Nginx配置文件
: Q1 N- h7 U8 x H3 F$ /usr/local/nginx/sbin/nginx -t( T+ z, |6 w2 _& Y& R# m
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok, ]# {8 A) Y0 F7 e9 X+ h
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful. k& ]+ ?) @4 J! L6 T8 H4 M3 }# W
启动Nginx
' T8 X# R* X0 L" ~$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
! |. i& V, ~6 `) K3 ?+ A7 o2 F ^* |# X) G" O& x) H
测试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能够战胜更多复杂/未知/混淆的攻击模式。
l0 T* O+ m# T, s: | |