ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。; `/ ] q/ f/ _8 v# p' x& p# \2 L
( \- R |; B6 v0 Y7 N: [
8 p' S* m4 y2 i# P在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。* H2 L2 u& Q. B# U
7 {0 J& E O, m# |/ q
, y! z; P8 [) T什么是ModSecurity
+ V( \+ n# K/ t7 t% x/ \. P9 ?ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。+ k+ J; c1 H) R5 i
& |) B9 X/ M# e9 U9 L* M& ^3 u( F- a# i! ?0 a- l
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。: v2 I$ G p4 l3 `# \$ ^8 Z. z9 P
) Y `7 f$ F8 S* O
2 K% ?& T/ t; K4 ^: T S4 BModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。' ?6 k) v" Q Q9 Z: A
) S& l# Y; O/ W- Q$ `- p# q' n1 j
, h7 l7 c; K" l6 R官网: https://www.modsecurity.org/
& w& l U/ U. G2 l. N# @9 e- ^6 v" d E3 p: O" ]
3 t/ G5 `8 ]7 K# n$ R. R. O什么是OWASP CRS
- C: o) l4 u# X% W4 ^5 P2 R/ l* ROWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。( S# Y, c6 W, m
, V$ \, e, E7 t; @8 ~' Z4 |/ U3 ]# L2 K
6 A! z0 t4 l9 }% x1 N) v6 K
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。, L/ @! c, Y" A8 T4 k1 V1 ]& W
- G _3 R+ Y) G2 v. u/ u! Q0 t8 \ c$ Z( D2 ]7 Y( }
HTTP Protection(HTTP防御)& A7 D* j/ n( f/ [1 n- `/ L
HTTP协议和本地定义使用的detectsviolations策略。! z4 N% S- L2 n3 P1 s' D, N4 u, I
& W Q- D, R8 r# i! S( `/ y
8 F5 Y. A, f- r# n
Real-time Blacklist Lookups(实时黑名单查询)) `3 m0 f$ b- J: h5 B
利用第三方IP名单。
/ d; Z, D1 H1 m8 Z; K8 P, n$ B G$ o
0 Y# g) q' W. [+ _( ]5 m" }HTTP Denial of Service Protections(HTTP的拒绝服务保护)
% @7 D, s4 u* \防御HTTP的洪水攻击和HTTP Dos攻击。% x& r) O) t4 F
9 C6 F9 v& u, c2 t, \6 q: e8 L
Common Web Attacks Protection(常见的Web攻击防护), x$ o6 l' @& z+ F
检测常见的Web应用程序的安全攻击。0 h% ?/ g8 }) [% W( @ p
: T1 H2 L0 A. y2 g7 O$ d0 b, D8 I8 Q" `' Q' L
Automation Detection(自动化检测)3 d0 q5 J1 ^) @; h
检测机器人,爬虫,扫描仪和其他表面恶意活动。1 s+ _% C; q7 N& b
1 T- s6 D% r" I9 i- ~3 P( g* e% U- ~6 Q5 ?* e0 b ^& m1 x
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)
2 P. r$ A+ U2 F U8 e检测通过Web应用程序上传的恶意文件。
7 l# i" V( y$ T1 K0 { a% q* T* a& @! Y7 ?) H
# t5 Z8 g( J2 n! D( n
Tracking Sensitive Data(跟踪敏感数据)
; d j7 S) ?3 f信用卡通道的使用,并阻止泄漏。
; w% x* x& p6 l, D( ?; w
) |4 A8 R1 w2 b7 J: X* |; k; z+ a: O: @
Trojan Protection(木马防护)8 z i7 j x' n( v
检测访问木马。
7 I: O: e7 I# D& j' H& u C6 }
: Z0 g: ^& c: D6 e6 A
2 m- c) R1 E% ]: I! T' w; XIdentification of Application Defects(应用程序缺陷的鉴定)
6 T4 p/ Y0 @1 ]检测应用程序的错误配置警报。4 u" E3 a2 @3 j% N- ^: j8 p1 }
; U9 a- q8 [# D. n+ ^& k
0 t/ y5 F* y( ?! b8 T% iError Detection and Hiding(错误检测和隐藏)
/ X; @ W( J P" ]6 g: E4 `检测伪装服务器发送错误消息。
$ y" [; S! r* r& @8 S
$ U" o9 s9 v$ E" ?
1 Z! k0 n4 s2 \5 V- P5 p安装ModSecurity4 D0 i8 j6 i) b0 C
软件基础环境准备
, ?" R: \1 R- a* v下载对应软件包
; M! s& r2 Q1 T! I$ cd /root+ G! O. l' @ ^- \; j
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
/ [3 ^ k) y- N! O0 t+ E$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz
! Q% U5 H4 I/ T; y% [安装Nginx和ModSecurity依赖包6 I" r3 f+ V8 E' T- Z# u* r' u
Centos/RHEL! {: r9 X( ?6 g: _
7 I- I: j6 z0 T# t7 S+ J' t$ y9 I6 B3 V4 |. H9 j
$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel$ M& S0 d6 Q9 V) a, q1 T
Ubuntu/Debian% y9 o. u% E/ V% A/ J6 Y
4 ?0 b+ F! q& X3 T$ `; P
4 p `% @/ x7 ~: ~5 @$ 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) C% y0 ?8 B+ l1 R
编译安装ModSecurity. p1 g$ [1 b0 b
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。+ u% A9 o9 k1 F% G
) T% R( {) C) v$ W
( x7 S/ V$ @8 {8 I: G z& I方法一:编译为Nginx静态模块, Z. F9 ?/ @! ] R6 v% Z
$ O0 x- J4 s' G
2 D3 J( d% B1 y3 Z编译为独立模块(modsecurity-2.9.1)5 M. y$ V1 o% f) Z, t
$ tar xzvf modsecurity-2.9.1.tar.gz, E' `3 a4 F4 P" I2 T9 L6 f
$ cd modsecurity-2.9.1/
6 Q+ Y5 j/ A4 s4 V$ ./autogen.sh
5 Z ]; J( ?2 x: W9 t; X, F$ ./configure --enable-standalone-module --disable-mlogc
0 X/ I ~% S9 T$ T# B6 Q$ make6 D* V: Z, Z% @* g' R4 b
编译安装Nginx并添加ModSecurity模块
3 I F2 |8 G3 `6 O1 X$ tar xzvf nginx-1.9.2.tar.gz
# W2 g* J) P, y! n5 w6 _- o$ cd nginx-1.9.2( K: V3 m" c- A7 j, E9 ~# g
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/6 U0 A0 O y* Q, Y9 n8 {- k- U
$ make && make install& n1 z; Y' G2 f. L; w; ^2 \
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块2 k$ t$ \! ^9 @' L$ B
! P! s) @$ O+ L8 O: E9 E. m: l1 A: E$ h7 `
编译LibModSecurity(modsecurity-3.0)- c- o) M- w# ]4 ~9 G4 ]
$ cd /root
% V+ }& }$ w8 E5 V6 s$ git clone https://github.com/SpiderLabs/ModSecurity) J2 T2 g& e+ i
$ cd ModSecurity
1 e/ Z& `/ T) {8 y" r$ git checkout -b v3/master origin/v3/master
$ c+ J" f* F' J9 K/ i$ sh build.sh
3 c6 }/ @! X# b4 G* p6 `$ J* |$ git submodule init
7 F$ F- P2 ], J& E4 J$ git submodule update
3 ^. S! A3 l9 X6 F8 ]+ d& t$ ./configure
& L- R+ t. ?0 u* \# ]1 V$ make6 R' W; F+ B, k1 {+ H6 ]& _
$ make install
5 `; l3 h' x5 b0 i' nLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
8 S* p2 n0 {8 v# _0 N8 }( V7 ?0 [% b9 `7 \
" K' b5 p( ?' F( X2 A& G4 j" Q
$ ls /usr/local/modsecurity/lib
, s- N* y$ M, L. |- Z5 q' m! Ylibmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0
0 f- u7 l) k2 U1 d9 A5 O- A1 x: e编译安装Nginx并添加ModSecurity-Nginx Connector模块* g# c0 y: ^3 J) j" W+ X' K
使用ModSecurity-Nginx模块来连接LibModSecurity
' C* o9 Z6 F+ n6 Z- R# M) n" F( Q( h8 F* T. E" L" \* S+ E" g7 e
( s% Q: O( r o; V/ g' k
$ cd /root. G5 Y% S% V) o N3 i
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
. i3 m' R/ c0 n8 Y; e4 @0 d$ tar xzvf nginx-1.9.2.tar.gz) a6 A7 _1 A" n& p
$ cd nginx-1.9.27 V2 k1 R9 c U* @4 ^1 l( y' x* X
$ ./configure --add-module=/root/modsecurity-nginx
2 f: i4 y2 z6 M# @4 _8 J2 ~$ make
, Z' A( q ]2 @4 [' k2 Q) @- F6 e- m$ p* z$ make && make install
# Q. g, R9 ^0 R" i2 n( L9 X添加OWASP规则* j' }( c( T; c, a3 s$ k: o
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。& ]+ ~' n) c( g' ^1 X9 {
- o8 w, Z7 o& y9 V7 @2 w2 H" P* C( f9 O1 K6 `/ e# W. U
下载OWASP规则并生成配置文件
. K* k# d/ R% g9 V$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git2 q/ ?* e" f: ]
$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/" T) P1 `& }5 ` x5 S; S
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
2 b) R0 r. a) n4 t# ]$ cp crs-setup.conf.example crs-setup.conf. ~. M4 T; F' e. G
配置OWASP规则9 j1 i S& s) W" c
编辑crs-setup.conf文件
" I3 v6 e; C* j, |0 U) F8 I! g1 h$ R, \" S
; E+ C; N- S$ x
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
% w7 M. g8 q8 Y; g$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
$ P: z% L; v- a- ]$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf H, i) q! T6 \" {' j1 {
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf4 V) S# F( F! J1 m. @. `+ m; c% U$ J
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
2 `0 A& O( N% H7 w5 a/ E/ P6 R% U+ @; X& y# \( k
6 {4 x; \# y d$ P L
启用ModSecurity模块和CRS规则
6 k8 [1 m- s4 o7 {1 d3 \- }0 Y* B* I复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
9 h. @; R( A' c! z# n
6 W& P$ L$ T3 s7 l8 i: d! t. R6 P* t/ h; I+ E* D/ F; M, q' O7 D$ _/ p% }
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。0 h' K! A# ?) H( c+ B
/ k8 f; ]# a/ G9 {9 e* \
7 x# ^6 M/ O; m7 |( g* r$ cd /root/modsecurity-2.9.1/- [/ e! m* p* z4 d& K& u
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
" b* n; A; L0 l5 q6 e' }$ k0 M$ cp unicode.mapping /usr/local/nginx/conf/* t# }7 O& I/ X2 }; r# J
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。: n) a* i% Y9 |4 u8 ^4 u; S% `
2 J# @8 H6 k# d+ d7 a0 e; E/ o& v# m( _5 W4 w
$ vim /usr/local/nginx/conf/modsecurity.conf H4 }8 E* S6 T7 v0 p
SecRuleEngine On
3 q$ x3 L7 X! K/ {; N; U6 ~7 L0 }; T: vModSecurity中几个常用配置说明:
( R) y; {8 W7 @) ?8 U- p& T& N
6 Y N: J: ~* N/ F* M$ r+ `/ D# n' I# `- C+ g. }3 c. V: b
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
# z1 ^) G' E& K! l7 H$ m! A: @& C+ n1 p& }2 U3 K+ ~
$ m1 T% T; J8 Z2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
4 k% m; I/ u9 h$ C% h! n) c* J$ W% M
( H, l0 o0 P3 l: `$ C3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。' Q( B9 x' ]7 r# [" _
: m( u; W9 c8 f
" _7 @( D- ]7 \/ C& }5 w4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
. V0 W" `) J: L' r
0 [4 s' ~& l6 G' c; o6 [+ a9 I# E( \$ M
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。1 j, }7 z# x5 j0 I. W+ r, [
! }. o5 g1 |0 }$ {8 H. v9 ?- I8 G( B6 d% [# ^1 J
3.x版本CRS, s5 Z: W1 m: b" {3 \8 v; z9 O
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs ~' t( f y2 C. N" m/ j; n5 U
# 生成例外排除请求的配置文件 M1 A. c2 N- Q5 v
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf9 S: G: v* \" g
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
! d2 C2 n2 X. c+ X% |& M) t$ cp rules/*.data /usr/local/nginx/conf
- u8 J# w, T. b3 w- h为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
8 x# I7 J' J) H& V- |% S
; S* M( ]; p6 l& e/ A$ J+ O. {! U" [2 Y0 b' ~: x# J9 S
$ vim /usr/local/nginx/conf/modsec_includes.conf
0 u. @7 u6 x' v' V+ B0 L& L
& i( @- j4 x9 t) D0 w, |7 d5 p[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 " V/ `0 ~5 n2 q. F! _! Z0 H- \
5 R. T4 n/ ]6 [2 i7 n( z
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
) b& w; y3 {5 J+ {: Z* L* e# K5 d( d+ a! D
/ I" Q+ X l: E2 _$ u- A: {$ `配置Nginx支持Modsecurity
) C! g" R5 K* U. u4 k1 R; M( c0 i启用Modsecurity
- n w0 o0 ?$ {/ G( [' B- E& [3 u# B' M( {使用静态模块加载的配置方法% H8 C4 U# D: x7 |- t9 N
在需要启用Modsecurity的主机的location下面加入下面两行即可:
" i3 N4 J- e6 ^3 ?1 d9 [* j4 W; Z( P# J! u- L9 x/ p
3 u1 R# A; k3 N# k& d
ModSecurityEnabled on;' I8 s: a4 \6 G. k2 X# F9 r
ModSecurityConfig modsec_includes.conf;
6 g) Y8 L* J; { [9 A修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。$ L7 E0 w4 P4 Y% c. V
0 ^1 H( O1 S7 I) u. _
# O/ f4 t' _" g( r% D$ vim /usr/local/nginx/conf/nginx.conf
" V0 [; w9 m m( e0 s3 s! B. I
( j5 W- N2 a9 V( b, O B3 K+ ]8 w6 Q9 c# Y9 G# d
server {
+ I7 b Z" z& n. w/ C listen 80;
! y9 i# r8 H0 @% ~ server_name example.com;' o8 m+ v; ]9 Q- G
& c8 I0 y! F- L6 t4 i5 }- I0 E9 u5 b: G. x" r1 T* Q5 ~2 j
location / {! l; @) B4 u2 K: \% E) V3 j
ModSecurityEnabled on;
5 P* [( n; U2 e# n; \9 z& P- g! O ModSecurityConfig modsec_includes.conf;
* i, ]& a; y) W) G. B& Z% W root html;
. R8 Q9 m* I) X' Z5 H index index.html index.htm;) h# e, A1 t- Y
}
5 u7 g" x/ C! D) x2 n h}0 ~5 B" Q% `; _. e. i, N
使用动态模块加载的配置方法
1 p# C# M' ?3 W3 N# \7 H在需要启用Modsecurity的主机的location下面加入下面两行即可:
2 @/ {: g1 Z- q; u/ K% R& V) l- S/ E$ {% E; |2 p/ v
( y" Z) k3 R# I7 O
modsecurity on;
6 z4 q S1 P7 A& y# x" Omodsecurity_rules_file modsec_includes.conf;8 k( O8 o( ]7 t: y" g
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。. n# k2 Y' p1 M& E
# W* s) H; i3 h9 w; E7 V. G
2 _. v- ?( T* Q4 {9 u# ]$ vim /usr/local/nginx/conf/nginx.conf
4 l+ M! @) r$ {) I; @7 i( p, C& {, }" H- G- j! ]
6 O5 J3 U5 \- @( i' R9 `. u
server {% Z, g% S) Y) P
listen 80;
* [( J3 ~2 h) I server_name localhost mike.hi-linux.com;# h, O' V8 i% U) Z
access_log /var/log/nginx/yourdomain.log;
- G! Z' O& M: k3 q* N5 `6 s: ?$ B9 U M) s! {
. e' u1 m/ J7 \9 _
location / {# y) h6 i6 w7 G" }
" K' ]7 ]9 N1 c/ i0 G( V4 ?9 G
4 ]# ^& T' p2 V8 ^ modsecurity on;# j& m% U. H2 O( `& n. `
modsecurity_rules_file modsec_includes.conf;$ `2 q8 z& I* M7 j1 L, X+ P: H1 d
root html;3 m0 J6 _" s2 t9 a: Z7 a: R9 x
index index.html index.htm;) _5 v+ i- C8 [8 U+ A+ N& H, m" V
}% x# h) Q; c; W/ a/ K/ |# ]4 ?9 n. J
}8 s( u9 v/ \3 X9 a' D, E" a
验证Nginx配置文件
6 H& @. w. z( X5 @3 T$ /usr/local/nginx/sbin/nginx -t: {. M0 Y3 O, q2 w5 L: e
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok9 Q2 \: ~5 f: T1 l* c( v7 k, J+ u
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful2 i% R! S. s3 |9 S
启动Nginx$ p6 V3 q6 x( z
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
I/ s5 H' v) R9 \( d
+ x4 p( ?0 l0 Q f( 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能够战胜更多复杂/未知/混淆的攻击模式。
" G# U0 _3 }$ R: `) {: Z# P |