ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。1 P0 p9 I9 l+ Q2 f( M8 J9 _
" {" e2 @2 S5 z- p o( o; d! S$ g
+ y* i/ n% m+ P% X a) J/ W( I在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
+ P1 B' v- Q/ V7 |6 ]- \$ Q% y% y& q
* W& c3 F% c: X7 L. v, b `9 X: {# c( p9 b6 }
什么是ModSecurity- z- B, O9 \ L# k" }1 [# R0 X
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。$ H7 r3 ~$ O! i2 k
, q. {+ C' ?) W1 Z. t
/ G% H8 C( w3 K3 MModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。& P% }" K L6 \5 Y
) \6 T, j9 o* L: e
5 F% g8 j, |' k r/ y/ h: W6 i0 AModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
% T3 ~* N6 h' P) O. l5 Q" P1 m! p! m# q% c
1 \ m# A6 h: Y: f# E+ C0 o
官网: https://www.modsecurity.org/' a! a1 E5 S) Y- j* r7 T
" M) a# H T5 h" ~5 b1 [
4 ~% Q" l; a& q) X. ^1 e什么是OWASP CRS
, ], G$ T. u/ G- W% OOWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
6 Q9 T0 N5 i4 m8 ^
$ b2 K7 [0 r1 W9 I" `; W8 ^6 b3 L0 q/ ?) G' d H
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。$ V/ u% U) G9 B
4 |% t, P2 K) j" L H. Q2 N; u2 g) W: l$ `
HTTP Protection(HTTP防御)
0 E& p9 B2 I5 [* m, Z2 BHTTP协议和本地定义使用的detectsviolations策略。! g6 \( O5 o9 E# J, F0 y4 k
# |) S8 y) P$ w: {
; n6 l6 q: G4 t4 H
Real-time Blacklist Lookups(实时黑名单查询)
5 K7 M6 m# h) [+ `1 z利用第三方IP名单。" E' e6 u8 ^7 }4 L, M8 Q) M
( u! p. C' u o- i: V4 w, l
6 p( E) F. J+ h4 R$ y! Z6 {' v% U7 LHTTP Denial of Service Protections(HTTP的拒绝服务保护)% R. W3 O. W% Q" f4 l
防御HTTP的洪水攻击和HTTP Dos攻击。
! F7 ^4 w: j5 o- s4 b: G! u
/ u& d) H7 Y7 l3 A6 q6 t6 {
8 C# Z9 N* y: V6 }$ [Common Web Attacks Protection(常见的Web攻击防护)8 b7 T( S9 E0 q# J( G
检测常见的Web应用程序的安全攻击。4 N# e% |) f1 Z6 _7 @ ?) G- U
1 t! P w' ]9 K( l" S- |
) {+ M$ u1 z& y; `# q
Automation Detection(自动化检测)
7 F2 \+ h' k2 {1 s5 S1 ?. L检测机器人,爬虫,扫描仪和其他表面恶意活动。
( e% g) r( b# Y2 C, T2 t. V' V f% i7 ?' z
6 B: I# p. Z* X3 L2 Y; F; mIntegration with AV Scanning for File Uploads(文件上传防病毒扫描)
7 a6 U. o; J+ `; W7 G" N# j检测通过Web应用程序上传的恶意文件。
" j, E" G6 t+ a6 w+ d
5 {# g, }) S+ W* T0 b
) i" d! V( w2 E* nTracking Sensitive Data(跟踪敏感数据)' s% T4 w* ^- W. `7 ~
信用卡通道的使用,并阻止泄漏。
+ j1 J% m" }* ^& {, p6 s" n$ T+ H# e b2 Q) R
; F+ s5 [" j M7 }
Trojan Protection(木马防护)) G# s& I8 F" M/ m% z8 n/ `
检测访问木马。
6 h, Q9 ]* r$ G/ {
: q0 g; ~4 ^* H( C ~+ @& a/ R, r# \
Identification of Application Defects(应用程序缺陷的鉴定)
9 B, V9 q/ Q1 @$ j) H4 s" l检测应用程序的错误配置警报。
! J# ^5 a( f" I" N5 }
' S H0 d% Y6 X' Z7 s- j- L- c$ j0 \. r3 h
Error Detection and Hiding(错误检测和隐藏)
! D' k+ X8 i3 K, L: w( z检测伪装服务器发送错误消息。
8 o5 J# ^1 N! Z" t) Q4 \8 H- }' o
- a, B' o2 ~4 V X( m
安装ModSecurity
+ X* h" K! m+ y3 l2 B1 R9 e$ K# [( i软件基础环境准备
b6 M9 b. p \0 I M下载对应软件包
; Z- A& P: r$ V8 V- h8 r$ cd /root
: k: x$ S# S& T( k3 v7 v% N$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'+ T% v# t. S8 }7 d
$ 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+ U R' _( t! B: M1 K! k: N/ P安装Nginx和ModSecurity依赖包) j" H( E% H- p( k* j
Centos/RHEL* q$ `5 \7 s- Y; d6 f# L
7 s/ _3 j1 ]+ K& k
9 R2 R- n3 f" t$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel6 ~3 N$ L' o9 d% q. v0 K6 ?
Ubuntu/Debian
/ b2 d: r/ s, z, x$ i# x$ L6 H, }! j0 E
/ D7 Z/ r( m1 n: O$ 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
: Q* ]. {- }: N编译安装ModSecurity
4 ]; O4 E ?( b) ]& F/ o! GNginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。, a" o2 y0 |8 W$ m
' x9 s( ^& ]" F5 W" K+ v
9 i8 S* k; v4 E6 |% f# x方法一:编译为Nginx静态模块+ u$ A$ A5 z5 N% U9 `0 @" T% Z$ W- t
3 C9 ~& d: H8 \$ n% s# n+ p% i0 j6 f9 s- q+ i# Y5 |
编译为独立模块(modsecurity-2.9.1)$ [( d. j v/ X5 Q0 K: ~
$ tar xzvf modsecurity-2.9.1.tar.gz
$ d. X6 Z" e, x; V- `+ N$ cd modsecurity-2.9.1/
! D( q0 r5 j( {# m8 z) p7 V* W$ ./autogen.sh- K( N% r9 o: j8 ]2 p* E
$ ./configure --enable-standalone-module --disable-mlogc
- y' E4 C4 d# r @/ U$ make# p7 d% F# H+ y' i2 l F
编译安装Nginx并添加ModSecurity模块
3 E. T! Y+ R' }! O" B1 p7 v4 i: |$ tar xzvf nginx-1.9.2.tar.gz: H' D% r4 i4 g' e
$ cd nginx-1.9.2
5 X. b6 ~- x5 W: Z$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
1 G/ ], F' a8 U/ n0 c( v; E$ make && make install3 }1 M' L% O I9 O+ Y/ r8 c
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
; z! x* U* g3 }" X5 r4 { R* X! g- u) J
3 L$ U; ?! x& I9 }! C1 q
编译LibModSecurity(modsecurity-3.0)
0 P6 @& A% Q R7 A O% I! l$ cd /root
( ]7 K' _8 f- `& O$ git clone https://github.com/SpiderLabs/ModSecurity
- W# l3 P% _: Q$ cd ModSecurity8 w+ w" r( K" L5 j6 p1 P7 D8 P
$ git checkout -b v3/master origin/v3/master
9 O9 y0 p9 T# D$ sh build.sh# A+ G! m, E7 L" q+ @
$ git submodule init2 {! i7 g6 T& g2 p
$ git submodule update% ^! X; n7 H: n& u7 ^/ @
$ ./configure5 o9 e$ ~3 f, g% S1 ~6 X8 \# F
$ make/ w# T( b* G( K, A; ^# R
$ make install+ |; M# G* X2 k& k( f3 M
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
6 |. y) W. c$ C# g; B+ H% J5 f) V/ p9 A+ r
% p6 C4 [% o& N% E$ m% x$ N
$ ls /usr/local/modsecurity/lib
" x6 V2 D& x% D# ?libmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.05 F, E+ t) q q$ _* |' j
编译安装Nginx并添加ModSecurity-Nginx Connector模块9 ?8 e" R& |% Y7 Q8 h
使用ModSecurity-Nginx模块来连接LibModSecurity
6 ~9 ~9 ^+ N' m* L+ H" P
- u: G; B- C2 |( A% C% I" k, |) j
+ U& ~/ M( l& K$ cd /root z8 [* A" \4 J; ^' P" E! ^6 }
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
8 Y1 P0 T$ f& G! g$ tar xzvf nginx-1.9.2.tar.gz
7 Q( V: b5 |" \- G9 l: R$ cd nginx-1.9.25 B1 J3 d: A5 x% U% _% ?. X2 B
$ ./configure --add-module=/root/modsecurity-nginx2 \! m* u& w1 p! F* t0 t
$ make
3 [: H7 r9 i/ V! c4 s* o$ make && make install
2 E5 N/ S* X% j3 T3 H2 }3 \! r% o添加OWASP规则
. x: C0 k# [5 D0 R1 hModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。9 H; O D8 E% }( Y, Z/ t" |
5 p: R; l% b+ a5 G& ]( P7 i' G0 f' H0 [" H
下载OWASP规则并生成配置文件+ ?" k+ o0 d& @% L
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
3 f, j/ p: P$ C6 { [$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/6 M% q3 P/ l+ ~6 d; m5 l
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
: [& B2 f& j3 ~! Q$ cp crs-setup.conf.example crs-setup.conf
0 C& L8 t( ~7 R% Q* C/ W配置OWASP规则) q2 e h1 e' E' O! p# U8 i
编辑crs-setup.conf文件1 e& |: s! ? ?9 c& M3 |
3 V4 R2 Q, m5 E
7 D/ J3 e" ` L4 \( y$ U1 _+ M$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
, H& w4 y( c% G2 R4 n$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf2 a/ c' D1 j& J" }! k: K
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf% Z+ I: M* [( n; T w0 ~( w- N. d* J# F; r
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf! Q5 { G9 v; S1 V, e
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
; m# z* e+ m6 P* \$ x Q
% W$ B( H* H8 o* e4 n" x
: g& Z; ?! z' _# @0 z# [启用ModSecurity模块和CRS规则
3 a5 V; t Y$ J8 X* q. w7 h复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。4 U5 x0 L! o1 H! r8 f0 j
7 n T$ f) P7 i& `0 \7 f. z% B. e t- |8 n: D/ L- {& D* H4 z! c
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。0 k! O3 V0 b3 Z5 I4 P0 o: g/ S
5 O# Q5 I; B6 E, p8 X C- E" t4 M
1 I6 N- k- E0 u& z. d" |
$ cd /root/modsecurity-2.9.1/
8 ~1 c, |1 [- X$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf / j8 A9 j# s9 L. P5 y
$ cp unicode.mapping /usr/local/nginx/conf/% I0 B; a& R" G7 {' s0 X9 O; t
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。/ I% F0 O. B! u+ @5 o. n1 m0 g2 m
, n8 s- V) b; Q0 ^% ^% p
/ q# p7 v/ n& t: k" ]: E- z' ~$ vim /usr/local/nginx/conf/modsecurity.conf6 b; _6 k) A* t
SecRuleEngine On6 t1 w1 `% E- y( T! t
ModSecurity中几个常用配置说明:
% J0 H7 I+ ?1 k5 c9 {3 c& E* a- n% i) x6 f. A3 L. }3 H
6 P9 S+ R* j. _
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
+ _' }) Q z9 x6 J- o5 `9 `% b
- {/ U4 E3 v+ f- _! W
# M& p/ B5 Q4 W& ?: K" q2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。2 t ^. g. Z1 _! i7 b) V( q
" f# ~3 O1 f! v1 L! I4 T& z
S$ j: F$ {- K4 n
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
/ l7 G3 r0 [6 A' g. `: Y/ X' ~5 B8 s V1 l
# O- V7 a+ c/ q2 q/ m& ]
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
5 U" \0 H( T) f0 |. x) ?8 l
5 N6 [( N5 i; s+ u" J9 r- F* M" X c* h
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。% A* W: L' A, T% r5 P
* K0 w* g! _) J7 n! T# D" u
1 v- Z% |4 r0 b+ e% F3.x版本CRS
( a) R6 J' y$ [6 }) f2 |$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
! B, _& A5 B' u' g a# B- ?# 生成例外排除请求的配置文件1 J9 S# R2 x3 U* Q0 _; z" [8 q
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
) x7 s* \; @: W7 J! y/ q. L6 H2 t$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
/ y! V2 R- Z4 f3 y( e$ cp rules/*.data /usr/local/nginx/conf! X0 M4 \+ Z- W; Z; ~, X' f
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
* h' C& G9 E0 t1 K4 A! r2 n' f9 e
5 l; [, J2 p! \( b' G0 w! k! k$ vim /usr/local/nginx/conf/modsec_includes.conf
! ~4 u; k: ?- @5 t* d9 O0 E$ h$ X
" u6 }4 F' h' s' N[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
1 I, l9 D8 J' K7 m! |
+ I9 G* V1 q5 x& U8 x$ j2 X注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
" w, k" \/ K9 q8 Q; {9 J K$ r0 C* n
4 p$ k1 U. e" I; d& A) |
配置Nginx支持Modsecurity3 z# @+ d7 d% U
启用Modsecurity4 w; s* c) w( P* S X
使用静态模块加载的配置方法
8 L6 C- {8 a) S; {$ D! `+ I在需要启用Modsecurity的主机的location下面加入下面两行即可:
. ]. O" x- G' z' b. e% g7 A% U
! _! x4 I! j2 E4 j6 r' d% |5 G, j* |! ~- }* C/ q- B: @
ModSecurityEnabled on;) w' b( o/ P6 s3 K8 r7 d( v/ g
ModSecurityConfig modsec_includes.conf;. }# m4 w* I- I% T/ I% a" Z+ }# M
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。* u6 f" w& y+ I' q* h: ^& @
& h6 x Q5 J: u% P
4 P ?8 A1 ~# }) n$ j$ vim /usr/local/nginx/conf/nginx.conf
0 G& q o4 S$ b) k& _$ K/ x' f; D
) _1 `* V' |$ ?. }4 e3 K" ~0 t+ A* w6 o0 T
server {
2 `+ M+ }/ V* f. J9 D listen 80;: r" I( H& y% u5 g; p; A' g
server_name example.com;3 K& c* J/ @" {1 z7 t
7 R" p( }" N$ Q6 Q8 F
8 y4 K9 u, z! t" k/ n0 ^
location / {: e3 x! w+ J; z) p
ModSecurityEnabled on;7 Q$ j9 b6 D$ u4 i6 R% F4 B# q1 M! N
ModSecurityConfig modsec_includes.conf;' P A1 J) N' F5 U
root html;, F3 x; x( g# [ m
index index.html index.htm;: u' P& o/ ?( ` u( c. K2 B
}
2 Y- W" t8 p) W3 i}
% U6 p5 a$ D% X+ w! f- a使用动态模块加载的配置方法
2 e: U( z1 [0 r, g在需要启用Modsecurity的主机的location下面加入下面两行即可:& q, x* q+ f& W0 B" k. @
9 d. T4 A& h4 X% Z+ W k
/ e7 ], s; Q7 bmodsecurity on;" B8 y3 P& p4 t
modsecurity_rules_file modsec_includes.conf;
0 x' o; x4 ?/ I3 H' D; J! h修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。, t9 {# w3 J' P2 B% ]% I( `
+ q2 z4 b, W4 I4 t: ^' R6 ]
2 d3 ]/ w; b+ X- [
$ vim /usr/local/nginx/conf/nginx.conf2 w& a! j& V5 H2 C' q* G: A- M8 R3 E
3 g7 C8 H- ^5 h
$ l; k# H: ?( A
server {- G4 J1 Q. n5 c, I) I% i" B
listen 80;
- X: S! S& t8 h% V' N) u server_name localhost mike.hi-linux.com;* M+ D' r8 v9 W1 Y- J* b' S0 I* M
access_log /var/log/nginx/yourdomain.log;
5 ^; G* q/ S) [- {( K
7 K5 L: r# G6 |5 {! f' t7 ~& c" V" l+ q9 Z! Y! T
location / {( y1 N; g7 [+ `! w% {5 r7 o7 W5 ~4 T
' X: j! V3 T# w
$ k, m' f& l6 i+ Y# N. W6 h. L modsecurity on;# `2 d; V) Y8 t6 j! S
modsecurity_rules_file modsec_includes.conf;
/ ~5 g3 x/ u: Z$ p+ f" W' K root html;
% |4 n! x" J/ b. ]8 Z1 E- g4 F+ ? index index.html index.htm;6 U3 F( }* V" ^' \# i; o
}
8 v; }$ W; R: Q6 ~$ _}' w8 L* O% a# n& @4 y O& H
验证Nginx配置文件. A& h2 {# A8 q5 {; h7 d+ V& h
$ /usr/local/nginx/sbin/nginx -t
1 J+ e, I% X; ?7 qnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
( Q3 h' R: y& \/ R$ Qnginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful3 `5 K$ F; @; n! G3 y) v n, y
启动Nginx
( W' J; w# S- Z a6 I" {, g$ F- F# H$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
$ z& e4 J% B8 n* P5 [% W2 G; I8 o% s2 Q% V, f# w
测试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能够战胜更多复杂/未知/混淆的攻击模式。 : w$ {0 r: E& `
|