ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。+ D6 T8 d0 ?1 {
6 H% c1 N% y7 y% A( f
2 o/ E' X4 W/ V* f) w3 O
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。) v, \, }; i0 l y
3 Y$ t8 ~! C( W
$ H4 e0 i3 _5 N/ O6 P9 c6 R什么是ModSecurity
4 h. D/ {+ A3 r( U) |1 m* ?; B EModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。" s, \0 @ d: E" N9 y9 `
1 _7 W1 g4 i F
& q) u9 f/ V' O* R
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
4 y# t J2 N( W6 I: P# W' P0 D) g/ J9 E5 U
. d/ v/ X2 ~" G* o
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。0 M' e& h/ k" V6 K( Q; w8 U# e. k
9 S/ o) j% y! D- ^/ q: Q
3 t% g+ D0 S( s8 E$ g3 o& _
官网: https://www.modsecurity.org/
& i; G8 Y5 q% f" c) f, J; {8 b$ x; F
) \9 O4 j' x$ }3 \+ O
什么是OWASP CRS. a% u1 s1 t5 ], w2 P
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
]1 W9 N ~3 \5 |- E0 o7 X! `- N8 y8 j2 k2 ~2 ] \
, b, Y, Z+ T. u5 s6 ^4 Y3 dModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。6 Y3 R5 v/ ^+ c. W
* \3 Q& H% S3 p7 N, k" Y4 p! ^8 S7 Y: z& P
HTTP Protection(HTTP防御)
% N+ ]) P+ u# H6 U: a- AHTTP协议和本地定义使用的detectsviolations策略。7 S: r) `; p& `$ g. H
1 }9 E. I% w: L# j
% `7 B5 d" `" f3 F6 Y! [Real-time Blacklist Lookups(实时黑名单查询)
- {3 B8 J* B6 D7 ~ ^+ p利用第三方IP名单。5 Q% r0 ~* a7 T: T
+ n6 O8 T4 ^' ~3 @( U7 C& b
# n; Q8 l0 P; k; @" G1 A: }HTTP Denial of Service Protections(HTTP的拒绝服务保护); h% {4 G, R1 D# t+ v( Q8 }
防御HTTP的洪水攻击和HTTP Dos攻击。
* j1 E7 U2 z: Z7 W6 U8 \- H; U# Z9 S( y6 N/ j4 E$ `2 _; `# T* G
8 ?" N, F) W) u! w/ MCommon Web Attacks Protection(常见的Web攻击防护)' A! Q! I S" u3 C' q
检测常见的Web应用程序的安全攻击。0 _( X5 E Z7 x# T
% h" ^9 T6 o( I% C, Q ~! d
1 P. I5 |+ }8 |2 _* hAutomation Detection(自动化检测)
& o0 H' y) D5 b' k检测机器人,爬虫,扫描仪和其他表面恶意活动。" k' \! A# S, X
! }5 x7 U& | z9 D
: q3 _& F8 o; J0 I+ A' x2 m; OIntegration with AV Scanning for File Uploads(文件上传防病毒扫描)4 Z$ t! L# c ~1 a2 I! V9 l
检测通过Web应用程序上传的恶意文件。8 @/ Y# z9 T' { p! o; z! B
$ u$ O* ?; a' A+ A2 Y
; Q* X" G9 O8 E6 L5 R; ^8 i$ k$ rTracking Sensitive Data(跟踪敏感数据)
9 x9 u p* o# t8 M# G信用卡通道的使用,并阻止泄漏。7 a5 B7 H, O" X& F; J( Q
! Y+ |# E- a" a' z& d* H; _. g- ~% b* ~+ ~6 c/ o
Trojan Protection(木马防护)6 [0 d& B8 R$ }' y F
检测访问木马。! g# P/ _+ n. \+ Q; }& a3 D# ^% ^
I' ?1 p' M% r: e+ E# [4 f" `4 n- ?0 ~
Identification of Application Defects(应用程序缺陷的鉴定)
; b) s3 U' c( S: g% \4 i检测应用程序的错误配置警报。
# `3 p5 `: T$ x& d5 R8 E9 k4 p! E4 O* r3 K, q ^) y& B) ?
9 P; z& j; k! O8 ZError Detection and Hiding(错误检测和隐藏)
" d2 j' ~/ x5 |5 W3 t检测伪装服务器发送错误消息。0 W9 m) [: {/ ]9 V; U+ Y! a: c/ S
/ L, a9 a% _- S+ X% Z/ A2 u: V0 g! n: q* H; z0 d! P
安装ModSecurity# F: i* A; o# x# y& B7 c. [
软件基础环境准备
9 J" z% u1 w2 O' z0 y6 @. s* n2 O下载对应软件包 ?- h6 x! @ g- y+ j5 d7 D" A: U$ D
$ cd /root" t( N, ^! O' P
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'8 O; e. w! {+ b' 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
# \6 p, H [8 I$ [安装Nginx和ModSecurity依赖包! |0 L |- X3 R7 g
Centos/RHEL1 k2 ?+ l" }4 {( H& D% `" J2 V! @3 D6 f
. n- O+ y7 N" g. K+ R* k! F& J8 d0 E
7 L* @6 j( k2 t/ }# I4 t7 q* Z {$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel6 s! m1 S3 T* `) ^4 q+ b# ^* k
Ubuntu/Debian
+ I- t; e7 m5 O$ w- @5 m8 p v$ [ [* j1 W' u. C
3 C9 s! R6 w$ o' S) [$ 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
2 v+ k9 G! e2 V! \, V编译安装ModSecurity5 z0 ^$ L' V, R9 |0 M3 a( s, o
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。8 p a5 X* T3 G( t5 G
' d& ~& b! P7 D2 J! B2 f& p5 u6 p' X
' r; B" r2 h% P3 C% c& r' y方法一:编译为Nginx静态模块
0 l; o; j" I2 c0 v E- g/ _7 O
, A$ o3 P9 P y8 V% {) t7 Q9 K3 r' @$ A$ o9 w! E2 w
编译为独立模块(modsecurity-2.9.1)
* Z! `. [# a/ u* e* b5 G$ tar xzvf modsecurity-2.9.1.tar.gz
" @1 h. a5 z- I5 m {$ cd modsecurity-2.9.1/
; v( ~7 ^$ {, E/ l1 t. G$ U$ ./autogen.sh: G: r r9 R' ^* F: o7 c
$ ./configure --enable-standalone-module --disable-mlogc$ Q; K3 s% G# }9 M |! }1 K
$ make
' C+ |# z* y( [ [6 N编译安装Nginx并添加ModSecurity模块1 {5 B; P: s& ~8 H% O' x& L
$ tar xzvf nginx-1.9.2.tar.gz
# w( x, C# R+ K5 U$ {$ cd nginx-1.9.2" t y# j" h7 g- `5 y
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
8 q) l3 \0 h" }( S L' G2 p$ make && make install
. N N" _5 x* U: g方法二:编译通过ModSecurity-Nginx Connector加载的动态模块- X7 q6 y) X& a" R
( n6 n, X' J2 z9 o
, D% o% z, S7 B, c$ i' j0 O% \编译LibModSecurity(modsecurity-3.0)( ~: @- Q9 h/ S D# Q, x
$ cd /root6 T& o$ W; {% Q+ x- @. z
$ git clone https://github.com/SpiderLabs/ModSecurity$ u) b+ V+ v& ?% ~2 w+ |
$ cd ModSecurity
& |! V* g0 V" Y7 Q' p& i% m$ git checkout -b v3/master origin/v3/master
- S# C% U9 J! t5 H( d; A$ sh build.sh
( Z7 N8 O7 E! A! c* r$ git submodule init
8 L: x( V2 ~1 W% ]! T. F$ git submodule update
5 c2 k2 Y `2 ]9 K4 k, h$ ./configure" ~, G6 j5 Y! M6 h
$ make
0 A; [& R. j( f* s9 W$ make install' u+ p7 b9 D( q7 Q/ H; z
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。9 ]4 z$ U; m" p& j" O7 @* D+ L0 P
' o7 _' y& w6 F. B/ @* ]) Q: c% O9 F4 ]$ s9 D" ^
$ ls /usr/local/modsecurity/lib
8 \* a% R; E1 Elibmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0/ n. I" `$ ]% H
编译安装Nginx并添加ModSecurity-Nginx Connector模块
. D( x% O& t5 i5 q7 J/ K使用ModSecurity-Nginx模块来连接LibModSecurity+ S. Q9 |; h2 d5 I& |( T7 B
1 G+ T9 y5 \. U+ Q
! y' k9 @% Y; G% e# L1 n% T: C$ cd /root
* z' r8 K+ \4 {9 C! T7 P$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
: T9 A! B% G: q8 K$ tar xzvf nginx-1.9.2.tar.gz1 t/ T3 }' e9 y8 D7 V1 M
$ cd nginx-1.9.2. J: Z F8 B" e6 g
$ ./configure --add-module=/root/modsecurity-nginx
# |1 j0 E, v6 ~ e0 c1 ^9 L$ make# x" }1 a! b3 q! P* n- f6 h
$ make && make install
- G: u1 v& [- q# F添加OWASP规则
6 x/ e, `; Z& M2 wModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
. N9 p4 i5 o& S* F9 E; F0 B1 ]7 O
9 B- Z, \2 y( {6 }
下载OWASP规则并生成配置文件
; K$ Z! v; Y" X# f1 y# {2 a$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git" e) `( U' w3 @% ]. W' L
$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/
3 Y; b) N% v; y" i* s$ cd /usr/local/nginx/conf/owasp-modsecurity-crs" z9 {4 ?: L6 }9 _
$ cp crs-setup.conf.example crs-setup.conf1 [4 Y/ {& m6 d: K
配置OWASP规则1 Q A2 V/ o( ]+ S- B
编辑crs-setup.conf文件
* |) `& Q+ A5 ^6 b3 [2 m$ r& x# m9 p0 s# {9 P T8 [/ G
2 e" w5 O. J, e; g) G; I" s) s+ V
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
3 o" S# C8 y$ T/ \$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
3 j( i: p* r" S6 ~" V( m$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf0 \& c; m. d5 y+ ~% Y" g3 c
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
1 G" ]( |" {/ a# C默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
' u! Q1 ?" k1 \7 d; l" Z/ [9 A9 E( `4 [ t: b
4 Y' s$ m5 F4 i' |7 q
启用ModSecurity模块和CRS规则
6 x! K/ I' G0 N4 G9 a! f复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。: O: p; u1 q" g8 L6 H
, H9 ?& l0 g9 f
& S3 H2 O `$ o6 T* W* P3 b! E
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
! N1 I: e: Q! j
8 q; ?9 A& y/ y+ v7 M5 C7 |3 v8 w8 V3 p; j9 ]" W; M
$ cd /root/modsecurity-2.9.1/- s! s/ H# ~; B" B& b
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf 0 M8 |% |3 ?; V% y, y( l
$ cp unicode.mapping /usr/local/nginx/conf/
7 G" F* A9 m9 \* C6 Z. n将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。$ o& g+ s! r1 h! f ]1 [3 d
* J& ]3 t8 K. `& T& u/ \- [) _$ d& H# ^: U9 P* }
$ vim /usr/local/nginx/conf/modsecurity.conf
- w3 l* _; [1 O8 p$ ~# vSecRuleEngine On1 y) U+ U2 }% u8 p; u8 ]3 y
ModSecurity中几个常用配置说明:; x+ n/ L1 G3 S
* X+ y; H6 F, M9 l" P. q0 S
B, d" ]4 Y1 {6 n5 ^1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
/ f* L8 ^! w! Y& e; ]$ g) u; r0 Y: _% |) U. Q
' ~" d+ f+ e0 a# [# A- t8 J+ z
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。; W8 B1 d; R9 Y8 _: U; E5 J9 @
) a6 L5 x, I4 X5 L3 j3 y; k" r. u1 C
" u* \% t, P7 \8 W0 X' e6 U3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
# V/ N% b4 k6 ^7 \5 x7 k
" Y7 ]. Q' w3 U. Y: Q- J2 {' ?' M& |. J+ d- V* u: f" {9 M1 H/ G
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
. D1 @" H A- F I- m% Z/ v! M/ K* m' p4 v0 |
) n( i. Q( w4 w) r* T: T" I在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。* ^. n8 X; g- M7 D
' @0 m. Z) E0 D" ^& S% s
3 V! {4 W; F; x3.x版本CRS2 ^. M& F u+ c9 c3 q3 u/ e
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs& D0 Y' E# R/ T1 x
# 生成例外排除请求的配置文件
' w% J+ n& C: D3 Y$ s! A" M8 D$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
2 P; O( F7 Z/ z" G8 ?9 s& Y$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
2 ?# c$ B4 F0 k# T# A$ cp rules/*.data /usr/local/nginx/conf
8 g9 T- ]: v% R1 _为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。$ y6 u' K; M. w
3 o9 J% F B. a/ l. f
6 o# ^5 i% v& d) T% K; P+ _$ vim /usr/local/nginx/conf/modsec_includes.conf, s' W, B7 o! j# a9 i( `8 H
R3 V" y4 u4 s9 q. o% b[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
1 q( w6 {7 v2 T L% D* x; ]. j# Q, F
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。- p2 J/ r2 v+ j9 Q
& }. f% y6 J8 p- N% c+ k
; d# L) P; k9 U+ G6 _1 x配置Nginx支持Modsecurity
! [3 v5 a! V% I( [$ K2 h启用Modsecurity
' r8 P8 N q% |( e2 R9 z* R% E使用静态模块加载的配置方法
; w0 R; R! R+ w! b2 A1 v- Q在需要启用Modsecurity的主机的location下面加入下面两行即可:7 d* Z0 t$ Y" K# p+ U: M
' `% X* N' c" B9 v, z! D: `
8 ]" Q% H: D8 n6 R1 P
ModSecurityEnabled on;
5 N$ U4 v: A5 L0 NModSecurityConfig modsec_includes.conf;
0 Z, K5 Y0 H2 e2 }- Y0 \修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。# v5 e$ y4 b' F& p7 c! n/ r
$ O" G' N. M( C! y! M3 n
) m5 ~( M. B) t5 |3 R$ vim /usr/local/nginx/conf/nginx.conf1 y4 L( ^7 L% E7 Y( w8 l
, V* Y/ r" A& }- T# R+ x. F
8 T! O, P& h+ \) A) qserver {0 ?/ M0 y1 K5 `9 S8 [! s
listen 80;
0 v/ ^2 o. {* w, \& c5 t" e- J! ^# u+ ] server_name example.com;
) d3 P' E1 H( L( k- T! c" {2 W/ W( I1 _' @, D& G D
* W" ~, D- |* `9 Q0 _: Y location / {
+ B1 T/ h, @/ _% k7 O) @ ModSecurityEnabled on;
) B; j8 q1 L* [$ C ModSecurityConfig modsec_includes.conf;2 N* z0 w; ^! `& s9 |. M
root html;
7 v$ B& {" Q/ S3 x- K4 D5 a' x index index.html index.htm;
" b$ s: }5 E+ ^/ ? }
. J& ^9 J0 w& X) q2 {+ ]}/ n9 \; J. M/ T( F9 s. F. a
使用动态模块加载的配置方法
+ N" {5 r+ M7 Q8 m- o; U W! g7 C在需要启用Modsecurity的主机的location下面加入下面两行即可:
* Z& T- T6 A+ `
! K1 N" n. S! v2 z2 \
. R) {( O8 w. }9 H/ _9 A% E( d% Cmodsecurity on;9 }' N2 l3 W/ B- |
modsecurity_rules_file modsec_includes.conf;5 ?9 q# ?& [7 a
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。( C8 u4 Q7 U$ m/ ^9 l
w/ @% S/ O& g2 Y" X* N- `0 M
$ q% m! P+ t: F! z8 a0 K
$ vim /usr/local/nginx/conf/nginx.conf7 ] s3 `0 R8 U! o6 c- V
' d4 k1 L7 s4 N0 \3 @, ]; e! y
/ v& M! u' B" W) B
server {
4 }3 v/ ]: R4 w* a listen 80;( A( V. i. y, F( H7 k
server_name localhost mike.hi-linux.com; m; d1 \( h3 f. a" U5 O# @
access_log /var/log/nginx/yourdomain.log;
& F1 j* c+ |: M6 u+ P, I/ b: Q/ |3 S; h+ m. k* L4 m: s4 P. w7 K& B
/ q/ @1 {6 Y6 j$ D$ c' M location / {- T& v/ ?# o& A0 _5 V
! P0 i, c- _% I- `" ~
3 ?8 C; f9 h, ?5 s4 W: {! z
modsecurity on;
- u8 q% d$ y) l& M7 o: D6 o modsecurity_rules_file modsec_includes.conf;6 z7 B! |9 S. D; `
root html;
9 n& d( Q' y+ S index index.html index.htm;
5 G% J- G& e! Y# [+ w- ?}6 H- x2 ]: G* L' X d# Z
}& \$ u7 ?9 G2 u- ~- b# p5 Y# Z
验证Nginx配置文件$ F, t" A5 ?$ A* G+ O4 `( _. J
$ /usr/local/nginx/sbin/nginx -t* M& ?$ c! e: B! s9 g9 t4 c
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok9 F7 A+ b& ~, P; |4 g; @- b, Q
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful t' m& L# w- i8 k/ n5 J; I- A
启动Nginx
9 _; E: a: `- f% w$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf1 |; N0 p+ Q) N, J8 R+ X
! p( i$ Z/ E6 T# G; M; 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能够战胜更多复杂/未知/混淆的攻击模式。 % n& v8 A) j+ K, ^
|