ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
0 @# I( U6 p% I/ R" U
" A- y* `' N2 c% o4 p9 E& L3 a/ b
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
2 n" e! Z& f( A5 Y$ h0 `5 J8 h& s- \, O2 D
, v% u, d" s- g4 R
什么是ModSecurity( p. T" G1 e# ?3 c W8 \
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。9 K9 u/ `. ^5 U8 ^9 L
p' w7 A& Z" }+ _% P$ u
3 ~- a5 ^7 j/ c/ i* TModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。) T2 m, s: \- B. t6 ~, E* z
% v7 m2 _! X# F! O. a$ y8 D
9 R: R6 j; O; w# a' ^, j, S6 RModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。+ \. w. c1 y& J& F% w, P
- n% \* o/ D. U
! Y, i7 `2 u3 p% b( \官网: https://www.modsecurity.org/
# |" I( `, Y, K2 p, v/ ~. r$ T3 D5 y: D2 E
: g4 L P7 e- T; q( @. u4 H
什么是OWASP CRS5 a6 s( q/ b. E" ]7 D8 a$ D
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。3 R f w% y9 k& e3 l
& z' Q/ _# r/ Y" k& b
1 Y7 i: G: N2 X. hModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。9 H% q; k: ~7 A" ?5 o* M
& _8 j* T- a2 K- s x5 o2 {" B7 {, c0 C$ E2 v
HTTP Protection(HTTP防御)
5 N4 H3 P* P/ g8 M% o6 _HTTP协议和本地定义使用的detectsviolations策略。2 {( t8 E9 q" p1 p
# l3 ~& l% _6 h% k
* P0 j$ Y0 E6 \/ ~- @) zReal-time Blacklist Lookups(实时黑名单查询) ^+ h3 ]# N# F. T9 j# C9 I5 x" ?
利用第三方IP名单。
$ M3 z4 _; P' x4 `+ q# }
/ H* b6 o( @1 B1 H3 K$ M! C7 J$ j6 E1 I: b: m
HTTP Denial of Service Protections(HTTP的拒绝服务保护)/ P. `$ J/ N# d; m4 }
防御HTTP的洪水攻击和HTTP Dos攻击。
6 d, ~ \7 V# K3 ^; d) A" M6 c% c; U+ j; V* }' @6 I# y# T
' P+ h' `( t: e8 C; R5 H: n, J8 ~: S
Common Web Attacks Protection(常见的Web攻击防护)
- W* K5 Y$ S: ]* I+ k检测常见的Web应用程序的安全攻击。( j' W; A1 v6 m! v# O _3 o2 c
/ s S0 b9 Z2 r# V+ @7 ^, f! S; {6 M6 d' C7 b7 U
Automation Detection(自动化检测)
7 J* N2 j6 e, M8 y* Q* ^+ \检测机器人,爬虫,扫描仪和其他表面恶意活动。9 D2 q2 Z; w5 K5 ]& |4 J8 z1 e
8 I% k1 O: M- K; ~: `0 J: ?, C
, m5 i$ X& Y# B# C! d2 z# i
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)
# O0 e, R3 V4 e I: E检测通过Web应用程序上传的恶意文件。 q+ m2 |6 s. X: w; a
0 j' ?7 X5 \3 U: [2 T8 h) e- b2 |0 Z5 O C. y
Tracking Sensitive Data(跟踪敏感数据)
+ R9 P* B. i) ]2 j+ U) M信用卡通道的使用,并阻止泄漏。6 D- P4 Q, H! _7 J @; K
# ? ?* h( {3 K; T: P* a T9 |* l
9 n& n) m/ C) c$ k6 F) v) B6 O( y- E jTrojan Protection(木马防护)& `" B0 v" C7 L7 J; q$ v2 R
检测访问木马。: J3 J$ V, q$ ~, X& _: Z6 n) ^
: P/ A+ h: Q9 M; X
9 g" o* L- O; QIdentification of Application Defects(应用程序缺陷的鉴定)
+ F* p) ~) M! K" z8 Q+ \检测应用程序的错误配置警报。0 z" x! E7 f, i9 g" v/ I
6 ~4 Y5 [" P4 f2 ^! O, Q
" H! d, E: q1 L! o9 T- fError Detection and Hiding(错误检测和隐藏)% B0 ] K; I* A: }0 }' H A; b
检测伪装服务器发送错误消息。# [4 V8 T7 j/ V3 i7 u
4 u( }; o$ l0 [9 Z3 f1 E% r' S d4 L2 p/ v
安装ModSecurity$ x' g3 o& k* x3 `, P
软件基础环境准备0 u, X- ]" a( K" V
下载对应软件包+ I: t- K/ J* O
$ cd /root4 y$ t1 s/ H9 ^" z' M
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
3 l& V Q) ^9 X4 l$ r. u$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz" K2 Z* ?2 I5 k& e6 ]' Q% y! J
安装Nginx和ModSecurity依赖包
% u8 E( |% X# a5 D6 ?3 CCentos/RHEL f4 s3 e6 Q9 p9 M+ }
' |( t; r& }) b7 F. O7 ]* @7 x& y" I* \0 o8 P: r5 f
$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
6 I: ^; `% Z' a' W* e$ P) J* nUbuntu/Debian& W* a4 q# v- L' k
0 _2 ` E% O; V% t d
) {5 [5 F# W% \4 m: ]5 p$ 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
7 q# e. q; Z( @5 E" y* p/ @! P: \0 K- N编译安装ModSecurity
4 u4 G$ Y V. G8 s# `: @Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
) G* _% h0 V: N2 D+ u7 S3 q' e7 r/ I' U! z; J& S$ t# J
! W' ^- F" O d4 q+ X
方法一:编译为Nginx静态模块
) b7 G' x# ?3 E1 X& n. ?( K
1 a; Z! x; a" U4 }, L& w0 O6 M- Y/ _( n( b2 f3 N6 f( N
编译为独立模块(modsecurity-2.9.1)" A' e; B* P2 o& {7 @; M2 T
$ tar xzvf modsecurity-2.9.1.tar.gz) k3 h& Z" i$ W% w7 m! y8 B' C
$ cd modsecurity-2.9.1/- d9 U \ f) l- e* g2 ~
$ ./autogen.sh
6 k& n+ d, m4 k" F. R) e$ ./configure --enable-standalone-module --disable-mlogc
. v7 Y) ?5 D' w$ make' |5 C: X* ?" I: R" L3 y
编译安装Nginx并添加ModSecurity模块3 y2 v' d+ I, j6 A) J( \! D
$ tar xzvf nginx-1.9.2.tar.gz% W& Z, b8 }0 q9 g
$ cd nginx-1.9.2
! t9 ^1 p9 F: T5 Y$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/2 g4 O) j( O4 b. z
$ make && make install
1 Z1 u5 } ?- p& D1 m/ @方法二:编译通过ModSecurity-Nginx Connector加载的动态模块) {3 v3 c( y' o' S: u6 n$ l* Q
( T) L" o. y" \. }$ v
- ~, ?. d8 C3 W6 w) g7 e5 R编译LibModSecurity(modsecurity-3.0)
4 U8 d& ~8 m. n( A% c; r$ cd /root
c. t9 c9 I5 @! q4 y$ git clone https://github.com/SpiderLabs/ModSecurity! ^7 a, H5 j8 {& p2 b
$ cd ModSecurity+ b" W6 E( C* x! |
$ git checkout -b v3/master origin/v3/master5 E+ L E! N( p# s# e" l) l
$ sh build.sh+ j Y& L5 P c0 ]; z) U! q
$ git submodule init
% N6 |" K) J7 S$ git submodule update
+ e/ c+ q+ q" F3 W( R- G$ r$ ./configure) w, J' r3 u) x$ l9 }/ U
$ make* H, ]3 z6 B- { v. X n
$ make install
+ r- [( {, X0 i% T4 ~+ t( @2 F- Z& MLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。' n( L) h7 k O6 R+ {# B/ w
# U# S7 ^! k4 S9 q) y( @ V# q
% P( B8 E/ |- ?! L( C6 N. j
$ ls /usr/local/modsecurity/lib' R9 a a# J5 T) t$ A( D* r! e9 d
libmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0' H1 k2 r0 t# \, A6 n6 [2 B
编译安装Nginx并添加ModSecurity-Nginx Connector模块
5 |4 j' v3 k! i G) i) s k; n9 s使用ModSecurity-Nginx模块来连接LibModSecurity
1 N1 a. c3 X7 e* m, x$ D) l' C, z! B' q, j8 u5 q
/ k$ A, R% l' z4 n/ w
$ cd /root
/ s3 `- L$ _2 ?! p/ Q$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx7 [ d1 B1 F$ z# N/ U
$ tar xzvf nginx-1.9.2.tar.gz0 a' i9 W9 j7 q
$ cd nginx-1.9.2) J/ J2 {+ I' I9 w0 Y& S
$ ./configure --add-module=/root/modsecurity-nginx
) b) N5 K8 y' x7 g* K$ make
1 o8 q B9 g" H n8 [! f4 N0 H$ make && make install- K1 u) M+ C, Y k
添加OWASP规则: S# E& q2 S4 t: `: D! ~
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
0 f; a9 X. k* F8 y- L _& [/ U3 \$ S4 G# M6 ]4 }
9 t% G4 o" M2 O3 B c3 I% `
下载OWASP规则并生成配置文件/ n. q- h5 M; B" [- {$ x6 x
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
9 R, |. E3 ^! m/ ~$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/
5 @" V2 _# p. A3 W1 r7 e$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
7 P$ K; S# F/ X$ @$ cp crs-setup.conf.example crs-setup.conf
4 ~) |( ~+ w: t! h. V配置OWASP规则$ g, G( O8 h4 D: h$ v* g# R
编辑crs-setup.conf文件
9 A8 {5 ?) l) ?8 S P: M9 U
9 b+ r) h: X' w: o+ @8 E' J8 u7 r+ s, B, q
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf/ d0 F5 C( Y& H. x
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf9 ~; Z. K7 c$ o P+ b
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
/ e, N6 _9 V9 d2 ]1 j, m- T1 `! o$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf7 O, |3 E; x; S
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。- {& p+ v. Z5 p0 m' t
O- d5 W2 ?) J
4 s% V; N0 B. ^( O9 |启用ModSecurity模块和CRS规则2 D& F2 m5 ~) m. H/ ^1 o
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。% h& D& Z$ x1 w# H7 {
7 D* _7 j- Z! x8 R4 L/ p2 j
$ ?) c Z. y* }; f0 [2 C% C
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
. S% g% A- Y4 |. l
2 a" i1 B$ Z- U, N3 W8 n
) c4 {" a3 `$ p6 d" o) V$ cd /root/modsecurity-2.9.1/2 R( X! f* m, z3 \$ S- A
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
9 W0 M" }: m4 d6 C: V4 `$ cp unicode.mapping /usr/local/nginx/conf/4 y" Z ~5 d( t- F) j* G
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
- f6 P; |0 ^1 t) P+ U, v
, i$ E- ^/ ~$ N% b0 W
% w1 a6 a" ` p" J. a7 G$ vim /usr/local/nginx/conf/modsecurity.conf+ p0 D& V( Y% x8 g6 L+ ~
SecRuleEngine On- D5 S) H8 y4 _9 B4 }! y7 s5 J
ModSecurity中几个常用配置说明:. [* M+ _8 j: Y$ x$ l
0 p' ?* j# C, ?5 `0 d6 C
) x* Y' n. f5 O* |1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
( N9 E# B' K) e3 q$ J6 i
8 T, K2 n9 |% w" F9 c) r9 z: ^3 K9 A3 v% ]+ c
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
- I9 s3 s" T. g6 V0 P; v7 r8 z: [7 ^3 e9 n* Q6 C4 X
9 J& z0 w a/ ]8 _4 d9 j7 S* S" l
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
% `8 o& W" ~+ A
* l2 ]* S& y) O) [0 h$ Z$ D5 p& Y- S; U1 F. F3 v
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。- i6 B/ j" |8 |7 \2 K# W# o
$ i( r" l4 ?( o; [7 }
. A8 f3 m6 Z2 e; ^
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。 x( |, W" m7 e; S/ k% b$ l% U
6 _2 B6 ~! F) w/ G! C* D+ ^
8 _" Q1 r- J5 m8 A- H: n9 S
3.x版本CRS
- W2 N D- d {. l! ?5 n* t3 y, Z. {$ cd /usr/local/nginx/conf/owasp-modsecurity-crs% w# F' E& E0 w& ] ^
# 生成例外排除请求的配置文件
! V _# h$ U% E8 I b0 Y, J$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf! R: a- {/ C( v& X1 H5 K3 R( l
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf- J- R/ n' P$ @4 M
$ cp rules/*.data /usr/local/nginx/conf
! p: [5 D* |7 J% p为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
; F5 ?4 } F5 \1 E2 H' r
( V; q# _7 k% }: C! X
m( d' p( P1 l3 E/ T$ vim /usr/local/nginx/conf/modsec_includes.conf4 G# F% P; B4 o2 ]. A. d
* I& O% n, s8 r8 [" ]- S0 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
. J! S) s/ W6 ]& K' r. M
4 w* T$ L% e/ L/ _: }注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
# L0 R8 V$ ?9 J7 ]8 [- [- [6 l' _# c8 n7 Q3 I7 L: V; K( j4 e
" T& I1 J, t; O3 F4 g! }配置Nginx支持Modsecurity9 P9 {; h& u; E: N
启用Modsecurity5 U% I$ M+ U$ e0 a6 ]
使用静态模块加载的配置方法8 J+ W0 y9 ^- O% P
在需要启用Modsecurity的主机的location下面加入下面两行即可:$ s' x& F2 L1 A7 e( E# j% p* K
) k3 ^* N; `8 \, \ [' O
6 g- `% n& _% nModSecurityEnabled on;, `7 ?- ^9 C, K) H2 Y: W
ModSecurityConfig modsec_includes.conf;
$ P( @* |6 m0 H" t& X' D( r$ j修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
$ T, j! w7 L+ W d
, d# M% Z- p W
' b$ R& M* I, K6 J6 s* y8 B$ vim /usr/local/nginx/conf/nginx.conf% J* U, g0 c' m
( s6 H. r! y' y7 g/ O
0 e$ l7 Y( z O4 l, {4 @/ {server {
. D: w5 L2 C; @( @9 h+ g g listen 80;) [$ y7 H2 d v2 X2 c6 w! @
server_name example.com;
8 [5 Z+ }4 O2 @/ W5 t1 c8 q: I$ t+ h `; ]) P2 \
' Z! }: f: e, Q4 q' H6 N$ Q
location / {
: j2 i: n! y3 Y6 Q2 z ModSecurityEnabled on;
1 r y) H( @# m ModSecurityConfig modsec_includes.conf;4 y H) y4 U: \% v% D( {) m
root html;
5 U: B0 T. l+ r! U index index.html index.htm;7 U' v% z+ f; t; C+ q4 G
}
# f+ w. }4 P( y' a$ V V+ o! p; S. B% ^) H}+ d1 U( v# r; B) P: u; J9 z
使用动态模块加载的配置方法
" _4 ^( T3 T0 c$ B$ d* i在需要启用Modsecurity的主机的location下面加入下面两行即可:% Q$ V0 s0 Q9 d5 C* I, i: u
5 d' ^( R5 z# b
4 L, r$ N# q6 U, D5 Z) I
modsecurity on;5 X; u1 G/ h" Y U- C" ]6 q3 k
modsecurity_rules_file modsec_includes.conf;
* x$ z. n+ ~* W0 k. K+ [% k* Q修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
( w; q/ s$ [6 O& \ I: z
% m. }; \- ~8 |6 C
- p" Y, ~% h3 d8 V$ vim /usr/local/nginx/conf/nginx.conf: I9 K5 }9 F2 Z0 b8 S- x' m9 p
4 a0 X- c+ l2 h* B" k
6 @ [% W& c0 x5 }% U: ^3 c" r
server {
# @6 A# o/ \$ v listen 80;
: P% A) X2 E O8 X1 B server_name localhost mike.hi-linux.com;( x) c5 D) a) p' A$ o5 W
access_log /var/log/nginx/yourdomain.log;: r/ R4 @, L4 ^" A% d# M; o
" E J6 J* d# Q
0 Q9 e/ }8 S9 P
location / {$ {. C6 B8 F% o- _" ~
& c4 D; J' ~3 I
6 E8 u7 N5 U- ~. e# s) k2 J. N
modsecurity on;0 j2 ?' A9 N) V: y+ \
modsecurity_rules_file modsec_includes.conf;
- _7 y( ]& v- M1 ? root html;
" W/ `5 [# M9 }% k7 X index index.html index.htm;
& R2 C J8 @' J& |2 K}& f8 N! s$ t" m; d; y4 a/ I
}- \* p* M8 R7 d
验证Nginx配置文件. ]* Q7 o7 g5 q- [# D
$ /usr/local/nginx/sbin/nginx -t
3 ~( L* `* H& K; m) y6 z5 u znginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
$ I* }; y9 p9 I: t( Nnginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful/ Y: `$ I9 M( J
启动Nginx8 T; p9 _: ?8 h# l
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
1 Y% @& Y* ^- V1 y5 a% a+ Y! ` m" M- Z. u4 J0 V, J9 a X) e7 ^
测试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能够战胜更多复杂/未知/混淆的攻击模式。 ) ~! Q6 ^) j, J5 Q \2 P$ I
|