ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。) d" a' X- L A6 e1 t8 z
0 z4 q' [; o7 w& f7 b/ X$ M' |$ C5 g& U
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。6 M! t8 O' V* R, M/ f+ ^: V; @
- C d) S7 ~! M
9 {/ Q' ?' y( {" i2 E什么是ModSecurity6 s5 K% I0 p+ ?2 }% f3 ]
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。9 [' z4 J) P* a o. ^6 {+ L D
; {/ m- Q* i8 O
6 \3 S: a( Z) q7 A2 s8 ~0 FModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
! m. g4 A$ Z1 `) g+ |( l0 C$ n
' a! j6 L! \9 ?5 H2 e: l. U* u& c0 q; k( z* e& M+ X0 D
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
1 @' }! T* L$ f9 O5 r
$ T5 Q, T- i Q( ]6 k6 {* I0 }. F/ T
官网: https://www.modsecurity.org/$ Q* N4 P: K2 n1 j" O' v; |
% I: E1 R- Y: d/ {) Y, X. j3 z; k' A$ c
, r6 k: i$ C$ f4 ]
什么是OWASP CRS
9 \( h8 Y* H* W- _OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。8 H$ }5 Z* ]) G; U
( `2 F. Q1 z* g+ S$ c0 q
- V* y) h" f5 i% p6 y7 eModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
' w6 L! o6 B- A' Q2 b
( R( \& T) x6 D- E* Y5 y4 B' m# E( h% L/ ^+ O+ ~/ G8 G
HTTP Protection(HTTP防御)
; u8 \( z y, |7 w4 \. P$ n7 Z- G+ f( qHTTP协议和本地定义使用的detectsviolations策略。 k9 C, N) J) i. [5 S9 E; ?
/ b0 U& m' Y: g2 A g; m. C! g2 ^
6 U: Y$ f6 x7 a8 d. G7 rReal-time Blacklist Lookups(实时黑名单查询)
" W9 Z# S2 W2 j7 ]利用第三方IP名单。
% C* M/ g, T( N, V$ B& f9 W3 G" e8 w/ _: r5 D( H4 c9 D8 ~; X, h5 N
) I8 G1 a: [& ~$ C" [HTTP Denial of Service Protections(HTTP的拒绝服务保护)- k: y! Q- G8 J2 M! ^
防御HTTP的洪水攻击和HTTP Dos攻击。( g4 A+ a% J/ H d
! {% x3 y0 q( J1 h
; w+ e0 r3 C. \Common Web Attacks Protection(常见的Web攻击防护)
o8 k& F* Y% E( {检测常见的Web应用程序的安全攻击。- n( S) B. Z* i3 R
" m1 `$ w. g- j
3 U6 x6 E0 I; F; I( d8 z4 N2 kAutomation Detection(自动化检测) y8 l" `* X) M1 Q4 a, D* m
检测机器人,爬虫,扫描仪和其他表面恶意活动。
5 t9 X, Z( E4 ^3 k( G* G( N: ^+ B: |
/ r- A7 G8 b9 o$ J% kIntegration with AV Scanning for File Uploads(文件上传防病毒扫描)
) U' @$ J) c' W0 S' X' Y检测通过Web应用程序上传的恶意文件。
3 l2 y2 m g4 z8 C- {' H( K" ^6 a. y+ s
! j: Q0 A; [0 d, V( u2 p' ]
Tracking Sensitive Data(跟踪敏感数据)
& M% E9 Q2 w3 D( {信用卡通道的使用,并阻止泄漏。9 r2 B3 J. K0 {; ~! Q: G3 l
& t1 t' I$ S# |# p1 P7 f
) Q; {& I5 f. fTrojan Protection(木马防护)
/ Q+ |8 p. V) L3 U: J2 g9 C检测访问木马。: \' P; i8 I5 w6 A. _5 C) j
) K) ]! l( t0 C( n! H
6 |4 u: G% i) t3 }: J; f IIdentification of Application Defects(应用程序缺陷的鉴定)
# V& H" s ^" ?1 B% ^检测应用程序的错误配置警报。
, u1 y$ [1 \5 F7 N8 [- x+ F
# C# a+ `" S3 f2 L Y' a" }# _( M- B% ^8 {- ]
Error Detection and Hiding(错误检测和隐藏)# y5 o' {7 i6 l# Z
检测伪装服务器发送错误消息。
1 l! V' e' i: F! A7 M6 _- }# \% T- ~# E# E8 d9 s
. o9 R7 O1 G7 d4 X; L* }# M' c安装ModSecurity
% H8 J( f, y, z* y9 N0 C+ e- Q1 q软件基础环境准备
) f3 B- ^' n3 I* `. `7 N6 j& w( o* d下载对应软件包
' G1 |8 T: {( M5 Q4 J' S/ W$ cd /root
4 {& K; E- F/ l6 W. N0 l) R# i$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'5 a$ j7 T. }/ r* [4 X
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz
j% d3 Z0 p3 Z- S: L# S安装Nginx和ModSecurity依赖包) J" ~2 P4 N V" [) l6 S
Centos/RHEL5 ^' g; T+ C: J1 m$ f
3 x [5 a3 C! [) A
& U4 {& U# A9 D( M
$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
2 }; k( `3 v. k& v. X8 \Ubuntu/Debian
" W: f" f5 k5 ?) Z( e9 h, i3 J8 o- b" P' w( d; e; f$ q1 A
0 j) D5 X f: Q1 p5 _. n$ 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
. Y5 z( w7 }0 t9 {6 S3 a/ w编译安装ModSecurity
+ Q( p5 U6 F \; ^# n" H7 E6 ~Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
4 g8 A, m" y5 ?, Y9 X9 g8 y) R. ~. I, k+ D6 e! ^/ q
4 d- g0 D3 f) D7 \
方法一:编译为Nginx静态模块
2 r! A; p$ r/ ?" E
9 F3 Z x: y7 o' u+ s+ B+ Z: i8 a$ `* M# F p& X& L: b
编译为独立模块(modsecurity-2.9.1)" K% C* ~( F$ C' j* d
$ tar xzvf modsecurity-2.9.1.tar.gz# R7 ~0 q% Y: A( g! `& {! e3 ]
$ cd modsecurity-2.9.1/( Q- `! c i& v; `8 n; W: m1 ]
$ ./autogen.sh
* G1 S. n; k, W; S. E$ ./configure --enable-standalone-module --disable-mlogc
* {# Q" ?3 n1 K6 W5 n$ make
, h$ ^' y" E7 |+ {编译安装Nginx并添加ModSecurity模块: w( O* b: D* G1 G
$ tar xzvf nginx-1.9.2.tar.gz( N4 z9 f# }+ s! j5 g* A' Y
$ cd nginx-1.9.2/ |+ p- F3 r2 F4 |
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
8 E& G3 p7 @ i: @1 g8 T$ make && make install* n" i- A6 N1 f
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
7 G' n- @8 t# L+ Y6 t0 ~/ D4 o1 C5 }5 p- M r4 o
! W" s3 D* O) g3 I* w
编译LibModSecurity(modsecurity-3.0)* P% {5 k( e3 s+ S( M
$ cd /root
- x7 g: P0 x5 R; c0 d$ git clone https://github.com/SpiderLabs/ModSecurity, i* E/ x1 L. Z3 r: T! t
$ cd ModSecurity
6 j' Z3 j5 L r$ git checkout -b v3/master origin/v3/master& i/ j: X/ t# h- H* z& K
$ sh build.sh
3 |, W4 u+ n9 Y9 Y; U. q3 I# P$ git submodule init
% D- [5 j8 [" i3 l; f1 T- U$ git submodule update9 i- B( M9 E. V6 d( \5 p3 L l
$ ./configure& B3 V8 `7 {# ?
$ make' o3 U# V6 o# g- s: W) @
$ make install2 e+ l8 v' n6 b
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。+ O1 ?) E% p/ Y1 q: X0 k6 d
( p: e3 n P/ E: A4 y5 o& Q, t! s
' e' ~# R# ]9 M7 X$ ]$ ls /usr/local/modsecurity/lib
5 X* @8 [7 }) v6 W2 b9 flibmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0
4 z% O- U# u# h4 g编译安装Nginx并添加ModSecurity-Nginx Connector模块, d4 j$ ~4 e& m! n. G
使用ModSecurity-Nginx模块来连接LibModSecurity
; ]. d! [/ \# ~) I; Z/ W& m- F0 z$ P8 L8 @! ?* h3 H& a% e6 ?
2 b( P0 _9 m* e9 @$ cd /root
. c+ T9 Y; K. y7 S5 ^# {# ?$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
9 n4 `, G) B" x& Y$ tar xzvf nginx-1.9.2.tar.gz; I$ X; J0 x! H1 n' H
$ cd nginx-1.9.2
# ^; X* Y; @. T3 }: g' _$ ./configure --add-module=/root/modsecurity-nginx, d( |0 D F4 S, V, B7 N* v
$ make
- V1 K9 C- a& H0 V6 B: T S! _0 C, i# R$ make && make install
1 Y- G0 J- _4 p- Y& ]! D( |* ^添加OWASP规则9 Z# {- V# K2 W: J9 `/ C. m: [
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。5 s1 l5 g/ M3 a5 t) j4 K( E$ Q
9 Y; x$ Z) {0 w; p7 s" T
0 @; f; k W8 O1 k
下载OWASP规则并生成配置文件
6 R6 O U/ T7 V1 d0 k4 Y$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git. d* M0 Q X7 m1 [
$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/
" {& x" B' m3 R. b: w. Q; a$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
* l2 o- E- U. B9 C" W9 r) _: B" k/ k$ cp crs-setup.conf.example crs-setup.conf( z% c, A- u4 v
配置OWASP规则
3 _: U S) I& ~9 [7 F1 n: i编辑crs-setup.conf文件 K, H4 t! w# [% }3 }
/ I9 Q8 F% a8 R0 M* O$ N' p% E) b
* y" v1 C# l* @3 {% g3 x6 r; Q$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf# Z0 }8 k7 c4 W2 q9 k
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf6 {7 I" r& P$ M
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf0 Y, K4 [; b8 \9 @
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf4 L# t; @9 Y7 W6 K
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。" @2 F' _6 Z/ y! Y1 Y: h9 z3 ^
* T3 F* C3 t5 g
! \7 t2 a, \9 V; E8 Y y& d) P启用ModSecurity模块和CRS规则
, k. G4 j1 x! g2 N* l* q" z复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。. p9 D w- M3 z$ `7 v( ] p B
6 F/ C. ~5 _2 e1 R1 N' _* s/ v' q2 B' }1 R
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。3 d8 k( [6 g+ D, R
) @$ s- E- I7 k( Y9 {7 U1 e
4 A% \5 } G P% I$ cd /root/modsecurity-2.9.1/
7 O: {8 J4 D3 e, A$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
, q! X& S& k2 t5 r( @# W8 c/ \; d4 h$ cp unicode.mapping /usr/local/nginx/conf/
+ g( Y/ \' P ]将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。9 Q# q: o+ F" L3 G- ^- T5 x% q
- p/ X! C9 X- j" N5 P( t w K8 S5 }7 U$ v: }- J# X% [: s0 {
$ vim /usr/local/nginx/conf/modsecurity.conf
* f9 H J7 ^! e% K. G2 {SecRuleEngine On
! o/ c' g0 C$ e: B4 y! }0 O- kModSecurity中几个常用配置说明:
- F& n6 c9 J4 D0 B# Q
4 X6 s/ V; a* M5 s3 w) E! R- q" _, L+ k4 L7 V# e" a: N
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
6 H! C' O0 w# {4 ?+ g/ ]- q G5 b9 R6 h# ?9 s
3 h- v4 P( O) d2 o8 Z
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。8 {3 T( E5 ^( Y
8 n" C) V/ u, I9 D
# |' k- U7 D$ [5 Z0 Q
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
4 M; v& F! R( h+ L' _5 K" z% i2 J& O: ? H
2 P6 B- \6 W- Z
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。0 [4 Z' J* j$ t8 p
9 z8 n+ { k, |% T- M
' }' a9 k, b. ~" n$ [在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。8 T3 k. ~. P; {0 B( c" x" p
. C5 R* Z. K/ }7 @
, K2 D# V6 n, U; i' n) ]5 z: x
3.x版本CRS
; l- }9 p* f/ k7 _$ cd /usr/local/nginx/conf/owasp-modsecurity-crs |: l# u. \- z/ E: C" H; b% T1 E
# 生成例外排除请求的配置文件2 N5 i* v( [" i1 i0 j
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
3 _1 Q. w/ ]# s3 P& n! R8 M$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf& @# l. _4 N$ d
$ cp rules/*.data /usr/local/nginx/conf
( S$ z* O; `$ n$ i2 O- {( x为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
; \) S. ]8 a+ y0 f0 k7 f3 J o, E' S8 g8 d/ h7 x' @
3 {6 h/ c6 {7 |2 ?* t d0 c
$ vim /usr/local/nginx/conf/modsec_includes.conf. B, \0 l0 e$ K2 R
$ t3 C7 x% o: q[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
, S O- O' e+ C' {/ ^0 K' \0 x% Q, D; ? [' W* ], M {
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。) K; A2 J& p' }
) V5 q& P2 E* ]* k0 U
( k! ~& V6 V3 K- A6 Q3 s配置Nginx支持Modsecurity% O0 F2 V8 I! S9 y- e
启用Modsecurity
V5 d5 H3 B% T3 O使用静态模块加载的配置方法2 G3 A4 v6 l5 M/ \& b# K/ t# I% k
在需要启用Modsecurity的主机的location下面加入下面两行即可:
! L- \ ]( R' V2 ~
) u$ u* C9 i) s0 j) D1 Y9 Q! l: q- B0 j; q7 D0 P( Y4 ^9 t& l
ModSecurityEnabled on;
# ?) y" f4 M- S+ N# v2 oModSecurityConfig modsec_includes.conf;
3 |8 t# d- T& k& ]& P4 @: M修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
. b, n- ]. x* R
) @ `+ J) w7 ]) }" z7 G2 h
8 S6 Z( q. T0 e) d9 V$ vim /usr/local/nginx/conf/nginx.conf
6 V# n } v* F. l, }! s
& p) N6 u G; |1 v: t7 D
' ?9 c. t3 I: ~& K* Aserver {
* L' l2 v, l) w! U# N listen 80;
& j4 K. V: I2 I% D6 ^3 y! Y server_name example.com;* z; T6 M1 D0 B5 g0 {- K
+ h( t9 h0 ^& l4 A" p6 F& n# f7 j4 S( K
location / {% n9 q+ N% U2 y& w) m
ModSecurityEnabled on;
/ u: t+ |2 n* ~$ s6 ] ModSecurityConfig modsec_includes.conf;
8 }% C7 D- Q; K/ l% b root html;
% F# s5 W" g$ ^ index index.html index.htm;
& [' g- T( P9 [ }% g! y( J# D& I+ ~& I
}
! @* f) u" ^9 X6 `1 O# U使用动态模块加载的配置方法
$ `. Z! j' `3 ?3 g1 m在需要启用Modsecurity的主机的location下面加入下面两行即可:. b4 C: O5 i5 X9 t8 u9 L
+ f& J# Z. o( W; V2 ]
" C6 }5 Y0 \4 t* o) L" y
modsecurity on;. B+ t. c* [' z+ _; S& |2 v
modsecurity_rules_file modsec_includes.conf;
3 w. z/ B; E8 i' e修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。+ D3 F' O' \6 H: Y5 a
$ g8 @0 U: E% r) F$ E% N: x% E2 z$ ]
$ vim /usr/local/nginx/conf/nginx.conf6 c2 B4 M) k- s) |
/ s: U5 }, @9 n2 G& V8 C$ l
# a5 `6 \% ^6 M% ]# p0 Yserver {
9 M# n6 T8 t# F( ^ listen 80;0 \# W: d, [' B$ q h+ Y$ X
server_name localhost mike.hi-linux.com;8 B- Q) C5 o0 h, i- L4 w7 Y' j* M0 u
access_log /var/log/nginx/yourdomain.log;1 n- y8 @& ~; {1 F: L% ~6 s1 s
& X/ D7 b+ e- r- M/ J4 ?; ^
& f" ]: ?9 v% ?) T) C location / {
# P% G5 N& [7 T/ B; s @, I9 D% R* B+ k
) ^0 B8 n' y; o) ]7 w; E modsecurity on;/ O+ G1 G) I; o7 v6 F
modsecurity_rules_file modsec_includes.conf;* v0 y' O. Z( z5 C, J
root html;
+ ^, K/ `0 c5 _4 N# p4 } index index.html index.htm;
: @8 E* w9 C( p}
9 E) E' H7 R' r/ i}
3 y3 N- f- f- C+ u* C验证Nginx配置文件$ g# Z4 S+ o; n/ |* A2 k
$ /usr/local/nginx/sbin/nginx -t
' D# P+ K9 ~: ]- Jnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
; N* s' E+ @9 e# Z# V1 inginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
6 F4 {. }5 c: ]+ k/ S# V启动Nginx
( _* D9 y5 O5 V& w( ^; x& ]$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf" b, ^# x" V+ [9 L; ?
& |: z9 I$ z0 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能够战胜更多复杂/未知/混淆的攻击模式。
% q( |( |5 S& v5 g7 Y |