ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
1 j" D; V, J1 n3 q9 O. x5 i7 P% p3 I& ?1 ]' C" v1 P% X4 j* z# v v
6 U: S& j3 m1 u. k$ r5 t+ {
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。, ?( z, s% L( a! I
/ W; O2 k5 t- H
: ^7 U. C& z* E+ @) Z8 ~2 @% G! y什么是ModSecurity# A# l, t) C- y! W6 B# n' w; m
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。" S+ ~# Y f* V% M: \
) W! G6 }4 b5 u) ?3 k
) I# l; Z0 E5 V# w0 |ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
0 r7 P0 W/ `! B5 J1 K/ V, U u A* J
: L; A0 M- D+ s5 m% s9 S) B9 a9 O( X7 K( K3 M, `
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
B* e% z: b8 A# Q0 j9 I
* b8 w: j6 |* G Y: q& @" ]' u1 \0 y! W8 j' I2 A; R) C! N4 e
官网: https://www.modsecurity.org/: S- Q( e$ I1 |$ t
, }$ D* r7 {. t) |9 h- L% K
6 p9 p/ ~9 q9 v6 X& Q% H
什么是OWASP CRS
3 p5 A# x# ]% V, mOWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。+ l! |, ~& G$ s& ^$ A8 k, _1 n
, ~5 m Z1 Y; A- z8 I
+ T6 q6 i& J" F+ fModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
8 K4 p; ^, r+ ~2 ~& \
1 q7 I$ j s+ {' C. y* _ P* l. {9 y, ~; Y4 J; x8 g8 V
HTTP Protection(HTTP防御)$ l" x- f: @' c( J
HTTP协议和本地定义使用的detectsviolations策略。# ?( z4 [' {7 J, G* W
( z8 g6 f* y' ~( k, n
- h- j$ M0 r1 Z. o" V
Real-time Blacklist Lookups(实时黑名单查询)$ s9 l; c: ?" V [8 s4 o
利用第三方IP名单。
7 z; h& j7 Z5 P- S, _9 y6 g6 ^
2 Z* [5 h4 L4 ]! m2 J; \* S' f# l t7 b5 p* W$ H. n# a
HTTP Denial of Service Protections(HTTP的拒绝服务保护)
6 s' o: Z* \0 H& b# E防御HTTP的洪水攻击和HTTP Dos攻击。
3 v8 G/ z9 I/ K$ g+ n1 U
. s4 D/ w/ D6 p: q& d# h0 O: i
( m4 x) |* X1 N2 \7 {Common Web Attacks Protection(常见的Web攻击防护)" s0 y- \9 E) v# ?* b
检测常见的Web应用程序的安全攻击。, y; K% v4 d/ g' K& ~
* e/ |; P3 d3 e |
9 J1 c' { _3 r, \9 I/ ?# s( W
Automation Detection(自动化检测)) N+ l- O$ Y( K0 Q
检测机器人,爬虫,扫描仪和其他表面恶意活动。% I3 k2 P; B+ j' p1 R* i) A
1 D S) D+ S6 H9 o7 @3 P4 J1 u* G) m; I! _1 }% t2 _6 }
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)
+ o# g3 g# g2 I检测通过Web应用程序上传的恶意文件。& y2 c1 I5 t( H5 j6 C; v7 T
% ~! d" R4 r. h# |: {0 l. p
: g- C- c% o9 }: mTracking Sensitive Data(跟踪敏感数据)
, d' P3 C, f9 B" q信用卡通道的使用,并阻止泄漏。8 Z& D3 e$ w) `8 T
" g8 y$ ^4 ], e, B" d- P" R; L3 q ]0 S: h8 _/ E
Trojan Protection(木马防护)
! Y; [/ Q! R8 ]检测访问木马。5 P+ o0 T: b- b
* a" }! y$ O) |1 l/ x+ j* Z0 T
' R0 q' d# [; n# Z+ ]9 _" cIdentification of Application Defects(应用程序缺陷的鉴定)8 F% R) J' `/ _* R) F( `
检测应用程序的错误配置警报。
$ ?. ~% V* B5 _3 K1 w, Q
( E1 u/ M% y- K* Y7 s" @2 c7 G: D+ T& O
8 ~ Y. O) U3 R3 X0 ]2 bError Detection and Hiding(错误检测和隐藏)' R0 }4 i# a$ I {+ f
检测伪装服务器发送错误消息。5 B$ E; y4 R4 }$ J8 p5 W! S. ~
4 s8 @2 }( V% s1 A) Z- O# E. [5 G% }! {" g
安装ModSecurity
+ n0 I$ H7 e% B- C1 q* ]& g) T软件基础环境准备7 s1 w- n+ S$ Q6 E. f. _
下载对应软件包1 }' ?; [: }: e5 S" L
$ cd /root
: \& _8 |) z% b5 c$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'- p/ J. j; F; U e
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz' }# Z, F8 k5 R
安装Nginx和ModSecurity依赖包& ]0 W3 l1 ^6 I+ q2 k) r6 ?' \
Centos/RHEL
, `; [8 ?; P/ A& d( W9 K. o/ V) M8 N3 A9 t
( U" S- N% q" Y
$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
1 a! S4 f. ~! c* x6 t' ]% {Ubuntu/Debian4 @" S- b: N$ w: N
+ L$ K. k% v* P0 f! z4 X+ U$ T6 e1 v8 ^; K6 k
$ 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" B7 I: y+ B3 p# V
编译安装ModSecurity
& q$ B4 ?% w6 V" s; @Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
8 ^. ~. K9 \9 [3 b0 P. d3 ]+ w. Y8 l2 } a( b# ^
3 b+ l8 k0 r( Q6 J6 v3 p" p9 q, c方法一:编译为Nginx静态模块5 c5 z4 _# X/ Y4 K6 {( e
7 x* K! }' ^6 W! ~+ D
. D5 \8 T/ d* K编译为独立模块(modsecurity-2.9.1)- Y3 F; p/ k( g5 y& i& [4 F3 I
$ tar xzvf modsecurity-2.9.1.tar.gz% {2 ^3 Z+ L7 V. Z9 P, O6 `
$ cd modsecurity-2.9.1/ Y6 g0 h+ y3 ^* ] c3 F
$ ./autogen.sh
1 I) I( M* j# c: D( U( |$ ./configure --enable-standalone-module --disable-mlogc% s+ O( H$ ]& p% s! `& v
$ make3 R& G B4 A8 _# D' [
编译安装Nginx并添加ModSecurity模块
' J( Z7 j, f8 B* O2 B* E, Z$ tar xzvf nginx-1.9.2.tar.gz% Q; c5 h2 Y0 ^+ P$ _
$ cd nginx-1.9.2
* E. ~9 t. ]" W0 S/ j$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
% E: h& Q" P' x/ B$ g8 `, }2 v/ I) b$ make && make install# O3 m* X x# L5 P: L$ d2 E/ h
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
3 i& l3 q& o1 K3 z: ^4 h- m6 {9 ~% z5 x
e" H) _' @0 V! M编译LibModSecurity(modsecurity-3.0)
% ?( n6 V0 \# U" B$ _ N/ t$ cd /root6 L' G# m- B: n" x7 y7 r
$ git clone https://github.com/SpiderLabs/ModSecurity4 \2 U$ T. E3 b) N
$ cd ModSecurity
4 \7 j+ ?4 n/ P! ?, ? g* Q6 Q$ git checkout -b v3/master origin/v3/master
& O& A# H9 \* x0 h9 U& k% c' r$ sh build.sh# {5 E! N) g1 L* }& }6 Q( Z
$ git submodule init
) K, c8 h( [& m" M6 A$ git submodule update0 F* y7 Z! y* ~# A3 _7 e9 c
$ ./configure) @7 g0 Y. g% C' O" ]
$ make
3 P5 g2 {' @( x) K7 ], v6 I$ make install
1 {+ m) i2 [; N `! V' j mLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。( S* E( u( ]" y) l& q. g* P
! Z. ]5 [7 z, a3 ]
" L7 n6 }* A# v5 ~
$ ls /usr/local/modsecurity/lib
1 A- Y, B4 z9 f3 blibmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0! @+ j( a% {$ q% q
编译安装Nginx并添加ModSecurity-Nginx Connector模块! n- q( G7 _0 {) S! p9 P2 D
使用ModSecurity-Nginx模块来连接LibModSecurity
4 D- t( d3 S ^3 {0 T6 Q2 ?* K5 v. K a1 Z- R; F% u& W
" I; M& R- V8 [+ s1 ~
$ cd /root
# S* F" j! ~. o4 B1 E$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx" U0 W- w5 @5 L2 ?% o% \
$ tar xzvf nginx-1.9.2.tar.gz2 ?/ K8 k3 f/ G g2 _
$ cd nginx-1.9.2
6 A/ h+ z# e4 D$ ./configure --add-module=/root/modsecurity-nginx$ R0 j7 i, c- E7 R4 V* }# y
$ make e9 x% \, s- g+ R5 j( o6 h2 E: l3 i
$ make && make install
* f! g2 k/ Q& C) O* x9 E添加OWASP规则" o1 j5 j. {5 E) e4 i. x1 f9 O* v
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
" J! H( I: b* v: b& ]* O! _& r, M6 s3 C4 q5 q) Z2 _
' n+ w" a( g, z下载OWASP规则并生成配置文件
/ N0 }% j. I$ M8 J# m$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
$ q8 P. n1 p) m# i% Q$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/# L1 [" \% u) q3 G2 t8 B+ h2 v2 p
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
+ E* r* {! t& _2 k; ~+ |: v/ u$ cp crs-setup.conf.example crs-setup.conf; D4 n0 s1 D) l3 L
配置OWASP规则# O$ q( o9 _ C+ K
编辑crs-setup.conf文件* n& ^; a! F6 E8 P4 A; ~; \9 E
N! S# q, Y2 T, z
. h# ?; e& h( x, m$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
7 V* |; M5 M" S9 B3 ?5 c$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
! o9 o3 K, A+ y7 A6 W& `) ~& n$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
8 P/ D1 \/ I3 |7 r$ [$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf4 ?" j' }+ l. v$ h- T/ R: t
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
2 Y* V( W2 w' S# t2 F- t- `7 P0 G" W- y2 W+ W
8 ?5 o w, B& `& s* C* ?启用ModSecurity模块和CRS规则
, d- t6 I* d+ t: K( O6 E, E复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。! M0 {7 b3 T6 r$ p$ ~/ j: X
: I! ?2 }8 Y3 F3 X
- u5 o/ I8 u. ^ T6 V4 cmodsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。; E% P) r t. E6 O
; ?, r# h8 N4 F* \! j" o' {+ d( ^$ @. i
$ cd /root/modsecurity-2.9.1/* y) O/ M) Y! _9 Z9 O3 T
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf ) m6 D) V+ G5 D$ t; r5 M% S
$ cp unicode.mapping /usr/local/nginx/conf/3 O5 F( e6 T9 I; z
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。& Q; U2 ]; F; b" E
9 W0 W* _. g8 {; T- i$ h1 y- B
/ O7 g/ [+ j) b$ `% ?& q$ vim /usr/local/nginx/conf/modsecurity.conf! T# w3 a4 J# r( g
SecRuleEngine On' \8 q6 p2 v# i! @
ModSecurity中几个常用配置说明:7 y* U) W& w5 n1 o" b/ `
1 f9 A- g" i; q' y
6 i8 v# S" g' h7 h4 ?2 u& Z
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。 N4 K4 N3 v* g( F
0 f" @& o: U9 e
; O4 K& d: S2 M5 G5 d2 Y+ q2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。7 T' h9 @4 ~/ ^$ L
' S) X, `, P/ j4 G# L h
* \0 W$ W4 p# m, N& t3 i
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。: y: r7 [! m* a; Q/ M0 F
7 E R7 b/ s6 H2 R' K9 m' z8 M/ u& j2 w: ^4 [( l" u
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。+ J4 y% V, B: X. L9 S& j! o2 J
! _; q" K7 l k9 n9 b3 A" L/ o2 G, n @( o) d. X) W$ |
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
) h! P6 X! n2 y. X: S% b6 K" f. K" u3 M1 P" X1 S) w
9 x! h) Q. A! `( q, `3.x版本CRS
2 c6 i* w6 U$ T/ ^* s$ cd /usr/local/nginx/conf/owasp-modsecurity-crs" O' ]0 ^9 G _1 R6 N* G
# 生成例外排除请求的配置文件: M" N0 |; A2 G2 ^6 n/ {7 E
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
4 n& V7 O* h9 I$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf" d( ~* K `. `
$ cp rules/*.data /usr/local/nginx/conf
/ m g/ T( z5 O' G0 k3 K- _为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
9 ~: c- C' g# d! c& z7 d+ D. s
) X% R3 ]* ], n, M2 U4 B3 t: ?; [4 M: j* c' k5 K& ~2 I$ S' ]
$ vim /usr/local/nginx/conf/modsec_includes.conf" f! Q9 E5 d4 l8 E; X
3 `/ M6 R+ L9 B" @' n( y
[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
) M; A& R- R9 g% H, u& A# o: i: m$ S5 f6 m3 ^1 w; A x" p. }% ]
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。7 D2 u* D: c( n! W$ U
6 P0 F" }$ o, S; l4 A! T6 y9 r( F
+ g7 C% T& p, j4 a配置Nginx支持Modsecurity P y- r5 \) G: w
启用Modsecurity! _9 I: |/ D& u% W
使用静态模块加载的配置方法! C4 D1 m: B" w3 q Q( L9 f
在需要启用Modsecurity的主机的location下面加入下面两行即可:
. C7 A) @$ Q' S' j* B& v& X3 n+ Q
, [' }! n6 O& s
- V* T( j7 H6 `+ u2 X2 ]- }7 t) L7 BModSecurityEnabled on;/ Q9 c5 X- N2 l( U# `. o/ @9 t7 c
ModSecurityConfig modsec_includes.conf;+ i0 h7 b/ D, L
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。" P9 J9 }6 {# g3 _0 U
2 r% _8 j; u6 h0 |
0 {# [, Y2 o7 R. W3 R4 z$ vim /usr/local/nginx/conf/nginx.conf; J3 R9 u7 I, ]9 v+ B' c
: q6 r E. V0 X( w. ]: }
* t% G0 i2 P" {- |: N
server {& z( E% j' z; d3 _. S
listen 80;
* i+ H1 E2 t6 T2 ~% C server_name example.com;
, w7 r% S* U. b$ e$ I( j; d5 Y5 J* l8 q
- Y- Z0 }1 l7 Y1 z2 ~1 o7 B. |( ^
location / {, S$ V- F: F$ F% A6 G9 H
ModSecurityEnabled on;! W8 D* N' f! P
ModSecurityConfig modsec_includes.conf;
8 D5 P4 ^* c* ?; e8 u8 Y root html;
) \' f* s7 A3 b, B* {- Y7 y/ e index index.html index.htm;8 |0 i8 g8 H" A+ `3 p, h/ j9 ]3 r
}
: g2 G v1 P& q8 A% m T1 T. P0 `}
) n" M/ j) R3 N# a# \/ n6 F R: m使用动态模块加载的配置方法
- v+ m. ~# Y" @7 L+ U- ?8 n( n在需要启用Modsecurity的主机的location下面加入下面两行即可:
% l4 h8 d5 d0 X7 Q) W* {7 u5 `$ l
& f. \: i# U c* t6 c) G) w7 b+ t8 a# R, |1 J. {
modsecurity on;; m: W/ f+ N i* u
modsecurity_rules_file modsec_includes.conf;
! J( p/ _. q3 P5 z% q2 ^( S修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
. m. q& y5 ^ y [% O& v9 v3 R
7 z: v% T% r' X6 j" ^0 {. V; } L
5 w6 m `, A7 ~' L6 m7 H/ v1 q D$ vim /usr/local/nginx/conf/nginx.conf
1 W6 h- h- W, V5 _( f3 f8 E
X' V+ L% E$ h9 K6 N- _0 [ q: v3 J, W+ t, Y* G# w% y! q' Z0 b
server {
6 g C" C0 {& H/ r listen 80;8 w0 o7 {7 F, V/ C
server_name localhost mike.hi-linux.com;. j7 Y+ s' i5 b) W$ X' e6 E
access_log /var/log/nginx/yourdomain.log;, k, l% O3 X1 e8 a7 w( i6 n
* P& L% Q4 Z/ G2 l* | N Z0 M
, C/ Y% D: F$ s6 Q5 w
location / {
' W+ J; J3 M7 U: i Y9 {3 A" t+ p( C& i, H
; K: `/ W2 y* U. A0 T0 c modsecurity on;7 P+ H) j# V2 ]8 Y
modsecurity_rules_file modsec_includes.conf;
0 @" u0 h3 \+ W9 R! ~# G. l root html;& A6 M5 }% Q% R1 r; ?9 v) _' k
index index.html index.htm; Q# F& [9 B% ?/ u( @
}
$ M" y( M8 ?2 ?7 G$ Q0 D& ]0 g}. `7 ?2 r' a; Q* s' _, ~( k. n
验证Nginx配置文件' p, B% \7 _( D; T0 a6 r7 Q
$ /usr/local/nginx/sbin/nginx -t; D2 A _) b6 n* f
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
1 I# k: {4 d7 P: G6 ynginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful) {2 V7 |7 g) e' K
启动Nginx
% r& \9 ~& Z+ e4 E$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf9 {0 l5 H1 p% J
) f* }! q ^) O4 |' P8 c6 _
测试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 a6 s: E# {3 w0 F4 s5 C
|