ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。4 o6 o; L8 v j0 Y3 S
1 y5 n @% v/ K4 M
9 [# n, H3 R; [# t在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。3 a% S( [2 @- c; j1 {, P
% S# j6 Q5 ] Y1 N$ i) a( |) V, {7 f/ {
& G& c, @ _# e% }' i- Y; Y6 R
什么是ModSecurity
1 c9 F8 Z$ I9 O& pModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
7 _0 ^/ g2 i3 s+ R# \. X3 q+ n. Z
3 q7 O9 h* A/ |
) }4 E8 N8 o9 @: B6 O. f4 {ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
' B! |& ^. H2 s$ {3 P
( h0 ]4 I J2 U$ @# M/ r" B4 z" p) K6 n* {: g( K! m, t
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。( B. O, R1 _# a2 |* z& s
5 u' t1 J: s$ i
& B- E0 b" h6 G; @. V0 t官网: https://www.modsecurity.org/
& ?! j* ]1 s( ~ u5 M& \5 x* a1 ]
& V# \ r2 M3 {" e) q什么是OWASP CRS8 e1 G) M% x* v& _% Z
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
& p; p# p# h6 |1 X8 S7 k W9 K
4 @ L3 ?/ B% p/ q) i5 O8 V i" _8 a, f. T9 `& d9 G" g" {' F
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
4 i; K4 Y# u4 E7 M/ Z5 a6 y. J/ N
c; f& f }0 A# D
1 b$ c z: p( Z1 JHTTP Protection(HTTP防御), i/ V' u8 a# F3 H- w
HTTP协议和本地定义使用的detectsviolations策略。
) d! L# @+ j: o" K& P1 f; u$ M, |: D" j
/ c: _! H1 N1 u( ?. U- F' ^6 m. ?( l. }
Real-time Blacklist Lookups(实时黑名单查询)
) X K$ t" Q6 u3 ~' p7 c4 _7 B利用第三方IP名单。
3 t$ O e# z, P. q9 u, S' t) G* [: w9 I% k
! b5 E2 ?' z- f L. g; _$ g1 C& r( e: pHTTP Denial of Service Protections(HTTP的拒绝服务保护)7 D5 W( S; ]! W& u( z! N
防御HTTP的洪水攻击和HTTP Dos攻击。
+ W) k0 Y1 L6 h8 U
8 g5 L; w z) V' A# Q7 z1 b0 e: n, ?, Z
Common Web Attacks Protection(常见的Web攻击防护); I" }% D1 f' [6 H
检测常见的Web应用程序的安全攻击。5 R( T: E7 |; b5 J
* ]0 ~* I5 @& F& v0 _1 I [% i7 C7 ]. i+ ^
Automation Detection(自动化检测)+ |) g% o& X" `
检测机器人,爬虫,扫描仪和其他表面恶意活动。
& ?( P* ~9 _8 m* ~7 k/ Z5 a; g G" l" F, I
& U# p, c/ E8 o5 j0 i8 `
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)& p, W' K. ^% A: u) H' A( l3 X
检测通过Web应用程序上传的恶意文件。
9 W' h J* [2 m* W, u+ G3 ^# ?
, h; A- m2 `# C9 u+ H' g3 y, i' I# c' e& s* `; k
Tracking Sensitive Data(跟踪敏感数据)
* l* Q; G/ J5 z- r C% y信用卡通道的使用,并阻止泄漏。' C7 H3 p" t d( M1 s1 y! g
) ^7 Y; f& K: V& v m. s
3 S% Q7 B) P0 t z+ f; @0 z1 l3 bTrojan Protection(木马防护) V- a# @2 B* R6 h+ F
检测访问木马。
7 \3 A0 T8 u! }( `1 l `1 x% }+ `
. r1 f0 N) t0 J: b3 L. C; s/ K, ] H; Q9 y. U
Identification of Application Defects(应用程序缺陷的鉴定)0 _3 o. v) F1 D& G1 b
检测应用程序的错误配置警报。
. o* F1 |2 Z9 k/ b) w2 \; q4 w
/ q3 \) o* k' t) t5 S0 R4 h6 c
$ M6 h5 _- @) CError Detection and Hiding(错误检测和隐藏)5 u; b+ j9 T3 R# f7 E5 I! l
检测伪装服务器发送错误消息。
/ S& n5 o' F% n$ }. [4 f
- @3 O7 p+ E4 a. F, O4 g
2 k u( i5 V+ B+ @+ _( p& s7 N6 `安装ModSecurity
& S" B( s* H, V* c- S8 V- D软件基础环境准备" ~6 d- |: C" D* _9 A1 m- |4 a
下载对应软件包
* l" c f! }3 L0 K$ j; d: m8 L. u/ y9 p. x$ cd /root4 I6 o0 j |& ]; u( K
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
/ }* S/ z& _2 E! T2 B& w3 D$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz
- C( k( H* V* K安装Nginx和ModSecurity依赖包
$ a8 y% G9 d7 {. \9 O% CCentos/RHEL6 a& v3 }# |6 M: j" s0 i
9 q0 W$ m" _; p5 y N: \/ Q
2 i5 u2 K% ?6 I# g2 x$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel& P1 Y# l' i" ]/ N W
Ubuntu/Debian$ e, V( T5 J/ A8 U8 N2 w; n% F
& |* v9 J N4 R& \3 ?+ u w$ N
; O) V5 g3 a' B1 C. ~/ [ F
$ 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
8 b6 E# ?: X9 @( u5 d2 K5 u编译安装ModSecurity
0 U* N7 C6 }. N* GNginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。9 h5 b, P' | \) ~/ g+ g& o; V( T
9 i0 k2 K7 F" X
% D- W: s9 {9 ^5 w方法一:编译为Nginx静态模块
9 n8 ?8 Z8 E* E& h% ?3 k1 Z/ \1 r/ _5 {- p1 r
$ F6 f: T) q2 f1 W8 X9 B8 }
编译为独立模块(modsecurity-2.9.1)
. D+ f9 `% ]# h. i' U$ tar xzvf modsecurity-2.9.1.tar.gz
1 e5 A1 }+ L* P! E$ cd modsecurity-2.9.1/
% X: W7 U7 _! \+ p: B- H( m$ ./autogen.sh
; ~2 J* k% l1 C4 L$ ./configure --enable-standalone-module --disable-mlogc
: m; e$ z$ R- \- S- e+ c4 R' I$ make, i0 e' w: Q2 L
编译安装Nginx并添加ModSecurity模块
) r6 z+ m- E0 B* t& L: U2 t- _$ tar xzvf nginx-1.9.2.tar.gz. M) N& M; F; g' ^2 n- W
$ cd nginx-1.9.2
1 b+ r4 |) \! j/ o% ]. _$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
, v6 c0 {! j% z' H+ M. ^3 _3 t3 C$ make && make install
# b" T0 u$ N) G7 k+ v0 A+ ~方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
$ J' H! J( [3 z, Y+ H
1 V5 |- K) L5 Y0 O: \
2 D \$ t4 z, D" t8 K2 Z. h, T编译LibModSecurity(modsecurity-3.0)# X6 a1 }: R9 |2 P W
$ cd /root* |( c; O6 o: x& J
$ git clone https://github.com/SpiderLabs/ModSecurity7 w; _+ [ d. G8 S8 B
$ cd ModSecurity
1 I7 N) T, [' m& ~% G. p6 C7 t$ git checkout -b v3/master origin/v3/master) o+ j$ l8 r* H! Z
$ sh build.sh& q! G2 Z8 U( I8 G9 v' u5 s
$ git submodule init
- O/ ?0 Y7 s: Y& j/ c7 `$ git submodule update7 V) G3 c F g, j! a
$ ./configure6 m* s7 B( }; K( R8 ]6 l" o0 a
$ make
3 O* k R# ~0 [( z. {2 P3 _/ u. S$ make install- k9 l4 O# I1 q, g: j, @
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。7 u& V h9 }# R, @
N2 ~2 L4 I, p2 I# |( n
% S! g7 I. o6 r9 l; z6 N$ ls /usr/local/modsecurity/lib: a4 e N, W8 l
libmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0
( _- c l* [4 P4 C编译安装Nginx并添加ModSecurity-Nginx Connector模块, Z* ?& r! Y! G5 |+ q' ~: z) [
使用ModSecurity-Nginx模块来连接LibModSecurity# S7 Z% c, A" X' Z* o/ Y. A
! l4 @4 e2 y# Y$ x" z: H: M
9 c) t l8 U% d: z# ?; \) m$ cd /root5 N4 |( D4 I8 z/ r. d% W3 l" |
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx& S& g! b0 D0 w
$ tar xzvf nginx-1.9.2.tar.gz
% q+ \' u& O2 M% ?* w$ {$ cd nginx-1.9.2: R5 B# b% j! F8 k) ?
$ ./configure --add-module=/root/modsecurity-nginx
- s" X, m0 h! o. M% u% n$ make
+ D' r: ]1 e$ ]5 Z! `* N+ T# @ d$ make && make install! }, H* s- U$ o* R f% t5 ?) X
添加OWASP规则
1 V. h& @/ P9 `- `' X% ZModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。# _' g4 v- w+ |' j% l9 ]
9 W+ Y( }6 Z; E6 E6 m
# c7 E( c. s e$ r) ]8 J下载OWASP规则并生成配置文件9 Z. I4 j3 Y0 P
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
- Y3 q! k' V! t+ K+ A$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/2 I8 [5 E% o3 W3 m
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs0 Y q! c4 n% O1 A
$ cp crs-setup.conf.example crs-setup.conf
1 y; \. M: k4 I! K4 I配置OWASP规则$ H( g+ L/ U& K& \2 r
编辑crs-setup.conf文件
, M/ L' m+ b0 o7 K0 f
* P% }% N6 `4 ~5 b$ l" ~: w+ l
5 A( a' J# L, k8 \, X, H$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
2 n1 z) U5 Z4 `6 j) c4 i5 Q) o$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf+ ? g$ U* M" V9 r
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf) F& k. j* f% u2 X V7 e8 F" |
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
! c* E& r: _" K$ O$ d8 w. v默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。& L& o$ P: G( R) z4 `( m% I& S
! F$ H" D# {- f. U. @8 N
q, t/ g8 ^, ^启用ModSecurity模块和CRS规则
" V* U+ B7 L) v* q# V+ [2 V/ D; t复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。2 T# C, Q: ]! f7 z4 y5 L/ [2 [
" O3 s4 f* H% w1 M& k
! Z% L- t1 O R' [4 [, y3 |' t( A( Qmodsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
, N! { x$ k0 D8 ^$ y- t
0 m! a/ R1 i5 _2 \/ _1 a
2 E0 H6 u+ p. z o0 H$ @7 S$ cd /root/modsecurity-2.9.1/
+ s9 J# t0 g$ @" M$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf ) O( q3 C5 a# _0 Z9 H# H: f
$ cp unicode.mapping /usr/local/nginx/conf/* h1 S: p7 ^8 j1 Y7 P- c) r4 S
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
' H2 f9 a7 J8 h' N' f3 T$ v5 @7 `1 u; L. U8 z7 x
% L6 f3 u1 l" X+ a, s" u' b9 |$ vim /usr/local/nginx/conf/modsecurity.conf, O2 R4 v/ W( U( c& Y) K* i$ ]
SecRuleEngine On
* P) I) Y' g6 H, g( ^$ I, iModSecurity中几个常用配置说明:8 j- c$ O0 b( o3 q) P1 R9 t6 g2 [
3 h3 j$ j/ m1 i4 I
6 ^ h8 E: o; x1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。- j4 \* j1 H% R2 B9 X" G# L4 N
. ]+ f' G3 P- ~+ j, i4 n
3 k# f; j3 ^ H( P& b% h1 }6 M2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。! o8 y! e$ X2 V; T+ D2 ~
: F' B* U( M+ t# B+ t
& Q" z; [# P) ^- b* W3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
3 P8 A: o) m4 }8 p: G, V$ B/ F+ y1 r) }
) Q, C& \& Y# V8 l9 i; M4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。9 S5 s$ w& S0 a* n6 M
& Z7 P* u6 E2 a% g9 `4 {; l. n
7 K4 B% D5 O* e1 b+ C a( B# o. ^! Q在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
9 p2 B# t$ O6 F9 F5 ~
# B/ N6 Y) M. [1 u+ c* U
) Q3 @# l+ \) Z/ _7 T' F3.x版本CRS t; i) e3 U+ {6 w' {: o1 G
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs |4 m4 N1 @- w) S; J4 b
# 生成例外排除请求的配置文件
2 ~5 k; n( t" o7 A/ ~$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf9 M' X( s# i3 `! B0 z: c
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf8 ?. F# y8 i2 W1 |' V. A' K( H
$ cp rules/*.data /usr/local/nginx/conf/ `9 B% i9 d0 m2 `0 T
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
) D/ o: z! d. x; {6 V* M5 l) @% B0 n; g" `
. h ^! V3 m% n$ vim /usr/local/nginx/conf/modsec_includes.conf
5 N) r5 a" I( `( U" I+ X4 @0 v7 n- g( p
$ c$ X. h$ j8 A# w9 n5 u$ Z$ l e[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
. G0 y8 Y- ]. H
1 B: [1 |* y4 o. o5 d注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
+ G0 H5 C2 T: [- m: q3 G5 a" O$ |
3 G/ Z0 k( O- P' K7 _- Q$ q1 y# [* o R2 r
配置Nginx支持Modsecurity
. I2 t4 @( |/ l" D" i启用Modsecurity1 G; _ P+ J/ g% e4 ?
使用静态模块加载的配置方法
$ _) W0 H$ |# K9 m2 ~在需要启用Modsecurity的主机的location下面加入下面两行即可:
5 d! l3 {0 J3 D
0 v+ E0 x6 h3 p- R& A2 n$ n4 X' @# h. f6 J1 ^9 t' z. c! X& ^' |9 D
ModSecurityEnabled on;
3 i3 H& y. z: e. b1 mModSecurityConfig modsec_includes.conf;
; t& m; C9 d9 P) o( K4 ?修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。 `- [+ j( l b( t0 n2 @/ N
1 G. h& l/ |' C( L" W
/ p& T" J5 }. t$ k) a$ vim /usr/local/nginx/conf/nginx.conf
+ h' o8 X# f: C9 W& H, N) V! l3 q; |, P$ D) X
5 O# v* Q. U) @; {; B* c5 m: N
server {
q/ Z, j, a- A( y listen 80;3 Y: h! u" J$ z% E% x# T+ p* ?% ]
server_name example.com;
! @8 n; v- U5 P" O, p) }5 z1 |8 x! ^2 l; g2 U+ L% y
6 w( ]( n% ?- z
location / {/ B+ j9 J. E$ n1 k" e6 W: t
ModSecurityEnabled on;
. J7 S% a- g( A* Q: ` z" j" w ModSecurityConfig modsec_includes.conf;7 K1 W0 E+ i. j. w
root html;
+ y! q5 |$ z! }' b) r4 \' M2 Z# V6 t( U index index.html index.htm;! X5 Y# E! Q9 S% E% }. Q
}% L2 R; u0 \" Z( a5 T3 h0 S
}
; g+ k% Q& C2 b使用动态模块加载的配置方法
# X: n2 ]7 e y) E# u$ f在需要启用Modsecurity的主机的location下面加入下面两行即可:
; Q( U' t' s4 @- r" _! i e
7 i! S, [" q Q+ H% H9 S# D
& n( s- S6 c5 S# H6 Jmodsecurity on;
" {+ ]' r; k9 U9 @: imodsecurity_rules_file modsec_includes.conf;) l; @; B8 v! j7 t
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。# V9 h, ?+ c* v2 G3 g' F$ P
/ ^, Y8 V9 @6 ?/ `. o4 b9 R& K+ b7 [$ H! o4 p: Q6 U1 P
$ vim /usr/local/nginx/conf/nginx.conf
+ O; ?/ t1 s& {' U' Q! d7 H1 b# I& Z6 n* \' S! N
9 O% b0 f) L! ` o( a0 Lserver { r9 R7 B) p) M0 T7 c! e; `
listen 80;+ o0 [- I& p: z1 g! t$ s
server_name localhost mike.hi-linux.com;9 `' [- q$ y& e( B( K3 {4 S
access_log /var/log/nginx/yourdomain.log;; [% B4 n0 ~8 @5 K* U
1 x& O# G: A6 G& Q
4 Q) @3 ]& P6 E# g- U7 S location / {
9 h4 d3 I+ d/ c2 F
3 u/ t8 q2 ~1 y, L( d- G. G. L1 j, x; `0 {
modsecurity on;: s+ P4 x! m* ?3 W
modsecurity_rules_file modsec_includes.conf;
+ M! `# N4 E9 ?- i* w6 m root html;
r: v) f7 G* z: d/ l0 l, b index index.html index.htm;0 Z5 H1 E R3 e8 y2 D
}
! t* G9 H" h& z}3 M8 O3 k! h" Q' Q/ ]; a3 a$ j
验证Nginx配置文件# @* Z6 L/ _( F# e! I
$ /usr/local/nginx/sbin/nginx -t
/ S1 @& C0 P: \6 }) Lnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
3 r" ?% T5 P- a6 M# S, y! K+ Bnginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
& ^! T- z, M3 a+ D& x' U( C6 ^- W. u启动Nginx, G' C9 P! X7 z
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf, N# T1 F& l( p
6 u* t0 g6 P/ H* t, {测试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能够战胜更多复杂/未知/混淆的攻击模式。 6 O% B! N% N3 f6 W0 R5 `# D
|