ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
1 ?$ \* S) y; R4 H* F' [. D/ N+ U0 d6 o5 l- F# |2 u
% K# n% q. n6 @- n/ J在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。' D7 |/ g' a$ r0 ~% t' [- N3 z
# I& m; ~+ H: ]: |* J
" p$ A$ w* d& v M7 T3 X& J什么是ModSecurity5 _3 r# E- q8 `5 P
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
& H, q( N6 }& x
$ q, j1 _9 C- |3 H2 f: J/ h& w! [0 v1 N$ H
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。+ N3 L8 \9 a0 a+ J+ G( `$ G
! g' q w# o; s" M
7 Q' ^: _- p. B3 |# r. {3 X C, RModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。( N7 F" N3 t/ l4 w5 u
9 ?! u! b3 y7 N) k
2 E. e% e& t% p) W官网: https://www.modsecurity.org/8 ]: x7 E! g. e' _
) [& C9 C/ k/ H( q. V* V: E' J
2 ^9 P1 {9 U% n w& }- O什么是OWASP CRS' y- c6 b0 r# X
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
3 s8 f; ]8 r6 X- c9 x7 G1 v/ D; R% y
! ^. |# o8 O; m9 s# @2 p9 h; S! I4 H! V
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
" W A F: G" m" ]" b
7 d6 T+ k& W2 w8 Z; D
1 i1 g: k2 C/ b1 a4 Q, YHTTP Protection(HTTP防御)4 \0 S9 C6 a$ X* O* @9 \7 T9 ?
HTTP协议和本地定义使用的detectsviolations策略。
# B3 e2 m- _) P" B; G0 f
" {! W, t6 V! t4 ~$ f1 I! Y0 s8 g( _4 ~& {
Real-time Blacklist Lookups(实时黑名单查询)
M: p& g6 W6 E; v1 d利用第三方IP名单。) d6 X, @9 B' c, t5 ?7 J+ o9 G
7 V+ {; _5 i, D8 n; r. V; @% [7 S' l6 F+ w& G
HTTP Denial of Service Protections(HTTP的拒绝服务保护)
* |9 N1 Y$ q" h7 z' @* L* s9 K) ]防御HTTP的洪水攻击和HTTP Dos攻击。' h; h n$ ^" v0 H2 ^4 h4 B ^) ?- f
* `& B1 l! ~ p3 k$ X2 r, H3 v, m3 F, `
& t: q6 W( f2 D/ a! \' E+ S
Common Web Attacks Protection(常见的Web攻击防护)
1 p4 x/ @% y5 n. Y检测常见的Web应用程序的安全攻击。
6 k, I k) \( t. t8 G5 Q' Z* l& `8 h1 ^
+ {+ t4 w1 V0 q( E& tAutomation Detection(自动化检测)
3 c1 g, h" t, c4 n% t2 X检测机器人,爬虫,扫描仪和其他表面恶意活动。
- x- p+ G q+ @, E3 b
4 Q& ]% y9 h! z1 s D& E" r# g5 ^7 o
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)
, J1 N, J6 n9 `# Z7 W" Z8 X; a检测通过Web应用程序上传的恶意文件。
- p5 ]* d1 D5 e9 `5 z
' X& X, E0 |9 _$ \& C5 U+ q# R# d3 ]* O1 S. X
Tracking Sensitive Data(跟踪敏感数据)
9 X3 C+ y* x+ q N5 X信用卡通道的使用,并阻止泄漏。
7 z5 Y" E0 K8 r7 K* T0 `# v% o- G3 w4 p# }8 h& J- h, c$ v0 n* r
2 f; O* V: C/ n5 \5 E5 ?- r$ M9 P
Trojan Protection(木马防护)9 z* ]' v% K9 @7 L, J
检测访问木马。' _4 J3 k% i6 U! O( `* s+ `, D
* N$ N, {9 L1 F- u1 x' v w v9 Q/ F! P
Identification of Application Defects(应用程序缺陷的鉴定)
/ x4 J1 k! K% t& Q+ g5 ~" J检测应用程序的错误配置警报。
. X4 v# D5 {7 `/ T
6 O- o9 }) \5 V6 ~1 I0 l! \% i7 \
Error Detection and Hiding(错误检测和隐藏)
7 B. G# ^4 | Z: c: F检测伪装服务器发送错误消息。
1 }( o: G9 {' [
# ^$ t/ N8 ?5 |* s' [$ C
% K! p. w& T0 }0 K) e$ k7 K安装ModSecurity- e4 G: ]% ~! T" m
软件基础环境准备
, X! b0 w6 o% d( A/ K2 D- k5 p下载对应软件包
( m6 j1 j, ?2 p; Q6 _" P% n$ cd /root
" `: R5 @6 V2 d$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'5 ?: I, o B" u( }; E
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz6 N- l1 G: b: b7 b
安装Nginx和ModSecurity依赖包- L0 S O: ]1 V, m/ Y, b
Centos/RHEL. _0 c& q9 @; _- r
3 y8 ~# q) M, w3 q* B
8 e% F: h8 n2 ^) W+ V' n* E/ N$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel* z, r- p" W4 I+ r; E
Ubuntu/Debian/ S- W2 r+ q; e# t% Y' I
; j3 T# h' f4 `6 I9 d
0 _$ Y- }. f$ ]) p$ k+ M
$ 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
! M) }' d, r/ ~" M4 F编译安装ModSecurity
4 o+ S0 @# v* v" L- [$ eNginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。( K- g& S- v' i
i, I7 u1 B! m2 {& V4 a
7 P9 I) K" k( z1 ]
方法一:编译为Nginx静态模块$ T0 D, e2 c. X1 a! w( C; i
$ N3 H4 ?# c- H1 S# r }5 n9 s( {0 [1 B, ^7 A. F: n3 J& u7 _
编译为独立模块(modsecurity-2.9.1)
' W6 t4 D; L; n$ x8 g! S3 B$ tar xzvf modsecurity-2.9.1.tar.gz
8 a. {$ C; b* c4 @* O w D0 T$ cd modsecurity-2.9.1/
7 S; B7 w" U* W. E+ N2 y$ ./autogen.sh, D! ?8 d0 ~1 C$ ?
$ ./configure --enable-standalone-module --disable-mlogc( J& r. g, b X. L
$ make
! q! U% G3 D- c编译安装Nginx并添加ModSecurity模块- W) S! Y" V- E7 q
$ tar xzvf nginx-1.9.2.tar.gz5 H: S, T. V, U1 b
$ cd nginx-1.9.2
- `5 N6 q% J) B/ q2 e& t! Y4 j$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/% O, W* z) O* X: x
$ make && make install
! Z. [; y1 |) B. G方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
. `7 R8 @ K* ~3 X5 J8 @: d, A* T. \+ @5 U' h% \; i# L6 z
2 L" j5 X _3 r8 F7 [
编译LibModSecurity(modsecurity-3.0)* g! n" B% M5 Q* `* R$ t+ @5 U
$ cd /root+ i8 C4 P1 P$ T" i
$ git clone https://github.com/SpiderLabs/ModSecurity! S7 A5 H. Z/ }7 z! c! U9 d6 c
$ cd ModSecurity$ h2 U. E" U% e- z% r- a/ F& N
$ git checkout -b v3/master origin/v3/master+ \5 D0 b% W& q! U$ |. `$ x
$ sh build.sh( M+ ^/ w5 x8 |4 e0 j
$ git submodule init9 m) w0 A2 c, C
$ git submodule update
+ P' I0 b: t/ X! V0 w$ ./configure
( i' V$ |: m4 i' K7 e9 k( C$ make
3 s1 g U5 f/ k2 t$ c2 H& N- p1 k$ make install
1 E) o" @1 y: z& S- g6 z) NLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
! I" g" Q+ H5 G, A) G* J3 E5 Y5 z+ s0 f1 V- D W6 v8 R/ V
0 H; Q, I8 v3 H1 W& W: P, H, G( L$ ls /usr/local/modsecurity/lib
3 M8 u8 U8 @( Glibmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.00 j; w8 O# a, z/ k5 p
编译安装Nginx并添加ModSecurity-Nginx Connector模块6 {5 N2 T7 E! X0 E2 {5 ^1 m
使用ModSecurity-Nginx模块来连接LibModSecurity
0 }% E) }! H$ D9 ]# S
. K" Q9 O0 R& V& W, D
* p" t, s. Q# e. s$ cd /root
9 g' n, g; r3 i4 O1 z( K% M: w$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx6 o5 h# }& v+ Q
$ tar xzvf nginx-1.9.2.tar.gz9 q- t$ B; D. d
$ cd nginx-1.9.2
3 ^! U, y* O4 k$ ./configure --add-module=/root/modsecurity-nginx* T2 N4 a$ d4 M0 D$ w, O( W% M
$ make
' s/ y2 T, S- R$ make && make install4 a; X# X9 L4 q6 O( r, t
添加OWASP规则
/ S4 _6 z& |8 R2 B# bModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。: V. p& S- r0 x$ g/ N- O
" ^! v- _/ r0 L0 O6 G4 ~( P3 k' S9 C( a2 A' c
下载OWASP规则并生成配置文件
0 y" O+ K/ n, v8 W/ K$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git: }. Z: v( ^! F" X- J
$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/) C5 Q4 V% M) G' c8 z9 M1 w
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs' `! F+ t9 n- [! N5 [
$ cp crs-setup.conf.example crs-setup.conf( N& D w6 ]9 _$ @$ k: G6 f
配置OWASP规则
9 X2 b/ o8 k7 ~% C- v: v: T编辑crs-setup.conf文件$ f3 y) ?; J: t+ a$ ` S1 V( X
/ F' V9 j- s4 `! {& k+ s' I
0 z% f2 P) B& z/ Q5 d) R$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
* N2 g0 d k; x) w* u$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
4 W5 c% `9 i K$ s$ U$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf' ?+ U2 o& S5 h5 f# ]' ?
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
9 d: U$ y( [1 |$ d5 k p默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。8 J, A8 `' f6 l) Y3 x% E# m7 z
- v: }' M, G6 B1 R7 n7 I0 ]4 n: y$ k7 n6 d
启用ModSecurity模块和CRS规则
+ a ^ ?! ^; J. s" s( w复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。+ T# T7 g! t0 I& G2 B/ F6 Q I
2 x' r- d. Y4 ?1 p2 _
, q% r9 s5 N7 I# v1 y8 U& b2 f
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。) d' M5 q# D# i- {
Z ?+ G0 f. n9 p& N- O) B' u+ L
- q+ O7 Q8 I+ ^% k4 R% B
$ cd /root/modsecurity-2.9.1/' g" r$ X$ u- V
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
Q0 n3 _5 T& S. j$ cp unicode.mapping /usr/local/nginx/conf/- @0 o: a8 \7 b0 I
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
) J, e1 {9 o/ X0 u7 u
% |0 s2 O: ~, D, X1 C" f* M9 U& t& Z! p1 o- D1 M
$ vim /usr/local/nginx/conf/modsecurity.conf
- A$ D/ @0 V o- o" n5 D$ {1 s, }4 ^# GSecRuleEngine On
6 f! r1 r" |" Z7 ^: `; y7 MModSecurity中几个常用配置说明:$ m: I" \! P6 ^1 i
- x# I2 z0 m. ?2 k$ e7 D! d7 G* `, z3 l7 c/ T
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
, }+ {9 c# S' W9 R2 a; _0 y5 w* e, Y1 \/ K5 U2 U. i7 G. v* L7 ?
, W+ I( Q5 \4 N. I
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
" J* }& d2 Z1 k7 ?; i' [
! m4 }0 v* o8 I' N2 j5 v7 a1 b* h' t+ r) R' S
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。8 ]3 y p$ q2 `* ^4 y
. U- a" K, G4 m- E9 w+ {/ Y
4 {4 W& j! Z& j, t0 V) i. i# B
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。; c+ N( _% Q: u5 g2 {
7 }: ^% e# D$ s
; S: M' L7 |( g5 e; j+ s7 z在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。, B/ J: M/ A' b( o% [" \1 P
! A. r. U# d! y" g) Q3 M- C3 I
( G" w! n. J# ~* Q1 O' b
3.x版本CRS
% E5 k- p( ~ E8 u) Z# S$ cd /usr/local/nginx/conf/owasp-modsecurity-crs9 |( @% J" d; O* J6 ^
# 生成例外排除请求的配置文件' [) Y* w+ T7 m8 u
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf8 [8 j8 k7 m- h; L
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf8 a2 s* g& }7 P
$ cp rules/*.data /usr/local/nginx/conf( g$ u0 Y& L& Q# Y7 v o
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。5 W- Q* y! } F
+ a; V5 p2 t0 R) l% e4 c! H
& g; X- {- c Z, D) U; u$ vim /usr/local/nginx/conf/modsec_includes.conf
, U [& R5 m' a& M$ L" \9 B7 w4 ]5 i2 q6 f# r
[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
( p9 @7 [- E8 r1 U) A$ ?$ _+ g8 W9 A9 A! h
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。3 L0 l1 o! w3 y) [, e
) U6 Z( w$ a+ f: U2 s7 v9 m9 F( M: T" I; T5 ]
配置Nginx支持Modsecurity Q3 c+ |* D3 Y$ f
启用Modsecurity
. T6 f# f0 [: s5 H6 F2 Q q使用静态模块加载的配置方法1 c. M( o6 r2 T7 y: f& t' U
在需要启用Modsecurity的主机的location下面加入下面两行即可:3 L O/ O1 A$ S Y
; p; k; f% H: Q# s
/ _1 C3 T- S& h4 l1 VModSecurityEnabled on;2 O( k+ I6 C% Y7 {) G3 S8 E% P8 D% k; t
ModSecurityConfig modsec_includes.conf;
. `2 `4 m0 K. k7 j b修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。& g, a' W9 \; ^" b
+ {: x# d7 q" ^! K4 D; ~
5 [7 Q1 G9 ~( D5 J5 J W+ ?
$ vim /usr/local/nginx/conf/nginx.conf
2 ?6 e' k! L0 F; V+ ~7 l) U( e# m* Y2 A+ W3 l# r1 L
7 u$ \" j' g: n# \. r5 y) Lserver {, m4 q7 c- G& l n8 o
listen 80;% C7 U T! P C7 W- k& L
server_name example.com;
2 G) z- @) m3 S% R
8 v' b" X% M. {. Q% c/ c. [- [. D$ n& D- _3 V! _& L" L( _2 A
location / {
/ X1 T; J- Y' L) m; U8 r& F ModSecurityEnabled on;* f& F/ P' S9 T" N* M
ModSecurityConfig modsec_includes.conf;
* T* c; J" {9 r' y% A; ` root html;3 l/ z0 j" B& Z+ \- [$ {+ F% v
index index.html index.htm;1 g% Q# ^% f; o1 y1 ~" L( b
}
5 j' Y( q2 h! G# H+ W4 N/ w}2 v8 V' i, K K
使用动态模块加载的配置方法- {6 @( [( t' e( v) b
在需要启用Modsecurity的主机的location下面加入下面两行即可:
% J9 F; Z$ a: V' z/ U1 V' F8 [, Z" ?% I
5 R9 |1 G# y* s# |
modsecurity on;, p# Y2 t3 y; b1 i3 G! j' H
modsecurity_rules_file modsec_includes.conf;
* Z$ j! y& z4 s- h4 P, O( M+ J修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
: A9 J) e2 X J+ K' K' E" T; H# f- N, u b/ {) X4 A3 C
6 ]2 v- D+ y; l; M/ i& Y
$ vim /usr/local/nginx/conf/nginx.conf7 W# m. H# b4 P+ K9 d
: g3 p6 f) n9 l6 B j
3 F" s: J, I8 I. aserver {3 a0 u6 c" L2 N% Y) E* Z$ z) d
listen 80;7 b9 E6 i# X! v$ v( a8 c& |4 R
server_name localhost mike.hi-linux.com;4 L8 s% \3 ^1 G" I& n: ~. a9 ^
access_log /var/log/nginx/yourdomain.log;' O8 W% N. I, D; ]0 h, K1 @# D
' p0 B( O3 _& P) Y& @
# c2 V3 c; V1 n" }
location / {# ]8 F, _9 l! l& H) o, g
" T/ Y# v, R% z3 }8 u' {/ S
?3 w6 s& m$ J* W' e
modsecurity on;3 P9 y9 z9 N# V7 h
modsecurity_rules_file modsec_includes.conf; ^: n4 Y+ ^2 }/ H1 D
root html;6 Q& J7 m1 a9 w& ~9 ?% i
index index.html index.htm;
1 d. w0 K) ~+ m, r9 e; }5 \5 y}
& N0 J- C9 x, u! V0 F, K' \) H& m}- f, N, F1 Z# @. c) x4 i
验证Nginx配置文件
+ l7 j. H' v7 m% d% M- |7 q. x$ /usr/local/nginx/sbin/nginx -t
, }2 R& i% Z! w( v Z. r2 u- wnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
* T; L6 x- c0 _) T2 wnginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful3 }, a a+ p3 t4 y3 ?
启动Nginx2 n: b6 S" ^1 D' |; t3 Y/ c0 j4 d8 v
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf0 n5 Q1 C; ^+ Z7 ~, J7 f& l5 \
`( f7 e2 p2 f6 X' [4 G测试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能够战胜更多复杂/未知/混淆的攻击模式。
1 Z: X1 I# ?( R% S0 q& h$ D* N% n |