ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。% {+ f. {: l$ |+ U7 H
% A1 |5 h: B$ Z& f
p8 l4 w- s. x$ F在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
+ O7 K# L1 X' m3 X: X# E9 I" M2 {
) B3 |3 {/ s2 m9 L% U" g. F* f1 T6 j2 H) t( B$ @2 a# }
什么是ModSecurity
# g( U, X+ f% m5 |9 }) f/ y/ P5 lModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
5 e6 v% B9 r# [: v8 E6 z ~6 z( U
* R9 H% T% u+ z% ]2 E! n s! k" `, l; D7 v) {2 ]4 Z' R
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。9 z: r! q& b% Y1 Q! G, O# u
+ P2 W o7 @ f8 g; B/ X: T
$ l% [ J, S9 Z- `3 c0 Z- U
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
8 w1 G" H/ @" V) s# x
6 N I6 j1 `/ @, t
" _" X; m* ~$ {" K& ?$ p官网: https://www.modsecurity.org/& @* `2 D3 p* O8 L7 H4 [
, p1 Y6 P1 {$ j) n6 ^% M. R& S E- a, h! Z, U) [' F
什么是OWASP CRS$ v4 |& K8 Y" c1 o8 c' M9 y
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。+ W* Z& Q$ q% m. l8 W
9 u( X* y1 c* T
" P. V S+ U0 P5 Q7 r; }ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。+ ~/ s. V) d0 e3 W% N
+ o) j. T6 U A* g. E7 J+ j
8 D! L4 s$ C% I# z& f8 Q AHTTP Protection(HTTP防御)% \8 k6 v7 N/ P0 U
HTTP协议和本地定义使用的detectsviolations策略。
& y2 H' y8 n& }: m; B& }3 G+ x1 B' t2 ^. c8 K
( R# {6 ~7 {% Z. B8 ] [9 Y+ h1 q7 cReal-time Blacklist Lookups(实时黑名单查询)" j; h7 g1 ]( K2 u h
利用第三方IP名单。
$ \8 k' i- z" G- Q; F! y
3 K/ d! c+ X7 B! `: q
, q& g+ H& J/ S4 qHTTP Denial of Service Protections(HTTP的拒绝服务保护)
7 c0 Y# T' m! O8 K8 c! s$ Y* e防御HTTP的洪水攻击和HTTP Dos攻击。
% A8 a& f1 @$ S! C9 r
" C7 g& C9 A& n: p0 ?
4 I/ g# O" c; ]Common Web Attacks Protection(常见的Web攻击防护)
; S _5 _& R( |" `- Z, B检测常见的Web应用程序的安全攻击。1 I# Q" ^* @" P
- x8 t' J7 T) C8 D" ]' r$ e, M7 F4 [
# ^0 s7 q9 {9 V+ G
Automation Detection(自动化检测)6 S- o1 q1 z( z6 C
检测机器人,爬虫,扫描仪和其他表面恶意活动。+ g! i! P: }9 B- u* g2 b: k& l
5 u5 f; b" a/ X- l1 t; p1 U
" W" e. ?. ?( _7 P' J) XIntegration with AV Scanning for File Uploads(文件上传防病毒扫描) P- F+ e7 ]7 Y- A. W6 ]$ W" y
检测通过Web应用程序上传的恶意文件。, G6 q7 b7 Y3 O6 R# n4 S6 E6 H4 |
7 l+ a) a* }8 g/ E
! _4 K$ x: C3 H9 `Tracking Sensitive Data(跟踪敏感数据)
3 R7 Y! t* l+ z& ?) @) n信用卡通道的使用,并阻止泄漏。) @7 [3 G; \8 S. g$ w3 N1 e' q
3 v0 f9 F, [9 S: O) x" {0 L0 h
" R) o8 z t U, H/ g; D( JTrojan Protection(木马防护). x, s; O) F9 x6 p' g4 f# l
检测访问木马。
" L' K2 m) s3 H3 ], {! \5 P
" W8 Q) P% r! U: D9 F0 Q' ]% g4 b9 _
Identification of Application Defects(应用程序缺陷的鉴定): A; M) `8 t9 i! ?) D7 J* \ _
检测应用程序的错误配置警报。
- I4 i) C. A; ]3 J% T
8 F* X& k& T+ ^5 ^& g( q5 c9 \
k# H4 a% |# _Error Detection and Hiding(错误检测和隐藏)7 }$ S/ \! g# r/ j4 ]1 d9 g
检测伪装服务器发送错误消息。
9 M) q7 V3 ]; L) F
+ ?: f& @, o' [, k1 b7 E, T# N: b
8 s" P% I0 j# L. s) A6 d: H1 J安装ModSecurity3 y, N7 a' s4 n
软件基础环境准备
( ~) i/ X. ]6 W a3 ?; x6 e下载对应软件包
8 R4 P* l% g/ Q- M$ cd /root
$ L* r4 O$ n% F* a4 a$ c# Q$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
: m' w" N1 ]5 C$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz
. ?$ ?8 C1 I) G7 U* K& B+ U安装Nginx和ModSecurity依赖包
. U7 x* G8 E6 u9 T1 oCentos/RHEL: S4 F$ R# e$ b0 I" u% n) j
' w6 K8 ^5 ]/ t
4 ]: X, h# B; Y, ^1 h K+ h$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
0 A7 m6 T* N1 zUbuntu/Debian
0 p3 ^$ ?0 A$ a: [$ z7 }$ u
! p" u6 |0 P6 D$ l" @6 F; T7 z/ u) I8 }: l: i# t1 ]
$ 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++-dev2 L2 X4 D, d6 j5 L) V# \3 ~2 `
编译安装ModSecurity
- G# [) y1 x/ z" h: {' BNginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。' r W3 p5 x, x+ q* U7 o
8 X+ T6 r: S: H% @/ B( s+ _4 Y q4 G' }% M- r3 _ z) q8 u! V1 a
方法一:编译为Nginx静态模块% ]( o+ B3 b# S/ D: t& ] o; a
: O6 c% Q/ B* G* k6 w( ^' g! I/ |" U1 J9 P# m4 `" V9 s
编译为独立模块(modsecurity-2.9.1)! v$ _5 u$ Q& K) T, q: _6 @: p" y6 j
$ tar xzvf modsecurity-2.9.1.tar.gz6 r D' d0 o6 H1 L! }2 ]' a( a
$ cd modsecurity-2.9.1/8 D7 K3 W, a) T4 \) N, X
$ ./autogen.sh
4 B/ G4 j2 }$ L5 C5 r$ ./configure --enable-standalone-module --disable-mlogc
6 B& \( Z5 O8 M& t$ make/ N/ ~+ ?( W5 q* B
编译安装Nginx并添加ModSecurity模块; d2 Y: [* R/ h4 [; x: x% o7 E
$ tar xzvf nginx-1.9.2.tar.gz
) P3 m$ Y, z* Z- a! W$ cd nginx-1.9.2
6 ^7 I* ]1 s/ K8 ` B( P$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/8 R* v$ |3 t$ Y2 j; ~; {
$ make && make install
; e* u& f a4 E方法二:编译通过ModSecurity-Nginx Connector加载的动态模块, |% E* G6 P1 c* X
2 e' G) J% z% Z
2 H W7 t/ _6 z7 G编译LibModSecurity(modsecurity-3.0)
1 X* V9 W" @- x* T$ cd /root+ {. v5 [3 F* J6 L6 e6 u! V
$ git clone https://github.com/SpiderLabs/ModSecurity/ a1 e' u3 I, N6 |5 W4 @1 Q1 \
$ cd ModSecurity$ d# a/ ` K4 f& I4 c1 ^( g1 Z) s6 R+ v
$ git checkout -b v3/master origin/v3/master5 a/ [/ z5 Q. B( s2 z
$ sh build.sh1 l5 [# m/ W3 p& L P
$ git submodule init
& R! T! W E3 B. t$ git submodule update
& a& }, j$ i m# F% G0 r$ ./configure
+ g: {; ~) B1 `/ q3 f! l) P* Y$ make
2 J* w. c7 x8 J& Y$ make install6 K& _; t- ]- h
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。. A& D3 Z) v$ n, q+ O$ n
6 X2 F+ u3 |) k Y" \$ T! V
& r6 c o6 n# o1 {
$ ls /usr/local/modsecurity/lib5 p2 }' `. ]% p7 a6 u1 i: y% U
libmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0
) z6 { _' v0 @/ z编译安装Nginx并添加ModSecurity-Nginx Connector模块
# B, |- p4 _; k5 J8 ]; X使用ModSecurity-Nginx模块来连接LibModSecurity) }3 B/ l7 U0 j; U5 Z9 S
4 l/ u; o0 y* g. `5 p5 V, v. R0 |3 f1 w( j' k, a
$ cd /root, {- O3 `* k e9 A' s; b! o. |
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
' P" P# l5 K: c( `8 f6 k9 \$ tar xzvf nginx-1.9.2.tar.gz
9 E9 L* z4 ~' `; H) D$ cd nginx-1.9.2
0 F3 t( E6 V( {1 h! Y( v$ ./configure --add-module=/root/modsecurity-nginx( ]9 t/ K9 t- @8 [8 t9 r( D9 ?3 J
$ make
& h1 v8 a3 B8 ?* D# |$ n' I3 N$ make && make install
- _: h: L& V) l) [添加OWASP规则
0 R* {" Y4 J8 J( f0 nModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
4 J' C6 I& K4 x$ x4 ~! x
9 \% ?" A( d/ O5 V1 z7 u
$ j& s. P. Q$ [8 E2 d. V+ u/ r- u5 [5 m下载OWASP规则并生成配置文件
5 g. n$ n& p% F3 x$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git4 m# n6 _! k% \; h. `
$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/7 J/ u1 T" V5 E ~
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
" t$ o2 ~5 m* F# x+ o4 x) N0 C9 ^ y" Z0 o6 p$ cp crs-setup.conf.example crs-setup.conf
$ P4 w" H( o" m; D# E+ S配置OWASP规则$ W& z2 W: l; n h; f- V' `! X; @
编辑crs-setup.conf文件8 R) \9 D# z, E% a. {* y
+ m8 _9 h( O; k. ]
& f2 q' \$ E+ {3 f, A9 C$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf* f3 m. T$ R* A7 r1 {
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
7 z. ^/ C, v0 U9 H5 \$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf: r/ E8 k- e8 J; s' q
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf6 `, G4 f+ T2 z
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
+ u! J! b) r* u
2 S" Y6 a' ?0 V( O- W! e6 _ n& e; p) x+ s& U* ?
启用ModSecurity模块和CRS规则
! C$ c& f( e* Z" \1 n复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
3 f5 i; Y$ k8 y9 ]) D! D r" z
& N! ?( L7 |9 H9 X8 U
4 y: f) W5 S5 F# h( s5 D( Qmodsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
+ D \5 @+ y6 C# J3 o! G
& P, {, r7 e) ]0 f) j. n$ M2 n' `; J L5 c+ T1 }1 m
$ cd /root/modsecurity-2.9.1/
; F( N8 t$ m! _* g0 Q1 J7 q$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
9 a* F$ J' M; |$ cp unicode.mapping /usr/local/nginx/conf/. h. O' ?% G1 @0 ]4 y
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
8 y. g: t* f3 H$ ?8 b" V; c0 F7 q: A0 i0 y
6 y% R L+ N& E* x
$ vim /usr/local/nginx/conf/modsecurity.conf
8 K8 O/ w+ X. v7 }+ _SecRuleEngine On0 a) B5 I5 i- ^0 R6 \9 x- [# l7 _
ModSecurity中几个常用配置说明:
& z. o, E L' I; h! g9 U/ h/ @3 ?% L7 p7 A9 u' E
R" q; U0 n; U: c/ F0 m3 T. y
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。$ W( [& u: {5 m" C- B% M
& Q, O0 f! U: X2 r
! J/ b: D$ M f9 X5 Y: K0 ~( ]9 \3 B2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。% k6 [1 q! p& [% e- T) L
( ^8 c! c* H5 i$ j7 O% e' {+ T9 J( ?6 T( q3 p3 M* d
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。4 D9 x: a4 T: ^/ A9 R
) @( ?$ ~; N/ c2 J1 q+ e* M
- G* j% n: y7 c C+ ~4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
, R# A3 R- V+ K8 {# _
5 q% M6 j: I. q7 a& Z
4 [6 H3 A4 P0 }; p) K0 B( Q- U( h8 J在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
& i* V% X& h+ n+ J0 F- e5 i2 Y/ k" U4 X
" i9 V; y0 D9 _+ ^" q, ~$ G% ~) F2 W
3.x版本CRS
/ O% u, u# k( Z- ~7 E2 \3 }7 p3 H$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
( C7 D% j+ V) d/ m# 生成例外排除请求的配置文件
- k& ?7 \; p& W% e( `$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
% k8 u. o% U4 Y7 ~1 @5 P$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf' L6 m; I7 ]/ z
$ cp rules/*.data /usr/local/nginx/conf
# m" M: G* x% C- f为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。. k1 P; @* T2 F7 w" t( w# s& V
& i6 j0 \; _) Q N5 n+ t! E" ~9 {0 |
) z" g3 \) ] a' ]8 W$ vim /usr/local/nginx/conf/modsec_includes.conf* e3 D: k& t! G( s6 O- r7 Z
9 F6 v5 r. ~. t# `! 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 * Y* K0 @% U+ N2 `6 O
1 X: k& q8 W1 [0 T& `3 M. [, N8 s
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
- H$ C& f3 v D: M) K& U& p7 x& K% D3 X0 O; U
; B: v2 {' M# [/ j配置Nginx支持Modsecurity
, s1 Q5 V. Z0 r; h% Y1 e启用Modsecurity
: G5 D) ^0 s7 Z. H- c! ~使用静态模块加载的配置方法& t) ]1 H ]) O3 _
在需要启用Modsecurity的主机的location下面加入下面两行即可:3 K7 i4 _4 l# l' u3 a
$ e! D5 f" A6 T0 z/ Q7 k" E
2 ~; Y- r9 G" G% y! Y. ?: a* fModSecurityEnabled on;
" @; k7 E, U3 {& h. vModSecurityConfig modsec_includes.conf;8 i+ X t3 D; s4 d% `
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。# k. c, x0 I6 X- u) A
$ A; D* V! [6 a' M! i& n8 ]$ b; B& W( l
$ vim /usr/local/nginx/conf/nginx.conf
- x+ Q# u$ p" ]! ~1 }( F; M/ a) ]0 b) a
+ c: Z; [; o4 sserver {
4 Q" y4 d. J' \7 f& `0 T listen 80;
5 S) G p8 c* y. k server_name example.com;+ ~5 j- ?6 j1 i& ]7 g K4 f
; o/ u* Q5 d' f6 B4 }- Z' K( q; \( o* X7 J+ [1 g: E
location / {
; E; M( j# C6 d1 i1 ?9 v ModSecurityEnabled on;
/ Y2 v2 G- N9 p3 x. n; Z3 M ModSecurityConfig modsec_includes.conf;
( b6 k+ ^: C( W- |$ r root html;
# V0 @1 S# m, R2 B2 t index index.html index.htm;
7 b6 |: G$ t3 M) K% z: L, t }
. f1 g4 {1 J+ ~6 @& a- B5 S}
; h/ F6 {% e' L1 A- q使用动态模块加载的配置方法
M1 J, @, p! l5 j- j在需要启用Modsecurity的主机的location下面加入下面两行即可:! k! E! Y5 y0 O5 G: O
5 h" h) l% N, S: w3 u/ U
4 n) F& [ V1 K. A& _& c: J
modsecurity on;
( X) N. r# f3 pmodsecurity_rules_file modsec_includes.conf;3 C( U. O! V" c$ K- O* }- C
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。( `0 M, t5 F* D B" J9 G
# y) d9 z, M5 @5 E, w) J
1 m, k! F' D) ^, Q/ X9 v
$ vim /usr/local/nginx/conf/nginx.conf: ^+ r7 i- O0 k4 A4 \; W, v
. a; D$ v9 l1 }) U: n* p, s2 ?
; O# P' V$ m4 A8 d! t( gserver {3 A0 @% h9 A, N$ t8 x$ O% b9 z
listen 80;
9 z5 x1 z3 U8 J3 t/ D& e/ p server_name localhost mike.hi-linux.com;5 T0 L4 s! t) L- _" k
access_log /var/log/nginx/yourdomain.log;/ o2 p+ g$ R2 N4 F! p* k- i& u
- Y1 }& \) D5 D. o# b; y2 X/ c* f j9 S% D0 t9 P
location / {/ a9 g0 K+ q& j: N' r6 ^8 [1 F
3 i7 K# i, o0 q6 B& O2 e
8 v4 Q9 T0 T( P) o
modsecurity on;; K/ D }& r/ ?( e1 w# T4 y% f
modsecurity_rules_file modsec_includes.conf;" ?: @" Q& J4 k( h* D
root html;) m# ~& C5 u; ^/ C! R
index index.html index.htm;) ]( [( [/ _( ~# w; m
}
5 V* s( G( c+ u9 ~0 P# N1 |}
+ J0 o8 b$ Y: G, c$ S# z验证Nginx配置文件
+ \ Z4 k' W+ @. U$ /usr/local/nginx/sbin/nginx -t/ U% [) j; N3 K1 a0 c
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok# Y6 ^& Q5 d+ j% x
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
+ t9 E7 t4 c6 \* e; r* x启动Nginx9 _, h t- c, A: Y" A% X7 _
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
, y" g: v a/ T5 Y; m& B6 M6 x* j
测试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能够战胜更多复杂/未知/混淆的攻击模式。 2 {" a* O' b9 t/ t
|