ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
0 p* z0 V6 K2 w0 ~$ b5 r% r. F1 M
5 E- B" Z) y8 J* Z4 g: a在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。" {) Q+ L" O1 {4 |
3 P0 N8 _ A" c: M4 s. J" E) K" g3 R# U o- U0 P" Q' ~7 |/ K
什么是ModSecurity
! ?$ f5 c8 @" t! D+ YModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。: b& j" H, L* X+ q1 m
% U. b! h6 P; A8 D4 m
: a% C/ v, z) bModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。$ J" a6 _$ i. B+ p. b! h
4 H. n5 g# @2 w, v+ K
$ i M& ]. H" d# i
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
! [) L! E) y: I8 _% G; U! E+ c- s1 c, B B( D9 v- f! A. ]
' K; P! d8 j& b# i4 y# H官网: https://www.modsecurity.org/. G( T' K" C8 T C+ a
# V" l* p$ _6 `( R
W5 e4 m% b0 q- h什么是OWASP CRS
* t% @1 \- n$ cOWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
5 ?# _9 K- Q. `% ~1 }; F2 N2 w9 s2 i' H- z$ j+ q
$ Z9 K. x' K7 l Y* }9 YModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
" S1 w4 @/ ^( ~2 }) y
- u8 V( l5 G0 C' F+ Z
( }. }7 p2 i) W% H6 fHTTP Protection(HTTP防御)
# V/ l; H1 J9 h7 F0 {HTTP协议和本地定义使用的detectsviolations策略。
3 v. z( \% T/ J3 e! H3 d: R
1 o: o' G* l+ p. F7 |! s ?( M8 M1 t8 Q0 Y) w Y
Real-time Blacklist Lookups(实时黑名单查询)1 B# h4 S6 @, o7 J# Z% C
利用第三方IP名单。
9 I, w# S3 _/ n6 C9 F1 y% b3 [: s$ q- N4 X, L
2 }& K3 @/ n- G( o# b1 @HTTP Denial of Service Protections(HTTP的拒绝服务保护)
4 I& Y) B8 w/ Y5 G9 h2 e防御HTTP的洪水攻击和HTTP Dos攻击。
9 l2 T0 }' L& i- q6 t a% e
& | q. H. g. Y/ g
: G- J6 c& i. w, x; e4 VCommon Web Attacks Protection(常见的Web攻击防护)" j; d0 k# K) o$ _* B5 ~6 {
检测常见的Web应用程序的安全攻击。; e5 P2 B+ ~# \' e6 U
" X6 J, Q! a; H% P" ^5 A K8 o5 i2 A' ~7 K2 w5 \
Automation Detection(自动化检测) t" I6 z: f6 d4 m2 z/ e: |% {; c
检测机器人,爬虫,扫描仪和其他表面恶意活动。. N/ ? r* i2 d5 Z) M. N2 } A
4 e6 E& f& B5 v+ r6 R
7 Q' A" [. \* V3 x9 `8 K: t: Q7 e
Integration with AV Scanning for File Uploads(文件上传防病毒扫描). } |- J2 e0 ^2 m) O3 |7 X Z, A
检测通过Web应用程序上传的恶意文件。
4 I7 M6 ]1 p! ~% Y: N. H' E
7 z; b& G6 S' B$ T% G
# j" m: }+ I/ h. n/ ^; x' n, dTracking Sensitive Data(跟踪敏感数据)+ }! \* W7 U' [: r# p; [
信用卡通道的使用,并阻止泄漏。
: P0 d7 h) Y9 s, a1 \: {
- r6 z6 L* o# h. s1 v5 F, U8 j. `" B) p4 I& ^$ A+ t. J
Trojan Protection(木马防护)' J3 m! |$ V) n: f: _& r4 M9 y
检测访问木马。
; [) L) m- f* ^! Q3 t' [
$ s7 A$ d& U4 ~7 e9 N
9 U) n+ ?3 I! M# EIdentification of Application Defects(应用程序缺陷的鉴定)
- m, D; X7 `) w. A( ^检测应用程序的错误配置警报。/ G) ]' t/ Q. d# D
: O1 p1 U1 P' e0 e+ P, t& u9 _
! q6 y+ Y* A$ ~Error Detection and Hiding(错误检测和隐藏); Y! w! [$ ?" y2 }+ d
检测伪装服务器发送错误消息。
, h+ I6 A* O% V$ Y# g% I& ~$ r+ |* V
, ^' ~) B8 A6 b+ @
安装ModSecurity! A4 q0 @* s0 k/ k" e
软件基础环境准备
0 ~3 u5 ^& j% r7 }$ ~! e下载对应软件包 z* e8 o8 e! g% m% A2 ~9 @ ]
$ cd /root
- E) q4 E& B! M- U; r( Y! C. b$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
! ^# A4 g. B7 |7 E4 ]$ 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$ y$ s& [1 ?安装Nginx和ModSecurity依赖包) Y, H4 _+ @0 Z1 m$ D
Centos/RHEL
0 ?8 g$ \) N) Y% ]$ k
5 D$ g* _+ ^/ ]& R( y6 G6 |" T
! j& m& Z# e" z3 Q5 d) N1 O, a$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
* z1 Q# k9 g( ?2 c4 {Ubuntu/Debian. s1 f: B% ^4 w' }) k' q+ x U2 \
# J3 `$ v7 r2 {3 k: ~( D1 m
' x9 }6 m- R- [6 G1 L. ?7 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
: r6 ?6 _! _% n编译安装ModSecurity1 E( S7 O: Z- P7 X W" w5 t, }
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
5 x, p! Z& A2 ]7 V! U, D8 N# Q( q1 Y5 ?2 s! J/ j2 ~) h# R0 {: z
4 A/ K( p1 N8 z7 D0 Q G) C方法一:编译为Nginx静态模块% A) y; g) r3 V5 p6 H! \7 Y0 z( }8 T
: R5 l; R5 k! p0 P d; Y% U+ W5 q1 f& o) B
编译为独立模块(modsecurity-2.9.1)
1 r2 o( P4 u: c9 N$ tar xzvf modsecurity-2.9.1.tar.gz
: Q, J D# l9 z; {. n) g4 q$ cd modsecurity-2.9.1/% a( c: [/ _! _% i
$ ./autogen.sh
9 s9 ?0 C' I$ g& c% k$ ~; Q$ ./configure --enable-standalone-module --disable-mlogc
% c& o0 H! O% [; H" k; S$ make. r8 N+ w3 Q* U
编译安装Nginx并添加ModSecurity模块
2 `3 P& L" ?; r0 j$ tar xzvf nginx-1.9.2.tar.gz" ?: `) u8 s) H; _0 l3 m
$ cd nginx-1.9.2
_; v/ u: b% g0 O( h$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
! G0 ^$ {! i u" ]& u" ]4 q$ make && make install' ~! s! ?2 F" ?( y0 W$ _; z3 b
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块& e' _* h3 F+ I' V* \" z
& _3 ? j( H' j/ Y- o# U& R& K4 l7 ^' g ?- X( i
编译LibModSecurity(modsecurity-3.0)
9 K A/ [+ `" `+ K4 p$ cd /root! o$ y0 A# g& Y8 }
$ git clone https://github.com/SpiderLabs/ModSecurity5 [, M- b p! o0 H
$ cd ModSecurity$ g' n& T/ i8 S; Z4 e
$ git checkout -b v3/master origin/v3/master8 V3 m/ D/ B x9 |5 C5 O+ K- u
$ sh build.sh
+ p6 p2 {+ Z; f4 S$ git submodule init
' g, G1 G" H3 `$ g5 ?$ git submodule update( M5 [" O6 s* X" I7 m
$ ./configure6 \% |9 S5 G) _ }6 s
$ make
: a' N3 F% d$ c: O1 I& E* f$ make install
! n7 y, u" B2 C, [LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
! v/ W3 X. b2 |6 M1 H I. _2 p- K& M# u* G2 k
c6 s j, S' \% ^1 L% U9 g
$ ls /usr/local/modsecurity/lib
' V7 Z9 K, D% A( i1 V5 `6 J$ plibmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0
& S% ]& x# \: W6 H编译安装Nginx并添加ModSecurity-Nginx Connector模块. \8 c* |/ W$ R, v
使用ModSecurity-Nginx模块来连接LibModSecurity
* j8 f( Q! d: W" b4 v. L
" p5 W' j/ O( Z5 o! C: c: k
9 u; K# X( [. H! H$ cd /root m2 S* @% n6 \! R
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
4 N9 w0 M& q4 \+ C0 m9 ^$ tar xzvf nginx-1.9.2.tar.gz" Z' n" D& e6 k
$ cd nginx-1.9.2% m& I3 E$ j* A' I9 l- n9 t% O, x
$ ./configure --add-module=/root/modsecurity-nginx+ G. p. O, U5 z" e! X4 k
$ make
: G3 B- ~* j0 e( }3 n+ V$ make && make install
: D6 T: v# P+ }0 x; g& H添加OWASP规则
- o) ]2 t! k: b) zModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。$ A( z8 G% x5 C, J p( X
2 S8 R! d$ E( @) ]. V9 N3 B" F! l+ e6 G* t1 o% h
下载OWASP规则并生成配置文件- Y" r- Z7 E2 {' I3 V7 T Y0 h
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git; x2 q' k: z O* ?7 S0 O
$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/
" w! Z7 T! c8 Q0 N; U# f$ cd /usr/local/nginx/conf/owasp-modsecurity-crs0 m# C n; P3 i& C
$ cp crs-setup.conf.example crs-setup.conf9 ?! K3 R$ f, }' G' L7 @# S( G
配置OWASP规则0 W& N1 w/ g3 X! `
编辑crs-setup.conf文件# J1 X) U* o5 W; `) |- ~
: |: p# d$ U0 I O) B& w
9 m, G+ L0 E9 Q
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf% z$ @( H' W1 [" L. o, n5 I
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
( X0 Z2 {. z4 W, x9 K+ w+ E, g$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf* c" L, k* p& [4 r1 @2 n* |- m
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
& i8 d# o& S M' Q默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。/ J" o \) d- x, `( A4 u
3 I+ n* A# u$ U, \' u8 T) E4 Y/ K. x$ w5 t+ L
启用ModSecurity模块和CRS规则# f& V( F! G7 h4 \8 ?
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
# v* x+ d" c% o+ x1 y- p* {) L. E8 `3 I4 C
9 M% m- T+ M Nmodsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
% _3 o7 j. U8 M8 P% {" s8 A
" S2 p1 u5 k- M1 m* T2 B f. p. O1 [2 s: h" k2 j6 r* G& v
$ cd /root/modsecurity-2.9.1/5 @( Q; I3 `7 t+ N* f- b' r1 x
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf , d$ e: w" g& s, `/ T+ I9 O
$ cp unicode.mapping /usr/local/nginx/conf/" Q5 O9 x( ]5 ^' L4 l3 y* \
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
6 R N% K% T1 n9 w* t
; w o h' G7 B0 i, M
' x# [# h$ j' G+ I7 Q2 y$ vim /usr/local/nginx/conf/modsecurity.conf8 O, x1 |0 ]6 m
SecRuleEngine On
3 R- Z: C) Z4 y6 |& BModSecurity中几个常用配置说明:
" j6 _% C" o) S6 I1 W- Y$ o% J6 I! m& `. P5 K/ j# h/ u; k
8 Q0 l' T1 ~5 N O0 G+ e; q1 @
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。0 K4 j! z) k r6 C0 |* Z5 O
' j* i3 k% s; ?9 _! r) A; W1 d/ Q J" D' R. y. [ S( \) o
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
- y/ T1 H2 k8 `7 k$ A$ h, X
' f3 G, P4 z' z0 _0 u6 m5 w
5 W/ r1 ^) e+ X7 x( J' ]( q3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
) L, P9 f, c8 |* b
& T3 l1 A2 a' X, @4 {
. }5 I1 M) ~0 I2 g3 V* j4 n L! [7 Z4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
$ y4 H+ L" x5 \2 N5 B) y; ~9 O7 [/ L1 @9 m: w, f2 c
$ K" O$ K g6 N& t
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
( @! m, h) {1 R: j' R8 p8 K8 Q% L1 R+ N
8 z- z8 o8 q- h- Q3 g" J+ M# S
3.x版本CRS
1 T0 ~+ y$ E$ T/ n& k- k$ cd /usr/local/nginx/conf/owasp-modsecurity-crs# m6 @$ v. M. Z7 ~: M/ Z1 [: N
# 生成例外排除请求的配置文件# K' x4 _9 h3 A2 ?; D9 T% H
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf/ u% N D2 D: W2 |: ]' S
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf+ I D9 Z( |, }1 [) F
$ cp rules/*.data /usr/local/nginx/conf
2 z f- A+ V& Y1 {" V- V! P为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
; v6 S5 X( u5 K+ s" `8 _) V. @8 k' S$ T1 x% R
* n3 N) z7 x f
$ vim /usr/local/nginx/conf/modsec_includes.conf
5 n* g$ h Z9 s4 u) J* {& H( {* 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
3 m3 _& H! e2 e& _# Z" A; n2 h) H0 ^( V2 [
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。. ~; ]% S: p+ N; C& G3 A/ L
0 Z1 k. M; V. t7 H
% d" w% n. q# Z. Q, }5 B9 w7 d配置Nginx支持Modsecurity
9 E/ i+ r4 @& K' C9 v; |& m) p启用Modsecurity- O) o7 h4 @) p0 E9 t
使用静态模块加载的配置方法% i4 O! i* }( u
在需要启用Modsecurity的主机的location下面加入下面两行即可:. _8 @ ~9 K5 O* G+ ~+ `$ o: c+ l: N
% V8 q# M6 p/ y% o8 p
& k- k3 s6 I' t6 [% G A9 EModSecurityEnabled on;$ d! \$ F a) e: F
ModSecurityConfig modsec_includes.conf;: y. Y% i3 j+ i
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
5 q$ V# D! R% y% s% z! p
6 X' Z) S$ t7 s( n5 b3 G9 d; g& A8 f! T0 V+ `/ v; W3 r4 S3 P
$ vim /usr/local/nginx/conf/nginx.conf! _) K9 p: I; e5 V! o+ _0 E
2 n' |3 e% F7 ^* j& {/ W# m0 p/ J
- ~! ~8 s9 y- ]6 O- t
server {
( ~0 N3 F( u( _$ N+ I listen 80;% x) B2 L0 k. x7 \- K
server_name example.com;
& v. r0 j; e* h
3 o1 _+ g) H l0 J8 u; Y3 n
; y7 P! u. D" t, E location / {
) I+ r: I1 B8 d" E3 X ModSecurityEnabled on;( ~; }8 l9 S3 `1 l9 h7 }4 `: C
ModSecurityConfig modsec_includes.conf;
" O- ]- c! @' z root html;
( z& d: ?4 P0 M* Y index index.html index.htm;
/ F2 s4 v' Z/ y$ ^' ?4 y7 d, w3 O }, q* D7 P" j+ F3 p" S. Z" F9 w0 ~
}' h$ k# N/ R! e
使用动态模块加载的配置方法) U1 c8 q- E7 ?5 U
在需要启用Modsecurity的主机的location下面加入下面两行即可:
4 }( [% Y! _/ s4 s c
* P% P6 y% P/ ~" |, Z7 m1 h6 `: y0 n0 v( N$ x2 j2 @& y/ X! S
modsecurity on;: d' F( P% y8 `8 k" g, _/ x
modsecurity_rules_file modsec_includes.conf;
% \0 U+ R) Z/ ~7 L6 h: }- o8 `修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
: u* a, d9 s% A8 ~. n! T" J* @8 ?7 h# z- Y9 J/ j
! P8 S; p: Z1 V" ]+ ]4 O$ vim /usr/local/nginx/conf/nginx.conf5 D( k- `! S& D8 d# t7 p7 Z
" D# { h" q& c6 `- O: d9 d8 s/ A; Q
server {( E' t9 W& L/ O7 g# k
listen 80;2 K% `) ^( ]5 `4 X& \. Y5 j
server_name localhost mike.hi-linux.com;
, U# ?+ n6 F" C7 f$ O! @! g/ F$ M access_log /var/log/nginx/yourdomain.log; J, b( C) j. u( Q1 [" y1 {
1 z" Z: G) _, b& i) N( o
, U% K, n+ U/ K. g* L v" _/ N2 [4 n
location / {# v/ H w9 o$ n. ]
/ O. X6 ^; t. S5 X; q+ N6 ^9 z
; C6 s) F& }/ e/ Q# D+ A- r9 L
modsecurity on;
! B+ m& F/ i7 K% L' ?- U modsecurity_rules_file modsec_includes.conf;
5 H! ?" P! N% L. H+ x+ a root html;
! V, O3 y) l. r' u& q2 k index index.html index.htm;
* K$ B* b4 o7 U } R5 Z" _}
( [2 @* \4 x8 M$ P- S- j) w}& m* L5 D( p. A; P- g. `, Z
验证Nginx配置文件
, X) l0 y+ E- y$ /usr/local/nginx/sbin/nginx -t
6 ]2 u1 | w0 inginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok H3 {+ t, I0 O6 a# {" k' v
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful- [% M4 P. W3 G j& X
启动Nginx
3 c# d' i/ P0 d! k G$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf; ^- P# n$ g/ x: B5 E: }
: Y( q/ T5 w. I5 [# |测试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能够战胜更多复杂/未知/混淆的攻击模式。 , L1 O$ |- Z3 @; A k
|