ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
+ _* H' C7 r. ~* q/ E2 [8 K+ H( B. e. Y1 R3 b& {
1 s/ ]1 t8 _; q在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。; |5 P0 Z5 I7 G2 b
& R: w3 z2 D; v
, B1 i; G, V) v' I什么是ModSecurity$ E1 T! g- @2 K* Q* Y% ^% ^) j1 g
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
* M4 k; i& s- P3 E; B7 v, \3 m' W% P8 t. d% M
! q5 ? Q' q1 _# n
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。9 h4 W! G; @+ F, s; I* X. Z) ]
; }( f& r' T% O3 P- e' R4 S
% r1 H R+ T$ E5 O2 n) bModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。* \5 n9 e" ?! z" \: z
v( R3 j" h7 `% m3 |9 n) }+ s1 O3 Z o( _* }& J0 w2 d3 w, n
官网: https://www.modsecurity.org/
, G( L! ^6 i$ N6 E/ L5 d8 n& d# ^' Z, {. T
0 c) j& C. i) x/ M1 ^5 _7 j9 J
什么是OWASP CRS, u9 [+ h" F, P( ?- y9 _
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。2 C+ F8 S: K, c; q5 M+ c
9 G3 }8 a9 `* c7 M) _! u' i" S% w6 }$ Q! N
) Y B8 F3 B) f! ]5 Y- }* q3 iModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
4 u, w$ d8 b4 g7 x- v% l9 v* Q8 o' t3 L% Y7 x& J. t/ U
' y# j' y5 G2 M0 s4 eHTTP Protection(HTTP防御)
1 X6 U6 A! F- v1 FHTTP协议和本地定义使用的detectsviolations策略。2 u' g( t) T7 T
0 c5 Q3 Q8 h4 t3 K- Q$ c% ~
R3 h, W+ e" a; l# [Real-time Blacklist Lookups(实时黑名单查询)1 B& v8 s1 \2 |0 d; F- _- c
利用第三方IP名单。+ g' |+ z0 i2 c1 Z
4 D7 ]8 F5 d' q
( K$ }1 ^0 j. L0 [) pHTTP Denial of Service Protections(HTTP的拒绝服务保护)
- I6 P/ M1 V. x/ x# v- Y防御HTTP的洪水攻击和HTTP Dos攻击。2 y* ^1 R6 N+ \ D$ V
" j; y) q. k, z4 c5 |4 m9 C7 ?4 k
8 u7 T- \$ O; u( b/ S; k/ F
Common Web Attacks Protection(常见的Web攻击防护)
2 S/ D0 J7 @, Q, D' o# L检测常见的Web应用程序的安全攻击。
, C1 k' u+ L# S9 i2 S) w0 G. S9 v; |$ r( K9 b0 j
& ^0 a1 ]" F0 f' f* m% Y
Automation Detection(自动化检测)6 B) N ^. g1 J2 J/ u5 b7 b
检测机器人,爬虫,扫描仪和其他表面恶意活动。
) d* h, Z) P5 N1 K8 h+ i$ E- ]7 T; A8 y# ~) C$ s
6 O( E; U4 Q E8 c% i( z
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)
3 y" p$ N& {" D; A% T检测通过Web应用程序上传的恶意文件。! f, V: x! n( v/ n$ I
& W& ]3 s! N2 l3 h9 w. x
! b9 } b3 C2 L/ r$ G+ z7 PTracking Sensitive Data(跟踪敏感数据)
6 ^8 w6 y9 S) m" V5 I; [: n+ x信用卡通道的使用,并阻止泄漏。
+ A) P+ }# V' R" k3 ~: k
) }7 B& B& O! {6 {9 |8 ~7 A8 L4 z( j0 O% z+ ]7 S1 i5 i+ C
Trojan Protection(木马防护)
5 q' h/ k) P- F6 g) \" t2 n+ O# J检测访问木马。
l& D5 z. Y z8 ^: O5 A
" Y% C2 C$ X0 l8 s9 p! Y- K* V4 k% n$ w; G$ K
Identification of Application Defects(应用程序缺陷的鉴定)) E# i- }/ F$ t9 I1 S! B$ N
检测应用程序的错误配置警报。7 X J* Y8 X* X7 j$ d
4 }: s% G4 Y, q/ N% b t4 ?) h' G) j5 C2 o
Error Detection and Hiding(错误检测和隐藏)- W8 J$ n" E n% O% i
检测伪装服务器发送错误消息。
/ T4 P4 k! J' ]
: ^ a1 |7 B% j$ K, Z& e# k3 k+ r. y: c) d
安装ModSecurity3 H) u5 q( y, V7 b4 P
软件基础环境准备) B# o% c7 Z. D& L( H/ `
下载对应软件包# E, H! y5 r( P/ r r2 b
$ cd /root
4 {0 I- m1 X, X' z. Y) g$ O# }$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
0 a) q/ i, T; k1 W+ D0 T! F# u% O9 a$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz
0 z' D; P2 S/ V W' J安装Nginx和ModSecurity依赖包
1 ~6 i! }& ?: gCentos/RHEL
5 u* x3 M9 w7 }4 p! A1 ~& N( n0 [/ c
R" z6 Z" a3 l! H# ?" d
$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
. X; r7 A7 ? Q9 ]# T$ c' UUbuntu/Debian
& s3 R- `/ O) @2 N( a% T# L2 O9 c) [4 E8 d% X: O+ i7 o
7 o' Z1 q8 H3 @8 b3 v4 v' {
$ 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
/ X/ e: w+ B$ u+ _- {2 B: h. e% t编译安装ModSecurity
3 i* c7 k% _) J% j( J0 x, RNginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
: z2 L4 J9 z g+ @& T5 V1 \" |% m" ~; `
# U \% K8 \/ h% N
方法一:编译为Nginx静态模块
2 `* j. W6 d; P0 O0 R+ L8 \1 L' p! z" Y9 F! ]9 l0 f/ {; V$ H
& |$ b! C8 F) }* Q E
编译为独立模块(modsecurity-2.9.1)8 r8 G) K" C; @( t" z& E% m' D
$ tar xzvf modsecurity-2.9.1.tar.gz
! [$ w3 S' M. d8 w8 M. y- r$ cd modsecurity-2.9.1/
9 U, V5 e# D7 G; \9 `2 h! P5 p$ ./autogen.sh% c9 g+ c6 x H5 G: ^
$ ./configure --enable-standalone-module --disable-mlogc0 r2 E" a% `; n
$ make
" A+ t& P! p1 g4 \编译安装Nginx并添加ModSecurity模块( T: Z7 `5 G" J9 F8 U
$ tar xzvf nginx-1.9.2.tar.gz9 M1 e: S' m& j- v# f" H8 p3 J
$ cd nginx-1.9.2
" u2 n4 }, R/ e) v8 s/ _; k, m$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
8 n( b! m+ C& b4 P' S5 V$ make && make install1 n+ P9 O1 n3 E7 f6 _+ j; Y8 P
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块' o- b2 ?: B6 }4 n4 ^" @+ I+ }
# H9 _/ d, s* h! Q9 b" a" |, W$ P5 |/ x; R6 k; T
编译LibModSecurity(modsecurity-3.0)9 v' K1 ]) p- m3 _5 k! H( z
$ cd /root$ Z5 o- v$ \: e1 D) ^9 h9 m$ r
$ git clone https://github.com/SpiderLabs/ModSecurity' t- [; Z# W, L( H4 H
$ cd ModSecurity: P& Z8 s1 c* K' t0 R7 [6 l8 a
$ git checkout -b v3/master origin/v3/master
* B# D4 Y j9 G+ d$ sh build.sh
/ ?$ y' n: u+ ]$ git submodule init% v+ u; P; L: m5 n" k
$ git submodule update+ {$ e+ P9 t, G# G4 F
$ ./configure
( E3 Y% x1 c1 c0 b8 B( K; Q9 b$ make p: W/ `8 G# e4 z# W5 x J
$ make install8 m( d: Y- W& k7 j4 i* h
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
- {+ X2 \2 j- a2 o" M T0 `* O+ y1 o, d3 S5 o: b
5 v* @. | U7 q7 A. D' i
$ ls /usr/local/modsecurity/lib8 {1 w- Q8 r' R; ]
libmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0
6 o7 ]0 E }, n2 E4 ^编译安装Nginx并添加ModSecurity-Nginx Connector模块
* L4 ]3 a! o6 f+ F6 h使用ModSecurity-Nginx模块来连接LibModSecurity1 s& \3 ?! K+ o3 y
: W8 a) j ^$ I9 C0 F
/ H2 e4 w* _- j' D+ e, U* _$ cd /root$ k$ a. ~' D5 U
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
( R: U2 ^1 _7 X4 `" j$ tar xzvf nginx-1.9.2.tar.gz1 @8 m w* Y; b: h9 [- r' [( A
$ cd nginx-1.9.28 `( U: [+ i7 ]+ q
$ ./configure --add-module=/root/modsecurity-nginx
! g+ s }2 w" f5 @- P" H4 e8 A$ make" y/ N7 u0 {! U1 y* ]
$ make && make install
& u+ T" F% R" ]# \: L7 _! Z; b y8 v添加OWASP规则) |: O: c& E: l1 R
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。 t8 [3 S' Y. r
8 U# O$ C; Q4 F6 h+ V6 [/ ?1 ]9 r `. \; c. h* y* \. w# X
下载OWASP规则并生成配置文件 `+ X+ R8 F( p9 G" _! U/ A
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
& |" ]9 r4 |: t0 H$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/5 j3 l" X P3 E
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
5 y+ Y p! r: ?% o$ cp crs-setup.conf.example crs-setup.conf
! r, Y# w3 X, J. f8 l配置OWASP规则
) L9 C" f* h6 n编辑crs-setup.conf文件0 |$ ~' [0 M9 ~4 p% T! p3 N
2 s: w7 f* x6 y) p" g; {$ _( `
9 w/ Q3 t6 p# O7 o U+ Z$ [' U$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
- |* s, M7 L% R3 N$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
+ N/ t' E2 |$ n# d& y: e- g5 [& U$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
$ p& j" T) ]4 G( V7 `$ v$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
- ]( D3 I" }9 p5 t' L ]' \! \& B默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。' V3 R: \8 |, m- n2 c
& {+ U7 b, u6 i% t0 K) Q
: k3 p" M. Q: ?. S# T启用ModSecurity模块和CRS规则& q. T; ^# E y' E
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
/ z4 @ t; r& a- O( K" g
. y K! |5 c% P: v5 t5 E5 e; z [8 l! q8 X! R
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。: j" p% M8 Y( n7 w
+ k0 o+ q; A3 z; d" B t: [$ R0 p2 T9 \: C
$ cd /root/modsecurity-2.9.1/" \, k5 y( Y! i, V& ~
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
3 i' s4 c5 U4 j$ cp unicode.mapping /usr/local/nginx/conf/# u: s0 j1 E; p/ ~
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
4 n1 h2 ^. W& ]8 F
. \7 c- c, S4 ?! ]
' x( ?% p6 }* A4 a; J3 i) ^8 u$ vim /usr/local/nginx/conf/modsecurity.conf
) k/ p/ `# S2 g" j. w# K3 O( K* S+ b% \SecRuleEngine On% M$ {3 x/ F* i5 ~' T }, _5 N4 u
ModSecurity中几个常用配置说明:
! V3 Z4 ~6 M- Y/ a7 {8 t$ }
- j) N4 d. n- z
$ u& Y( S+ p( j1 L" m( a1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。1 d! w( C* U6 L0 w
x* r& O. k$ `4 v3 c9 |7 H: N
6 w) w& r8 I2 ?. O, T h; S2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
/ {' F( V( Q2 a2 y4 h
' j K1 E- Q/ m& T3 w1 V
+ F" K2 }" z# f- S3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。3 e+ N3 ~ |. n) o/ {
$ b" Q6 R& K& z8 Y% }
% y/ E* \* ?8 {0 n# ~, h/ J7 E% H4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
% r1 ~# V9 t4 _% W* n
' C' f. R5 O3 C
( K8 m+ V9 x' L) i% K在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。, B2 E' n- X2 q- M$ `; W
0 c& \! q' D$ @% _( Z# F* b3 }8 Q4 Q& y4 h6 ?6 F
3.x版本CRS% O" i4 C, O6 m3 z% A# ~
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
, o- N. T+ p" e6 I4 V1 c# 生成例外排除请求的配置文件
9 k- b' t0 b9 ~, c: q$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
% u; W Y; M/ k) ~$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf I- o7 T' D4 Y. ]
$ cp rules/*.data /usr/local/nginx/conf
; m9 G8 s' r1 Q7 k为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。% z! |8 c. B O" g4 B7 s
* h: H- q' G* k% x6 A
Y! x$ ]' k1 p5 g" A% A0 n
$ vim /usr/local/nginx/conf/modsec_includes.conf5 q% M8 R7 U; d3 T. m+ \9 Y$ E
* p) Q. g5 {6 B( Y$ u% 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 ; R& l5 L& {7 K7 ?: h
" I, W# k- e% L
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
( r7 l" g* t5 D! F: {! {1 [( D1 l! L" x6 b7 P. M, E4 [. e( n
) G; e2 v) e# b" W9 a3 w7 h, x3 F配置Nginx支持Modsecurity
% Q a9 m# Y, o. p, U; z) X7 k6 X启用Modsecurity
$ D @9 @ f- v7 o使用静态模块加载的配置方法9 e$ {1 e1 Y w; z b5 o
在需要启用Modsecurity的主机的location下面加入下面两行即可:. K$ N i- h$ G' ]/ N
! O4 I2 z, z# g0 q- J4 s* T
: R8 w5 \7 X$ [9 _ D8 \3 p
ModSecurityEnabled on;
3 h) P# J# |3 O% V9 ?ModSecurityConfig modsec_includes.conf; M3 ?' j/ {7 G8 |; K2 O
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。2 V- M( i0 ^+ [
. @6 A( y% @; J# p
# _- J* g0 f g- e
$ vim /usr/local/nginx/conf/nginx.conf9 Q" w I% n5 Y& a. N6 [6 s
% q* N5 `5 }6 A: k" y
# [+ J( V% Z$ A! R& u9 w, D' rserver {/ J7 D- @& D' I5 ?3 s
listen 80;
* T: o1 ~8 }% W, c! W server_name example.com;
& u$ p: d# [6 U: G+ {8 ^* a7 X; e7 \/ X
3 R/ x; l9 o c4 Q location / {
, d% K! `* d; M9 g9 p: I ModSecurityEnabled on;
$ y: R. t t- K! b3 b ModSecurityConfig modsec_includes.conf;
. H. T0 r* h3 U( S4 T3 _5 e: z root html;
' h& ~; Z0 i+ C6 x6 m9 }& S index index.html index.htm;
% A P2 u% L$ l1 d& U }, D" `5 y& k5 d Q& q
}
3 Z& Y; b$ v% ]7 m, U" Q* U5 F使用动态模块加载的配置方法8 s9 x$ i; P- a4 C, D0 j6 n: k
在需要启用Modsecurity的主机的location下面加入下面两行即可:
9 m: m0 ^( U) h F/ v. y" n% q5 a" N' Y4 z8 |4 Z# J6 [- k0 N
% ^ M+ g! n3 M* a
modsecurity on;; P; w5 M: s1 [& i# T1 a* d
modsecurity_rules_file modsec_includes.conf;+ j* E: o; V' a- j, U& n& ~
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。+ _- R7 H3 z& K. L& k8 U
3 O7 x( }. T1 C+ O |' W5 o* i* P0 N9 B, Y! O9 ^
$ vim /usr/local/nginx/conf/nginx.conf
% L5 b1 e5 h% a
2 z2 l6 W! g1 ^1 W5 z4 T) E$ h
( d! F9 ]% ?5 e& @& F& x! Y# oserver {
& }& X; S0 [( [! ?3 G listen 80;
^" w. \7 ~, G, q5 N+ W, \' R server_name localhost mike.hi-linux.com;
; u8 U% W% i! l4 E2 }0 `( { access_log /var/log/nginx/yourdomain.log;2 R% a8 L8 ?. ]' l' N5 @! w8 c
, n; z; K( b7 |
) m( {5 _9 d/ X7 |* Q* S location / {6 q; Y9 c8 C$ s. A: y- A2 ?# h) E! k% ~
9 w3 g* F) R! } O( Y0 i4 U8 x$ s3 y! k' u: _! s$ g
modsecurity on;
! ?& \9 h2 u2 ~* ? modsecurity_rules_file modsec_includes.conf;
9 j: }* J# c N3 A1 Q) L$ _( I4 F1 {- ] root html; O0 d) ~. L/ x
index index.html index.htm;
1 Z' s6 ?6 x& |! Y+ G! F}& X4 X6 i8 s7 b, e$ [6 {3 z& ?$ ^7 ~
}" @ F! P* v% z* x8 ~
验证Nginx配置文件
H3 r; U4 X. p$ /usr/local/nginx/sbin/nginx -t
( @0 I& o1 X( C, u0 ?nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
9 t N4 i: w8 p6 z" ?7 B3 V$ @nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
- x! Z: c8 X- q+ e! O7 y9 k启动Nginx- z$ I, N# i8 M) t# k5 z6 {
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
, o& X# R7 F1 e2 Y, V/ N3 m9 g( M9 V5 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能够战胜更多复杂/未知/混淆的攻击模式。
+ ~5 e; a2 x& Q( B ~3 c9 s |