ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。6 r0 _. V# d% J {
. j& Q; N5 R& r9 f0 Q
; J. `: C( d/ k7 i' l+ a- t在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
[. w2 U6 Y0 t$ E3 }. J; z; p; u
' l, ~& Q4 V* t( o5 }( p+ A- I1 J. C7 n" q- B. I
什么是ModSecurity
N$ N: q9 I) _) s& LModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
$ w# C! m$ L' r2 z8 Y: O
9 W# `0 {( F4 ]% m- c$ O' ~
) ]7 }/ N+ |) bModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。& L5 x/ w6 x4 Y. J
4 m" ?7 b+ a: [+ A$ |2 a( v4 r. g# [% b, t& V# z$ i2 D
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。2 e; U' s3 E4 |$ F4 G0 k
) y3 e; k! o6 t% o
. @' B6 g: h$ k% R! d& L- q官网: https://www.modsecurity.org/5 Q+ K ~1 \! B, C0 N2 Q7 ]. v
1 R% y4 y8 D6 Q! H$ A- l: X" c( @ j; O( B; u) B/ c6 I
什么是OWASP CRS6 X1 D! t$ D' w0 v7 [/ z, @
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
0 v+ `. K: R, } Y$ d- g7 l- I
+ F6 `2 J0 H- r0 y. ^0 _" j9 \( y7 Z6 z9 q* U$ b E( i
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
( W5 c+ k$ I" O" m
& o8 X' A, N3 o" k" y8 N4 e7 ^% M& ~: O/ G" S S4 c
HTTP Protection(HTTP防御)
( i$ _* n5 a2 ]8 THTTP协议和本地定义使用的detectsviolations策略。8 ?0 F6 { t* m" i
4 l* c6 `' g s: D
2 b e6 Q. d7 a1 o( t# l
Real-time Blacklist Lookups(实时黑名单查询)
6 D) `* d# z% x; X" U4 R9 J利用第三方IP名单。
8 C6 B. b/ ~) y2 [1 W1 M- L$ }; f- {
1 @' ], ?6 G% @* t
HTTP Denial of Service Protections(HTTP的拒绝服务保护)- H$ Z$ @: ?. U9 O9 r
防御HTTP的洪水攻击和HTTP Dos攻击。9 b) U4 r& E- e
* F- S2 K b7 f% d
L, S$ b2 Y. J1 W$ E3 M' [
Common Web Attacks Protection(常见的Web攻击防护)
/ m. D7 E. K6 g, z3 h( j1 Z检测常见的Web应用程序的安全攻击。
. g. x( H8 L7 D0 w0 r& G2 c
7 L% `5 ^3 t- a. B
# d' T: r$ ?, K6 }Automation Detection(自动化检测)
' N% d: r8 O% U4 I Y" i; W+ ~# j+ n6 y检测机器人,爬虫,扫描仪和其他表面恶意活动。 j. ]+ I. \. p' r& H. m
) t/ s% `' H; I: E0 G) T
4 T! y) c. ]+ g" PIntegration with AV Scanning for File Uploads(文件上传防病毒扫描)
; S! a5 M. G% j0 N) R检测通过Web应用程序上传的恶意文件。
& Y6 [5 N3 x9 f q5 P* u2 M$ i4 W
+ k/ d$ ]" v0 z3 C7 P3 F ?& n, ]/ y3 ?+ \/ b; ?$ d) i( W
Tracking Sensitive Data(跟踪敏感数据)5 z! L6 B& Z( f1 Y, ?2 t
信用卡通道的使用,并阻止泄漏。/ _0 @$ x; T, }: T9 T9 n; v
( v1 e% h7 E _
8 Y/ M5 O' y9 H& d8 f( A+ j
Trojan Protection(木马防护)
3 y6 k E& j$ z8 i `' y4 q! \检测访问木马。! ~6 T* }; f- D. e7 F5 ?2 X
9 K- ~9 I# Q3 W& Y- h! J0 y. Y5 m6 a; u. e
Identification of Application Defects(应用程序缺陷的鉴定). E+ b/ ]6 c# j- h% |1 j, c
检测应用程序的错误配置警报。
: ^: n# v4 {6 u/ ^7 c$ d4 v, c
2 a9 G# A5 M: k
' s1 c8 ^* @9 h% L3 ]2 fError Detection and Hiding(错误检测和隐藏)& @/ ]* c6 D" {' o
检测伪装服务器发送错误消息。
6 r! ?+ n; @6 h# ^. l0 [
2 R0 J( c# ]; M6 s1 m4 f5 S
) X/ T) z) ~4 S. K5 i安装ModSecurity
& d% I$ B9 W* A软件基础环境准备
7 {: G7 D R" |8 @下载对应软件包
0 A& K- n# ]9 u) g4 j$ cd /root
( f" P5 R9 ?8 _5 v6 H# G( R9 l* Y$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
0 w6 f- X+ j1 r$ V$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz* I+ \8 k3 M& y0 f5 K
安装Nginx和ModSecurity依赖包- y1 O1 G2 T2 l" a# v# Q9 \
Centos/RHEL/ t2 ~, T5 i* c$ p+ F2 U
6 p& e# ]" x9 z/ s* t% J/ L* a0 R+ k7 I/ E1 H9 M
$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
/ E5 L3 G* {4 i6 O' |' o) y6 R& zUbuntu/Debian
! s: |, c# s) Z- Z b6 p& {% F, f9 Q5 i8 m; B
& F" b, K; x/ H# X; T
$ 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
' G/ r8 i; o4 M编译安装ModSecurity8 j( u8 ?* O, p
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
7 S% r: l: {. x; p7 ?) f7 J+ C+ D7 V0 @! {
2 t1 ?$ Y" C( B0 ^4 E# V5 ~方法一:编译为Nginx静态模块% U% W5 e1 g- U
+ f' M7 a$ T' H% D* _, D$ U3 p
6 I3 Z1 p' r" {1 o4 C' p编译为独立模块(modsecurity-2.9.1)% w% O/ W) [1 E
$ tar xzvf modsecurity-2.9.1.tar.gz
8 `2 u. ]8 `& M! I. S1 ?$ cd modsecurity-2.9.1/
4 S l: q# N" A$ ./autogen.sh, j; H1 b( D) W- v; s* j
$ ./configure --enable-standalone-module --disable-mlogc
% z! I( X. M& m c$ make/ C9 r4 G/ H; T e: h6 O
编译安装Nginx并添加ModSecurity模块
( n$ e' ]# o9 D/ c6 \$ U9 y; R5 x$ tar xzvf nginx-1.9.2.tar.gz# S4 W! u; a2 U6 g$ `
$ cd nginx-1.9.2
/ c4 u1 f& o, e4 h) P$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/+ e1 S4 w: Y5 ?1 h7 m9 T6 _$ Z
$ make && make install" C4 Z# K) Q# E: p, C0 {) Q
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
5 F! B! w( e" s1 n# v3 a; s5 I9 k6 L/ O0 Z; x
3 f6 T, n$ P) P0 ~$ y
编译LibModSecurity(modsecurity-3.0)+ S' v: b3 i4 `# A, W9 Z
$ cd /root
: _4 c. P: @( Y7 E$ git clone https://github.com/SpiderLabs/ModSecurity9 M: C9 @( y6 n# D4 Y! @" q
$ cd ModSecurity
* c% r$ @2 _# V$ git checkout -b v3/master origin/v3/master
9 `, X: K8 e* ^$ sh build.sh
- X8 [. i! v3 D% n1 W$ git submodule init
1 F8 Y; c0 p3 ?; R! f$ git submodule update. X( H7 q/ ]4 B3 \, i
$ ./configure ~ \/ G# Y# f/ P
$ make
% F- f# e& A5 R1 ~ P% R, A$ make install2 m# B A G/ b! p0 M8 L5 k
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。5 E$ `% Q1 t9 p" `
9 ` o1 L+ \5 v0 H! y! U; M
( b; J4 F3 k" I. }, a1 y, u# T
$ ls /usr/local/modsecurity/lib
% \2 b [. t) f! alibmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0, v4 b, u0 l8 V. j( g& x& p
编译安装Nginx并添加ModSecurity-Nginx Connector模块
- q5 b- H- B/ V2 C使用ModSecurity-Nginx模块来连接LibModSecurity
# B5 a6 f8 @! u+ h
9 X& b! B( B/ T4 H9 |+ f; M! i. k2 ]# K6 _$ T6 F5 f* j
$ cd /root, @- u2 P! T6 l% l/ T9 k& z4 m$ u
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
( P8 M: a/ }& d+ j; W: M% u$ tar xzvf nginx-1.9.2.tar.gz" ~3 _; R4 Z# ]; K$ n9 U* z
$ cd nginx-1.9.2
& P6 i" s8 A0 C$ ./configure --add-module=/root/modsecurity-nginx
6 j. r- o: b# z( E! ^$ make, s, i# p2 p( ?
$ make && make install6 v% k' L z Y* B6 V+ v, K
添加OWASP规则
D0 P( j0 B% K* ZModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
* A8 K, p5 W' H
3 L3 s3 c/ e8 X' `) y0 v+ ^$ O! t
3 i, K) P/ p z7 p5 r下载OWASP规则并生成配置文件2 q' t5 A0 D, }1 Y1 `$ x+ P+ }
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git T/ L& j9 Z( s: ^3 h4 X& E
$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/ g! `5 S' y( Q7 z
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
2 s+ Z" [" n( L- ]9 O |$ cp crs-setup.conf.example crs-setup.conf# ]0 d' f$ n: q' Z& L
配置OWASP规则5 ]$ V7 [" k: f% a6 n- @( } h2 q
编辑crs-setup.conf文件
& H9 K2 Z, ?; Z9 h8 z r
1 Z. A; \& q9 z2 J) m" @* }' I, ?1 p! O
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf( w2 O& t2 Z. N, _
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
; ]* G8 p* Q2 ^) P+ a( h$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
* {0 ]0 v8 t6 {4 ~* ]1 w$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf5 A0 e* V* J5 y5 v; n9 P
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。6 H9 s0 |* H4 X. K
B' W' p$ |& d& `
. D, I: }" I: r3 {0 h$ m
启用ModSecurity模块和CRS规则
9 Z4 i3 L7 {2 ]" n" v% v复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
( A0 u; f( i) ~7 J1 s4 [- H
$ b) o, `/ V# Q1 T3 u4 @- k( |9 ^5 o) s# a
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
8 Y- G% _; |; e6 s, w( \ F! u
, z/ j) S! v) I7 B. W9 N. w; o& u
$ cd /root/modsecurity-2.9.1/
1 m3 l: e" h9 Z3 B& _# i' n: D q( e$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf 9 z. z, M" l- m6 S/ Q/ }# ^
$ cp unicode.mapping /usr/local/nginx/conf/$ ?6 j, r& s* f! \# [+ s( ~
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。; B# E" }2 Z9 e$ b
; }; g; F+ U# W- T7 F
: r2 ^) Y! @9 ?$ vim /usr/local/nginx/conf/modsecurity.conf
4 F2 L, F, V; Z/ X( K4 USecRuleEngine On
R0 A" G7 o; L/ HModSecurity中几个常用配置说明:* @* d' e; ~: y
9 h+ U. B" B5 V* m7 k9 l3 k# u. e: @6 G- \% L
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
9 B z( i) ]" k+ ?( L8 x3 H4 u- g6 H
9 M2 m: y: {& j: b+ O5 x# i2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。* f2 k2 [/ ?' G5 i! A4 M' R/ R% B0 N
* S6 w1 m* q9 l/ L8 O: f% M- M
$ d/ P; ~( p2 ]" k) P' F0 Q* @' ~3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
/ l8 G, |; W0 t! T( [4 X
' u" J9 O" X: l0 T% ]9 T% D$ e
6 q2 y. U3 n0 g/ z& W4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
* j; o1 d% q" F& m8 h' Q( `% o$ \6 E8 S E% P4 S
J% L0 g% f7 M0 N( p) ? y在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
* b, g; a9 N: {& `/ m4 }& j' ~
* v3 _$ y& y3 c2 ^. [* K2 {# O
' l+ h( A, t4 n3.x版本CRS. H* G* d: v* d# d* r+ B$ J' p
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs4 A) a3 r+ m2 J- s; G! B/ C. R
# 生成例外排除请求的配置文件
2 f9 m J% h$ y' S) n3 \$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
* F' Y; }) V! S0 }5 O% ~# M$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf& U+ G+ W1 ~, k7 l" {; H
$ cp rules/*.data /usr/local/nginx/conf7 @( a! t6 W5 O& G
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。' q0 e) [+ A1 s; q; G& ^: U6 ?
+ S6 ]8 ~6 L8 y! Y* I$ c
" F+ j- i0 i% e7 O) f$ vim /usr/local/nginx/conf/modsec_includes.conf- t% r/ [0 b1 t4 m" q
. ]* v3 v( F' T" i
[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 2 J1 a5 v$ z$ _$ ]
( z. x- Y& J" d4 V/ P
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
. o! W2 U+ z) V0 r5 g
4 l; L( d" A/ ~! n9 P' W& a$ s& m9 l/ `( l$ R5 ]3 B: z
配置Nginx支持Modsecurity6 s9 J5 F( R9 E @ g
启用Modsecurity
: _9 x# J/ C! r: V" R* x使用静态模块加载的配置方法
+ u/ k( Q( {/ z* J在需要启用Modsecurity的主机的location下面加入下面两行即可:
' y) j1 o- p$ m% v' Y9 @ P
0 ?! e0 X7 l5 b1 J9 d- Z8 k y/ N# i/ K$ ~ a
ModSecurityEnabled on;/ R7 a# ^4 ~, c
ModSecurityConfig modsec_includes.conf;
) J/ ?3 B x2 K; o0 z, I3 e修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
! W) ]( e. L4 D" n, L" j5 G
6 _! k4 R4 g8 l; C3 C" m4 P. q1 q+ K f4 s2 [- U; W
$ vim /usr/local/nginx/conf/nginx.conf
3 S9 w% {* k' J
5 r: F; V% T$ s, f k
) B; z# F. j" d# K- D% U$ Hserver {
0 i- ]" T- o: ?8 X# p( u listen 80;1 U" ?9 E0 Q! r! i. {& i
server_name example.com;0 ~) [4 P$ u$ L+ b/ [
& d/ n7 u) q/ s3 y) e k
& O: f( a4 f) L E& _9 i# R location / {5 g3 V& G& u2 ~# W) b
ModSecurityEnabled on;) `: T; U. i* S
ModSecurityConfig modsec_includes.conf;
( G) z* S/ T8 t root html;
7 R' f. `* u* d, H/ L) ? index index.html index.htm;4 L4 f/ Q; |& K, T
}
2 K8 u1 `1 R+ T2 X0 `5 x( [}+ Q/ T4 k/ @5 x- j3 G, n/ u
使用动态模块加载的配置方法7 q4 _8 o' m8 l4 W c
在需要启用Modsecurity的主机的location下面加入下面两行即可:! R a( T4 r9 \5 o# Z. e
) M2 ]; s$ ^. G$ j/ ]6 ?2 P
% ?1 v" ]7 _, R0 ~+ z. lmodsecurity on;" H: q: S5 a6 R: O% s, L
modsecurity_rules_file modsec_includes.conf;8 _9 T1 H, b1 h9 x7 r
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
1 v0 r& e# n& p, a
0 N( H/ r+ m2 m% i& e5 S
3 ^) o& `' W+ W8 {- x$ vim /usr/local/nginx/conf/nginx.conf2 w7 v6 s; l; B; p
( z8 K& |' m Z5 ]( H! q1 B0 r6 X8 x2 e& @. h: v5 @
server {
' u: q: _8 p9 W2 k9 x listen 80;
& y6 h9 w! u e server_name localhost mike.hi-linux.com;/ [9 i) Z$ v# z- b R3 r+ R
access_log /var/log/nginx/yourdomain.log;
/ p; D% j8 p- m9 v2 L* m% e! j
! R' X# w( k2 i" [4 G
" i4 z. ~' b* h2 Z R location / {
6 m* j' Q! r3 T$ ^7 m
1 f! u: X( _' i( O i/ a9 D/ N9 l9 B. X% X) I" r4 G- s1 z6 q
modsecurity on;
( d s* X) [* Y6 A$ k$ r4 t8 } modsecurity_rules_file modsec_includes.conf;' O9 a6 R4 c0 V# b3 }9 a! a+ r, W
root html;
; Z2 m2 E r h( M* l/ T index index.html index.htm;# M# ^% Y# H; o' k4 s
}% G. g$ |3 U9 U0 `" {
}
/ _- u! b O" ~- l: s# @. c3 A验证Nginx配置文件
+ E$ [. [! T# r& B7 w$ /usr/local/nginx/sbin/nginx -t
. [% {5 F7 j4 Y* |* s" x9 Fnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok+ n& x. h. g6 S
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
2 V. r4 E2 F4 E0 _启动Nginx1 B9 f" I1 T( w" {6 G4 g
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
/ _8 s+ n* v& Y) y1 I- ]# @5 b2 V- _8 z) j- \) s7 y/ m3 _3 Y
测试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能够战胜更多复杂/未知/混淆的攻击模式。 . m% [# ^7 ^1 v- R3 |6 {& P T7 s
|