ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。7 M$ q2 T6 N: y+ K; G8 l
, g( ^6 w% x: V6 [, y- l
5 n& J; ~5 {1 T! Q7 S# [% a在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。# t c4 K" f- X5 N3 a: C
3 m6 `; |/ ~4 [5 L V
: l0 c3 T7 p, Z" U5 y6 C* n什么是ModSecurity
7 @/ I7 n3 Y& i' N5 B$ IModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
P* c3 V4 u' `( T. f7 m! H+ s. [
% m B& Q9 S4 ?( T
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
3 m6 E- M+ n/ B$ A+ I9 e
( @0 i8 R ~) a& H7 ?. ?; W% G/ H3 j4 Z0 Q' S. e- B
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
) ]/ M5 f. e% e) v% }$ E8 e3 v* u- D, V/ F$ H* o
1 z0 d K8 M* I1 l( w- s' t* v' r官网: https://www.modsecurity.org/
8 w4 a- b0 D0 c5 K5 f
" t5 v4 U4 Z5 O1 _ p; k. K: P$ @# x4 v
什么是OWASP CRS
( g( z: A d6 {% C0 aOWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。. \, u8 P+ ?$ Q9 g) M
: D+ z0 z9 s+ e4 Z9 {) F( |
' x* I" P4 Q+ d: O. ]2 ~& hModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
+ I* S( u5 `' x7 m0 T4 T, X4 w0 W( G* P/ _) R
' J: G- W) b: A4 J' u
HTTP Protection(HTTP防御)
8 L7 J$ R5 q6 XHTTP协议和本地定义使用的detectsviolations策略。4 i$ i2 S6 b, L% a1 l6 T
& N0 [2 M% ^: Y' O5 ]$ s1 s
8 u! _* f( R! Y. k. T. o9 H
Real-time Blacklist Lookups(实时黑名单查询)
6 D9 j x d! d" ?/ `利用第三方IP名单。/ c+ E+ t8 Q) y# Z7 C- B2 l
2 n/ x0 o+ i, f( u; Z( o6 f4 J4 Z, Y; H
HTTP Denial of Service Protections(HTTP的拒绝服务保护)
3 j+ p- I' a; p' _, P- A! u防御HTTP的洪水攻击和HTTP Dos攻击。
+ h+ G6 b; s: n8 Z! l+ w/ n+ Q* }+ l1 z: u$ ?3 x
e0 w# _+ s$ B' u: {Common Web Attacks Protection(常见的Web攻击防护)
9 g/ D9 ^* @. d0 V9 c检测常见的Web应用程序的安全攻击。
9 |0 e/ q3 ?! ~- a
! t8 v! i: R7 ?0 O* j
; k1 S' _: W/ _6 |/ ~0 QAutomation Detection(自动化检测)) W8 l/ y: m$ X( f: |3 P7 w
检测机器人,爬虫,扫描仪和其他表面恶意活动。
, t* x6 H4 ]# O. b4 B- o
7 q- W* a1 P n X( Z9 x
, {: |% P& U# ?4 c# L# rIntegration with AV Scanning for File Uploads(文件上传防病毒扫描)0 |' N* D$ m' k/ D8 ]8 {# |" i, N
检测通过Web应用程序上传的恶意文件。
, x" L$ G2 L3 T; G/ f d$ z4 d0 I1 y( {3 d
% R( Y7 f+ \; o6 X: \: X
Tracking Sensitive Data(跟踪敏感数据)5 M6 ]& b/ _3 M( o! W
信用卡通道的使用,并阻止泄漏。
$ H& j5 _2 O: X% _0 }; ] O" N, o9 G' B
3 f, y# {' x" j; `1 y3 ^9 P) J6 S4 gTrojan Protection(木马防护)% W* z% `/ k H3 Z1 v
检测访问木马。
9 h' b: |0 L- }3 P3 a. B. P; P2 @4 O4 y! |
' b/ @- p7 m; r/ Z
Identification of Application Defects(应用程序缺陷的鉴定). d/ ^5 u9 [# a+ D& P; \7 r
检测应用程序的错误配置警报。* e& ~! \ b# r% b' L* f- I# \
9 [5 D D2 S9 | m$ ?
+ r$ O( S; C8 I1 u* Z( `Error Detection and Hiding(错误检测和隐藏)
7 T% l3 R' D6 ?$ P' V检测伪装服务器发送错误消息。1 Z d, D7 P' X5 C
# U' I. e; s8 a7 k9 t5 E
" g0 R/ Y. q7 s1 s( c( F( r安装ModSecurity
6 [! A# j5 a/ H5 j软件基础环境准备
( a5 y$ B& Z$ K7 {7 Z下载对应软件包3 D& w: z) N" Z% g6 d( n" u
$ cd /root
/ J# m$ l0 x5 k6 i5 C$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'/ `% h9 Q" R& x# w/ F
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz8 F( l# ^. G7 {- N" _/ q: R) d
安装Nginx和ModSecurity依赖包
/ U1 B8 J- _$ \0 WCentos/RHEL4 y$ \# f( P# T: m
J# J8 B: v" T; N
6 e; e9 T& D" @' l, l+ j3 ]$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel$ H8 k; H" o5 ^* @) ~0 p( D) G5 H
Ubuntu/Debian7 X2 S7 ?: g: V5 s7 W6 w( i) m
. n0 R* W- D: J9 M. g" E2 Q1 \# h+ }) D9 J: a6 l) k6 q/ j0 y8 x. F
$ 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
; O! a9 @2 m+ i* ~. z3 ]编译安装ModSecurity
$ D1 ?' b+ j7 TNginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。0 w6 j% p7 E) t: P' T- h
5 }& I: k, L- x9 L2 i) B% n' Q* s- V6 C- x1 B- T7 M
方法一:编译为Nginx静态模块
! K& l0 A" @6 O2 |
6 O8 B, I4 u/ o! L, d& f9 E4 {8 u" l0 {! ~
编译为独立模块(modsecurity-2.9.1)4 h1 O8 j; {3 ~! I- }4 g) T
$ tar xzvf modsecurity-2.9.1.tar.gz
; Y8 @$ X/ h/ z5 V$ cd modsecurity-2.9.1/
2 a% L" l9 s" J( ~4 p$ ./autogen.sh" p2 ~$ { z& t
$ ./configure --enable-standalone-module --disable-mlogc
8 f8 y1 D; O* i5 u$ make' [- h3 i+ o8 z5 e
编译安装Nginx并添加ModSecurity模块
' n! y8 t p- X' i3 z$ tar xzvf nginx-1.9.2.tar.gz
- h2 B, {& M9 w- H/ Q# ~. N- y$ cd nginx-1.9.2
1 `4 R9 M5 j. i2 G& Z/ j+ q$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/7 T$ l( c4 L. ?" o
$ make && make install
, i8 ^( Q& R5 \( H* V方法二:编译通过ModSecurity-Nginx Connector加载的动态模块. X- u6 M+ e2 S( v* g% g# m/ Q3 V
$ K% z" `8 C6 A1 ^/ `
& `9 g! ?( [3 J4 m: T" t7 k+ z
编译LibModSecurity(modsecurity-3.0)* |3 a o( h* \ I7 W1 {
$ cd /root: c% B+ f; T9 S9 r( l6 L
$ git clone https://github.com/SpiderLabs/ModSecurity5 E S }$ {# t, ?2 o3 p; |: V
$ cd ModSecurity1 F/ b Q, [" ~' t; o1 M" i n' c+ u
$ git checkout -b v3/master origin/v3/master, I* x0 f% U; u- [4 U
$ sh build.sh
- B* \3 S! D* ]# E7 h$ git submodule init
5 l( G) N p( G9 L/ u8 E$ git submodule update
: q$ `" n7 |& b! K E+ K: L0 A$ ./configure
) R' M5 L5 s) k0 B! x0 x$ make
4 Z6 b: X @6 X$ make install
2 b; q# C {. H; s) }3 sLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。9 J! X3 S" w. x& ~
- Q, g+ g' a. o( w$ M/ w
& v& J7 k: I, f% o5 Z; I- ?$ ls /usr/local/modsecurity/lib$ c; \2 a$ |1 g- B) Y, M. C4 h
libmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0- Q2 w. X) s! [4 L9 z% x& _
编译安装Nginx并添加ModSecurity-Nginx Connector模块) N) K" w( o( }
使用ModSecurity-Nginx模块来连接LibModSecurity
e. u# l3 R" c2 G0 S0 Y& x9 e3 T: `7 y+ |5 ]# O6 G6 l8 L* b: ?% |7 j9 T
! x8 ~, \" \; Z8 j$ W" r; i+ e$ cd /root6 k, I% w2 l: E9 ~+ @( H
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
( Y$ K4 n, `9 ]2 D; ]: c# |& x$ tar xzvf nginx-1.9.2.tar.gz! M0 U% K5 }9 |" p, Y/ y( Y
$ cd nginx-1.9.2
6 `" M9 `7 A4 E9 l$ ./configure --add-module=/root/modsecurity-nginx4 y6 {& e' M& p* d% V! W! G
$ make$ O4 o9 ^0 y. z6 n" E& _, v0 j
$ make && make install
8 Z* p. u1 n% v y9 ]# z. j) O添加OWASP规则/ f1 F+ E. U% I4 H& L8 `* y+ d1 |
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
& L3 W& e0 g! D1 J$ r9 P6 g# l6 y( x, f
5 e# l9 V; E. Z; q$ O+ @( C
下载OWASP规则并生成配置文件# S+ f# q4 ?% F+ ?
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git4 i( W, G# E1 k9 X' p
$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/1 s* z7 o* h& {8 u, X6 E9 H
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs5 y- U: V. t; B9 O
$ cp crs-setup.conf.example crs-setup.conf2 ]) B' N; A9 d- n1 L
配置OWASP规则2 ]7 r7 T! T' N4 B" {6 R& s
编辑crs-setup.conf文件2 Y2 K4 L, l/ n, G2 f$ X
+ U1 Z! c" q5 `& q+ P# ?, _' e0 K- e3 d$ L: I+ ~
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf' p: T8 @" M4 P8 d4 e
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf/ {& g! r/ S4 C5 Z! z3 D
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
+ f8 T2 K+ Z- y, Z+ R$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf; G6 A# X* p7 U" R# i+ b8 S
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
M7 G/ i2 X2 I
$ s3 T# @ B# e; F: Y
* h. D" X) j; X9 f1 W6 K启用ModSecurity模块和CRS规则6 v1 O- k' h' l" e
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
; q3 A! H$ D' J+ H8 m9 f$ q
# ~7 X* Y; V9 R* U- M$ r ~4 a8 F5 M; c! d
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
' t% A5 |1 k4 E3 E3 X
+ I+ X; s3 Z) e6 t
' u( c. S9 l! J5 i- \5 n' E$ cd /root/modsecurity-2.9.1/# N/ b z( d+ J# f
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf + o4 X" I: A- H+ Z+ k' i+ w
$ cp unicode.mapping /usr/local/nginx/conf/5 n: v) v6 c3 E
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
* {2 B0 l$ D; C7 G) M Q3 U5 A \7 ]) A. |; c
( T) R4 A0 w. \2 D2 ?+ W
$ vim /usr/local/nginx/conf/modsecurity.conf) l0 N. P& \5 A5 m L% y; p. ^7 S
SecRuleEngine On
# o% \: G9 g8 [' }2 _ModSecurity中几个常用配置说明:
8 M2 J* e( D( m/ y. M# B
+ s& T3 |9 _& l% }3 a( v3 l
8 l! m# K4 q* ^4 H; W$ |0 u1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。) K! V3 p. ]: _6 W; v: a
. U( L+ `( _* p/ `1 o8 {+ J2 l9 {
, k8 `2 g0 O( R% C2 V+ {0 S2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
+ E2 p: ?7 y2 Z4 v* Y" O( Q
: c9 j/ \# x0 l k: u6 F- l E7 N
; [; d$ }( ~9 |1 _3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。& @) h1 ?5 ]' v; B2 P% M9 n; V# I
2 |( R! M& M; B' w* h! e0 }% K+ ~2 k( W- h5 M9 M
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
2 u: X# `: H" C- x, N# M
% q* Z1 N, l8 v W3 R2 ?: Y
7 l- z( e5 o8 o6 Y4 Y% ~在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
9 h2 H8 m% @" P
4 j6 T, R3 n: n9 T4 P' G9 M
: I9 |, F% }& b* J# v3.x版本CRS1 k4 _2 N6 J: H7 y, s
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs1 k. o, [6 n4 I
# 生成例外排除请求的配置文件
1 G% o- `9 [8 B& W3 b$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
, ?9 m& I6 G* e$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf" b) T5 f' ]0 t2 d' N5 f
$ cp rules/*.data /usr/local/nginx/conf
4 O! |# P& v, i% K/ \# |为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
. K" O* P+ y' p; s$ o
5 L9 I F+ E) R" D& E; Z1 z( B+ G6 b$ [0 }. I
$ vim /usr/local/nginx/conf/modsec_includes.conf( j) m2 _* U2 p. T/ I- m
$ ?' w, n+ L# I9 G8 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 a) E* m( P( B6 N4 l
2 p* s. H+ s4 n) N* \6 `# E- l+ w注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
8 i/ m$ G1 u. Q% b
5 I8 Y2 p; t# q; t# d l7 G% E; s* L
配置Nginx支持Modsecurity1 |" q* a8 s5 K2 T0 d) u
启用Modsecurity
+ W- g, S) G5 i使用静态模块加载的配置方法6 K+ t# B( j* t5 S
在需要启用Modsecurity的主机的location下面加入下面两行即可:1 V9 D4 Z* }! a* L7 i
- j2 c# y- U2 i
% d$ s: x8 g" ]1 e( X. A. JModSecurityEnabled on;
c3 \- d- d" nModSecurityConfig modsec_includes.conf;3 h6 j0 d" e O
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
4 P1 [3 M V" i( K( [# i
, H5 Q9 b5 \) f7 F" I
" w; ~! V# u2 p' p1 H0 @$ vim /usr/local/nginx/conf/nginx.conf/ p# c' y1 E" E; B3 X
* k8 V5 A6 u# v6 Y5 C3 @ E/ e( e6 {3 L' I/ b
server {$ y% D1 M7 Q- n8 k3 S
listen 80;
% K( B. x ]' L+ [: u/ d server_name example.com;$ o* h' [& B: ^1 Q
+ t1 }7 m, _( d" W9 D- j
, f" l4 u8 h8 o- \( c* r8 Y V location / {
8 j; O7 E9 U8 \ F ModSecurityEnabled on;: ]6 E/ X. {3 f6 Q+ t( H
ModSecurityConfig modsec_includes.conf;
3 V |8 v9 D! ^3 E ^5 E root html;3 \: d8 V% _( ^
index index.html index.htm;$ C [5 t* ^+ z5 A& p- q$ i
}- b% M8 k$ c% ^- M3 B& ^2 ]
}
7 G" p# L d- V9 o2 L1 F使用动态模块加载的配置方法( T: _1 R: ^2 P6 L% a
在需要启用Modsecurity的主机的location下面加入下面两行即可:0 W+ T i/ {2 { c- Q0 Z& G; H8 J
; x, f% P. p- @2 Y% T& Q4 F' N* D$ P2 K6 i5 a/ g6 p" n
modsecurity on;
/ s% o7 e9 ^6 m( wmodsecurity_rules_file modsec_includes.conf;
, S8 r2 _4 O4 {修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
, z% ~$ ?2 k7 L, _9 j! z
1 o+ A: R; g, H2 t) F
! F' `0 O. O! |% o$ vim /usr/local/nginx/conf/nginx.conf
5 R L. n6 j3 x6 I" g4 Z6 s/ Z" i$ P9 p! l. v1 p
4 q R; o$ }/ S6 M7 Wserver {/ a; s6 O6 @# j' [* p7 k# N
listen 80;" [( Z# \9 O9 S; G9 x5 U7 `8 Q
server_name localhost mike.hi-linux.com;
2 W3 u( N6 X* g: o access_log /var/log/nginx/yourdomain.log;
8 q7 z7 T4 R0 x. L; v& r9 L# B5 y5 q
2 [0 B- T- R/ H5 ?
location / {
" ?& f4 s$ O' }) E5 D( I4 i$ _
( f u. `& h2 U
: M; o& S, H# C: Z modsecurity on;; H0 [9 n5 `6 H1 F, r
modsecurity_rules_file modsec_includes.conf;! }8 z) H" Z( D t
root html;
6 B' u" Q+ `3 R/ n; r% Q index index.html index.htm;
% `: N/ @# T \! n4 n2 e3 k}8 O6 v! @* x+ W+ i
}3 m& {1 }0 O$ v8 F3 s
验证Nginx配置文件9 C, Q: Z. t! h$ z# q3 o+ F
$ /usr/local/nginx/sbin/nginx -t7 ?. }" n7 F+ a0 \6 R6 x
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
( U9 X0 q( ~7 M3 l* d, Enginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
: \% V- E q( q4 B9 S& S7 T+ S启动Nginx( l1 h; @; h% l7 l( A; y6 \8 ^
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
3 A# v" x" ~4 @9 z6 k
4 a0 g0 A* K/ H3 J! f8 E2 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能够战胜更多复杂/未知/混淆的攻击模式。
- V" {7 k) `& t# X- N& z |