ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。! n& o% N2 b6 p& U
$ K1 C8 o( G, K* b( E% y8 { y; O/ m
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
7 F8 F8 z4 i7 D( m8 @* Q* Z: f, {
2 a8 q+ O( L" T: A& Y3 ]
# |( x" g$ G W6 [! D, c8 A: _什么是ModSecurity4 v& M7 ?. W/ O; p9 U
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
2 P b9 h8 E ~1 l. [' I p2 x
- q1 ]0 C5 g% T! ^4 S
1 X9 T' a) v Y1 T# a, qModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
: U2 X1 P- b4 V6 N6 ]+ W
{! r" M. R- Y7 y% @9 U
( o% j- o+ j( ~# E FModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
! A0 N% r: k C7 ~# ^4 h9 ?1 ?8 M7 u
/ g2 ]- F3 j+ H+ U* _官网: https://www.modsecurity.org/0 n6 x- ^' y2 i6 C4 `
6 j% ]4 C, M( L2 X3 W5 W
" }# W( X3 H3 R* Z8 c
什么是OWASP CRS/ f9 y8 E; s8 ?& i7 ~, d
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。& x; p4 @6 E4 O* S
+ p! H7 X1 I1 X2 D) }. C0 ~! T0 y8 W+ e* y
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
6 Y- j) U5 ^2 J2 Z7 D k
8 S5 m& a6 U2 z5 k$ s& }: u9 }1 e
HTTP Protection(HTTP防御)/ r# ~: V$ t/ `4 z X/ o9 {" x
HTTP协议和本地定义使用的detectsviolations策略。. A' [) e/ S. t4 b
+ Y# t) ^9 K3 ~# A/ @
+ T: p6 w) z% L+ }Real-time Blacklist Lookups(实时黑名单查询)0 u! c; F7 T- Y2 I
利用第三方IP名单。# K7 g2 @5 c! F- ~: [, a* A
3 v0 G+ ?0 } q8 [9 u6 X z {
5 ^; j! ? y- B$ H+ n* _1 n& F0 u
HTTP Denial of Service Protections(HTTP的拒绝服务保护). m; C$ P t. a# f. B6 Y
防御HTTP的洪水攻击和HTTP Dos攻击。
$ e& H: g( I" L
7 Y9 e& k. g) t) d2 x6 K$ C6 |5 w7 F" I5 E F$ d% w
Common Web Attacks Protection(常见的Web攻击防护)
( z& e6 Z, E4 P/ }6 r3 U检测常见的Web应用程序的安全攻击。' L5 \- ]6 }' f7 K
0 ?: z) D' L) B8 {: @9 I( M! [
% \/ }( _; {# e# b9 q$ X$ |Automation Detection(自动化检测)8 u& a1 `6 J& D6 g+ ]% f
检测机器人,爬虫,扫描仪和其他表面恶意活动。) q' z1 V$ W8 F4 q- i1 j( u. M
b' j# f* q! s o7 B. V7 M3 Z* v. K% ~( X4 f
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)
9 F$ X! m+ _; Y' s( R9 j检测通过Web应用程序上传的恶意文件。' p9 v' D9 _, c
1 A+ s' N U$ U: @, e' B
. ]8 q: M- g; K. b. i( A* k pTracking Sensitive Data(跟踪敏感数据)
+ f8 o6 p. _# V7 S; b+ r# f信用卡通道的使用,并阻止泄漏。
5 Q, h' |" [/ Z4 W/ G5 Q0 D2 S3 W* P* |. z% c, U% ]* Z( ]
{5 T4 [+ @. u, t2 X! F2 H
Trojan Protection(木马防护), K; n. Z5 N9 h* Q
检测访问木马。
4 P: C0 X: T* j5 N+ w) ]0 t/ Q1 `) p9 N4 M
4 V4 ~$ c, }7 }! R
Identification of Application Defects(应用程序缺陷的鉴定)' v4 |6 i' E. r8 J$ N: N
检测应用程序的错误配置警报。$ p5 g1 B4 f& `
0 ^7 h( x! n; y% h; D+ O' I) p& w
N/ L+ P" ^4 N1 Y, \
Error Detection and Hiding(错误检测和隐藏)
* m' v0 p' J Z" S# S* a: |( Z检测伪装服务器发送错误消息。
) z0 @' M% J. A/ I5 T+ n# I/ S6 |) A6 v" l$ Z' L
+ G: t/ M( m( D$ |( s4 l
安装ModSecurity
7 J Q$ Z: W. ~0 Z/ b软件基础环境准备- d- K/ a+ n2 z6 J- S
下载对应软件包' o& y z2 G% |( u- _
$ cd /root
' U3 a, f) b3 | n$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'% {% @# Y) M; @! G8 ~
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz
M( a7 t7 J* v% b3 g Q安装Nginx和ModSecurity依赖包$ O3 B8 p* d4 ~( [% I- J
Centos/RHEL
( n4 R- `6 z- V {7 ~* D. X4 [! U' }3 u8 h) Z# T! R
0 f4 B c" c$ V* m8 c y$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel( H$ z1 M4 G9 {( P# G
Ubuntu/Debian* W: C3 m) C" z9 R) p& S1 r
+ K* R* x3 i2 g) H! F: }9 c2 P
0 k+ ^1 i9 X9 }: v7 X8 V- F& Y5 [$ 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& @% W# E! l) g X9 E$ R! W
编译安装ModSecurity
! R; I" K8 r: b5 N+ R5 O0 }6 |Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
, i1 l! _: a% b8 n5 G) S7 u4 z; y/ n$ E* H! G
9 j' ]6 m, K) w0 C( k# Q8 d
方法一:编译为Nginx静态模块1 h1 v6 K! b. n3 |2 D! D0 x. Z( p
& E" A' \; ~; p5 b2 C2 P; `5 u/ U( R) v. D' ]5 _
编译为独立模块(modsecurity-2.9.1)
) e0 `, b$ `* D* N0 x5 D; q: [/ w( Z$ tar xzvf modsecurity-2.9.1.tar.gz" H$ u- G8 ~5 m- y
$ cd modsecurity-2.9.1/( J* Y, [& a% N4 L1 Z- k& B( D: j
$ ./autogen.sh
8 l0 u: h* X" w( Y$ J2 L2 e4 z$ ./configure --enable-standalone-module --disable-mlogc; m, F6 M B( p Y; G9 j* f
$ make4 D" j' j$ {. M" {8 Q3 W' x" M
编译安装Nginx并添加ModSecurity模块
# h9 g8 a: {5 E- U5 a: \$ tar xzvf nginx-1.9.2.tar.gz' k3 l: ]* {! N5 f
$ cd nginx-1.9.2 F% o* @( c6 D2 w" F& R% A0 j
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
" C3 Z9 \) E/ m6 z; b4 p" t5 ~$ make && make install
: ^/ G. y) c4 Q* [方法二:编译通过ModSecurity-Nginx Connector加载的动态模块0 x; r5 V$ I: h* W6 ]6 e
/ T! W" h* d% W3 G# }% f" _
5 b/ y; |" S. ?% _编译LibModSecurity(modsecurity-3.0)
/ R |2 a8 g4 T& e$ cd /root
) U4 h/ q5 z* M+ D% c) e$ git clone https://github.com/SpiderLabs/ModSecurity5 Q6 ]6 p4 c# Y% \% a
$ cd ModSecurity* P! R4 n0 A \
$ git checkout -b v3/master origin/v3/master
7 S& S" e0 g2 u D8 A8 W$ sh build.sh. W5 ]" Q3 d7 ^) I+ Q
$ git submodule init# t7 p: F! I1 t
$ git submodule update
: d4 s3 E: T& x0 W8 `$ ./configure
# A9 X `) o6 a1 a" [ _4 E$ make# P. J4 X+ H/ c3 g& C; e
$ make install% v$ _+ _# t0 O: v5 N' D; D
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。2 W) c$ b4 [1 o4 Z/ L0 a
1 T7 n5 C* V6 }5 @+ j
5 o# ~& _) H/ D3 b2 P$ ls /usr/local/modsecurity/lib4 B" {" M# Q* v! `7 y
libmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0
) B5 U0 q! j4 B$ i编译安装Nginx并添加ModSecurity-Nginx Connector模块
- q. X! B5 }' G5 M使用ModSecurity-Nginx模块来连接LibModSecurity
# U2 m# @8 d0 l$ y0 |" [! {
" ?8 ~7 c' m" k2 y2 h7 D# v. m! D5 T' e7 E% v& B
$ cd /root |# R+ W0 F: c0 o6 q
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx& d' s4 x2 r+ D: ^
$ tar xzvf nginx-1.9.2.tar.gz: K/ ^+ d5 c8 n7 C' R' @ m% g$ x
$ cd nginx-1.9.2; z |( ^. |7 ?2 Z" s" V- | P
$ ./configure --add-module=/root/modsecurity-nginx) T4 j. M9 @ V$ ]
$ make
7 v) e2 z- q8 K o$ q$ }, L& S7 d$ make && make install& n* v) l+ D* R$ F1 x& \
添加OWASP规则+ ?) D! W. u+ T0 K0 Y8 [2 p
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。/ ~% D$ ], v8 f( g7 ?2 `; @
3 r. \) T- D( R, T% H7 x, M
; F/ m8 r) a" G, O I: w' C下载OWASP规则并生成配置文件
! q ]9 V: |8 D+ p b$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
: k* l9 l6 Y* p2 Y. d4 n9 q( \/ d$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/
; j; F5 k/ I' X3 t$ cd /usr/local/nginx/conf/owasp-modsecurity-crs, ?" A) ~+ c8 Q: j/ V0 _
$ cp crs-setup.conf.example crs-setup.conf ] c5 ?$ ]8 D& t
配置OWASP规则2 k: g0 {( ~( w2 @. E: Q% b
编辑crs-setup.conf文件
9 L3 h3 _2 }. P6 w! X; B- t5 Q9 G- {, O
0 C. Z7 n1 }+ ^/ {: b$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
3 Z+ N8 s, B3 q- F6 L$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
# X# o2 y/ a9 k# I9 A$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
- w2 d s% L9 ]6 N$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf9 v. [; t( B# Y9 }; H
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
/ f- x: {, \8 _0 B, }5 u) J3 B+ e0 n( k2 |3 ]# _
; U, T c6 h4 s! ~
启用ModSecurity模块和CRS规则
# A9 }2 g8 o8 T( L G复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。) P% H, s3 ?. N* E9 a1 |
+ U$ r7 c) f; [1 h
0 i# R' B& v' w p5 B: p* ^; {modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。4 a+ W2 ?' D3 [0 \9 m9 [/ n0 h
: u: Y+ s/ p. a: A# z* V: k: Y; H' E, a P E6 b: n
$ cd /root/modsecurity-2.9.1/% f: v1 Z6 b3 ^+ q6 \8 k; t
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf 3 y$ A x. ]2 ?- { I$ e q# m. e
$ cp unicode.mapping /usr/local/nginx/conf/
4 V: h' c. T9 ~4 W& B将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
8 `2 h9 g% ^) H5 e7 b7 G5 k( ]9 b R7 e f* U0 H. c! ~: K
( H5 i- F8 @3 g0 d- p$ vim /usr/local/nginx/conf/modsecurity.conf
# r/ {+ m0 M' ]; RSecRuleEngine On
! D, m1 O3 l# a; W& `0 o% @ModSecurity中几个常用配置说明:
' T5 f# Y( g+ {3 O# ?
0 I5 j: k Q* O p" K: e4 d6 Z a
" i0 r) ?9 i" w% r7 w3 @. v1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。! X. c8 {; v, l3 [( p6 h7 X! @
( V, s/ }/ m4 x3 w& ^& s0 @# E3 s6 }* Y" c' v: s# h
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
/ `8 D3 f- d" @
* V6 |0 b: ?4 i5 v
9 ^$ _4 e5 \/ }$ U \3 g' C/ w8 u2 r3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
: R3 _$ Q* V/ l8 f" j
. K, @$ G& x6 k; R
3 J$ [, h5 x, M! G7 U4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。& s. B7 R; i" j1 Z& |% ^
6 d+ s- b3 G0 \: e6 n i6 H+ U. b
0 `4 N* y3 w j在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。% d! O) V/ i- ]0 M
! I3 P, T, _( V) @8 k; w& Z- s$ Y
0 d- p! E" p( g9 f9 M& t8 C6 c
3.x版本CRS
2 |, G- f0 k8 R) t5 \- n$ cd /usr/local/nginx/conf/owasp-modsecurity-crs2 O9 ?; k7 |! N; R
# 生成例外排除请求的配置文件# y6 t7 L! g$ w: Q7 z( i
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
/ q+ _) w" B" \3 }! I+ G$ M$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf1 r( j( L# x9 A
$ cp rules/*.data /usr/local/nginx/conf
0 A" z1 o; e8 Z% ~为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
: |) p9 N; Q5 M" j/ |
8 ^7 Q Z9 ]. x( m+ d! ~
% `% T$ z& `- l. D- k" z$ vim /usr/local/nginx/conf/modsec_includes.conf
# _. J4 ~3 X5 b* m. ~# D) |2 | T( E8 Z. {6 }
[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
4 n! P+ y8 P: V5 ]: \" C' H
! y& P, }3 {2 L5 ?注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。; I& J- |0 y+ h: Z' k$ E
8 K( G) C6 M, P3 P+ A# ~3 s2 }, V) c: v& M2 _3 b' } H: g
配置Nginx支持Modsecurity" Z O$ A. m" Z$ t! v& |$ _& ~; {
启用Modsecurity
# a. v& ]/ Z: {* P( P9 M6 W0 c2 f使用静态模块加载的配置方法
3 B/ s) o H# C在需要启用Modsecurity的主机的location下面加入下面两行即可:% ^/ m( _ f0 H$ q8 J
6 t6 D9 J! [, i1 L3 i2 Z1 b5 g1 ^
. Z: L4 Q. R, X- v# ]ModSecurityEnabled on; c$ }& G$ R: {0 O$ v( }. c
ModSecurityConfig modsec_includes.conf;
5 ~; h# ~9 k w- f, T) o7 f2 `修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。: k& ^, A) Q% C) I
9 s/ K, N9 r3 K1 ?
( n) d; @* ^% X2 N
$ vim /usr/local/nginx/conf/nginx.conf) U) q' E. |2 U; F* t p* I% o+ r: x
( w5 B( k6 J0 J" ?' I% u4 ^! t7 \
. y4 U# x" d9 U' i1 q- sserver {& w& ~4 Y: M+ _# X. n" J0 H4 }
listen 80;( N& ~7 c r ?( ]+ j: A" d
server_name example.com;
5 Z+ P5 T1 g, C& ^: b. v
. W2 A" {0 k K' o$ y! f# O' E% [- r: H" j
location / {
' A0 i/ |7 r. `0 p+ U ModSecurityEnabled on;4 e( [6 e! t$ i' J- }5 e
ModSecurityConfig modsec_includes.conf;
+ P' N; j) Q% U: g+ m4 y# Q6 s4 r root html;5 ^) l' O, `$ D/ z$ Z u4 A) O
index index.html index.htm;
! d* A) |- M2 K3 K3 W }
: U' m/ i A, @8 |( X% a}
3 K G* C; x" T; j0 \9 f$ D7 K2 T7 H使用动态模块加载的配置方法
% q( ^- @' Y0 v p在需要启用Modsecurity的主机的location下面加入下面两行即可:' p5 H- V( p( n4 [
, R$ z% e9 J8 C6 l
$ w# ~# h, ?* e$ h% ?
modsecurity on;
8 B8 q, ]$ o3 v, g* J6 Q8 Pmodsecurity_rules_file modsec_includes.conf;% [$ \4 D2 F* w, j8 F
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
( D7 H5 `+ t* w& s# w1 E: K
& R( F9 V& }; j# W- c5 v: r' |) t0 L% g! D
$ vim /usr/local/nginx/conf/nginx.conf
) q1 _* ^+ B' {* a6 ?5 L
9 P1 R, k U3 x! p7 c: ^$ E& ?- l' _1 `7 Q' M3 u6 }+ H
server {
* l2 @9 d- O" J5 L& X' W listen 80;0 J5 j- ?. x1 J4 E- n
server_name localhost mike.hi-linux.com;4 ]& ^5 H/ S G; f$ V5 g
access_log /var/log/nginx/yourdomain.log;. K+ F6 G3 k! j3 Q2 D/ W* y
+ `# t; S4 p- U ~ R) G
, D& G- }' G5 w location / {
$ C; _- W& H1 ?4 }' X( g/ y9 ^. J2 H m' J
5 h, d6 x- L1 A% b' |+ T6 _ modsecurity on;
' d; z9 G+ q$ q" S modsecurity_rules_file modsec_includes.conf;
4 A' ^8 L' Y3 O" R Q root html;) c1 L* v: d s, o4 a7 [
index index.html index.htm;
! I: b$ G9 B. \: ^}8 I& k E+ R* e x% o" e
}; J+ C9 ~, ^5 A4 D0 G$ j
验证Nginx配置文件
$ R2 \4 T' g/ ]3 \7 u5 S6 u ^: Q$ /usr/local/nginx/sbin/nginx -t" e1 K1 I* A" C
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
3 x2 s+ {8 I% N Snginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
3 u7 V: _4 y0 t9 S& R9 P# G启动Nginx1 _9 i! P$ ~: M! d9 `
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
; x: a+ z7 @3 M. L! B' ?/ }1 f
; ~4 }- m9 p- U测试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能够战胜更多复杂/未知/混淆的攻击模式。 % x/ u: Y2 q' w2 E& V+ c
|