ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。2 {+ m U6 \0 B! [5 b3 F
, W v4 O8 \& l7 v$ e a( H( u8 t0 h, [3 Z5 x% j U. A
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。$ d7 F! z7 |+ l; A7 s" r/ `) X
$ \- }1 H) @% l* J: j
9 i. K0 R( N3 Q0 M什么是ModSecurity
$ q8 Q: z& z# \# L4 C3 ~ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。$ ]; }$ O2 z3 U3 `
+ F' F0 g+ T) o7 L& ~8 K, H n. f
t" u9 K) d. P0 _ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。) p* b2 s" V& U' ]6 J
& c8 I1 G9 a3 g- w( `" w0 P
4 r u+ I9 [5 x+ D: BModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。. z: I$ `+ b* I0 J C. P' k
0 c, s* j7 R* Z2 n( _! c# ^2 |' v
9 x4 U) p' m/ Q, [: e官网: https://www.modsecurity.org/3 r% x1 p. C, y0 I& x/ O& Q
% P* @# H# U/ H' G7 D* V4 L1 f% f! K$ e1 [' y
什么是OWASP CRS
, o; d( p+ b* w9 f( bOWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
3 o- y D, ^4 w; o% g
6 D$ M& \' d' n0 _4 T, T6 d" Y5 Y+ L1 |, Q* c2 w# T" D! E/ [
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
+ c y; M3 Q4 b3 A; g+ [; y( m
1 ?. K, r# ?& V) z8 u
0 \: g% V9 b0 ^& ], Z* PHTTP Protection(HTTP防御)
( Z( j: h+ S; H1 R7 e$ n a8 oHTTP协议和本地定义使用的detectsviolations策略。
r' o5 D1 A6 c" R2 R0 @7 V
2 [( C6 _+ K: F3 p* F; v \+ ]
7 y# m4 Y5 G" H, zReal-time Blacklist Lookups(实时黑名单查询)- m. w5 a" x, [
利用第三方IP名单。
8 [& f, }! |5 x6 ?
3 M- ?4 {$ P5 K' A3 |2 N% W! N$ K- ]- Z8 v5 L; b: H1 r% C
HTTP Denial of Service Protections(HTTP的拒绝服务保护)" L1 D$ y: I" q ?9 l
防御HTTP的洪水攻击和HTTP Dos攻击。. S4 W- G1 H- G h3 p
) M0 r x' \% t* } K
' V+ G8 N$ }% d1 L
Common Web Attacks Protection(常见的Web攻击防护)% n# [" w* R& ~( A) k
检测常见的Web应用程序的安全攻击。* d* R- Q; C9 c( V$ G2 N7 j
! {/ g' {% m { I; O" i, j
* Y( l# w4 o E2 qAutomation Detection(自动化检测)
+ b* k/ ~2 ~1 }检测机器人,爬虫,扫描仪和其他表面恶意活动。
4 L* l' F3 u4 C& M( o) x4 k; o: x
9 R9 l: z( H$ d# h: r' [Integration with AV Scanning for File Uploads(文件上传防病毒扫描)) J5 m- x: s' k$ e
检测通过Web应用程序上传的恶意文件。+ r! d3 A# l: }
8 C' b- _$ J& L
3 X9 F; H/ s# x. H$ `
Tracking Sensitive Data(跟踪敏感数据)/ z& _8 \$ ^" I; @0 z
信用卡通道的使用,并阻止泄漏。
9 q) u* f4 \, l' B8 b0 V( G! l# m
- \6 D. `: @1 N) ]/ `6 [) D
( M5 _' x9 n0 j( h' f5 z8 ?4 N8 VTrojan Protection(木马防护)
" _4 y( I+ C# Y1 A6 `1 q% ^检测访问木马。7 C$ y2 o! p) p$ ]
; n9 O8 A4 H/ }$ }/ {2 o. y$ Y
7 f/ k) A) a% S& K4 E5 b+ ^( `Identification of Application Defects(应用程序缺陷的鉴定)
- I1 c8 e, f4 o1 H2 d# | c检测应用程序的错误配置警报。
0 {/ J: s. d2 Y+ ?9 g$ ] v$ z, d; W! T
+ P& [0 ]% U1 O4 x* [
Error Detection and Hiding(错误检测和隐藏)
" ]4 ~5 \" \4 G& O3 l" V/ G* d0 d/ e检测伪装服务器发送错误消息。5 o) ~. i4 E* X. q
\$ F' X: }+ @; g9 t+ w& J, X* J& X
安装ModSecurity1 V+ S/ @7 d, N) U4 Y
软件基础环境准备* W9 M" J |) w, ]4 {/ `, ?; x
下载对应软件包8 B2 |* m* w/ s# M" \* o
$ cd /root$ B" J9 z. m$ L
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
* K4 m- L7 u9 F2 M( h/ ^7 t( n* @$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz/ K' n; J6 {3 Y1 |7 ?* k
安装Nginx和ModSecurity依赖包, L: e* G1 A6 I
Centos/RHEL
8 |0 x$ |* l) }2 W! d. `
9 Y+ h. P" b1 V7 `, F% M& w
: u8 c. @. X2 |3 d$ i I- D$ y$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
/ h7 X8 D- S- Y( uUbuntu/Debian
/ P9 F7 p6 Q, y5 F$ S& C7 `0 L
) E8 K: J6 R/ f! {1 H! K8 |, R4 h) u( ` }+ H2 _6 s: v- L
$ 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
4 l" V! z# b+ M& Q: D4 |编译安装ModSecurity: \5 @9 R2 ^6 v9 z
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
5 y0 Z" l! j, q3 S: F# g8 y7 q. j9 ~2 Y# r# F3 M: }' p
6 k& l9 a6 C8 o' \$ b1 h$ S方法一:编译为Nginx静态模块
. L8 B! F9 ?: u2 f
+ ^1 z4 r. Z4 p/ p4 p. v2 b! Q! N y1 ?, N6 E
编译为独立模块(modsecurity-2.9.1)7 g; p% ]9 ~# I* J
$ tar xzvf modsecurity-2.9.1.tar.gz% W. _$ v6 g2 k9 Q
$ cd modsecurity-2.9.1/# _# L2 {0 I# t, w
$ ./autogen.sh9 u# _) v8 e; f/ L8 `$ w
$ ./configure --enable-standalone-module --disable-mlogc
* k: D! V' Y3 a/ Q( y. k: V; V$ [$ make% P* E w9 \% F/ d+ a
编译安装Nginx并添加ModSecurity模块" i" [$ L$ c% @# z
$ tar xzvf nginx-1.9.2.tar.gz
5 ^0 \. }& B! E( ~. G$ cd nginx-1.9.2
4 w2 j9 Z/ [0 b0 X$ } a$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
, N3 ]) t: @$ O$ O$ make && make install
, W* n9 v$ f+ P& Q; i0 D. j- u9 R+ T/ a0 R方法二:编译通过ModSecurity-Nginx Connector加载的动态模块, f% E" O% |* J* I ]5 x9 S! v
% C: T8 R7 M; s8 h+ F: M
/ z. V7 \6 b8 b编译LibModSecurity(modsecurity-3.0)
, R0 d$ v, n3 b' h$ cd /root) U6 D. }$ s |6 _
$ git clone https://github.com/SpiderLabs/ModSecurity# ?$ D0 T+ ?9 j* o' t& `
$ cd ModSecurity5 M% p/ D+ `& a8 ~! d6 u
$ git checkout -b v3/master origin/v3/master
! D: p9 Y4 F- s8 c$ sh build.sh9 B, k% A9 K! `8 k t( p
$ git submodule init" ]: Q1 ?* J" K. K- g
$ git submodule update
7 J1 _: S- L- O( |4 g/ s$ ./configure4 C) W% K* @; i7 ~0 H9 W% A
$ make9 C& q) ^* Q. Z" |4 @
$ make install0 H* T$ \! Z0 a# ~9 i
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
9 F5 A" ]$ T! W; H% |5 h5 p, f9 i: Q; }+ X7 u: h% X
8 l1 V/ M, J1 K* g& [
$ ls /usr/local/modsecurity/lib2 |% c( P: D! D% `3 }4 Q9 u2 S& Z
libmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0
: E! ]+ M! e, N2 _2 y5 n* j( v编译安装Nginx并添加ModSecurity-Nginx Connector模块6 J2 T" \$ O+ E2 q; g: p
使用ModSecurity-Nginx模块来连接LibModSecurity
! ~/ g! d$ j3 \3 s+ }
! u, ?+ j- p! `2 S x1 F" H1 M+ G! ^& i. V
$ cd /root- C) d- Z6 F, r
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
* c" K3 E" _3 ~. D7 w' H3 h3 P$ tar xzvf nginx-1.9.2.tar.gz
3 t K8 H5 T: p" }- x$ cd nginx-1.9.2
( V; L3 l/ T: G$ ./configure --add-module=/root/modsecurity-nginx
6 k. v- @7 b7 r$ make% y& O6 ^$ v. @8 X K
$ make && make install& ^0 O. Y' ] A5 ?1 U$ v
添加OWASP规则# {, C% G$ {% E7 t X
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。0 q, e9 M" f' Z2 ?% G# B6 M5 Z
9 V# ]& E$ b) F: i! g: [- a* @- ]
& v& y7 M0 J1 w" [0 ^9 Q下载OWASP规则并生成配置文件) w) Z' W$ q4 \- M' l# X* `
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
$ V! q3 T$ S. |$ g# l2 M$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/6 M3 s$ `. W! K9 v& j4 {$ }2 N$ g5 r9 h
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
- E# s: o/ J7 T* u+ m$ cp crs-setup.conf.example crs-setup.conf. i/ f4 y/ [$ M, x# R
配置OWASP规则9 V% [6 c% u3 v' I
编辑crs-setup.conf文件
- F8 `, t- E9 ]& W9 h- m* l, B9 u7 Z; C) T1 D# |4 v* s
( L0 L( b2 h+ x3 j. Z+ |7 F
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf; Z5 R$ u1 p1 Z5 {0 E
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf2 R- |: Q# @ K" `% c
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
2 |' A" q! |; P: B$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
6 S% }" m q3 l7 E. w默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。7 m: V8 v: [3 U/ x; `
4 f, W- n" ~* Z9 L- w0 M% z) B7 {% M* t& z* U; Q+ T
启用ModSecurity模块和CRS规则
% V8 E% s) @; O! O* S- O' M复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。8 J- p2 t8 c7 ]* _( y7 ? t _
6 I& g! W8 X4 R4 V4 e! C! N5 m$ |* B0 a6 A, C9 c
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。+ @; l0 E' M5 _' ~' n
5 ^- q( L3 m* K: P
/ T) @& e* c7 o; }) v
$ cd /root/modsecurity-2.9.1/
' j' D! G7 w/ Z# v5 O$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf ! L' _! J5 z# a7 U- {
$ cp unicode.mapping /usr/local/nginx/conf/
+ E! q- D+ N' a1 V! M' q/ [* ^将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
+ u+ Z( A3 _ k* v6 p( ?& |: H8 X2 \0 ^# T8 j1 Q
. {1 a4 e4 ?, ?; r2 ^ b$ vim /usr/local/nginx/conf/modsecurity.conf
5 }2 m m$ i& c: Z. Z0 pSecRuleEngine On
; ?( t8 J- S. ]/ a1 @, H% ]ModSecurity中几个常用配置说明:+ G! j. }' j# ]$ y, G' b
8 c5 R, a7 y6 S6 E( M1 Y& M
* c2 \5 Y3 m& ]* ^1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。% x' D+ Z2 a+ w# m9 @# X ^( z; Z
, f' b. K7 I6 d
K- L+ N$ E% O2 e- V; ^2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
; B+ V$ e' [% K6 v
) C8 d. P0 v6 F& c
2 C! g: ?% f7 ?& ?, g. a+ t3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
" _. B" D" W# P- `* j; Z- z# u5 P3 f$ ]9 p9 N5 N- s6 L
$ I2 v i0 m, {+ `7 W
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。% Y% T9 T* |6 w, f. t, i* C* g
7 d/ o8 d& x* B
, i, s: ?5 _$ f |2 s在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。6 `; F7 x5 n( P2 Z
# d3 S9 Y5 a! [
% Q2 p& J% c$ H' L- j3 O5 n3.x版本CRS
4 x! e6 D1 K$ O1 L$ cd /usr/local/nginx/conf/owasp-modsecurity-crs: K9 Z- E% Z" t0 G0 p
# 生成例外排除请求的配置文件$ T/ T. ^2 w. ?) w0 H1 W1 C
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
2 |1 w5 A0 x8 Q& o$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf& I( C& B6 b$ m6 T. @! V0 D
$ cp rules/*.data /usr/local/nginx/conf; Y# U# S2 { A# h
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
) V8 x3 [* F T; B+ X+ H; `
/ |$ j/ Z9 v# @$ ?2 G. W" o" N' F
+ ^) `& V' F* }& U' Q2 S3 o% S" E$ vim /usr/local/nginx/conf/modsec_includes.conf
/ }9 D1 E7 n4 L) Z# V
7 f+ I1 W( H! D[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 $ P" u" f' I& A6 g
$ q' j9 m( T5 K注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。, ?, B6 V: C m) k/ z! P( B8 o
( F f4 Z6 O, i5 d/ S0 w( v
/ {# ~7 u6 ^, P% R: q8 b3 ^配置Nginx支持Modsecurity
& X" p4 R6 ]6 F3 f0 K启用Modsecurity
- H9 L) Z3 o6 F使用静态模块加载的配置方法7 Q" \. u2 Z( q$ ?' l9 o
在需要启用Modsecurity的主机的location下面加入下面两行即可:! o4 l! P" K Y/ V" j- w) u6 ], a
( v, d1 f# J( i5 A8 q9 Y: R! I' q* c( N
ModSecurityEnabled on;, `" @2 j; i" b- d
ModSecurityConfig modsec_includes.conf;2 z/ E' @! w8 i0 t8 d) I, y
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。7 c: P3 z$ M! H0 [1 ]# j" _
( I2 ?2 W. {7 C( T
+ n! Y; v& E9 B7 H- k+ ?$ vim /usr/local/nginx/conf/nginx.conf
* L q) u& L3 o7 p, i& t
+ u! H& h$ T# w) v% T7 R# X9 c; |- k7 p# t/ O3 f/ _
server {. s T |9 o1 ^2 [, O1 K
listen 80;; ]; V( Z! L6 f2 Y5 k& H% V9 }
server_name example.com;/ s/ R) h" O3 |: |5 V8 I
, J9 c5 K; }0 h( {, D* h. T1 P
4 b+ ^1 b% i) l* o0 W location / {5 x! Q5 l5 i' L. S. o9 C: p
ModSecurityEnabled on;$ a7 J2 J" D& `( x, D4 H
ModSecurityConfig modsec_includes.conf;; m, M3 \ o l- ~$ u
root html;) ~1 d8 X& F+ f* m
index index.html index.htm;
3 s% J6 a% q d; R; n }( \; u/ E' b( z
}6 u* z5 d* ^0 \8 C8 G, g
使用动态模块加载的配置方法
; U: `; T4 G- v+ u" P9 b在需要启用Modsecurity的主机的location下面加入下面两行即可:. U) u" _2 d8 O% W& ]$ J% p
7 N& @6 ]3 v6 |7 H" H
' h. k& h! R8 P9 z( k- Wmodsecurity on;) U7 M8 B9 E# w: I/ Y, h
modsecurity_rules_file modsec_includes.conf;5 z1 e( {' H* v8 |2 g4 E8 S5 G, n
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
9 `- u" F5 B" S" i8 l& V
5 `$ S ^' }; Y0 {# z" V, e/ t6 q0 E; H- k0 q
$ vim /usr/local/nginx/conf/nginx.conf+ @, w1 Y M3 @4 [+ y5 ~2 o' \4 X
D; ]# s+ ^/ g! C$ I1 @
3 U* a7 K# {6 D; [- B$ D D# Gserver {. Q8 H8 }* M& W1 K# ^: x
listen 80;. B4 R3 G9 w/ K# G
server_name localhost mike.hi-linux.com;0 t* |& T( w. G; f( Q
access_log /var/log/nginx/yourdomain.log;
1 p5 m/ [* H1 b! P' y( \5 Q' o) N) P$ J; E7 e* ~, P
* j% X4 u# ]5 {* ?0 m
location / {
j5 {* z: l( }: z/ t/ k5 f
n4 c; J3 h# a/ ]' k% b4 v- r+ l4 z) Z3 b% m
modsecurity on;0 @+ D' d, ^6 n% S
modsecurity_rules_file modsec_includes.conf;+ |/ q' a- M) m
root html;
O# h& _0 k: V+ c6 F index index.html index.htm;
( p2 z+ q, c" X. K}$ p8 p1 g+ o: v, e2 u6 H8 a
}
# B; z1 x+ m9 R5 o' H$ i验证Nginx配置文件
, U. y6 r4 j9 u1 A$ l9 r$ /usr/local/nginx/sbin/nginx -t
6 y0 F1 s3 ]8 v! ?: f; Z- Xnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok+ b9 k% N+ n* B# D% C# N
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful, A' H# V5 `- _ D" ]
启动Nginx8 O0 a s" n" U z/ i6 a4 Q, J9 X
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf9 k1 }0 w& s1 ` T0 J& q
( r+ ^* d6 r- a5 R
测试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能够战胜更多复杂/未知/混淆的攻击模式。
/ L3 j6 o: d) k |