ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。0 m& u# o' F$ m* F- G! g7 j& D
( l- _$ B9 A0 J2 H
( F5 z: \5 H L! R9 W4 P在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。, O- D* m. V1 B% d2 ~
* F5 k% [( z# s5 B4 V
8 e3 f6 G* y( L什么是ModSecurity
1 [7 \6 \8 Y1 k8 O7 B. vModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
& [" l$ G5 k8 k, @. |& R8 d3 I5 E# J, A) M! S- F& G& q
. V2 B8 S: |- e' q5 l( Z
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。# q# S) M- X6 F( d
9 e6 \3 z, h, r) x0 X3 @3 `" O$ m D% @; U0 p; Y4 `5 ~/ U6 |
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。! _- y8 f; z, o) t+ s
4 H8 g" C4 E; V$ }
% e+ t, L, P6 d. p: ?官网: https://www.modsecurity.org// H+ g/ q$ T9 K
4 ~& C S3 {1 r# G G9 T G Z
) {1 z7 A- E" ~& S. z0 @什么是OWASP CRS2 r, Y2 m! s8 [2 i" w0 @
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
7 L- H2 |) `3 O* z m( @
4 E" g q$ `: e- z& A, I
: X4 v& o; ^. ?5 |) I6 ~ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。& Y1 A. c1 R7 r% p. [! }
1 i, V# J1 T9 R( ~, z# z) }% L. b' C# ?9 j8 N
HTTP Protection(HTTP防御)6 r2 K" |' e* D# ~. Q: [/ y W, M
HTTP协议和本地定义使用的detectsviolations策略。* I# M" V0 v# X# S, \
/ X, _' X5 t1 q" S- k- E
# i% |) m' L* l d5 ]Real-time Blacklist Lookups(实时黑名单查询)! b G( O; N; I/ M
利用第三方IP名单。
# Y0 p+ d* j$ k& I7 q& k% c, `! S8 R6 R2 p8 A
4 L* z0 Y. @) V* t1 O4 C! @
HTTP Denial of Service Protections(HTTP的拒绝服务保护)
1 U$ w- O% k! L" `5 X$ C8 o防御HTTP的洪水攻击和HTTP Dos攻击。
% {' W6 h+ q5 A; U+ y
. E; k O$ }6 F R7 X2 | g1 |* Y0 [7 q% K
Common Web Attacks Protection(常见的Web攻击防护)/ p0 P5 v, h/ C- \; i
检测常见的Web应用程序的安全攻击。
$ L3 I" e1 V) S% g; m4 j2 ?# s6 m) b9 ~0 c6 ~; Y
4 j( {4 ~) j7 q& bAutomation Detection(自动化检测)
) f# g) M/ ~* w# B/ C/ r, d, j- p检测机器人,爬虫,扫描仪和其他表面恶意活动。7 P( _$ L [' o" r
2 y% f) [2 N* J. w4 m: |* O0 I/ p! v) x
! g/ X7 a5 y s3 P% ~: l$ xIntegration with AV Scanning for File Uploads(文件上传防病毒扫描)
) D& t" l; ~3 G: f2 e( I% T! r检测通过Web应用程序上传的恶意文件。! }* i! Z9 o9 Z/ s& A/ A
8 D+ Z) T* e" V# U- U
( J8 v$ `9 p3 v" {7 n5 z% d- J8 \; [( Q
Tracking Sensitive Data(跟踪敏感数据)) p2 }* i. B: I# Q( [
信用卡通道的使用,并阻止泄漏。& A# y4 i& ^0 ?: j7 M" Z: S
) g/ m$ I/ l) z, `. \; h' y* |5 h
1 [6 B" Z1 J( ]- B% K
Trojan Protection(木马防护): j, X0 B8 X& X. |" Z
检测访问木马。5 j: L! o2 w- C8 z
; F( h! _2 a `1 X& J, t) P1 d8 _, z0 @4 L1 R2 }
Identification of Application Defects(应用程序缺陷的鉴定)
6 Z9 G" e0 H C检测应用程序的错误配置警报。
/ k4 z9 A0 Q" @: a% w
. s" }5 l3 S9 q+ g
! Z: k6 b' i% Z, c q) d' D( ^Error Detection and Hiding(错误检测和隐藏)2 A+ N r5 [$ R& m* ~% b
检测伪装服务器发送错误消息。8 i4 o* ]# E5 S/ c9 g. R# ]. a4 G
* n/ y( z; e' V* l+ S; a
% D/ L- n4 I- I' Q7 A; }' K7 e
安装ModSecurity7 @! w0 X2 ^, C0 K0 l, X
软件基础环境准备$ f7 b& f5 @% }2 ?, N Y
下载对应软件包
* S$ e3 w- t" c2 L! n$ cd /root
) z, p. B5 T6 ~$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
) @& `2 m( p% F& L, u' _$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz
; i- r4 O) u; a安装Nginx和ModSecurity依赖包2 W. @: O7 I2 O2 S0 t6 ]
Centos/RHEL
6 M* y1 y8 c7 F4 S# ^1 a2 ?. Q' @& W# |/ ?7 ?" ~/ a
: t/ [7 a8 K3 Z
$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel6 k- `' `$ s; M
Ubuntu/Debian
6 _6 x" z/ ?9 @! g6 G0 @! X2 N" ]0 j; F) ?* |+ m
( Y8 Z8 X0 q" M9 r' f% x6 ?5 O2 @
$ 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
# }# F% x% k/ v编译安装ModSecurity
6 g! F- ^+ r# J% o. JNginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。* F. E3 |+ {9 F: m R
7 o3 F7 ]/ P. N: k1 p* C
" V% g, S! ^7 S- b" Q# ?方法一:编译为Nginx静态模块& q; D5 F6 P5 Q. |6 d, P( Q
( R. d$ S( l* u7 ^( m
* K" q* M6 A8 n4 |编译为独立模块(modsecurity-2.9.1)
3 H, k3 ~& n& }7 h; H& l9 k2 Q% c$ tar xzvf modsecurity-2.9.1.tar.gz
8 M+ p; M- O ], \$ b$ cd modsecurity-2.9.1/2 p5 f1 V9 H' T. N3 O; j- {
$ ./autogen.sh
% O! d" [- o# [" m* z% b$ ./configure --enable-standalone-module --disable-mlogc
1 b5 U, h: i6 x A2 I# E- J$ make
\, H& h, V" ]( j$ x1 u编译安装Nginx并添加ModSecurity模块
! V: }7 `+ r! K! o, l# B( Q' ]$ tar xzvf nginx-1.9.2.tar.gz
4 N8 E, m' \ _! f% N0 A3 M6 J0 X$ cd nginx-1.9.2
3 D/ o) Z1 i. F- Y3 z; _$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
- [7 s/ G0 W9 A- m% a$ make && make install: b0 U0 `& |+ \: y8 ]
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块' L# i, }8 T6 o5 M: t5 T8 A
/ K* E* [" v# q7 a u
4 p3 z# G4 ~$ J- a$ y3 W @- k
编译LibModSecurity(modsecurity-3.0)
R# S+ q7 d p$ D$ cd /root: t0 G5 ?8 \% ~
$ git clone https://github.com/SpiderLabs/ModSecurity7 {4 ?7 e) H+ P. a+ u
$ cd ModSecurity
2 [& M& b7 R) B) f, p4 U* a* k7 @' Z3 h$ git checkout -b v3/master origin/v3/master8 R* g& v) d2 K0 R2 P
$ sh build.sh
$ F* y. }7 M x. M9 d0 q$ git submodule init
! v4 S- ]! _8 X0 r0 z2 j( O$ git submodule update
1 m' ^8 w& z1 S+ o- E$ ./configure: L+ v! s' `" Y0 l6 Q4 H
$ make
q5 n; F" I. z, y$ make install! a. E) D5 ]. K D. a
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
" U0 a( y' b% ^( K6 j3 I) \# n8 M8 f, u: b8 _
# S2 C# L: s: _, s+ @* F
$ ls /usr/local/modsecurity/lib
+ |2 S' e9 _/ llibmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0 Z% Z* U+ b, M& q9 ~0 @: }
编译安装Nginx并添加ModSecurity-Nginx Connector模块
6 e8 ~% s5 M; q使用ModSecurity-Nginx模块来连接LibModSecurity
: B) e+ C) [2 @9 A- `
1 Q0 Z5 v# z) Y) v4 W& y: q1 \
6 h7 A, Q, v( U8 N! K3 _# x1 j7 s7 \$ cd /root
" @7 Q1 W" @( `! ?$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
) `+ W: d; E4 x |3 B$ g2 a$ tar xzvf nginx-1.9.2.tar.gz
% ]* w* t) k- ]+ b1 a M- q2 S$ cd nginx-1.9.2) S5 v& W+ g' t) g9 X( n
$ ./configure --add-module=/root/modsecurity-nginx
2 X( n5 | n2 Z1 p$ make+ ~. ]( R# P, u" @" g. f+ U: N
$ make && make install
4 m, }1 Y" J8 N5 y$ a1 \添加OWASP规则- k6 F( _, i' ?, q& q$ N% I5 M
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。) t1 V- d# I& _
! z& w b) ]' L7 m9 O
" [9 z7 c. d% ^3 M( G; V% y. V# [2 g Y下载OWASP规则并生成配置文件& ^' d- D' B- Z" u7 f1 L& K
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
! ~& y# E- e+ z; R2 ~% F$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/ Q2 L! V/ p G k
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs+ F! B1 W/ _- P! i. K! `! L: H# _
$ cp crs-setup.conf.example crs-setup.conf; Y `+ t. d9 }% O0 j4 x
配置OWASP规则
, l# Q# C/ {" g% @" E9 }1 E( a编辑crs-setup.conf文件
x) M7 r4 F( y0 E; z3 P' R3 n* B7 x4 \2 h- U) i3 R
& s, O, {! e- d7 ?$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
/ v: L w y2 V+ Y0 C$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
' Y5 U4 k- {# v0 P3 j' P. q$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf. q$ R: t5 {; f$ J, S* @
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf" a! I( T, W- h1 D: c
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。! k- e- F* I* {% E! t1 E/ K+ a& [
* f; c' A4 {5 k2 F
% t0 n" U3 ]! j
启用ModSecurity模块和CRS规则* ^& l' X) K9 I! q
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。$ v& I* Z Y2 [; o% Q
( C9 G( l0 X9 }/ B s6 }% L+ P; M* o+ V1 N) w* ~- u
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
2 x" P7 `4 l, k$ i
- q0 V w, X9 E: O6 }
) i. L4 I/ M: Q. O9 d/ Y. D- g$ cd /root/modsecurity-2.9.1/5 ]- o1 C; M8 h* D$ D' z
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
3 X% d0 Q8 O2 A$ O, ?$ cp unicode.mapping /usr/local/nginx/conf/2 \& _# S1 }9 y6 k; f; r6 h
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
W3 G Q3 C5 L5 x9 C* q z
; U; @4 E3 l9 W8 W' t
: O3 B5 _7 o; w$ vim /usr/local/nginx/conf/modsecurity.conf, n! X/ W) ~( u$ t/ x! o& i
SecRuleEngine On. Q8 j$ p4 [& ?/ w; J4 S( V
ModSecurity中几个常用配置说明:3 I- M/ w5 U3 P- c* C/ D
; Q6 m9 o n+ p/ b- L3 R
) f1 X1 D. \6 z, p+ ^
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
g; r5 |# a$ A% ~2 \3 L( Z! }1 D; v6 Y, [0 n8 n& @
4 q4 r+ I6 {! F6 C2 K
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。& g& h$ p) R# e( ?8 o1 ` l
# J- L. r$ D% O4 E
! X* m/ i1 `1 t: o/ Z3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
5 L- B3 {* Z2 @/ v6 ^- }& N
6 i1 N2 h4 W! Y5 C8 N8 K- | F$ G3 T- i+ W
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。; p2 q- i( ^% J! n
9 V3 n( E8 i/ b3 ~$ k- ?( }
. ?7 M g8 K5 f& h% |
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
. n8 j, _. I7 h7 e3 G" P h1 v& ^ T# a3 o: R
5 j9 v3 Z8 y# b/ s
3.x版本CRS
( S, U1 q. X! ?$ Y/ j; D$ z$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
& l0 I( u1 i1 P* i0 f# 生成例外排除请求的配置文件! x ^7 h8 l' R6 t- u3 l
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf% n. k' H- E7 g' t8 s
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
% O- i2 n1 B3 v: ]' {$ cp rules/*.data /usr/local/nginx/conf
, C" K+ d* X0 y为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
: m4 P$ E2 x# Y! |& M! v/ j Z) `' W3 R3 T+ G- U9 g$ A
& i1 C) s. b1 J; {' {8 B2 y# ~
$ vim /usr/local/nginx/conf/modsec_includes.conf
5 `' A2 V& J) g; D& y O2 @) v
3 g! n ^- n2 W$ H/ Z0 ]* k1 K7 X# p2 u[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
, ]! o f* T; b l; ?, U2 b5 N, R) T( u3 t0 l! J+ [4 v1 k
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。$ F, y: Z: ?3 Q+ N3 [+ c: p: J% I9 K# Q
# `: G/ D8 u+ `* v4 J! ]+ f
* [/ U$ G0 N' y配置Nginx支持Modsecurity
' j. T1 z* h( p4 N5 G启用Modsecurity
- g* M, F( t2 |% h使用静态模块加载的配置方法
' D) |4 q2 B9 R/ ?6 y5 {在需要启用Modsecurity的主机的location下面加入下面两行即可:. c% T9 Z( E: ?2 e0 ^
. j4 I% n( c4 t% k6 h0 }: F& g0 i
" P. ?6 U( w2 _3 {; z) U) C' }ModSecurityEnabled on;
5 O& t, m) F/ j \) G# O9 sModSecurityConfig modsec_includes.conf;
- D# L4 c5 x3 Q5 I( L- J3 N ~修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
3 @7 Y, k; J( f" V) `" X) R1 F
& v/ V5 l: _: l( u) z
0 H) F6 D9 e( U4 U* Y$ vim /usr/local/nginx/conf/nginx.conf
: l9 X J# b' f, C6 ]; t+ X V( P7 L0 O/ C2 E" Z0 W& J2 V
* `$ s% P% @# m+ d6 T. Q! `; J
server {
* m# v& ^# y- ] s$ I2 a- J listen 80; e) R0 B; Q; P2 Z$ o: I' Y
server_name example.com;
# ^ M4 v4 y C: j1 {2 x! F" B8 R$ M( ? i- O( m/ v4 Q! G1 A
$ W4 b8 N2 e3 c7 _( P, S
location / {. @2 Q" b6 x9 J; F) s I
ModSecurityEnabled on;: h. e" Y# F& Y, j1 k
ModSecurityConfig modsec_includes.conf;4 C1 M7 p1 e! X$ ~) V
root html;5 Z- l8 W; h, _8 M
index index.html index.htm;
: y% Q$ E. T g4 u3 \! U, x }% W w- y$ C! ~1 f7 ~
}
! K! H9 I: u1 R5 F, @使用动态模块加载的配置方法' y# m1 e/ A4 Z% R; a
在需要启用Modsecurity的主机的location下面加入下面两行即可:
# ]+ J' }9 t, d
" }( q& e' }5 O C, n: p1 s, V
0 H7 g5 d9 K/ o( nmodsecurity on;8 l* x- |4 w$ ^4 t" ]5 s7 M
modsecurity_rules_file modsec_includes.conf;& M2 e" n5 ?2 V7 N0 W3 L! t& y
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。, \4 `# \; Q, W/ X; ~
1 _+ ?( p4 O- D$ E( Z9 A8 r
# E! l3 o. D2 t$ L# N: ^" }
$ vim /usr/local/nginx/conf/nginx.conf
4 ^! C2 @) v+ I. G* [ t0 K) b8 d1 C
! r& K- {9 E& h0 q& f' G" ^ J7 ?
server {
4 ?6 q; k* o# |$ x3 u" _9 Q listen 80;
& G% D _* e! s, y3 O server_name localhost mike.hi-linux.com;5 f- B+ J6 y/ V1 l8 J2 g& D1 ?( o
access_log /var/log/nginx/yourdomain.log;+ F2 v, T- _- c
3 Y( K/ L4 Z9 {. S" L& r. H3 C8 F& A+ O7 [
location / {& F! `$ |3 e7 m' l+ w
, h3 x- a9 O j& H
: l- z1 q7 E7 l2 A7 o( K7 V modsecurity on;7 s: \! }0 x$ A% \ }, U Q) x
modsecurity_rules_file modsec_includes.conf;$ r0 `- s6 n& i( K+ e i! d/ f' F5 }
root html;0 ], [- _7 Z! A1 A6 `. F; ]
index index.html index.htm; X' ~! v# k: f5 H: z' T: s4 @
}
4 g+ P0 y b* S- X}
0 p9 r7 q5 S2 l$ b" h' D( P验证Nginx配置文件
+ Y5 Q# `* M) S" Q& E$ /usr/local/nginx/sbin/nginx -t
" K- \) G6 o& Y& a0 ^: Q! N8 @0 inginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
: [- K& z) X+ knginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful4 Q* j2 i# B( o) J
启动Nginx
) r- D- [" N/ }: Z4 b' V9 V# m$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf% y# ?! b6 A# o. \+ j) I; }* d
5 w$ e! c6 W* h9 t8 e测试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能够战胜更多复杂/未知/混淆的攻击模式。
4 r* ` L6 W+ }7 E P! L3 \. v$ g$ i |