ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
7 E& S4 u5 D/ h) s1 ] M7 u5 K: | u% y r5 L# B0 p* q
! L: H% O7 c) v1 e* ?- J; A a: `
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。& Y! Q1 h/ T0 K
- c- b: a: p% m' v1 W- E1 C7 H2 s4 p2 ]% C9 I6 x+ b H
什么是ModSecurity& t8 o# \/ Y/ F2 j
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。# j/ t; M, l5 U# V/ z+ `$ N$ @7 s
) l9 m3 h! U0 g- n5 y4 y! y* q
9 K$ C6 d8 u" Y# P) f( ?1 @ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。6 l8 Y( T- s; c
, x2 O/ N. I7 \! c: R
) y7 w0 }8 w9 G: d" Z$ ZModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。4 T& R+ b$ {9 v! J# W
2 _9 B5 j9 S: p0 Q" U2 G/ m: H
F+ B8 g1 w# U官网: https://www.modsecurity.org/) h0 q/ j5 T' X. ^
" z% i' A! t4 L" P
$ [1 D2 E/ @3 [1 E8 D: [% b9 o
什么是OWASP CRS, B; O U% c0 b* E7 _
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
, Z: x# s4 {- z }% F; l) `- }2 L- w/ T
" O; [- v# t8 }/ a) }ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
% B7 F' T% `% S8 K, [' j1 c7 {: k+ v) G0 E
" j; U7 K( X, I2 o7 g8 _# F- q+ U/ m5 V
HTTP Protection(HTTP防御)
; i7 `4 H9 u" r7 O" ~HTTP协议和本地定义使用的detectsviolations策略。5 o4 g* X% b0 r u3 p
% X. o" x- ^" O A' I/ Z/ j; n" J2 q2 C" Z. `( L. \9 N8 a
Real-time Blacklist Lookups(实时黑名单查询); }* o2 W" h8 |. C
利用第三方IP名单。
4 C* H" Q9 i1 i7 x/ |8 b. p. H! t3 L9 W
4 {2 J4 E! V# z, n. PHTTP Denial of Service Protections(HTTP的拒绝服务保护)$ M% R- m# r$ k4 J
防御HTTP的洪水攻击和HTTP Dos攻击。6 r6 @8 g( ]* s1 \
6 v- w8 I- h! c6 }$ r5 u4 j# W% c k+ ]( w( R) Y$ J# P5 N
Common Web Attacks Protection(常见的Web攻击防护): J$ o2 ^+ N" m) `: t) m' ^
检测常见的Web应用程序的安全攻击。
2 M9 d x$ x5 I* V# E
+ q9 i* d+ i# e' j* Z% Z
0 M1 x( y5 Z9 i8 wAutomation Detection(自动化检测)- O4 |! P. r8 o" w' Z# f( `
检测机器人,爬虫,扫描仪和其他表面恶意活动。/ O* k/ @- [7 t( Q# ^( w
+ S ^( _( I# L$ @5 Y- {
$ A! O; w4 e' _8 H% f* E( U ~' JIntegration with AV Scanning for File Uploads(文件上传防病毒扫描)& c$ u L* n" y* q
检测通过Web应用程序上传的恶意文件。/ g$ K7 K; H. H1 p
+ v# e3 x, @) z% X8 Z* \) i$ S3 G
9 U- I4 p/ N+ Q' @3 p D
Tracking Sensitive Data(跟踪敏感数据)- D" m0 P4 ], [* {$ q$ b
信用卡通道的使用,并阻止泄漏。
5 u: h1 R1 j3 ]
8 ~1 s; K) w n, e7 s- ]& y4 v
6 p5 V. c* h, L: Q: GTrojan Protection(木马防护)
, f( j/ s# p4 b$ k' x, S* R检测访问木马。; t* g3 q4 ]7 T- P) E
- n' s) D0 X* p7 ^ r: T6 J
+ u3 d8 S! U3 ?/ v' mIdentification of Application Defects(应用程序缺陷的鉴定)
# W6 ] \* i6 |- @检测应用程序的错误配置警报。
1 i! S4 w' j8 u0 j
7 \: E$ ^( ]! Z" d+ F
/ G( G( [2 Q3 ?: B7 DError Detection and Hiding(错误检测和隐藏)( K& p( m6 H1 t' }# b
检测伪装服务器发送错误消息。
! U% g' O5 u. u5 S
( e8 I7 W$ n* l( z, d8 b; [2 g" D3 E' ?! l; e5 \0 m
安装ModSecurity9 K( v9 o" A6 s; j" }
软件基础环境准备
$ \1 H' e5 n' n# a! L# c$ o5 @下载对应软件包6 V% U% \6 x v1 D" q- h
$ cd /root
7 \: ]: J0 G0 r6 f$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
6 l- T7 Y/ H+ `% }9 d9 Y- Q$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz0 _# L" ]) _2 L1 r$ O% B3 C, P
安装Nginx和ModSecurity依赖包
0 E" [) k9 I/ _' T0 pCentos/RHEL
$ J- k8 k/ r; A- M( A( V' b' w* i! Y( L5 k2 R
4 b0 U- `: l' n1 R. x: O
$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel1 @5 P+ t! F8 Q! y& b2 R
Ubuntu/Debian7 |1 B2 n8 ]2 ?6 z# a, p
8 n- L' I" S$ Q2 }2 ^
. |$ X* Y _/ B* n( W a$ 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* J6 I$ |( S/ M, s8 R) d0 b- v
编译安装ModSecurity/ i! g. p- z4 A( k A, h9 y
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
5 Q9 [- {- P' w/ Z" m
8 H( \5 c" ]; b- p( l# G5 H1 J
! r* `! x# F7 V% U8 ?2 s( G方法一:编译为Nginx静态模块
2 y9 @$ I, j0 Z9 L5 h# D- C$ {0 j8 {( N1 H# B. K3 u" ~' D4 n$ a9 H
8 J C5 e S* u2 [编译为独立模块(modsecurity-2.9.1) }: x! Q% {! O0 }% U8 \; j/ n
$ tar xzvf modsecurity-2.9.1.tar.gz5 A ?9 ?' b' \6 J& S% R
$ cd modsecurity-2.9.1/
[' Y$ ~3 b* ?- R/ p5 ]! V$ ./autogen.sh
. Z t8 O8 H8 w2 W# _$ ./configure --enable-standalone-module --disable-mlogc
/ k0 T& K0 O! l1 r$ make
: h `) N+ C" J0 H5 H) }7 D- T编译安装Nginx并添加ModSecurity模块& S. E4 ?4 N- n8 i# z/ t1 z
$ tar xzvf nginx-1.9.2.tar.gz) { V2 n% ?# m" |# Z9 C$ e
$ cd nginx-1.9.2/ c# _# J! h. i: [( {
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/( [$ S% k7 @3 ~ ?: Q
$ make && make install) B/ K) [9 u! z5 {+ ^2 @( n, g, E
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
( i! q4 Y' C# @7 H4 z+ n7 `6 @; y4 Q( v
" w3 r6 n: T: n! D/ d编译LibModSecurity(modsecurity-3.0). H" k F0 ]' z2 m. g# ^; Q
$ cd /root
Z( o$ g" E( v9 P8 |$ git clone https://github.com/SpiderLabs/ModSecurity1 s8 h, X0 p3 m/ j! I* y" u9 \' P
$ cd ModSecurity
7 ^' ]( W2 E" G. I% d$ b$ git checkout -b v3/master origin/v3/master: U( @2 B6 B" _3 G0 F. S
$ sh build.sh
* Q1 N; ^8 t1 Q2 t- j$ git submodule init
3 o% x# D- V6 G# t$ git submodule update
' v- w0 J4 u. y9 T9 K6 @. \$ ./configure
& E3 T1 N8 V6 s% z$ make
i; F8 C/ H2 R3 F) G+ L$ make install$ E5 I2 S/ W7 Z5 @
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
* `+ r( @" r2 ~) f! z9 r6 K# `1 ~/ |( ]& X, V6 X
- j5 d. [7 ]0 b, Q
$ ls /usr/local/modsecurity/lib5 _# f3 w" s5 x, d
libmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.03 O2 `0 T; m( ]
编译安装Nginx并添加ModSecurity-Nginx Connector模块
2 y5 |& \; M7 |* p% d使用ModSecurity-Nginx模块来连接LibModSecurity- j" Y- k3 u' S b# D. ^0 R5 A
z% y0 }2 g0 S+ i4 Y* p
3 O5 u9 U3 y8 M9 A5 v8 G$ cd /root% u' t. f/ j) }0 v1 l. _/ M
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx* a/ }1 z8 U# K
$ tar xzvf nginx-1.9.2.tar.gz! L: }+ ]: I0 d2 H
$ cd nginx-1.9.2
8 O/ v. V3 s0 U8 m6 P/ w$ ./configure --add-module=/root/modsecurity-nginx, ^/ n! [$ Z# f% b8 v
$ make
5 {2 G+ T j9 m- d Z6 F- [$ make && make install& H2 }3 S5 Q9 C# j% ?
添加OWASP规则6 M- [3 s0 q$ Q4 G- F0 v. a
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。 _1 z5 Z$ l& s( E0 v/ h# v
- b7 ]8 b& W' s \" E# R6 K: |+ p
, u% ~5 B+ d% g$ z3 X1 P8 Z+ I* ~下载OWASP规则并生成配置文件$ |; C% _, W. Q
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
- }+ S# \( q# D- l! X" y& u$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/3 {' C! f/ ?% A. \1 J
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs* C7 a. d9 a$ @8 R! x) u$ F
$ cp crs-setup.conf.example crs-setup.conf
% t; K3 ^: B% y配置OWASP规则
- t5 {" f; D2 `) L, |' k编辑crs-setup.conf文件: x. b4 B' h1 D
) E& [6 [/ U- y( R
- f' U7 `. W- V6 U4 E4 R' ^- E2 v) z$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf8 A" p: l. A. P7 X) F9 N3 U a
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
; b3 s7 K5 r& b- l4 F$ J$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
9 _) N3 Z# Q9 K* j+ s. Z$ x+ f$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
* j b# O9 f& M3 P% O默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。( ~( ~1 L% i! N9 a+ ^) j; [
" D8 Y8 u8 y+ a
, X. T" b+ c* O启用ModSecurity模块和CRS规则- d0 ?% d0 L7 N3 {
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
. m& b4 ~: C" B# @8 p0 |- U+ P
) r4 }$ x+ S" Y2 ^& |$ L& Q T1 B1 Y" Z1 [5 ^- B3 S% q; I
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。# y3 s; ^3 i* o# I [' Y1 W
8 b$ y( L7 ?) Q' \% |" }6 X
9 j7 P9 U; F6 e$ D+ ^& @0 D' u
$ cd /root/modsecurity-2.9.1/* Y) s! K- O& Y! N( c5 y
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf - h& H: S+ Q" [
$ cp unicode.mapping /usr/local/nginx/conf/- Z: a+ R! M( @" O2 e9 [. I
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。6 E: L$ a; `9 p+ Q
* s. B# u3 l. `5 u. [" S& Z
9 D$ M" h; `2 G9 y$ vim /usr/local/nginx/conf/modsecurity.conf
6 w+ _7 {9 _/ WSecRuleEngine On
! {0 o- q* X' ?" ?" j j: aModSecurity中几个常用配置说明:
& W6 l" m8 l6 r# i! c- B( \
7 P+ i" X- a+ j) t W5 A) k/ W( G
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
8 `8 ^+ Y4 G; y7 p% @- }$ j0 @ I2 G) G! I" z& o7 y' h
+ k' r; j; y2 s( @' ?0 X3 a* Q
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。, G& d. e* i; b9 N5 ~: ^+ V* m
6 {$ c$ G( h2 N) `) N5 j: K
- U( y% g% _" d# p9 u$ Y3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
& I8 h. i% [, F1 ]5 h. b" R
* ^' K6 a9 V! v0 K: k
, ^+ O- q% s1 @( V1 v- p2 A7 s' q2 i4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。( R# |- p) B. f2 C$ ?
( s" h B0 g" S( B' j# D/ l( x" i7 u4 M. e$ G3 D
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。) o! n8 G! P6 m1 n6 s" P0 M/ C
5 \* k% K- D( n: y; B$ m+ v
4 u U* Z, P6 ]* q# r7 O3.x版本CRS h( B: P* ?9 T% c/ \
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
( S) T7 Z( ]6 V" E! W# 生成例外排除请求的配置文件2 b9 T, C+ r, i7 T# Q
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf. ~/ m: c% ]2 @1 Z) K9 t! B; t
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
& L$ i7 G8 A$ U: ^$ cp rules/*.data /usr/local/nginx/conf# e5 |, b% G1 z K" {
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
3 z/ O: C9 Q, J, H" E L; S, v9 T2 V- E3 H7 i' G) s5 O: x6 B2 q
8 _+ W4 z& k% K1 A5 ]1 c4 `! h1 A$ vim /usr/local/nginx/conf/modsec_includes.conf
M1 t6 P' u( n+ b8 c: F* Z) }) \/ k
. |2 R1 |# q$ r& E' q$ S0 |3 [; t# k[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
0 w3 {2 V1 u3 o/ ?' @- Z0 L) P' k' Q- T
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。6 U9 V9 O% m& R( J) w
5 _8 Z0 M0 D9 g9 }( e1 P& t; N `7 [
配置Nginx支持Modsecurity
# h/ M& `: ?* N, n8 t& M# V启用Modsecurity. i. y; a1 `: k* O0 X
使用静态模块加载的配置方法8 v' B9 b+ j" g6 u" x
在需要启用Modsecurity的主机的location下面加入下面两行即可:5 r( b+ ?; o# w- ]0 j# N2 |' W* d
% W( R" o# d/ x7 z! v8 {# S
& m8 u% ?7 x9 [6 S. O9 D; lModSecurityEnabled on;
. I$ L1 ~' D( E zModSecurityConfig modsec_includes.conf;: Z; T2 S7 m6 T: L
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。& h) t0 p/ w! P4 D& `1 V
2 H1 I7 s% W. p+ r/ }3 p/ p, b; `0 O
6 u; s4 X$ z$ M2 u* y2 f" K# h- _- _$ vim /usr/local/nginx/conf/nginx.conf
# _8 v" u5 I, t% r$ c
' |. }0 K# D+ l8 U* b" k
1 i/ N% m: _1 w& x- Zserver {
; i+ w3 A* s0 C( l v* F7 D listen 80;, F$ M) ]8 P Q3 @' m# I
server_name example.com;! H0 O6 T; P3 r( U+ F3 R u
5 M5 d: G" U, I& a8 e U
4 e9 {; y2 e- K! v# C$ X location / {
5 s7 u1 b2 R0 ~6 o& M ModSecurityEnabled on;
: ?# N2 f) b. ^( X$ K ModSecurityConfig modsec_includes.conf;: H) S, y# s# D3 p- B: m& R
root html;! Y. c% Q% h5 ^9 O! ?
index index.html index.htm;( C8 e! I; U2 H5 k o$ i, n
}3 H2 N" _% U2 L- C: q7 F2 ?# r
}
( T& S$ p' E4 H使用动态模块加载的配置方法2 D+ K* y7 F2 z5 X$ z
在需要启用Modsecurity的主机的location下面加入下面两行即可:3 G2 l; T3 D, j
$ U. |8 [5 a- j: q# i8 h+ i/ R! Y
, j( U4 h6 Y2 ]4 @' \
modsecurity on;
7 c) f2 z/ ?! s$ ~modsecurity_rules_file modsec_includes.conf;
$ R0 ]# C Y9 Q) O* I D$ h, g修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。) i: S: k4 o1 U6 q& b
1 `- J+ y- o& U+ n" u/ t* ^- z
1 A/ C& g* r) @% Y, B. {, j) p5 v$ vim /usr/local/nginx/conf/nginx.conf$ ` o3 R6 {6 x! ?& }8 t
6 S" |; Q9 W7 n5 s
6 d2 a) b2 h! q$ N4 `server {
* E h7 g0 P+ n6 D9 ~ listen 80;. p: y4 w) K P, S7 f
server_name localhost mike.hi-linux.com;7 b' }$ K# Y3 B
access_log /var/log/nginx/yourdomain.log;' Z2 H. f! t% s
4 r h, ]' `* Q) p5 X& C" H# e) D6 e; M! T7 X% z
location / {/ c2 a# X6 l; G9 U* ^4 F* J2 m
4 e1 e3 q$ W7 K0 u3 O: N# U) z, ^
" G7 h) f9 {, t0 Y4 D6 N
modsecurity on;
- k% c2 T: i5 E modsecurity_rules_file modsec_includes.conf;* F. b' l) o0 e! k# u) b1 n5 |
root html;2 S. e# q+ [+ F' J) }9 Z$ D
index index.html index.htm;3 k9 Y) L+ P2 N8 ?# ~
}% j2 G9 X7 O" A1 G! `4 K
}5 k2 H. f4 g$ p) ]( z+ C
验证Nginx配置文件
( t9 Y' L% R8 x4 X& N$ /usr/local/nginx/sbin/nginx -t
l( u8 J0 m& Y" C, h, E* G8 x# nnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
! e! v3 y2 x6 v5 o2 P; ~% jnginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful+ o- M% Z( i% ~, x4 v2 J
启动Nginx& S u2 w/ A; `' m
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
: N+ ?: d, x8 V* X1 A9 b1 |. G3 ^% h( E# P1 K+ h
测试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能够战胜更多复杂/未知/混淆的攻击模式。 3 v( g7 X/ F3 O2 f7 M
|