ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
. N$ K; b' `3 N" q- h% ~+ `/ u
) h d( h1 L; L' V! N! J0 _) J4 o+ g. ~7 G/ ~/ A
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
* _! U! S. m4 _
8 |4 D/ R' C& o I4 C9 ^6 c' h: \5 S5 T8 U0 d# P! r
什么是ModSecurity
4 A% F; l- ~6 O! u, z" P7 Z4 `4 }ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
2 I7 t& v+ P. [, b' V. _4 `; Y% l0 h8 v5 {3 J/ o6 @& ]! l
% b3 T5 ~# r& h0 z& Z7 h2 a; CModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
6 k. ]' W9 ^$ l9 k4 s4 R* Q$ S
+ \; P3 p; X, k! x7 H9 m( ?% y* K5 Q+ @% d
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
G+ h& X: A2 H3 B. J9 |7 y% u" j
/ e# z$ h) N {3 c* W2 L
官网: https://www.modsecurity.org/0 @& c4 k+ Z$ t, i4 \8 F# Y
* Y" B. s7 n4 o) t, M# h" R$ P; K2 o3 G& \: N
什么是OWASP CRS/ i- b1 U, a+ ^3 `" ~- Y. h
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
0 j4 B& C0 v* U5 q; b5 ^4 O# o2 z: z+ g3 R1 I# R& Y. H
( w# s. y- H1 q* ?ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
& a ]9 n( X5 Y- J; \$ ]8 ?/ w: I: i! E! D
$ s K& z/ y/ P0 X
HTTP Protection(HTTP防御)
; k2 P' J# Y9 Z/ O( Y$ VHTTP协议和本地定义使用的detectsviolations策略。
8 h9 J0 t# t. U8 `- N. S% b7 h; W5 Y J5 O
. r9 Y; E9 j! d
Real-time Blacklist Lookups(实时黑名单查询)
+ g2 ^" x& N, g0 L- l' \- S5 W% k$ f利用第三方IP名单。5 a" B8 `$ W- O$ I
`- Y# W4 N! t4 S" f3 f3 H- X* L! M6 e; f* @8 t
HTTP Denial of Service Protections(HTTP的拒绝服务保护)" z1 _" H+ h* ]. L" R2 N& s" ^
防御HTTP的洪水攻击和HTTP Dos攻击。% t' Q/ d& g) p5 }- b3 h. _
4 E" v/ w; U0 a7 F7 z1 h
2 l8 e9 P- \; N' x6 S2 hCommon Web Attacks Protection(常见的Web攻击防护)- [: g) r' E; H, ^( y B" O) e
检测常见的Web应用程序的安全攻击。
3 z+ T, J% ~* ?8 K3 Y
0 z2 L, v$ p, }- |, e% D" W* X7 u$ }8 [' r+ J4 ]
Automation Detection(自动化检测)) O) ~5 A/ F. n9 X: n
检测机器人,爬虫,扫描仪和其他表面恶意活动。
; j6 _! Q+ O. I- p& H3 o+ ^- C
; K! Z# `; X0 @5 f F
% U3 d; ]) o# U" R4 I+ k2 dIntegration with AV Scanning for File Uploads(文件上传防病毒扫描)
7 @! n- O- z# ]2 T( Y检测通过Web应用程序上传的恶意文件。
7 N$ t v/ n" H+ ` O! X
) j, T: e) d) t$ Y
7 T# {2 y7 b1 Q! y& \1 eTracking Sensitive Data(跟踪敏感数据): C- z9 c% Z; _$ t
信用卡通道的使用,并阻止泄漏。
1 y9 v: I- Y( t" }$ r9 j" `0 a# v0 q4 X) [' n! L% L' M) _
* Q9 y1 X5 e( ]) cTrojan Protection(木马防护)
# m# Z3 p+ S: f \- G) U检测访问木马。
* H6 ]8 @; j# i" e6 ~8 E% o) j7 S H9 q/ r7 s. ?
6 r3 V9 Q- {, s) C! p$ HIdentification of Application Defects(应用程序缺陷的鉴定)& ?+ b2 U/ v% N5 K; M
检测应用程序的错误配置警报。3 E1 F( Z0 s7 K$ N& C m
3 S7 D4 v5 K; L! @' |1 d. v2 v! q7 l* R f1 u/ }* o
Error Detection and Hiding(错误检测和隐藏)
- A3 D5 b, T; M检测伪装服务器发送错误消息。$ U0 Y2 `5 a w! l/ p" ]
" G; F3 A7 s) o9 s* _
w0 V4 E/ l; x安装ModSecurity
( b9 K+ y# T5 q! U9 {4 S' M软件基础环境准备% ?" v, p! F E* M# Y U
下载对应软件包
" o' j% x1 ~4 R; B! c/ _2 B$ cd /root
; D a2 _" z- y; ` Y N8 x, k9 w, b$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz') E+ R3 C4 g0 v) D9 R8 K ]
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz
" W4 g {; h9 {$ q4 \2 e安装Nginx和ModSecurity依赖包
7 \) i0 \; h3 F3 {5 q& Q& LCentos/RHEL ]+ P3 _4 Q: p4 y% d0 l, d+ l
9 b2 W: u7 R% X) w. ~6 R# i' R9 h y
6 n# @1 s" j$ R6 f$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
7 b- _( O9 a) D. c KUbuntu/Debian
" J) U! T, k* ?1 d! K
) J- n# O1 u3 X: z {( [1 \6 G% e) r2 \: l
$ 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
. d# @$ N# u) @/ u, n" g编译安装ModSecurity" z% ?( |/ A, [
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。, x: a, k3 Y8 O- Z0 {
k R# a# w+ m, D! M
& U' S2 d* {' F' V$ N' W3 X
方法一:编译为Nginx静态模块; p9 U# P9 ^$ ^& ~" _! f" a
& H9 k6 v2 [* o2 f, w' ~9 S) A6 z: r2 e' @9 |0 B8 s# q0 }' k
编译为独立模块(modsecurity-2.9.1)* R5 R7 k! R$ H* a. K6 P* S/ f- g
$ tar xzvf modsecurity-2.9.1.tar.gz V( [0 m: A6 ~ L; P
$ cd modsecurity-2.9.1/
6 _8 ]7 H- v2 A5 Z* |$ ./autogen.sh
2 N5 J, ^* B4 a4 S7 i- g4 |6 Q+ w$ ./configure --enable-standalone-module --disable-mlogc
5 k9 P0 G+ s+ G$ make0 t( V3 Y2 I9 D3 B) N+ Q: E
编译安装Nginx并添加ModSecurity模块$ O/ z; Z/ G; S- ?
$ tar xzvf nginx-1.9.2.tar.gz
, z" E4 K" l0 A0 [$ cd nginx-1.9.2
. l" ~) z+ f }7 M7 [8 s% E( l$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/' \2 f9 V H$ |' @4 C% K; U
$ make && make install
3 [+ B$ j' V9 a6 q! r3 _* ^方法二:编译通过ModSecurity-Nginx Connector加载的动态模块4 s( h/ h- b* y/ c, }7 T) U' w: O
- n( K" h. _9 f& K& K" `, X! h- J; l) z$ ^ H% I. ~
编译LibModSecurity(modsecurity-3.0)2 z4 w: \+ y3 q4 ]& q
$ cd /root2 [2 U' A$ L/ n) s+ i/ T
$ git clone https://github.com/SpiderLabs/ModSecurity' n, \ x8 N4 _8 E6 g% x# q2 y0 E
$ cd ModSecurity8 n( s) U2 e2 \. _6 _; h3 `
$ git checkout -b v3/master origin/v3/master) p' V, U- N- w" \+ D
$ sh build.sh
/ o2 \, N; [# w$ git submodule init
J3 X t3 F: o; Z* R$ git submodule update
0 f' B" `9 g. u& Y$ ./configure
3 q2 s! K) ~6 R* H$ make
5 ]8 a' W7 ]# a9 X+ e" i( X$ make install0 K$ c/ F+ F6 E* S9 [
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
+ ]' }5 s3 t) `' c7 y* a# X4 n! K% o' h/ `& G+ z. d+ l
# [6 f+ u$ P' `0 Q" Y& U
$ ls /usr/local/modsecurity/lib" y( x: o$ c% q6 H( o2 @ e2 `% b
libmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0
0 o! K+ n( q) A/ O0 Q编译安装Nginx并添加ModSecurity-Nginx Connector模块8 r8 k* o2 a) d7 R2 [
使用ModSecurity-Nginx模块来连接LibModSecurity
, g( p- B: ]( C1 h. Y0 p; P; ]+ Q. k( }4 G& m# u/ d
4 |1 j5 M& a3 D: _9 B: O$ cd /root. n" y: m4 X$ Z
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
$ e# {- [- q0 _3 c7 t8 i4 g$ tar xzvf nginx-1.9.2.tar.gz
) v: {/ @6 M J. v$ cd nginx-1.9.21 u6 \, P \4 j0 d
$ ./configure --add-module=/root/modsecurity-nginx( ]3 z5 q( t2 v! E. m
$ make2 k/ S1 B8 Q: D* n' @
$ make && make install1 _' W, d* B$ t* g. Y4 \) m2 f
添加OWASP规则
/ _- F" O3 q w N, R( i' k; WModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。 {: M$ z6 K0 ?) n! \, v
* X) D# d9 M. P' c
1 d" P) ?/ `/ l8 k- K下载OWASP规则并生成配置文件
8 q' p4 ~0 } X$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
" Y5 \" N. X+ `' q) o! T$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/: u' m; Y+ {9 n% a& l) H
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
) c( `' C/ S3 g* N' ]* s5 Z$ cp crs-setup.conf.example crs-setup.conf2 [& c* d' _/ o. G0 @9 W# M
配置OWASP规则% ~& S. Z* L% f" n
编辑crs-setup.conf文件
+ e8 k) f& Y! M$ x8 q6 _) o) ]
$ f% h0 [6 Y( D/ D9 l1 ~# }- _# x3 I1 C$ J8 v( _: H
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
& w8 W6 C3 j: f7 K J# V. m$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf- K! L# i) j. H8 r r; d
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
7 J- p8 D* \* ?6 k/ 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: k( V1 Y1 d8 _8 s# z
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。/ ]9 I& }/ c0 N# C0 p* P; b- g
, _9 m# t4 y3 P1 }/ R+ a: c' `
: w3 l7 I( Y7 j% b' Q6 @启用ModSecurity模块和CRS规则
% l! o3 R! @. t y/ I复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。0 I8 k7 ]7 t* L5 M* e
, [0 I3 I/ e1 O
, ]! }8 X1 ~, {6 amodsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。* M$ l; E; u N3 O
0 L7 B$ J, B) _7 @2 J
1 o! |# n" S$ u. k$ cd /root/modsecurity-2.9.1/
! i/ ]( C1 U4 Q3 L; w$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf I1 R% e5 m# { F9 z1 t
$ cp unicode.mapping /usr/local/nginx/conf/, [ V1 R/ k* C% U
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
. c, f) p: U: `# H' @& m
( W: j0 W$ E+ B) N7 Z- f5 r6 |, n
/ b# k/ I2 r" \8 k$ vim /usr/local/nginx/conf/modsecurity.conf3 f: g- v% y( N2 o5 l; F, P
SecRuleEngine On
3 Q- a& I% o3 D1 b) k7 R6 }( rModSecurity中几个常用配置说明:
( l- e6 I% X( K7 A
# g1 O: z$ d, Z+ X; Z1 M/ ]/ v5 L: \+ G
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。/ b9 t/ z. l! C/ U) S, P% Y
+ E$ {5 |" A& S* f1 ?
/ G; y! M& p* }% h- m
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
4 |/ S, r3 w) Y
4 v8 B% `) S2 r2 F; p8 W/ e* q$ o5 k
7 \% L, e/ k1 y* q5 g3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。' P( k9 Q; F$ `! \) N
2 W/ {, x: w) e/ [* i# x8 q7 Q+ J) X! W) Q; N
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。+ {# Z/ |7 |# O6 v# K T( {
0 y7 O* S$ v: K( c8 a+ {# r4 Z; E+ m4 S! v+ |: Z9 ?
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
$ i/ J- _, L- L; W# K: \
) o+ w* y& W( n/ p. T6 |- S# y- ]6 Q: d! J E% t, ^+ v
3.x版本CRS" B# T) L/ F1 ]" F4 ^" ^
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs) e+ ^* E0 X& D' V7 `9 g! }
# 生成例外排除请求的配置文件
% b! T2 f$ @2 L( h E: q$ O! @4 e$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf' @7 b( e# Z, n0 n! v, ?$ u
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
+ ~, u# @) x& w5 U' ]$ cp rules/*.data /usr/local/nginx/conf# h1 R: T" g/ y9 W6 d1 K
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
/ n% z# X, s* D1 s, P9 ?- l l# k1 h5 Z/ T8 U6 H8 r
# i# O( Z, @) a& ]* E$ vim /usr/local/nginx/conf/modsec_includes.conf0 L* x: U9 ]6 `) h
* ^4 L1 e( d0 c/ k, B, |) g) s
[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 9 j8 M- q$ B7 ?1 p! W4 N
. j2 G) }% n! Y注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
! @: e1 w: ?4 y; P l4 z0 T0 X% _% d! h( X/ F$ ~1 p
: Y! @# F5 h( ~. ]& l配置Nginx支持Modsecurity" W" n3 N l7 ^* \ P1 d
启用Modsecurity, Z7 A' z2 g! b- x' N3 H
使用静态模块加载的配置方法
0 f4 h0 M( u- ^" Z2 z: I- Z在需要启用Modsecurity的主机的location下面加入下面两行即可:1 B; j8 G0 j. ]8 s- d- N
' j! J) }5 u2 g+ R" H: |" D+ l* c6 R( m/ m: z
ModSecurityEnabled on;2 f* ?( B8 K/ ~! ^1 B+ k
ModSecurityConfig modsec_includes.conf;9 y; B; d) z* R1 G( X
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
$ h; v) R8 W, p/ Q, m
9 Q3 Z& Z( f0 i9 I9 @0 X) |! T1 S+ z! b
$ vim /usr/local/nginx/conf/nginx.conf5 |' u: T3 c+ a& [; D
5 N& l0 ~% l! {1 _+ Z2 x
1 S5 E( }4 B6 h# u* S
server {( p7 @, ^' `" ]9 E+ ~
listen 80;- C* j9 N& P+ b
server_name example.com;
) K: }6 _ \. L2 n' ? }! @4 h$ r1 G" h& A7 W
& N- p9 ?5 A ~& Q" d/ f! s! ~! U+ O
location / {' H* w/ S, E f* a T4 v1 G
ModSecurityEnabled on;
. j& E, x/ k0 R' h3 d9 V" R: {4 O ModSecurityConfig modsec_includes.conf;
; H& @2 z: ~5 `7 ]* r6 H root html;' V7 |, S' T- |$ L4 X2 c
index index.html index.htm;
4 h5 x* X7 a$ I }# I2 ]7 P0 e% }2 Z# `# V
}7 H( v7 f9 C# R' J V/ d
使用动态模块加载的配置方法
' n1 A+ P) L1 p在需要启用Modsecurity的主机的location下面加入下面两行即可:
- S+ g1 t7 P* L
K1 n+ e3 z7 m: t% _6 M! t, t3 q7 ~( z6 D: Q
modsecurity on;, i) R, k# G/ R" a/ w
modsecurity_rules_file modsec_includes.conf;
% D. [9 P* N$ s, a修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。2 y/ @* n0 S- a
! e" M7 M3 B9 z/ z; j7 T' q' y3 w" A
$ vim /usr/local/nginx/conf/nginx.conf
' K2 V9 i) _: ] r, V
! L5 f; ^/ O7 K: p. m8 Z V0 n; q1 F0 q5 T" z1 Z+ ^) ^7 Z _
server { t4 F% R& W# ^ I( O/ l7 R
listen 80; h& M4 W* ?- S/ ]5 l3 Z, n% i
server_name localhost mike.hi-linux.com;- U8 j: ?* y8 ]+ A& ?
access_log /var/log/nginx/yourdomain.log;
' i, L# q; @9 b, a$ M$ g; s' [6 ]
- P0 f* _3 @* c7 F location / {
1 t, }, J; l9 O4 p5 F# X$ u3 f5 b% x
6 C8 P. C. n$ k& r. f modsecurity on; g6 }$ S( K, F# z/ U
modsecurity_rules_file modsec_includes.conf;. r$ @& E2 O q% I( y
root html;& n# ~0 I" L) @% i# o% [% w2 Y' o
index index.html index.htm;
3 j( Z2 _2 \! M2 i. Y V' e& ]}
8 a" s/ A6 k" j; g}
. ^# o' H6 C: b! P验证Nginx配置文件2 `8 z4 M1 }1 r4 I( ~1 ^
$ /usr/local/nginx/sbin/nginx -t
- ] Z) Z# ~. Gnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
7 Y1 i5 |/ }$ u% W( i% Mnginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful3 h7 p( d/ K3 b1 Q i, }3 r. ]; G0 |
启动Nginx2 C9 R: X, \/ {, I- P- Z0 w
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
8 j5 S$ h* M% W. r/ k! |
1 i: f. |2 P0 j9 I9 b1 ~测试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能够战胜更多复杂/未知/混淆的攻击模式。
; S) ?0 z$ d8 R8 V8 f+ B( [ |