ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
7 v1 ^2 O3 M0 A$ [: T7 N; m) S' i+ h* ~
* o- i3 [) n$ c4 U9 R在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
/ s: H( l' n# o( w- V u
, C% B5 a( \/ K/ Y$ I9 ?4 X9 h% Q9 B" t- y _8 |
什么是ModSecurity
} e6 b2 [$ H. K# Q2 z+ ~- CModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。& ?8 P( v1 L s$ `& L3 z
* X& p/ Q& v/ o' H+ l: n `/ x" g' F
. O( I! x6 o: v6 k( v% ]
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。* Y9 Y9 [) e1 r" {- n2 E
T) m+ }$ p4 u' {* r# A' |- [' Z
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。4 d/ F9 t6 z5 a: t
5 L6 ~- J: k4 C( g/ g
7 z0 u n7 O/ R1 ?
官网: https://www.modsecurity.org/$ u1 Q4 P3 [5 d+ r8 W* \
$ N) w2 a) |5 V& w
% |! L/ U N; }8 u6 C, `: r
什么是OWASP CRS5 e6 O$ p: I2 q6 Q
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
5 u+ {/ A3 b) Y* R* s+ P+ `5 R E% q0 x7 w6 ^* ?8 a8 Y8 I
6 e' u! ~1 `* GModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。: a8 B) b7 g6 c1 j
, Q( c! `/ z6 l4 L; l' z$ Z6 J* T8 d$ j8 i4 N
HTTP Protection(HTTP防御)
! Q* m5 r% L* V" l% n# SHTTP协议和本地定义使用的detectsviolations策略。
7 [6 z. T. M4 w1 n! l2 w3 z# ]2 b: Z7 D
4 c7 f4 G* s, K7 U+ Q
Real-time Blacklist Lookups(实时黑名单查询)
2 ^$ _3 o$ w, o5 w# o% N利用第三方IP名单。
. s& z' V# V4 Y3 ?7 w
* Z# E+ W* U x2 Y9 l N5 Q7 J/ U5 x7 E0 v( g2 v
HTTP Denial of Service Protections(HTTP的拒绝服务保护)# P. j: k) Q3 @. g* W
防御HTTP的洪水攻击和HTTP Dos攻击。
. V) |1 ?7 T8 d3 K% @" p! W4 N8 ~8 A: T
% c; M; ~0 h1 Y+ G% |; uCommon Web Attacks Protection(常见的Web攻击防护)% ]8 O4 K( Y8 v6 I. p* d
检测常见的Web应用程序的安全攻击。- O& a d) ^1 w9 ]
8 r- O' ?& E! \5 V/ q2 C, i l9 y& P3 H* A. i
Automation Detection(自动化检测), d. I4 [/ [6 Y: K$ F, d
检测机器人,爬虫,扫描仪和其他表面恶意活动。
; @+ ^- e, |1 b0 h% h% ?4 M0 @6 l" Y. d" B4 P2 n; w0 G; m
. e Q/ [% u' ?9 hIntegration with AV Scanning for File Uploads(文件上传防病毒扫描)
; a6 ^* H7 `3 V3 A" z$ {检测通过Web应用程序上传的恶意文件。
3 t! C( B' w) c( h: }$ a0 o+ ?4 U, E8 d5 \$ F& n
! t$ b& j0 O9 o% N2 A# l+ V! p
Tracking Sensitive Data(跟踪敏感数据)
* }) f+ k, H) ^3 R信用卡通道的使用,并阻止泄漏。- ^, _' G2 e6 x9 ]* F5 z
0 l3 ?; f2 m7 K2 @$ m/ _/ n
" M- r. _+ X {; x TTrojan Protection(木马防护): ~0 g# `) g; q. Q) |. Z
检测访问木马。' R% ~) }" b g1 e6 O! K+ s. U) h7 w
9 v. p4 z; B7 Y
Q3 ^. Y. n; rIdentification of Application Defects(应用程序缺陷的鉴定)
0 m: h$ x7 t. D$ H5 s3 T' y6 u检测应用程序的错误配置警报。) A- }2 Q% n* i8 o( \
0 o: E# R3 p2 l9 |6 V% J7 \) I
' L. d8 j7 e$ { ^3 w0 w2 t) }Error Detection and Hiding(错误检测和隐藏)- O1 [& R1 [9 _
检测伪装服务器发送错误消息。. S5 t4 U L) p1 o7 \ p
7 p y. Y( [* F+ H4 l7 [$ L9 {2 d- }$ B* z/ M! r
安装ModSecurity! t9 J- `8 h' v( Z
软件基础环境准备& P4 {7 B% T# L! Q* t
下载对应软件包1 S& N; \& M& N! F* O
$ cd /root2 x9 V' b4 g; `
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'/ I( m; V8 z* c( U- r
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz
1 ^' t0 F, I- l/ z/ T% Y7 D安装Nginx和ModSecurity依赖包3 b* K' h& P; [- w
Centos/RHEL
$ ^0 }3 {2 j( D( R
6 j- M) v- b( l J) q4 Q
$ D! h' o9 Y4 L# z' f0 b; [$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
) G0 I# v" r! g2 t+ u3 q; iUbuntu/Debian, o, o' M+ r) W6 P& I0 W. v# |& F
) k1 |, R1 {: D- J# D1 ?' L% ]
2 V" |' z/ z3 m6 Q$ F% W( |$ 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 h! K/ [( J; v( w! P9 V编译安装ModSecurity
$ `0 k, }- N0 j' ?Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
3 O. T7 |5 h: F6 x" T( z( I9 v8 v: x
2 R6 p0 W1 x5 Q# _* g9 s% j$ C8 \/ d# u, r$ h1 S/ u% T% t: q
方法一:编译为Nginx静态模块% f/ h) C$ M! Y5 E: d+ @5 d
+ }3 {3 ^1 N! ^ \
D S2 s; ^ u/ E编译为独立模块(modsecurity-2.9.1)! ]7 X- S7 ]- L" y! b" H7 W+ i
$ tar xzvf modsecurity-2.9.1.tar.gz
7 D! u6 Z6 `; O( L; D; }+ x" V$ cd modsecurity-2.9.1/
. _5 `! f: g3 _ ]( n" u$ ./autogen.sh
: ]: Q% ~ k! E; F/ u. R7 T( Z$ ./configure --enable-standalone-module --disable-mlogc
6 g8 S9 J+ x$ s4 k6 s) T$ make3 p9 V/ S; {% X+ Y$ m) U
编译安装Nginx并添加ModSecurity模块
9 {% a/ I* g6 ~& |5 Q$ tar xzvf nginx-1.9.2.tar.gz. k( p8 R9 u! V, l* t
$ cd nginx-1.9.20 `2 i/ N( p/ X: p# g
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/' u+ g1 S6 _; E+ p% P' i2 W$ y
$ make && make install, x3 M" y! L5 y: v; ?5 E0 m& y# t
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
0 Y$ n4 p& T' Z" b+ v5 Z1 a2 C
1 }; `7 [7 m. E% K0 S c3 q/ X9 f3 X* `9 R$ |3 |! j
编译LibModSecurity(modsecurity-3.0)
+ V2 W% B" L5 }/ \; i$ cd /root
5 r9 t0 j4 B9 \* e$ git clone https://github.com/SpiderLabs/ModSecurity/ r0 @, \! a9 o1 @
$ cd ModSecurity
$ n% {1 \' W* J7 O' N$ git checkout -b v3/master origin/v3/master* ~* t$ f% g) A, n2 ^
$ sh build.sh+ N/ |$ K+ S0 W+ ^; \3 r
$ git submodule init
: D4 a" J8 [0 V/ h9 V( h$ git submodule update8 g6 Q. { i. }
$ ./configure
6 F; f* b( J+ b) i$ make; E" \( ]' e5 m4 \2 F
$ make install, N) \9 l! L4 B: B
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。9 M& Y3 c6 ]5 J; @- M; H5 g
/ Q* D _1 P# _* ?0 \9 M7 a: c
: F9 f! U, L8 y4 G+ x$ C$ ls /usr/local/modsecurity/lib
2 I% l" u% F2 [& H0 F" P# L/ o/ llibmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0+ j' w% ]+ t R" N/ b) W& k: E
编译安装Nginx并添加ModSecurity-Nginx Connector模块
0 z5 w, I4 |1 s9 C1 R; `( m使用ModSecurity-Nginx模块来连接LibModSecurity
( f0 E1 M+ o2 X* h: ^4 L% |2 X! @3 `+ ]' W; f6 D# u6 r! y- p1 ^; Y ^
5 o: m/ R/ ~; D9 h6 `
$ cd /root
6 I4 Q& v' H; i/ `5 F6 p$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx, \/ t p" L2 R4 N* Z/ Z
$ tar xzvf nginx-1.9.2.tar.gz
" B& ~3 w. B- I) N4 s$ cd nginx-1.9.2
g2 D0 p8 E2 ?" o! n$ ./configure --add-module=/root/modsecurity-nginx4 _) e' @- _' q
$ make- V0 d' }4 v4 C
$ make && make install
% r% \2 A& g9 A4 q- u# S6 O添加OWASP规则
' C- _! O7 w3 e6 Q0 N' s1 [; `ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。( M! ~; q& n2 Z1 s0 n. N* W
: a' m& v4 \. b6 S8 k" |$ T7 t& N9 n4 p8 s. ~
下载OWASP规则并生成配置文件% n. g3 O# P5 T0 G6 D6 c2 ?
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git% P5 ^0 V Q7 H0 b4 W
$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/" D+ p+ I2 x h# N3 d/ v/ ]5 o& _
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs3 u9 r" C0 P# p9 T
$ cp crs-setup.conf.example crs-setup.conf" O- {* |8 P- X! |1 v' u5 S
配置OWASP规则) c1 N6 q7 u- k1 `$ {3 e X
编辑crs-setup.conf文件& k2 e; t2 Q: {; E) K2 I2 g
5 A6 f: e) W/ v d
7 M+ \ S3 ]2 V0 b
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf) {0 A9 U3 V3 d0 a& Z. _
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf R, S5 {1 \; Q5 H b
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
. f9 x$ ~, ]: q; T6 r; j! N$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
7 N. N+ a% L3 q" ?% a ^, O: ^$ y默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。 w; @( T( u( `8 O2 P
8 j9 R2 B. e4 z
) {, R( h4 B- Y7 `4 \, O
启用ModSecurity模块和CRS规则3 b& i) f- G9 N8 H2 B
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。4 e& F& K- W1 w Z( P% n
- I2 F f8 \/ q; i; s* s; h/ R: S+ s' ]4 E2 N$ v8 D/ e
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。- p* t* a7 V! S+ n' ^
9 C* `- }" q- u$ N
6 U: x7 S8 _6 k5 u% t2 a: ?
$ cd /root/modsecurity-2.9.1/
# N3 ]* O' t' d! p! h0 S; T$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf 1 W4 U/ I. D- e
$ cp unicode.mapping /usr/local/nginx/conf/
# w |! A$ ~( V& R( }将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。8 P, X2 Q4 G* [
3 B7 C- F! c8 _( L# b# w! C3 X* D0 {* X( X
$ vim /usr/local/nginx/conf/modsecurity.conf
7 I$ {; f- x" P. A/ T" cSecRuleEngine On9 {% r7 T# }* C, {8 j7 n
ModSecurity中几个常用配置说明:
$ k+ R8 ]) d: W9 l( O" p$ G. F, K& N% B5 v) Z
9 F- W% \, R( @9 [4 F$ N y j" V3 \1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
* C6 s8 Q& X( H6 G3 Q; ^; }! z, ~' h
5 k: }* c) A8 R3 U3 m
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
$ P. l! |7 y' e* t0 `7 v4 r
h; `3 q( l, J9 K$ W) `
9 E: Z! }6 i3 J( r7 F! E( z- H% X3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。4 K4 ~ i4 n3 G V8 q H
4 i! s8 H0 ]! C' _3 B/ Y% _" Q0 }$ n3 @; T" f! A
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。+ a& k3 |3 a5 ~8 o9 ~
! b7 |4 w5 v% L6 N
% w5 d& t0 w2 X7 T7 g! `在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。9 W$ ~* U- v8 p+ N) [' K, c
/ H4 l9 t& W% I x0 u: B4 E
# s! c9 ^4 w$ N4 B, j3 _! ]
3.x版本CRS
y8 E* P" b+ }( R/ i( S3 ^1 ?$ cd /usr/local/nginx/conf/owasp-modsecurity-crs6 v: L% H# p4 \$ N2 ` q a
# 生成例外排除请求的配置文件
; v/ y0 ^' n- C j$ D/ M% G. U' s$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf% ~6 R: P: e- S, }0 B+ b& ?
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf2 R% i/ b! I# k6 a
$ cp rules/*.data /usr/local/nginx/conf
0 s: X/ x3 |& r2 P# w0 n为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
, y3 c: |1 H$ \5 k* H! l T1 ^3 o v- o+ K' {6 N/ ?3 l
, N; u1 n7 n6 k8 B9 t6 u- w
$ vim /usr/local/nginx/conf/modsec_includes.conf
* [% |, x6 n( T {0 A. A4 P& D2 D0 C* p- ^3 U2 N; 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 " h6 v8 r$ G) W9 r, w
, Z( f, f) t/ B& X注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
V# n9 {# J! u! V0 D, Y8 x
! n8 j- N: j, |7 W9 O; o0 u: O6 }7 f t# d: x
配置Nginx支持Modsecurity
! y, p* z1 l6 U W# P启用Modsecurity4 }$ {* M5 J+ U4 d
使用静态模块加载的配置方法
4 ~7 [8 }6 j) H n7 A在需要启用Modsecurity的主机的location下面加入下面两行即可:
0 k/ ?, G: d8 E: C, d2 f1 Z& w1 y: z$ M: i) O* i' Y
; S% T+ t5 j: j* I& f: S. `
ModSecurityEnabled on;
+ ` u- n7 Y5 n: \3 M' _. TModSecurityConfig modsec_includes.conf;6 ?( Q' p1 F( N& p/ k
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
1 e, |- S% [% Y3 p. H2 F: j! v) R8 O
1 S, S; N, y8 B; X4 ~& a
$ vim /usr/local/nginx/conf/nginx.conf
* P0 t# n! L+ E& t$ |9 _
2 v. B" z, \8 N) {3 N+ b% Y6 `3 ?7 p2 u: o% F
server {
9 o/ ~; h( \9 w. Y listen 80;) z2 u% X! ~& l
server_name example.com;: G2 `; B' e2 T, p9 V& l8 z
! d3 D' t9 P Q( f# W: w, H
4 d2 M: F1 P, |( D; }2 [ location / {
6 a- ~6 \4 ~# ~9 e7 d1 v% w' N# D% P ModSecurityEnabled on;
$ \4 r" T/ Z) x3 D ModSecurityConfig modsec_includes.conf;5 h. w& G+ N7 @& J
root html;* m2 a% d# `# b; @) X5 u
index index.html index.htm;2 t1 T$ P. G m' s
}, [5 D2 ^6 k* Y
}
, K3 K' I- A2 C! n" Z7 M: `使用动态模块加载的配置方法
2 x, Y5 i. i! K9 K" r在需要启用Modsecurity的主机的location下面加入下面两行即可:) P1 @! V. W! c# I4 A* R
6 s) i" [! [: q
/ ]* x ~" L& T# h& i3 Q4 dmodsecurity on;* s G) z- D' F: W
modsecurity_rules_file modsec_includes.conf;# C' e/ F* L5 x! R/ t
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。+ ]7 A- [6 D- W, s6 x$ @
4 r* e c2 W* c0 i u/ H5 f- ]2 p7 Z& o
$ vim /usr/local/nginx/conf/nginx.conf
/ P% m3 o, A8 e! D; O9 ~! s6 _! D( v
% ?9 `8 z# `$ H/ P
6 [' S/ S+ s( ^server {4 |+ F/ k: A6 k& q
listen 80;: ?$ @4 J( ?6 t: P
server_name localhost mike.hi-linux.com;
' Q: ~8 x( g$ [* S* A access_log /var/log/nginx/yourdomain.log;0 g% x6 Z3 _7 l% z7 j7 x2 ?
$ m0 A, S" m# I4 x/ X& k& }7 j& J5 z7 O, }; G; C. x! S5 E
location / {4 v& `3 t5 r! M5 Y9 C/ v' Y, s
4 s7 S5 |6 j% V E5 H1 o7 A
, b2 @% O7 q7 u; J modsecurity on;
( i" b, { e5 x modsecurity_rules_file modsec_includes.conf;
/ u0 L! D5 w# u2 H( ]0 v; a root html;
D4 d% N/ c& ] index index.html index.htm;; |- w1 x: @0 ^* a. |- g6 `
}
" b0 w6 }: f, g- J( }6 {}
1 p! j; @) U7 t验证Nginx配置文件
) i' v2 H" X/ w5 r7 E) t" L& T$ /usr/local/nginx/sbin/nginx -t0 Z& b$ _3 C' b5 F
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
- C2 i6 Z1 g* y/ F8 E1 wnginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
2 ?# n z J; w4 z启动Nginx2 D/ F2 Q" O0 \+ q. |3 v! X" _# |
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
: B+ C$ u# q' C8 r, k4 m5 J& n
2 r. r+ L& W! k T( [( 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能够战胜更多复杂/未知/混淆的攻击模式。
2 M8 u3 u3 ]: _& Z9 {- k) \; k0 t |