ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
, `; E# V# b+ A
8 t- [2 l3 g( T" q
3 G$ p7 X J3 ` e$ B2 D! i2 E在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。4 t/ k" k+ V2 J1 Q
; `9 E4 R6 I0 R# Z
9 W) n; V# C& Y8 A什么是ModSecurity
( X; ?8 y7 K4 S# j X5 NModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
: r2 T$ F" W; x5 i8 d1 F) f1 ]- |+ W$ X4 E e8 d
+ X5 @( N6 H9 ]- G
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。; [* j. U5 i. @) b
) N- ?' {; p+ P. |( b: K$ Y4 v: r t
$ Y: s$ c0 n$ r: G0 uModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
' f5 }; r2 v' E1 a! b n1 X) V6 Z
5 o2 C! T0 P8 `1 q1 L& S* f
官网: https://www.modsecurity.org/+ ]; ~' D8 O( m# V) F
/ W: [- t6 I4 S% r& f6 Z
$ T" S' O4 G+ }3 `; a什么是OWASP CRS
) F6 {2 B: @3 y* P3 |OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。) Y. c$ `6 t: u M/ a) z- z* @5 }: h# r
, O! B: \. F5 k& U) [& [& v
% [$ M7 N- b3 L7 x* jModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。8 f& o2 J/ M% ?9 N
6 z) D7 P5 @. B B+ ?4 _
3 ~0 M8 |$ T6 \( ?% X4 p* IHTTP Protection(HTTP防御) v0 S0 Z6 O2 y+ ^( k% Q* F/ u
HTTP协议和本地定义使用的detectsviolations策略。9 ]* B4 Z& V) W% A/ Y
) b( v, ?3 v! m
* d3 l) C* [# F' F- x+ {
Real-time Blacklist Lookups(实时黑名单查询)
$ e4 U. Z' Y) k利用第三方IP名单。
6 p1 [( F+ t, V# d5 i+ c9 ~% [# l
% ~% A; w5 t/ I, H% h& y( B$ j( v) q. I: h, Z' _& x- j9 t( E
HTTP Denial of Service Protections(HTTP的拒绝服务保护)+ E+ [. G4 E% e2 l
防御HTTP的洪水攻击和HTTP Dos攻击。1 P1 b/ T3 y% @. J7 H$ D6 C; v
+ ?: T3 M4 q0 q1 @# {- q1 u; X% X; m9 z: f" C
Common Web Attacks Protection(常见的Web攻击防护). B2 O+ N: a9 b p8 N5 p
检测常见的Web应用程序的安全攻击。
; x1 P0 `' b/ M% u7 y* G
1 y6 y* o4 ]/ I: ?: Q' ]3 @/ [5 w3 [
Automation Detection(自动化检测)
2 m4 [* t; z# s3 q检测机器人,爬虫,扫描仪和其他表面恶意活动。
+ e( J- K0 ~! C+ u# u
+ k% e8 j; j0 V5 s7 M- H2 t2 y! P2 |. j8 \, z& j
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)# C: ?4 Q4 c! o) k4 i) v0 f
检测通过Web应用程序上传的恶意文件。4 o$ u% r! v' P8 o, G$ N& ]- i
$ h, ^+ V3 U/ w) }2 s
; b$ n6 F, d9 \2 h# c( _1 p2 e; g, mTracking Sensitive Data(跟踪敏感数据)
" L' N4 k2 }, c1 l; C信用卡通道的使用,并阻止泄漏。
. R' a0 l3 c5 x( x$ L
/ b' O; }5 u) _7 e8 f) K% i, D8 ]* T8 A, o3 e" E' I! q
Trojan Protection(木马防护)3 z5 O5 d7 b% V \3 Z2 p) T
检测访问木马。
1 q0 B0 M# a4 g" |, t1 E
% ]- C3 U6 N; X% f9 [
- [: B4 k5 X6 P4 s t8 rIdentification of Application Defects(应用程序缺陷的鉴定)* G* i( g2 J8 T# a1 S# P' h
检测应用程序的错误配置警报。; B) r& y( E p( x$ o
! |' z6 o# d: t' o/ W S
( M; l9 j& I/ D: K) gError Detection and Hiding(错误检测和隐藏)
0 r+ n0 h {) `* w- ?8 G# `8 ^检测伪装服务器发送错误消息。
`, r' _2 L$ o- b
$ Y3 U% R# p- k: W O' Q! B0 ^
4 N! x1 R/ @5 ~& n: E" r$ V, ]安装ModSecurity4 a7 m- Q2 Z( V
软件基础环境准备
7 K. o% l% W! z( A下载对应软件包2 O7 a5 U! p; t" \: Q3 S' x& e. `
$ cd /root/ k3 B7 Z7 U, `7 \% r9 F ?
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'7 x2 p% _* D" {0 \
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz5 a& K, j" x' w3 y, L- |. P9 `
安装Nginx和ModSecurity依赖包" f0 X; l n# t- \' t
Centos/RHEL. ~6 z9 P6 ~" d, o* M
- T$ M$ T2 X( `% R2 w, n3 m
0 I: s$ U8 R7 q; a$ _
$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel r: \- `/ }; U8 z* E
Ubuntu/Debian" W" x1 E! s( _# B2 B c1 B" @
" n c- M" k n w; b0 P2 Q
8 u$ ? _! S+ u" o# }0 {6 {/ x
$ 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++-dev6 @) z8 w: ~0 D7 p {1 Q
编译安装ModSecurity
- j5 U) c( K3 V+ `; T9 u# s6 U2 w; WNginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。$ ?. N# Y/ L+ u- b' ^
, K- q# S$ S7 W7 u# k4 p0 H
% ]4 z( s+ y) k0 y方法一:编译为Nginx静态模块# k# T! ]- ?7 L1 U
8 l0 ]9 ]9 F0 g7 j
" t% i7 ~# r' u编译为独立模块(modsecurity-2.9.1)
5 x0 f: D B# e3 S. i$ tar xzvf modsecurity-2.9.1.tar.gz
0 D' L% \/ `0 J1 X; M+ H* z$ cd modsecurity-2.9.1/
0 |+ L% v# P" `( v \$ ./autogen.sh
- U4 f! |6 b5 O* X2 B0 e B3 d+ \$ ./configure --enable-standalone-module --disable-mlogc& Q7 S. ?) d5 q+ v/ t% Z. h
$ make
, n0 H7 y( i; ^2 K编译安装Nginx并添加ModSecurity模块& k% T. n. Q8 j; ?- r2 g9 [
$ tar xzvf nginx-1.9.2.tar.gz) b9 } h2 K7 B' H8 K* e4 Q5 [
$ cd nginx-1.9.20 W1 H/ m. G; N
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
7 V g; m6 ]: m0 J: S7 _$ make && make install
i5 r& @& {# Z) v方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
+ s7 X+ C. H; P# m4 ?. ^2 u% U2 q" N, G" H( B7 n/ j" K% m" w: `( ]
' O( z! i$ F) g+ A L- i2 ]0 A
编译LibModSecurity(modsecurity-3.0). Y1 ]+ N2 ]) \$ |( X
$ cd /root
; n! A" ?" I" F; s! k$ git clone https://github.com/SpiderLabs/ModSecurity
( |8 k, F: s! E9 Y, X$ cd ModSecurity( t+ J* @) C2 Y* m) V
$ git checkout -b v3/master origin/v3/master8 x3 X8 `' r- n' B/ C9 y4 ]
$ sh build.sh. t9 z! G: H& D0 V" l7 s
$ git submodule init
T! r7 ?" y* J4 M* a$ git submodule update
5 K X4 Z1 a- Y% D" c% h; G$ ./configure. k, ?/ f* m$ ^- `" v
$ make# a1 `( @$ Y& r) \
$ make install
`# O) q; F. \ _ _. P8 o; y) H: aLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
+ F2 s% I+ M6 v2 G; ]# ^" i7 H, v; O0 O9 l& r' s
" P( _. @# q& z' t+ d Z5 w$ ls /usr/local/modsecurity/lib
& J; \. O, b4 _1 b% ?( B) A0 V' y$ Qlibmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0& v. k) H) R7 M6 O% M: [7 n
编译安装Nginx并添加ModSecurity-Nginx Connector模块- B9 D# {6 y) l, p
使用ModSecurity-Nginx模块来连接LibModSecurity" i7 _' t4 [& W+ l8 ?
2 K. E8 ]! U* h8 |- a2 N! b) ~$ B- n' f* {5 _6 u( D
$ cd /root$ x8 Y0 |! W$ P
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx7 P9 f8 h; z9 i, Z) l* G
$ tar xzvf nginx-1.9.2.tar.gz
" z3 I, U1 j1 U' H, N' Z$ cd nginx-1.9.2* o7 h; L9 d/ m2 B9 I) F# D
$ ./configure --add-module=/root/modsecurity-nginx
- a3 W, `+ P" c( P# Q) s0 W6 m E$ make
+ m6 J6 n/ B6 R) |" d& f6 K/ V k$ make && make install( }7 L& p$ o8 d' q. C7 U# E' c- O
添加OWASP规则" K1 M' L" M& K! R0 Q/ q3 @! G$ Z
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
3 K2 C" h; X: r) U2 L/ K/ u" O9 {5 g: q' a2 @2 {% m
1 S4 `' v" b2 e {( T
下载OWASP规则并生成配置文件8 F/ Y6 U: P% D5 F. z& v1 k0 v( _( ] y
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
9 h% \: k9 f2 Q3 H" |& H3 y$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/. {2 g! U/ W, A# [) v
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs! J9 X6 h7 M' E5 r; K# W
$ cp crs-setup.conf.example crs-setup.conf
7 [. ~- A8 H" [3 S6 S, [配置OWASP规则: {6 A) ]8 i ?1 r: j
编辑crs-setup.conf文件, L1 I% {+ u4 T% i" [7 W
$ X3 y1 d- G2 G ?1 ^+ Q, ^- B/ \" E: [) T6 V
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf. x0 j1 Z) a7 Y1 Q; i$ o
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf( q& e; \0 H- l5 |
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
- k# \8 X. Q4 w0 W- z: n$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf* F3 s# N4 i( M1 E
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
7 [( ~: Y$ }0 x- m. m
O- |* X/ I& R3 X; h9 E7 s0 L& G; p( F. u) P3 n+ ~: Q. O% Z
启用ModSecurity模块和CRS规则
* L9 @, ?' u% Y/ B7 o4 v8 Q. k/ T9 t. R复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。7 ?! J& p' M) m7 l
0 Z: ]$ e5 d7 Z( L( G3 [ k
* }- h5 T% s: s# Vmodsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。2 V: X* _, V! O9 Z
4 Z8 M! v. q$ C- j5 y0 c8 ^% W4 ~2 H: p2 U, F W; a& J V
$ cd /root/modsecurity-2.9.1/
( x; L i: g2 R* g i$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf - \: C- Z# T6 V# l- ?' Q
$ cp unicode.mapping /usr/local/nginx/conf/
2 B6 x: e0 ?$ ~9 L: s# C3 V" ^将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
4 x# B l7 Q P/ P8 }2 w
z- R6 \) [* f# y6 V1 w; w. r/ ^% j o! P
$ vim /usr/local/nginx/conf/modsecurity.conf
+ _; R; ?* I7 w4 E3 _7 E g' BSecRuleEngine On& C+ X( W) t+ w% ^2 M% B' N
ModSecurity中几个常用配置说明:
. T& k6 d0 Y% o: x' G% l
& U1 l' |- Q; ~% b! R# ], e" N$ E1 s& N2 F2 p3 q @
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
! c! n! B1 \, ^- C9 a% O1 H* M1 f& R4 }; N" _
. M% N9 x( A" F
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
/ s: O: s9 r6 H( y& Z
8 L8 l& b/ E$ h4 A* f" E
7 o- l1 |# t, s% N" n4 t, E3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
/ R# @' G3 f* e# T+ G) y" [* f# `' ]* H8 u9 }& F1 G' W
) G2 }) u2 w; ?: I
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
/ ^8 e' a0 P" j2 r
) X1 t( q0 w: ]; ]1 x4 W9 {0 j! U5 `7 I' u
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
0 ^& ]" E7 Z8 H
% c$ b/ m! p- Q; p: A2 _, {7 Y
1 U9 k( x& d0 i0 r7 o) _% J3.x版本CRS% i, O1 C8 W$ F0 G. h
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
4 z. Q3 A9 r! G) l# 生成例外排除请求的配置文件
0 g# B# S5 F4 ^5 S) U" v w$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
1 |' ~7 |3 Q8 | G' ~, f7 s8 g# r+ T$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf1 m/ E" q+ P# @9 `$ A6 m: p/ W
$ cp rules/*.data /usr/local/nginx/conf
: }# \. p' g! G+ _0 e( q; h为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
9 J. i* ?# _( G/ y+ @( N! R8 Z
( @) X7 N7 B7 H+ ?& R& d. U& j
( }: `7 Y( ~# c- ?& P! G$ vim /usr/local/nginx/conf/modsec_includes.conf
. N6 G9 M+ L: P+ m3 M7 _& [7 _: P; [; E* @
[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
9 z8 r* |$ u0 ?' c+ U3 {2 M! U+ _* e' R2 D1 d$ u7 E0 M# X, t
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。. F) i J0 B" j4 n1 E0 e: q# H
9 m6 u9 N6 M7 O
$ D8 i7 D' P( A, x b5 @
配置Nginx支持Modsecurity
, h& b& p) S6 E$ u. ]* U$ S7 K启用Modsecurity
" k; _. l* ?$ m+ B2 W$ _8 `使用静态模块加载的配置方法- W' h( Q0 K9 T. i% }
在需要启用Modsecurity的主机的location下面加入下面两行即可:
/ |" C# v/ s0 q4 C; D1 u
5 V8 W' d* E7 ]& d. b# o
- c! x9 H7 |/ i! cModSecurityEnabled on;1 A5 z% ~9 u; y
ModSecurityConfig modsec_includes.conf;# r d7 n6 r4 f6 Z8 V
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
; Q- l7 A+ d9 S `
# [8 ~! r# F, Y' }! P
0 K7 K3 E0 K6 c3 `2 V" H$ vim /usr/local/nginx/conf/nginx.conf* t& `. ~7 z8 i# S
4 ~0 E9 ]3 Y5 w9 @6 N8 Q# ]2 [( J
V# @$ H7 z9 ]- Q7 r6 V2 gserver {
: G/ r1 I% N8 H% U listen 80;
5 r% U+ [) h* P- h server_name example.com;; v# s! A7 c) ^9 H
+ c' O" W% N2 m& `' o0 b5 r
2 s8 A, F( B) l: M& @ location / {
' q# p% R. u+ |# o ModSecurityEnabled on;
9 H) T1 Y4 d0 u! T1 \ ModSecurityConfig modsec_includes.conf;' D. ]3 S; f! z* {( i& l U
root html;
! _: p$ a3 J, v3 x( D* C2 S index index.html index.htm;
, F4 N+ U$ H: t8 W }
1 v$ }; _8 f; I: ^. T}
% ]: y' `* e& F* N( B5 j7 V使用动态模块加载的配置方法) O- [& I9 m8 ^# ]1 M
在需要启用Modsecurity的主机的location下面加入下面两行即可:1 {/ Z1 l- v" G
/ F/ A2 E0 L- E8 \( f
( O0 z( ~# o! V& F# a+ y4 }7 mmodsecurity on;
/ ~2 [) j2 O) d; x, Z9 S n9 dmodsecurity_rules_file modsec_includes.conf;
$ o3 G6 }; c2 x修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。6 M2 ^( K/ y# T m0 R! H8 O
$ B! S% U% s' \& R" b- d8 f
b8 w5 ^3 c8 O; J* v# {$ vim /usr/local/nginx/conf/nginx.conf) O/ H; [3 D! {! U3 |1 c
" g2 A8 \6 z, u! r7 F- I8 u
6 ?4 a) M' r0 p/ H: {server {8 o) e4 Y5 l. G. i( |
listen 80;
9 G5 D. F3 o& c server_name localhost mike.hi-linux.com;
) B( D2 X1 n N; b* n access_log /var/log/nginx/yourdomain.log;& e0 y' j' I. Y' C4 V! q
' V! Y; J8 [! f, h/ O
$ O7 e& G% T7 A( M( | C5 R location / {
+ x' d! o) |1 ~: q* T4 x; h, n. p% ?* u1 @
: C1 h: K& r5 v0 e. F! i% [ modsecurity on;
( \# `2 n8 r* z! U2 n) { modsecurity_rules_file modsec_includes.conf;
( X; r, T9 c; W' U! |0 g root html;
6 U# O) M, F- Q6 m index index.html index.htm;
4 @4 C7 V% |, C( C9 u! ?' ^$ g1 c$ N}! g- o* `' ^- y$ I) J u
}
. A) l! `$ E5 Z: N验证Nginx配置文件& f3 C& \0 t5 C, h
$ /usr/local/nginx/sbin/nginx -t3 g$ m6 I! ~9 S/ d) {
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok) W1 E7 {; R5 u: _
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful+ ^1 E3 F, u. R9 W
启动Nginx; N4 p2 v; n% |" R/ @2 R6 f
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf) M: {$ D. A2 W/ d0 t P" ?
! Z7 ^9 N0 o1 c8 E' r' R! t2 S
测试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能够战胜更多复杂/未知/混淆的攻击模式。
{9 }# F4 ]! i; r1 [* v |