ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。0 ?' E$ { v5 v, v. r# [
1 D# ~3 T4 C- P8 e
2 G& ?; S. S7 {2 v
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
4 d- X% \5 _" F+ p7 W2 N- m* S* N
: X2 e& v" k/ X/ |9 [% w( Q& T3 `1 S' Q4 z! Z
什么是ModSecurity
$ y5 W: p- r& y, z3 m% \ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
* E; o7 J& b3 R' x; Z( |
/ C T& E0 ]1 f( R: p
& N# w: ^! ?6 |/ |) ?7 z3 s! S" cModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。+ q, t+ b$ ~" l2 n. [5 L- A' u5 s+ |
( @1 Z: {7 H4 z# ~
+ L( t8 O2 P5 b0 U) @2 D! l
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
v5 H% E3 a. P- C0 B" ?: ]% l' D' ?. f
9 {& R6 ?( C$ n ~" ~官网: https://www.modsecurity.org/; Z1 P+ a* I$ k- ^) u/ ~3 Q
( N' O5 h, Q6 \" {* [
4 V- L5 L6 F# S7 ]/ \4 [
什么是OWASP CRS
% T8 K# l) | tOWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
1 {( r) U# m7 T- {6 i0 z
4 ^. \) j. H( p& k9 V$ t g) Y& j
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
& X$ E1 P' a3 A" Q* C! P6 w7 n( D8 L9 F1 c4 o
/ b2 y' i! S! Y4 X9 g) H5 pHTTP Protection(HTTP防御)
) s% u9 Y9 p! o* z6 y5 z4 pHTTP协议和本地定义使用的detectsviolations策略。
- V7 ]; X, S% \+ Y# e: i" Y2 M/ R% C
, x/ b3 j/ ?: B+ L( R
Real-time Blacklist Lookups(实时黑名单查询)
8 l2 p6 o# J- o7 f; \# l利用第三方IP名单。7 y/ F ]; U/ w2 m5 u
3 C; ]3 z, H! w4 W- o( p0 Z: ?
. A% @: b8 C/ t* o( C C; d4 b
HTTP Denial of Service Protections(HTTP的拒绝服务保护)2 z" I( m3 N1 n! L' R( u# C
防御HTTP的洪水攻击和HTTP Dos攻击。8 H$ _5 k( e* q8 T! a
6 k9 ]& {+ t1 Y; x" F- B# V) G- a
8 K6 [6 |3 v o
Common Web Attacks Protection(常见的Web攻击防护)& m) A$ K" X5 ^
检测常见的Web应用程序的安全攻击。: p% b' a4 _1 n# Z
9 z# K/ J F3 _& c
$ O- E) V' A" |; x- ?, F/ K+ P
Automation Detection(自动化检测)
1 v* K0 h5 {& ?9 F2 e; g, r3 ^检测机器人,爬虫,扫描仪和其他表面恶意活动。
, Z- R. j8 T$ l5 X7 c7 O2 m4 X7 {8 T+ O5 L$ \" M' v) A* n
$ [5 |5 p F5 ` j1 ?2 d9 U t. gIntegration with AV Scanning for File Uploads(文件上传防病毒扫描)
4 ?$ Y7 m* I8 J/ c* k/ ?7 O检测通过Web应用程序上传的恶意文件。
% ?* o' {7 K9 n( j: J" n. o3 S. O$ D: m( K
2 M- u0 H M* ]8 l( u
Tracking Sensitive Data(跟踪敏感数据)
& r# v. A0 N$ s! R信用卡通道的使用,并阻止泄漏。
' O2 N! F9 Y% {9 o4 g
( I9 n1 @7 R; ] \" R7 K% N- z Q$ w+ r. ~
Trojan Protection(木马防护)
# {7 d) c3 d6 `# `9 E, j$ u9 i! }检测访问木马。
! H E9 n% i {) s S; o. N' r5 W5 d5 W9 R
" c6 s j, A- R8 K5 X7 r8 Q/ k
Identification of Application Defects(应用程序缺陷的鉴定)# T9 X- q# |0 g3 | t! X
检测应用程序的错误配置警报。
8 E: u( p6 l7 {! a+ n$ n1 ]
1 A! H( [! c( w' u0 k+ a+ v1 w2 V/ U% Z# C
Error Detection and Hiding(错误检测和隐藏); J3 c/ C% z% {* v6 s/ R
检测伪装服务器发送错误消息。, U9 e+ V6 N* z8 k* r
4 q7 C: N" b d* b4 `: ^
8 X% l" w! z, q) H% i0 `: ?安装ModSecurity5 Q; h. D/ H2 d* i; P. m* b
软件基础环境准备
% m7 j) B$ p7 m7 L. @# l+ @$ p下载对应软件包; X/ }4 m Z9 F, s( G5 e! i5 o
$ cd /root; N$ v4 V3 M v9 r% `
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
; L5 X9 i: b9 }6 g$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz
' l) v, q Z) J# B1 o2 C安装Nginx和ModSecurity依赖包
- u7 K u X" z. h: g! W9 O) v7 jCentos/RHEL
9 G- G+ @2 k; ]8 p: N
5 [7 ]- ?# n2 ~6 ~# v9 O" h9 D; H3 c6 L) c
$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel# u: P G! p2 i2 \
Ubuntu/Debian
8 S6 z) p4 g4 N6 g; I
1 J+ F D2 D7 k, ?8 X5 ~3 [6 S0 c$ O/ Y P7 W7 ]
$ 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++-dev9 G3 C6 a+ k$ q; }! u! s
编译安装ModSecurity
/ m# [/ ^/ Q5 U5 x" q% oNginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
6 d" W& o/ v) h
D) B$ G9 @) A2 ` T0 R
/ N1 Y$ \1 A0 g O; `& M' z方法一:编译为Nginx静态模块
' O. m- |. {5 ~% l1 {! G( @. M, _! w, z6 [' U. M* \; d
( F* E, ]$ g/ j2 z' N! _; Q& Z4 g
编译为独立模块(modsecurity-2.9.1)
5 r' X8 v' C* |/ w" v0 D$ tar xzvf modsecurity-2.9.1.tar.gz L6 u2 A$ l( W& T( m) ]1 h2 Y
$ cd modsecurity-2.9.1/
, S4 {, ` c* W! B1 r- I$ ./autogen.sh& B' }( T, N+ G
$ ./configure --enable-standalone-module --disable-mlogc
/ r5 d9 l. ]2 M$ make
+ @; A# J1 V3 n {编译安装Nginx并添加ModSecurity模块4 z, j+ f& ^3 o5 p' D" Z
$ tar xzvf nginx-1.9.2.tar.gz8 b6 c+ Q- x5 j8 Z4 p
$ cd nginx-1.9.28 n4 l1 d0 }7 ]; N
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/- F9 }7 g" O$ m8 v+ ~$ ]
$ make && make install
# l" ?" {& m* ]- {6 V方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
+ Q8 j5 _" @. `0 w& y; r$ @ t* {# e8 L; f. d
+ r, m! r% o* g8 z9 i3 \编译LibModSecurity(modsecurity-3.0)
: X* [; z4 b9 {$ ^ P, q$ cd /root$ O( x! }# O8 L& h" h
$ git clone https://github.com/SpiderLabs/ModSecurity
! T( Z9 u# _% \2 G$ cd ModSecurity4 F. M5 @- [3 f
$ git checkout -b v3/master origin/v3/master g0 z0 L# M" t N% O+ h
$ sh build.sh
4 `3 Y2 A9 H7 k3 h, @$ git submodule init
! h) C* k6 U# b! x4 x! ]$ git submodule update, r0 ]' S! J7 Q: L; O' G
$ ./configure
- h8 f4 {: E0 G" c h" {; P$ make' V* J! j/ G6 G, O3 |3 q$ @
$ make install- C* j- T( m) Y6 S5 ]0 j
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。4 s/ m: Q ~8 F. j
' y- s5 t- K/ l& @" H
$ h' D5 v0 `9 L, q6 [9 F7 R: q$ ls /usr/local/modsecurity/lib; U# L; B9 p0 }7 D
libmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0( `" Z3 t7 z0 L! [ y% N
编译安装Nginx并添加ModSecurity-Nginx Connector模块
- @7 z7 e- }: P8 N @" o8 J使用ModSecurity-Nginx模块来连接LibModSecurity
6 U0 \* i/ x8 J! s6 O# b0 c& m' b7 E j3 | v
! D3 Y a: t- Y. u7 X U
$ cd /root
5 E5 C# G0 U5 A4 `- n$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
3 F# d4 Y# y- t$ d$ tar xzvf nginx-1.9.2.tar.gz/ I1 P2 I, {0 j! y' G
$ cd nginx-1.9.2
% A( m4 @9 C) v, ^" S! J8 w$ ./configure --add-module=/root/modsecurity-nginx
6 J! P$ x7 ? |! c$ make
4 a0 b# P4 q: J$ make && make install
6 \ ^4 G- }0 X+ W7 J% ~添加OWASP规则$ s) a+ y: m3 A# n; J- d
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
- \& {2 U; Z- g% b, m0 Q) }
" h6 \; f+ X& s/ G" G: i5 W( Q' W+ r" B: m
下载OWASP规则并生成配置文件
! j4 s! k7 C2 a& k1 P% K( U$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
: ?" a- w, @* P5 O; F( t3 c* h4 U$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/' ~% \6 J* [! B" R5 e- B& J
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
! Q9 L: b- V' t, E$ J" ^' |, H5 p$ cp crs-setup.conf.example crs-setup.conf( {* E% \: g5 Y2 q: K& E
配置OWASP规则) J# |$ A8 Z3 V' r7 l" `9 {
编辑crs-setup.conf文件3 p: m @. M% I
# h2 c/ W5 k/ R+ h" |
2 v+ [; d+ B9 h4 Y# x6 N$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
' X l# q$ g) e. Z$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf; ], P' C$ _& q" Q/ `
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf5 } N& Z d( J
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
0 |' V5 v0 [ o9 D9 |默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。 N6 [( d# c6 Y* ?$ \5 ]4 n
# s# C! h! U% G$ I8 k; w
3 B; z$ P( s( X
启用ModSecurity模块和CRS规则
3 Q) y) k, u! _, W& F' Z) N$ ~" V复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
6 {; H4 L5 [! G2 L" [
/ J$ v/ \7 i! ^7 \3 z1 n& m+ z0 N, L% K4 i. p
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
+ C! V* J R! U. O+ E }
' r, @ l& k! Y1 \+ M
- t9 a% }9 d9 ?% F- K4 B$ cd /root/modsecurity-2.9.1/2 g8 O' {& a* _) O! A9 v
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
, I) e8 h. M, p8 c+ v. E; u$ cp unicode.mapping /usr/local/nginx/conf/
d6 x4 }, |4 q Q6 q1 K- c1 U将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
' Y0 W* f3 u7 E# t% d
1 e- [/ F1 H: A2 \. C# Y: }/ \& h; Z8 h1 N* t& U
$ vim /usr/local/nginx/conf/modsecurity.conf3 z9 w7 ^) o0 G5 k( Z) i( h
SecRuleEngine On1 o$ g( g0 c- e! m) @. y1 v& K6 j# b
ModSecurity中几个常用配置说明:
6 O& a ~0 g/ [9 }- o; C7 Y5 u' A& g3 x+ Y w8 P7 ]; s
+ b+ R& X3 d- W
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
. Z3 J: E0 Y: J5 O
9 W9 j( E, e+ I% M& H6 ^6 |! O$ b' L& A& s+ O- v
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
% {$ p8 A7 Y# b: D, I) c
, N4 m7 \: C) u% P5 N j9 z0 k K9 T' E% j- o, O$ q
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
2 M g6 q3 C" a+ P: u4 \4 u, z/ B
+ [7 Y; [$ M4 l& z% S& e/ l- D7 ?. h+ {* c5 Q' J
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
' x7 ~ f. R% l& ^9 }, x
& _, j$ U! Q* T. Y# d* @* {" b
2 w; x3 _. ?" h( a+ s在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。6 N# I+ d0 C- p% A5 n
2 R3 d2 f% z7 W- e( o3 i7 T
T, {$ b" Q9 ~. O* ^7 Q! ?$ Y3.x版本CRS: U$ L# P( i# @+ D* a* C0 B E
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
& z, x- G- s0 Y9 K# 生成例外排除请求的配置文件
+ g8 w0 z3 u/ p% h5 k& z( l' D$ J$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf ]/ s2 I4 r$ p' _2 X& ?8 i6 ]
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
4 v# C6 h. O- c5 A7 P$ cp rules/*.data /usr/local/nginx/conf: V4 E3 R$ f' ?# G4 b
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。# j7 ]& A# B) h7 a
& q6 h' s& Z; H" l
& T& t7 f0 o% f7 N3 R$ vim /usr/local/nginx/conf/modsec_includes.conf8 u9 p* ]# _+ G i
+ ?2 t4 U" ~' O T+ f[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 * G5 g/ }$ i& k5 w, A+ V7 `( W
' F& F# G# F# O/ v7 n, G
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。4 e$ s+ k2 R" Q1 x! D" ]& a
4 }* W4 e$ Y0 C) K. ~3 y7 J. D/ J+ j" ]& H6 n
配置Nginx支持Modsecurity
: p3 p# {& G4 r R" k5 ~启用Modsecurity: d( ^' N: M' M. L* p
使用静态模块加载的配置方法
# }' k* X4 l9 n3 G& D在需要启用Modsecurity的主机的location下面加入下面两行即可:4 G# [) Q- X! k
! t: H) ~* b1 _6 K+ U1 O
5 ?# x; B( t/ c/ o. `/ e; M' CModSecurityEnabled on;5 V$ a5 ~: X4 F+ y
ModSecurityConfig modsec_includes.conf;8 M- K& w- L; d5 t
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
; u' X/ _# Q$ R3 ^2 Q; x& F% p9 D; L" l6 g/ L( C8 ~: p4 Z
7 O9 ^$ A! L6 {
$ vim /usr/local/nginx/conf/nginx.conf
: q% A) Y& u& a: V4 h/ r9 a% }& P: l
; F/ Y1 q0 H5 P$ E8 }
server {. [0 C1 C4 y4 z: s, z
listen 80;
1 ?) f: @3 o9 i7 p- _ server_name example.com;
5 B; m8 G* s' v; T% X7 f
( I. C& D) f) W; l# U1 h/ ~2 O) W; v( B. w/ C* G0 c
location / {
+ H: k4 H1 ?$ W7 }5 q* { ModSecurityEnabled on;! e; W7 m# l% ]1 h; R
ModSecurityConfig modsec_includes.conf;
" I" I" n0 d9 x! k9 {: d root html;* B+ Y, V6 H* x5 a1 x9 K1 W
index index.html index.htm;
( U/ S4 l+ z9 w4 K/ `6 c# z }* a$ l& f3 E6 D0 X
}
) e, n8 n4 K L% d使用动态模块加载的配置方法. e' q3 ?0 b& z) C0 i
在需要启用Modsecurity的主机的location下面加入下面两行即可:6 c( t8 c k0 X7 f v
2 U) x/ t. C7 F; z/ w' m# D* O$ P, P% P" b# U; T
modsecurity on;* ]8 B( w; w+ V: ~; J5 G; Y
modsecurity_rules_file modsec_includes.conf;4 K# I0 ^8 `- @# f- o. F# V+ [
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。8 Y/ x* a5 {# x- ]2 _0 Z! \
( U) F" ~$ z: O% ]6 p+ W* L! Y
: K+ a- {6 y; i0 b
$ vim /usr/local/nginx/conf/nginx.conf
1 p! e1 K0 l: v& b, v- Z3 c" U8 c* I7 N$ C
5 ~0 Z" U) c p M6 J! f8 p. R) @2 Xserver {
( u; v- \4 \* B& P% V# p8 D listen 80;
. X9 }4 U9 j- t0 y& T server_name localhost mike.hi-linux.com;+ _$ B' Y3 n9 w% g$ g4 i
access_log /var/log/nginx/yourdomain.log;
; p: H8 S7 ^) ~. t; e! D+ p% A0 t) H) @
% k! \. T" `7 B location / {
- q7 g9 e7 W9 \& t3 ^, \4 M6 m5 }* a2 h% _6 n
6 d/ E, w& {# f9 r
modsecurity on;
% F: g; J4 Z6 Z$ f# S- V$ T modsecurity_rules_file modsec_includes.conf;% S% m" N: @! [
root html; n- k, u/ q$ T1 O% N1 S
index index.html index.htm;
9 _+ Z' ~$ `7 i}+ y# ^! ~- n3 X5 M2 |2 H6 _& a) P
}- e( I P2 k1 Y3 v9 G8 g
验证Nginx配置文件. p$ b |2 K0 z6 V
$ /usr/local/nginx/sbin/nginx -t% \! N1 I% T" Z- o: e6 ^& O L* Q
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok8 Z `% `7 G+ k# {4 y+ j
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
6 ]1 u+ Z7 b/ l( b* Q$ a# Y0 ?启动Nginx# p5 C: z8 s8 f& S3 U' Y
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf9 J' ]7 u4 u8 H& _4 K, |* N
4 m7 W+ \6 E; k$ 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能够战胜更多复杂/未知/混淆的攻击模式。
' R% [; |1 D7 L& n' |4 F+ M* X! }, S |