ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。. y$ I. K5 i6 _
: _9 e$ x) J8 r6 |$ s
- K& b, F: o. L! a* k3 \在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
" I D$ ?5 ]* K# |5 @
# I3 e5 Z, B# `5 A' K1 Z% ^' Y) ?. T0 I
什么是ModSecurity" j4 A, n0 Q, [7 k0 v! s! b: L2 c
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。' p6 i) S4 [3 F! l1 B/ v
4 I( |3 x' }7 B& c U8 p
2 ~6 F$ I0 I3 L" ZModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。" k. E( n; s- E: U
6 y' u1 B6 ^" I: J4 K' j
" z# E! x+ v3 P& u# UModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
: R/ s( Q" ^3 ~7 @, h1 u8 t; a+ X9 t3 p; C O
3 P V, r5 {1 @: }$ n官网: https://www.modsecurity.org/# s2 @ |0 U$ V B" `
- s3 c4 |1 y5 l% L
@% h. J& H# C5 T2 a% K) D什么是OWASP CRS$ y7 d, |, j8 L
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。9 n9 _* g& @6 {9 D
4 o6 Y5 n4 \0 `, M9 Y; x
, M9 h1 F) x0 H* b8 ~4 E j' }ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。7 k1 Q1 e, l; T$ p5 [& @: X
9 z7 h6 z8 E7 `; @- M0 p+ u
/ @: L- q" @$ E' Q9 u
HTTP Protection(HTTP防御)3 P6 s- X1 Y( |. R h$ @
HTTP协议和本地定义使用的detectsviolations策略。
0 F* z( S: Z: b9 O. U( p) i6 g2 @ g; K( h6 S: z+ f
4 H8 [7 N8 M b3 f- m o
Real-time Blacklist Lookups(实时黑名单查询)( S* k+ G% j# ]7 T R3 _
利用第三方IP名单。
% ^3 n: j3 s8 u* ]5 ^
! z0 c' V! S/ P! \% w$ ?3 {" M2 V8 Q
HTTP Denial of Service Protections(HTTP的拒绝服务保护)0 E8 t+ G1 U+ {
防御HTTP的洪水攻击和HTTP Dos攻击。9 b7 f" p2 x5 Z
4 T3 S: G9 o$ `! W S E% `
) p$ ]$ G2 X$ ]* l4 }Common Web Attacks Protection(常见的Web攻击防护)1 _; t+ @, y$ l Y
检测常见的Web应用程序的安全攻击。
+ B, f) s7 u1 F2 N% Z, @1 c( b0 ^, f/ G: }& z/ b
" [% A0 i" v) u0 E
Automation Detection(自动化检测)
& L9 ` q" J. p, `7 ~检测机器人,爬虫,扫描仪和其他表面恶意活动。
, F) u7 z3 ~ N( E! [& c" G# }( p- e2 Y: f# X
: w8 G; u2 Z0 A# ~' {% H0 n% q
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)( r9 t' r! X, S2 |) Y) T
检测通过Web应用程序上传的恶意文件。" C9 D# Y" {9 |, w
/ U6 H4 v, L5 K9 D3 s- g
$ E( c' V# t3 V7 RTracking Sensitive Data(跟踪敏感数据)
$ P7 K, ~0 {) g, b信用卡通道的使用,并阻止泄漏。
; c2 k, R7 N( ]: c6 K
* q% `, c( e) M
6 Q: M8 h& b& d4 Z' UTrojan Protection(木马防护)
- H6 n' p- P9 j1 y: s0 O B/ x检测访问木马。1 G( n7 P! w" w& `
% P# `/ e8 Q- ~/ R! a8 e0 U+ `, s8 k7 e! _7 M; j- P4 n$ D9 Z& n
Identification of Application Defects(应用程序缺陷的鉴定)
; F" ]8 m. N5 _检测应用程序的错误配置警报。- X/ C# }4 S" s8 Q* \. U
. n x. d/ F) u6 H' n! ?8 A- ]
) D4 ]2 A% B% I2 {, h1 o2 O- k5 BError Detection and Hiding(错误检测和隐藏)8 ? D9 Y- K. I$ O: B- q: Z
检测伪装服务器发送错误消息。* b/ o7 X& R' b" e" _7 a
& P0 c; }5 b% U- [" Z* Z( F9 m3 ^) d* W8 y( C2 B
安装ModSecurity4 ~, J& i$ E' S E5 K- W7 U4 L
软件基础环境准备
% q$ s4 H9 n v下载对应软件包- Z) |$ m' ?0 A8 k
$ cd /root5 R0 \$ U7 M8 c. ]5 }" m' q' H
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
+ H" g+ b) r7 O% 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
0 n/ N4 w# g o" E" h安装Nginx和ModSecurity依赖包3 |4 k% P1 o# P, \3 M
Centos/RHEL
9 b& \. e; u+ s" S1 U: G7 C) X% z: c8 Q
2 e& T- O/ L! j2 m1 Q
$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
. B0 c0 s9 Y0 H9 J% HUbuntu/Debian
6 l! q0 F5 V- M. z- `4 T( O1 t9 B D" L1 w
3 ]% k2 x" I& R8 Z4 q# g$ 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++-dev0 L8 W ^0 K+ M2 v. i# A
编译安装ModSecurity
/ _6 o6 t5 \& u6 MNginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。5 z+ O7 M5 V {) n* Q* A' N2 [& z
0 x: {" ^2 M" v7 {* q+ ~: r7 F( o' T$ \0 ^' w" {" t6 T
方法一:编译为Nginx静态模块; y, D/ M; M+ Q$ t: }/ s3 M! I
( s& j+ p: E9 c S1 z+ L" D( w* ?% i
编译为独立模块(modsecurity-2.9.1)
) O% J4 m7 Q. Z) q$ A1 n1 |9 O$ tar xzvf modsecurity-2.9.1.tar.gz
; i9 K1 [0 n/ N1 y: m( A* X$ cd modsecurity-2.9.1/
% m8 G! u. F& }! M. m$ ./autogen.sh
$ d! X H9 M' l' N4 N$ ./configure --enable-standalone-module --disable-mlogc# Y& n5 O* D, ^3 d7 n7 R0 P( v
$ make* b& S# r7 q/ [1 w: v3 i
编译安装Nginx并添加ModSecurity模块0 {0 N( Z5 |! s( |4 b
$ tar xzvf nginx-1.9.2.tar.gz
4 x( [4 m! Z `. D `( X% i. W4 \9 B$ cd nginx-1.9.2
9 J8 r; ?7 E6 d. m$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/+ O3 U% h7 s3 a8 Q% O) \5 {$ v" T
$ make && make install
* ], b4 z0 S) W( p4 U& g4 k方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
F+ D6 a8 S, k8 J
' x& i* h* F9 W5 G
' r+ C7 g" d% @/ z, E: e( v y编译LibModSecurity(modsecurity-3.0)4 v0 y; j7 `4 J7 T$ Y9 f8 t
$ cd /root
; d# G) R+ }- G7 c7 O' E* b; e$ git clone https://github.com/SpiderLabs/ModSecurity
- u) |1 x& R6 n) d$ cd ModSecurity
% J) m) V9 ]7 z4 j" m2 ~# q$ git checkout -b v3/master origin/v3/master
9 e$ P' g$ l6 }+ N! E' G$ sh build.sh: x3 I4 m2 z% r9 H( \
$ git submodule init& ?$ d4 x- ?% q+ b) v7 x0 S
$ git submodule update
, n( }& ^. Q! u6 u. G$ ./configure
1 T2 _4 _* p2 ?& P$ make" F' I( t- b( f2 T
$ make install
. s1 {3 x l$ w% O2 s# l: b. o# QLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。1 ?7 P# N: s, {/ _/ }1 }
4 t+ \" Y3 z: R4 q- W
7 I7 b$ v4 Z* s* _ P
$ ls /usr/local/modsecurity/lib- W# V `) O" K
libmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0
1 |; |3 U' D* p* b编译安装Nginx并添加ModSecurity-Nginx Connector模块
' p' `% p5 g5 j, ~使用ModSecurity-Nginx模块来连接LibModSecurity9 c h3 a& T# y# B! v |
' h! m3 |- h1 W& n0 X1 b: A9 B1 [# g% x0 Z, \
$ cd /root" Z/ ]# `; @; Z7 F8 q1 |0 r& J% q
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx' a* L; O! M) l% _, e% v
$ tar xzvf nginx-1.9.2.tar.gz+ y9 D' ]" [, N3 ^, s+ S0 H# s
$ cd nginx-1.9.2
+ |: u4 Y! c# ^* V8 U* I$ ./configure --add-module=/root/modsecurity-nginx5 v$ P$ _. W" K
$ make, f/ W0 \" d4 u1 W* C- E
$ make && make install
3 {% M) y0 z v' u+ X" M添加OWASP规则
8 {* Z) Y! i4 N+ N" I8 L" mModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
2 i4 z O& W3 c7 Z% j7 ~, {5 M+ `' n0 E9 c9 C
- M. K0 I4 I8 I$ A) C下载OWASP规则并生成配置文件 q7 [- f8 L6 H3 G ~- O( |
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git, j6 X; v3 Z+ X- w/ \
$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/
3 V4 A4 l: T. i2 T& v# [$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
4 m. f% _3 N J9 D$ cp crs-setup.conf.example crs-setup.conf
7 t, @; L5 K/ x/ E* N配置OWASP规则
: c- Y. z. X: _# D1 ^# j编辑crs-setup.conf文件
2 D; N g5 n1 p4 T. Y1 n1 {7 L
y2 I: M& L4 `' m+ Y
+ r8 M% |) `9 [8 P9 ?7 ]5 p' ^$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
* _) C3 [. v+ e- n5 q, H$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf) d: O2 ^% A& f b4 h+ T
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf/ t/ i, T2 _0 M! A9 O& h& i
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf4 q3 e3 \8 j6 ?) p3 q6 Y' F
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
; N4 e: ^5 c/ z* a) ]" p" w; t* |/ n, w2 _) r
7 E* n4 H1 T& V: j+ C) [# S
启用ModSecurity模块和CRS规则
+ z7 I/ g! c3 x/ u: R复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
+ u) m; o; }6 \2 G/ X# d# D/ s d7 d
" i* d- c0 _1 E$ m) I) W0 i3 Q6 t& U; X C1 L# m( l; m
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
* m+ K! l0 v. ^$ I- r: B' d* }
, s# n+ J) E- H Z% m3 u7 n( [1 p& ?: V" r" Y$ A8 ^- a$ {
$ cd /root/modsecurity-2.9.1/7 E* T/ A( Q9 O/ a
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
- l/ }% ~+ {: q) Y$ cp unicode.mapping /usr/local/nginx/conf/4 i( k0 v# l9 {- j& R& q
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
! M+ T7 G6 M& y
5 h3 ^$ j& c) V9 l
: e. i& p4 w# v$ vim /usr/local/nginx/conf/modsecurity.conf+ F- U) ~0 s, F$ c' }$ y
SecRuleEngine On
: W! i$ V% D1 X; ~& `& C; WModSecurity中几个常用配置说明:; N# Y) O* Z; i4 k, I/ O
/ G3 B8 k/ F6 e! C* a; x' l
9 x, ~# [: E# ?
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
4 S P- a- t' L9 ^# x3 P0 j! A0 i E. F' ]% `7 n9 }1 ]
$ u. i8 L0 P- ^$ R3 Q
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
0 x8 d, W5 C! b+ C; f: d: {3 F6 H) i* l. G' {& m* c
+ ^) ^' x" G# m
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
; v2 Q5 o1 c+ T+ q$ M1 f7 N3 d0 z! {4 x6 ^8 V
: d$ H4 z3 ~$ v
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。4 ?2 _) y1 n4 J; {) [, }3 y4 N
$ ]+ a, Q% R* M5 s$ ~
& Y6 N( ]; J% Z2 \; _! {* l/ a在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。3 ~1 B6 r6 c- W( {* f# ]6 ~
8 \4 \2 c. o& m" d, q" E
7 Q* z# j. ^* H- i, x
3.x版本CRS d( g& n1 b% Y2 [ ~
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
' g5 T9 l5 B* }/ ~# 生成例外排除请求的配置文件7 c2 {; \# m) @" X
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
" c' ?3 f% P2 Z. g$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf* Y" k2 d7 b: j) q$ ~! c
$ cp rules/*.data /usr/local/nginx/conf, ]2 B% {% T- ]$ A, _
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。 I6 V$ w: M8 p/ e
) P8 }* R+ G) N
7 j1 b! C; u O2 j: s) l3 [
$ vim /usr/local/nginx/conf/modsec_includes.conf% Z* C1 [. e9 ~. s$ L
9 P3 x _& v& a4 s" [1 O) 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& Q/ T7 Y- Y- N: }" t
9 Z- d: E p) S9 _: X W1 t
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
$ u5 `1 u; X, s9 p! W' T& r3 j7 X1 f7 A+ t% U6 D
+ b! H D, f: N配置Nginx支持Modsecurity# |. Y- T8 q/ Z
启用Modsecurity
' A0 a6 K+ n* N: |7 ^5 }- k: p. F使用静态模块加载的配置方法
3 A6 _- C3 e% a4 S$ A$ X在需要启用Modsecurity的主机的location下面加入下面两行即可:
9 b0 U0 K' _- c, ]8 F! _! `
/ d$ [: T. y; S6 P0 d& M0 b D- z& D. H! D8 f: _
ModSecurityEnabled on;
1 s. v0 d: D7 a* o* L$ L8 |! l9 LModSecurityConfig modsec_includes.conf;: D* b K. `. t8 j- G+ P
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。8 b% m) W5 M! H
0 R' M1 _- D- h% s- T" x. Q6 k
( {3 ~% ~% I. z" f, d( Y# \$ vim /usr/local/nginx/conf/nginx.conf
$ L5 r# ^6 Z8 z1 ]# v' g8 o1 T2 R3 P( W! M/ P: T E' j# Y
" S l y5 h3 ^( a1 Z
server { o( I6 q1 M+ g: j: X: C5 o( `4 r, y
listen 80;
. I2 T& ^; f4 P6 N server_name example.com;
3 ^1 \1 u7 d: y- z9 B! | ]
6 R0 J8 P, P! A
" _8 a0 j& V$ J0 M8 P location / {5 W4 g( W5 n) k5 ]3 o. l
ModSecurityEnabled on;5 a' w) M+ i/ k3 [1 `3 B; L' w( E6 S
ModSecurityConfig modsec_includes.conf;
# p2 }$ n; B- S% d9 `4 W) M8 f root html;- U: I1 B l' _$ t$ C
index index.html index.htm;
; C9 {" G! I/ {% ] U4 w! y: ~) h } K. v8 L& T b% S$ `. o
}
6 U" u; H+ ^5 Q使用动态模块加载的配置方法/ x, Z- o2 V/ V5 h( h, m2 c
在需要启用Modsecurity的主机的location下面加入下面两行即可:+ ]" ?# f- h- P& U
8 i6 a/ f8 Y: a$ Q
9 V. i- K6 n6 V2 F7 z
modsecurity on;
3 s k4 a c9 Q3 Emodsecurity_rules_file modsec_includes.conf;8 g/ h# N% A$ V" l
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。$ t/ I4 f' V% i* m, @% P: @! ?" E. ~
5 s" J2 n# ]( B
- x) a7 m! s( }3 P4 h9 m f0 j# G
$ vim /usr/local/nginx/conf/nginx.conf7 b8 S" R1 j ^* V1 [# r7 C! V
* G6 J/ o/ w& Q" ]6 e8 h5 y
) l5 i* R$ M* P0 L6 Iserver {
* M: K: W$ N$ U: X }1 G1 n listen 80;: E: s0 Z: t9 G- J, y$ I2 N
server_name localhost mike.hi-linux.com;
3 a; v( I. J0 m7 f, q3 Z access_log /var/log/nginx/yourdomain.log;2 x' X: s1 w+ | b, f
( u/ R1 r1 R3 g$ O7 X4 G. Y
) V: E6 W* R8 [3 ]( z7 Y location / {
' |8 }+ f5 l b, |! \2 e- B) Q6 ?* W* l* l+ b- Z: q1 `6 ?8 ]
8 S. a$ G1 a4 q* D
modsecurity on;) X# [$ B/ S, U n
modsecurity_rules_file modsec_includes.conf;5 d z5 v- w+ J
root html;7 ~7 M+ S9 J# g' b1 I
index index.html index.htm;: i7 {3 L; V, ~
}
8 v& F' e8 ~1 i% E+ E) d; @( E}: c) G& u+ _5 U5 z W( A+ [
验证Nginx配置文件
" x3 @6 Q v$ p$ t! [! ]. |$ /usr/local/nginx/sbin/nginx -t
- e `$ j( r$ q" N) D: s. y) d" onginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok" E; c G- {5 g* F& T& y
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
- \6 u6 U/ Z7 j5 ]- G6 w! p2 r4 n2 l* s启动Nginx; d# d x/ G; B8 M/ e8 ^: M7 @
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
5 k" n% m2 k. s) ?$ `8 Q* S: l3 T2 q3 ?4 E; H% s) s* a/ Y# N
测试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能够战胜更多复杂/未知/混淆的攻击模式。
! V+ X: c' _3 @) g5 r R. Z7 _3 Z |