ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
; s4 R! ~' X" j8 m
5 D: I5 a" L" `! C! H
8 f- h2 v# y+ D在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。8 q7 Y' X' [# a4 r4 }) u6 }! r# L& H/ c
7 {/ o% X9 @2 Y( M
# T+ b6 H8 h: \3 g1 i
什么是ModSecurity9 B4 i1 h/ G( l: h* C8 h- o
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。# @+ l9 w2 h: D; o; f" }- t$ h- P
. a7 v. H* W, [! q5 F4 v
3 V9 L& |9 d) P8 g* J# J) n! nModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。7 N# n) S' _3 K& ?
# l! u; e, g+ {, r
# D- d: X/ Z+ v4 t4 E/ _
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
% P8 i& e& I# `) ]# q: V, j- U" K
9 U; W6 ]) X5 X. }0 d4 o. Y% M% T6 o/ W N
官网: https://www.modsecurity.org/
$ g! U! [( v( m+ d8 v" {2 A; y+ v9 [, ~1 ?; @3 o6 u
( m I. b! f2 H |4 Y4 O
什么是OWASP CRS9 F; }4 Q% d- _# J* l8 k
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。4 m' {. y; S( l5 h1 A2 c7 G
5 h2 S( N& M$ k6 M
- @' Z) O: A8 p r
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。) W+ k: S' A3 w; P7 @+ a
9 X7 Q% B C& N/ y( q+ g' S
- W2 N, [# ]: \1 C2 y4 K: u
HTTP Protection(HTTP防御)2 t( f& S6 D9 \- J, _( C6 m
HTTP协议和本地定义使用的detectsviolations策略。
! H# Z/ Y- B! K! ], ?9 Z9 k5 c- b! e8 d" P3 I2 b$ |1 |. e
/ K( a* H3 e" w4 T! L& J- @# d
Real-time Blacklist Lookups(实时黑名单查询)
5 I/ m8 A. m/ t8 [0 d; ?利用第三方IP名单。5 F2 K$ l# g: J, j
3 i( x3 M4 r! ^; I
4 e, F. }* E( K, e2 f+ w5 BHTTP Denial of Service Protections(HTTP的拒绝服务保护)
" ` E4 C! I2 l' l' T防御HTTP的洪水攻击和HTTP Dos攻击。
- T3 z: p# v2 q; R7 P% i
" O# [# a% F q. ^1 v% T5 l; c! W& [4 c4 g8 u' M0 T- w. l( F
Common Web Attacks Protection(常见的Web攻击防护); m$ `9 f8 `7 t5 e5 u. M
检测常见的Web应用程序的安全攻击。0 S. J# R7 ?* U: ]- N; G
8 ]% U8 W1 v; b8 e1 r, v! K% W
0 j# ~6 l! {2 X% S" ~
Automation Detection(自动化检测)
6 P4 W8 p0 Q- f$ w检测机器人,爬虫,扫描仪和其他表面恶意活动。2 d: m. K9 |3 w- l
* p5 f; C" }* I8 ^# J: i: j( e# E2 e) X! [! [% B; S
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)
; [ P- {$ Z* a# O, k/ }检测通过Web应用程序上传的恶意文件。. j$ b5 ? g) y9 ^4 v% d: e
7 j* I e. J# z+ t; ~2 L b5 t$ }# a% a
8 y" N1 B5 A/ b" D: {, j& @, L5 [
Tracking Sensitive Data(跟踪敏感数据)! o* W0 j9 }: v Q3 s, R9 C
信用卡通道的使用,并阻止泄漏。2 L c. q4 A; q) s6 t: W
( C% U" {( e9 Z" @# ?
% I q9 K* Z6 @8 ~Trojan Protection(木马防护)5 G+ @5 v) K. ^/ i0 c: U) z
检测访问木马。
, ]# a G- S9 G$ f( Z& T) N* U
2 Z3 g, V J) k- |
9 {: u; M2 E4 F* y HIdentification of Application Defects(应用程序缺陷的鉴定)1 w5 z: z4 C t, ]; i9 Z# f
检测应用程序的错误配置警报。; X) @) E# G4 Q, i
$ i+ Z5 t3 n; ?, k9 ]: w
- ]% O" T X# J; Z8 J) Q+ n* J! gError Detection and Hiding(错误检测和隐藏)" _3 ]+ f) ~/ C( f5 R+ ]
检测伪装服务器发送错误消息。+ k& V) t$ E. y/ q
! _) [% f0 \ g7 X
1 [8 K v" a/ [. S安装ModSecurity K& F! ]& T- z2 V
软件基础环境准备
# | ^0 C, }/ f# I' q; ^下载对应软件包: @+ o( U+ o# S2 n- m1 `
$ cd /root
1 z8 Q/ C0 @# |# l% F/ v$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
1 D% c+ X7 g& ]& C, g# S$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz# u1 ~2 L& F! N' f- e
安装Nginx和ModSecurity依赖包7 a/ V5 y K2 e3 n+ {" P: U4 E
Centos/RHEL
% G7 U a0 H2 |( S8 v" F' r/ x; V0 u/ s1 C7 i7 h
$ W: t' }/ k% ?% m* U0 l; p) o
$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
) c p! o) h8 d8 [: jUbuntu/Debian
4 d1 M' n; O9 p( Z2 b) }9 b
; `. O1 s1 X( f9 D: i5 T$ c( d0 o9 I
$ 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% H( ]- P& H2 ~6 B/ f8 J0 e
编译安装ModSecurity+ k6 E% p- ?: l" s- z( h
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
/ s' y" n+ D3 ]7 p# U& u6 D9 ]
& P, c6 \* o, S6 w! y, s
* F; C) U" Z8 r方法一:编译为Nginx静态模块
2 a- V* {* p0 Q' [
4 b) d u e) r" G
7 o) U& A3 p+ {) S1 C编译为独立模块(modsecurity-2.9.1)" {. D8 Z5 F9 m- q; U. O
$ tar xzvf modsecurity-2.9.1.tar.gz$ J) k9 o3 y4 t; ?. _6 Z
$ cd modsecurity-2.9.1/: v& C5 e% |" L/ a1 S4 b
$ ./autogen.sh
. [4 P b. f4 \$ ./configure --enable-standalone-module --disable-mlogc
5 M/ p! ^+ e* m% u, Z+ ?$ make: V: c0 f4 L+ x, g
编译安装Nginx并添加ModSecurity模块. O! f3 R/ w( D: N9 I& g1 V
$ tar xzvf nginx-1.9.2.tar.gz
1 G# B7 K. p% r# l5 z$ cd nginx-1.9.2$ L( Y1 Y; w" }) U
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/5 N, d3 z( Q7 H& Y
$ make && make install
5 e$ C9 n! j, L& X _方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
' y6 g8 }: N9 p, L
; k9 d0 Q# `4 |% V' F3 k, g$ |# e$ C& p( W$ g- o$ d: ]
编译LibModSecurity(modsecurity-3.0)8 m: n2 J; x+ a+ ^2 M
$ cd /root- x4 a& B4 ?5 K1 G( Q1 J
$ git clone https://github.com/SpiderLabs/ModSecurity) ]6 v* V9 Y* u, W4 q- K% i
$ cd ModSecurity
$ _5 `2 `; o" f% N/ Q: x: G$ git checkout -b v3/master origin/v3/master+ l5 r( I/ I1 ^6 l# J/ q' \6 M
$ sh build.sh: G5 w/ K1 H) p. ?* p, }4 I7 D
$ git submodule init/ W y) o$ X( q- O' v5 v' h
$ git submodule update: h+ g7 j4 h6 g, S8 C* }5 a! m
$ ./configure+ f7 ]- R+ a/ R3 W6 n! n, V
$ make/ B# |9 V& O$ f! r
$ make install
0 C7 k: |, O: g* dLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。* O- u+ e' V: f! @. i z# C& w( N2 e
* D& x1 f3 B- F2 j' q. M2 M0 H6 O
' Q1 Z& i. q, r/ e; U$ ls /usr/local/modsecurity/lib$ s' q/ P5 n/ `& A+ o+ W$ k
libmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0/ t& d( ^5 } D5 r
编译安装Nginx并添加ModSecurity-Nginx Connector模块7 z# m+ x9 O8 g$ k0 a' H) B4 {* N
使用ModSecurity-Nginx模块来连接LibModSecurity; z8 Y9 a' T; W) d9 ]2 |5 c' [
: s& }7 ^ N3 `) s5 E9 G( X' i" p
8 ~! b/ x/ ^" k$ cd /root" D; }4 p4 E$ F. c
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
7 x6 U7 {; a R# _7 V3 K7 a7 L# X% T$ tar xzvf nginx-1.9.2.tar.gz
+ f( E: U3 n1 m% P+ T8 ?$ cd nginx-1.9.2
/ z7 f, |! W7 @1 }$ ./configure --add-module=/root/modsecurity-nginx
0 v2 J4 M( z$ N0 m3 \3 [$ make
`- a2 ?5 f8 Z# w" P' C$ make && make install9 J K3 ~# L/ R6 b' A& N. }
添加OWASP规则
# w8 X+ q9 [5 c4 eModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
! g1 U; M# `" e8 P+ P% P0 c8 [: K+ l/ w, ]$ r* j6 h
9 y! E) S- Q) y9 @
下载OWASP规则并生成配置文件
' Q, @% d n1 r, h! N" R# w$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git7 W d( e) H: h( B6 r6 e M
$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/
7 ~# D& F; x! `; M$ g" @$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
3 F9 `& G- W; J$ cp crs-setup.conf.example crs-setup.conf4 G, {1 ~2 I8 d/ z1 @8 ^
配置OWASP规则
3 b1 m) a8 J' R' x) h" ^$ y编辑crs-setup.conf文件* i0 N8 h) C @$ ]- C
) [) U. w/ N( X: p2 a1 o' [
6 h1 [6 b0 j5 X
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf- g" D$ B6 q. O; I# _& r
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
" {* t* X2 t) {$ C) _$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
' a, B4 \% J; P. R. Z2 A$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
h) t: r/ s T& q默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。/ ?$ [5 I8 z7 V8 q* W& k7 j9 A6 N
+ H* [- D& V6 p9 y1 ~6 Z
( z7 I" c* X/ I. U, G$ c
启用ModSecurity模块和CRS规则
. R2 J6 E. `: M( E( E复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
( ?- w9 ^- R9 |, c2 Y; i' W* b
~- c* [9 ~5 K+ s. ~
; M$ k7 ^/ O& U( L6 z) T! Jmodsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
5 A7 y# E5 N8 v; A6 Q9 @, f( U, X9 _
4 C& e# v% b' R! Q" ~
$ cd /root/modsecurity-2.9.1/
7 v& k% g: K r7 }! M' q& j! f- I$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf 0 n- J# z" {, y+ e* c
$ cp unicode.mapping /usr/local/nginx/conf/
" W! x B& j9 L u7 p将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。$ [3 l9 Y; Z0 v# O+ W* x( }) T$ a
# F a4 d9 b# Y7 d( j& B
* O+ e1 P- x$ `$ vim /usr/local/nginx/conf/modsecurity.conf( z/ l {/ k8 E. Z L
SecRuleEngine On
$ O1 ?1 ]/ \' E* i6 T8 y6 PModSecurity中几个常用配置说明:
, x$ u( d5 [3 T, i5 ?; E9 Q
- f$ k! }, {$ F; K
$ O# Y$ X O8 S( q4 t. P& B1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
# b+ g( _% m9 q2 g r% P$ o) M7 Y& ~% Y5 [
3 C3 n$ ~( Q% y6 R2 c2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
) y8 x/ @% J/ \5 ~7 B6 V, ]2 b/ G M# c% f. Y
6 M0 ` S T+ [0 a% l- u8 Q+ i
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。5 _, j ^1 \7 r3 t8 ~
1 A" F, O# x# O4 M. w$ z, \
& A. B; J/ {8 u9 Z6 a4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。% m8 L2 _4 [( R% P
: H- }( l2 g" Z% B$ y
4 w* B' V8 u, U3 @) x- u' F2 W0 T在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
' C4 [/ x% A1 |1 @) V3 M: D1 z2 \! u
/ y0 m$ ]5 }# k
3.x版本CRS$ ?: ?/ S" F; h! y$ ]; f7 d
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
4 T: f; F! E/ z! S* ~' C5 p& h# 生成例外排除请求的配置文件 u! J: w' W: c5 ?
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf2 j4 k( h% B( v$ Z' B
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
/ u7 r7 N! R4 V( l/ q8 w# V! x) G$ cp rules/*.data /usr/local/nginx/conf
' p* b0 V0 o& G% ]% s2 y2 a为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。. D8 B! X9 p- K% C
8 k# [1 F# A' x% P
: c- b( w. z3 A; r% l: g
$ vim /usr/local/nginx/conf/modsec_includes.conf# W% Y) D8 G2 g" F0 E9 k
9 P2 G: |& w! \" F" Y4 k" w) }[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
+ I9 h) y/ b8 g$ W
/ J3 |: F$ j) e2 H* t4 k: |注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。# `9 l, K9 d6 x
$ q) j, F; U1 ]8 j% L. Z# _" `
$ h: m4 P" }# k5 Y. q! q3 j配置Nginx支持Modsecurity
) _+ O# g2 `# O5 J! S8 H启用Modsecurity& ] ?8 e" M$ y) A
使用静态模块加载的配置方法/ m9 e& }" _$ P4 G+ h
在需要启用Modsecurity的主机的location下面加入下面两行即可:
" W/ \9 K3 D. [
4 g1 U3 p! M h8 M1 E6 b' U, X5 Q* {, W, o
ModSecurityEnabled on;
8 S+ p8 C# ~8 v. h% eModSecurityConfig modsec_includes.conf;& h1 }8 s% Z. y- K4 E
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。# ], m4 C& Y; B- A" n/ X
( `4 n" S1 p! x* |, E/ V2 \/ w( |6 r/ O" p0 ~* F+ M
$ vim /usr/local/nginx/conf/nginx.conf
; N$ _; U$ s" D- { Y4 P4 W# V6 T" Q P. D
! P9 Y$ ]! J7 j! bserver {0 N& }4 ~ Y5 C" e( w1 W8 r
listen 80;
. E$ }* |; o: r. C/ ^ server_name example.com;" b: r$ A- d2 r7 S$ |
1 A( q0 \* X/ \$ i% |( K
6 y* i8 ]8 ^3 e+ n n1 ~; F2 K location / {
: p0 V" S1 g' T7 L/ x ModSecurityEnabled on;
+ O; X, y+ i( Q1 i ?( y ModSecurityConfig modsec_includes.conf;
$ ?4 g3 h) C# c/ E root html;
! x+ B( H' s* b U& H* M u index index.html index.htm;
, }. u/ u! \% m& |* E( c }
* J s$ v z1 |: f7 @}
+ C0 b* l& f) W使用动态模块加载的配置方法
, J8 ?/ Q/ a% {* W6 H在需要启用Modsecurity的主机的location下面加入下面两行即可:
1 \$ z' g4 ]- e) @3 `3 A+ F0 o7 r/ A% c# i/ l5 c# Q( c" B: l& O
) X; P% v8 v3 `# n2 x& z3 @: I
modsecurity on;
+ Z6 s: W: m: I0 l* Zmodsecurity_rules_file modsec_includes.conf;9 x* a- r9 \4 N8 s! H" t; a
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
7 q) L3 z7 J/ T
( i. u1 a. h1 B ]8 ~% L
* }& f; {4 |7 v/ x) `) ~4 ~$ vim /usr/local/nginx/conf/nginx.conf
8 D9 g# K0 u; z6 m5 o2 r/ B0 R! b' b2 w9 U3 c+ d
1 F2 H( N- U2 E! Y T
server {. o+ W$ v- a6 d. b; V
listen 80;
7 p/ z0 [$ b) O6 c# A: n: q server_name localhost mike.hi-linux.com;$ Q6 c* C. J. a# R7 v% I. \; `2 `" }
access_log /var/log/nginx/yourdomain.log;
) P! h- J' g3 M" e- V$ w+ A" W6 [, ]
" T. l: k L- y3 R location / {3 H/ s* m) ]/ l
0 ~$ j/ h+ i. `. \+ Q& ~
5 J/ y9 o \+ y) G4 z+ y8 G modsecurity on;
5 F0 c2 x& _! p% R0 L modsecurity_rules_file modsec_includes.conf;% _$ f6 b! J- j, Y# j H
root html;
) R Z7 X% S2 u6 j; t index index.html index.htm;
: o" \! l( l# x4 q' c- i}! g6 y# `) P8 u5 w
}
" j( x& W: P) a5 }验证Nginx配置文件
& L/ c2 S: R5 \$ /usr/local/nginx/sbin/nginx -t2 R! x* ~ u3 f/ l3 {% z$ P% R
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
- P6 {1 ]4 T* |, |8 G8 B$ S1 @# H Anginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful `4 C* j, K, W( n/ F
启动Nginx
2 _+ v, F3 {# O7 W, Q0 G* H$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf# t: Q" a2 K; E1 d8 O) b8 ~3 F
, Z# |1 u( G; T( 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能够战胜更多复杂/未知/混淆的攻击模式。
) _+ u. w1 b: Z! Q2 h% p |