ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
5 F# C4 ^* w5 k# R$ q8 n4 p) X8 c* n2 }& X6 U3 s2 f9 T' T6 [/ ^
! m0 M, u; d, G在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
3 i5 f# l8 x" F# o4 S% _( x& A7 R1 v
& K7 v4 x) K4 i! f# w- O
h8 |( f; j+ A& ?9 ^什么是ModSecurity$ E+ ~ `8 k& E$ j! ~
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
' m% s" V& C$ R- V" `3 a$ N1 A+ j5 W, U( p: W7 d
3 `7 }4 |0 d4 P' U& ?9 k/ z, @
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
1 A/ b3 k% B( g& o5 L+ N V4 M( {, J2 U9 r5 C# t
y4 e, M- ~% [6 {* PModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。$ {0 T! g0 S' ~
8 {, h' ^5 G8 q9 j3 L9 [4 I5 b
7 j* O3 k+ v. T8 ^5 W官网: https://www.modsecurity.org/1 B; V. P6 j p! m
' f1 }" g5 ?: e7 W2 Z
2 F9 V3 P# n5 z什么是OWASP CRS8 e; U5 U/ |4 m3 r$ B& _
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
4 E& d5 k% K p: Q8 M0 R
# N" D- [! g* s9 U+ C3 o6 _6 G0 O2 a) b6 L4 n) Z/ x3 t6 X- X
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
5 j( U: n6 u* W5 k$ N/ u
! o+ D9 N, a7 |: u8 z& W7 `1 A1 W1 R" e- @# F
HTTP Protection(HTTP防御)6 P1 i' B4 |& P& s+ S% ]
HTTP协议和本地定义使用的detectsviolations策略。
. f3 C$ C( b3 t
, l @( q3 X0 E" W( X! c& C! X
Real-time Blacklist Lookups(实时黑名单查询)
. i: w9 [7 U) i利用第三方IP名单。$ }! ^! K0 T8 l
" ?# E9 b- p6 ~7 k0 `
7 ?9 |" |% ^$ P5 D% c* B, IHTTP Denial of Service Protections(HTTP的拒绝服务保护)
- ?! T' v! ]" o) ?" J* f防御HTTP的洪水攻击和HTTP Dos攻击。# H+ T, S/ |8 i4 \; a: u
2 U5 A' j- e- N! h; Z8 m# ~0 a- T4 ^8 G0 ~' [
Common Web Attacks Protection(常见的Web攻击防护)
, W( q' c6 ~. N9 Y& g# E9 k检测常见的Web应用程序的安全攻击。
8 x1 P# t0 c* ^2 o! N
7 m- G% D; y! @( {# `9 ]( S
$ f4 R" w. h' Q+ P F1 p U; FAutomation Detection(自动化检测)2 z( g8 ]/ r4 U; i% O D$ _
检测机器人,爬虫,扫描仪和其他表面恶意活动。. T% ]& o% D+ Y" j
! Z! ], N. W" ]3 `) y
3 j5 k) N& E, X2 F& J, R" \Integration with AV Scanning for File Uploads(文件上传防病毒扫描)
* Q z0 C n' T4 E: C检测通过Web应用程序上传的恶意文件。0 F! n. V1 v) k# E
5 l' D) ?3 f; ~! N) r' S3 \+ J, b- Z% {! }" m9 H; Q5 q: N( L6 z( Y
Tracking Sensitive Data(跟踪敏感数据)9 J0 i3 Z9 B4 r: Q
信用卡通道的使用,并阻止泄漏。
# s. U, T! w' N& F# O0 a8 V4 A( `
+ S$ @! z b$ K$ C
. h! M9 f1 i. c$ \, P8 `' ATrojan Protection(木马防护)
7 J- i; a, a) @$ [检测访问木马。3 R: z. Y+ g% ]: v5 {7 e2 l. R
$ o k# z9 o$ C) O% W+ s% v3 z& E# q) ?) Q$ ^$ V# D! E/ S
Identification of Application Defects(应用程序缺陷的鉴定)! }, C" E* p# L. i7 V& T6 F6 y
检测应用程序的错误配置警报。* H3 f# F2 Y9 [8 ~8 c
3 g' D" x3 X# U+ a( ?( ?8 a) A% I% ~, o, ] ~
" ^$ U+ ^( H# `) k+ _. RError Detection and Hiding(错误检测和隐藏)
; U1 C) x w- K检测伪装服务器发送错误消息。
+ h! e, D6 \# n. }: m# J) k. [: x% [/ B! a- Z; y
8 o( s8 f" }0 F7 I; q$ z% b! u' ?: w
安装ModSecurity+ f1 e, m" u% C" ?. c; c
软件基础环境准备9 z, f2 n6 y! z+ Y/ ?- `6 V! S
下载对应软件包7 S# z" x0 J2 A/ S
$ cd /root
+ I N: r- q c0 ~0 O9 Y% `: K' o$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz', L0 S/ _* m8 I" 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* N% k% F1 E. A$ U5 [; O
安装Nginx和ModSecurity依赖包
$ X2 a5 D/ f$ K+ a- n$ ~) q9 @0 GCentos/RHEL
" H6 o& l3 n3 U* _) I4 J9 `1 m1 x* k
# G2 i- ~7 K0 w! s; V" f
$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
' B9 e7 U3 u! k/ A Q, BUbuntu/Debian
3 i5 j$ r( Y0 a$ c. C( M8 U( A6 _! y2 G f5 j* d6 u
0 f6 p }5 i% i3 }# N* O
$ 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$ B4 P0 `/ Z8 _% N3 _
编译安装ModSecurity
. @2 R1 G, Z) Q" TNginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。" f- m6 V# I. k1 _5 V# m
4 ]( ?+ s1 Q& h& t# I
: h) i& W2 ~* r' L) g方法一:编译为Nginx静态模块! v3 T$ ~% a2 }- Y X& H
2 N$ y# `' h, [1 r
9 q+ t4 X3 f( J- o编译为独立模块(modsecurity-2.9.1)
% f3 g1 z+ L A$ tar xzvf modsecurity-2.9.1.tar.gz' }4 |0 R/ d! K: A
$ cd modsecurity-2.9.1/
$ a* L5 S- H$ |# z: ]$ ./autogen.sh
0 v) b7 V. b5 p' k/ h$ ./configure --enable-standalone-module --disable-mlogc
" L! Y! }6 g m0 t$ make
) k& r2 y+ B3 d; N: H编译安装Nginx并添加ModSecurity模块
3 W0 c% u t! ], z$ tar xzvf nginx-1.9.2.tar.gz
/ |2 N1 j& b: m9 {$ J$ a$ cd nginx-1.9.2
i) K8 r0 a; Y) R! @; h$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
# q# Y7 w7 _# K, O& S$ make && make install4 O( o/ {2 J/ i8 _7 B) a4 U- I4 y
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
- S. j. J$ d# i- K: W& ?# _
, s D4 I7 @. i6 F: f' T7 j Z4 X' i1 R
编译LibModSecurity(modsecurity-3.0)
Y5 \$ F* R* K9 B& F) x4 Q$ cd /root
* N8 P% c. ~1 k2 e& B# o( a$ git clone https://github.com/SpiderLabs/ModSecurity
! J* O% Y! {! W/ G8 R2 N& B+ r- L$ cd ModSecurity' C* R F1 U% _; f/ [' x& Y
$ git checkout -b v3/master origin/v3/master8 V# B1 ^( R, Q w4 \
$ sh build.sh& }& N3 u# M" M2 j
$ git submodule init' J% d# w8 `; T8 m( C
$ git submodule update
7 h- k0 E* k" W) `$ ./configure
4 y) k* @. v3 O1 O. _5 ]8 ]$ make* D& T w# _- `. V
$ make install: Y* H* F9 G, K- h+ t4 p+ A
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。. T3 K2 R# J4 G- V1 m5 ^( f
( N+ S$ T0 Z* T
9 R l9 q% G% Z3 W
$ ls /usr/local/modsecurity/lib
! `+ C8 X; W0 y; tlibmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.02 W: h1 ?+ t3 D z
编译安装Nginx并添加ModSecurity-Nginx Connector模块
* X# }1 t- J3 K9 O9 S2 u使用ModSecurity-Nginx模块来连接LibModSecurity
- g$ `, m7 ^9 h$ y; d9 _ ?! }0 j
. g, u' S- p+ K7 u& G( P2 F$ cd /root5 @5 i5 w( H0 N! o- P- ^
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
* A+ I9 r) |3 y) h) O+ S7 H* S$ tar xzvf nginx-1.9.2.tar.gz( U+ _1 k+ b- s" Q# s; u A
$ cd nginx-1.9.2
# ]9 Y/ Z F1 }% p$ ./configure --add-module=/root/modsecurity-nginx
' i4 P- k# R; d3 n; z; D- O' @8 w$ make* ]* A, y5 x, v4 n6 C
$ make && make install8 V. R7 ^: j5 D5 T1 Z2 l
添加OWASP规则
2 }5 t' ^* H4 b VModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。- s" ?5 X$ S# [0 x
2 [) y- u! E2 m
' m, K3 I G4 O
下载OWASP规则并生成配置文件
$ ]8 A- g3 S# q$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
6 Q H8 l7 l8 x6 \$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/! d8 {+ \# p, {$ [
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs9 P& a9 B% V' U/ N; s; W& M* _
$ cp crs-setup.conf.example crs-setup.conf
1 T& f0 T: [: v& v, V配置OWASP规则
8 E2 F5 V- H/ i$ I. N- B编辑crs-setup.conf文件
; M2 n4 s/ S* n2 \6 z3 v4 A; F8 w5 g, r+ p* m% W1 H1 \/ ?
$ Z# g. w6 \) M5 w" @. W; N
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
" A! y7 i: m/ F0 T5 e O$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
$ U) r! L/ R. M! o3 N0 Q. ^5 K$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf" Y+ M5 o, p! w/ c4 Z% a
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
8 l8 H& ?- p: V) t% B3 ~默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
$ H% w# t# E0 j6 C3 J9 z6 \
9 O) \4 m7 v/ h9 z( z1 |! E& m1 D3 k) U2 ~. B, x; p
启用ModSecurity模块和CRS规则 p9 X; [" e: k* T
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
' C( S, s" R0 ^# z8 G% ^' {) u% j( ~
, R; R/ F& d/ t9 W4 ?1 w6 T% [
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。# V8 @6 ]7 U( V t
F* `/ \1 N* n
. G2 p2 D- w. c2 I
$ cd /root/modsecurity-2.9.1/
- {2 P9 V. C+ p$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf - ]; V0 S& d0 z/ W- {+ E# A+ h* f0 m' i
$ cp unicode.mapping /usr/local/nginx/conf/
* R( c' r4 Y2 o/ d, H将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
$ a- q3 G# H, C+ u/ [
2 U9 a. {% b% }- t$ `6 S: m0 d; a6 M& R6 n
$ vim /usr/local/nginx/conf/modsecurity.conf
9 u/ [ W d& V+ QSecRuleEngine On
+ C5 J5 e+ c' \% i6 MModSecurity中几个常用配置说明:
@3 s$ ?6 [& s3 d7 r# ?" ? q' F7 |" z" ]0 r; _: [9 G5 l# }
+ h6 O" n8 a5 C1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
0 j7 { e t/ M$ q- a. c2 C
3 r/ o) o4 B6 G7 {$ T. G
+ z: n9 I( S# l2 j' h2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
* N7 |- o/ T9 ^
% S" \: q$ r+ h4 r0 x5 S" U9 z
2 r T0 Z6 s8 i3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。2 a j/ Z. C1 O2 c
. G5 y( I M" v) B3 q
( _( j# w0 ` O0 [0 ~3 T
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。% w, h* A0 O/ r8 _7 y1 g: g; g1 D
& N& f" u$ l% l! Y6 B' R" H, P! f/ r2 \+ f
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
4 m7 S2 d: ~6 [* a$ r3 X1 [* R6 z7 q2 I3 Z6 p
) q1 q2 `/ v; t ]+ B
3.x版本CRS
$ }4 ~3 {+ M3 U$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
# l: Y$ I# |; x K7 I: A [# 生成例外排除请求的配置文件* q, {4 h4 |5 x' L6 c
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf, X9 Y/ z- i/ l( M9 [+ O
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
|/ T9 T* o: r |8 r- H$ cp rules/*.data /usr/local/nginx/conf
* Y9 Q% T- F7 R# H4 o* e为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。' g/ W/ B# I6 R4 S2 A
. Z6 g/ L* s# a) Q1 |. O+ o
2 e. u4 D% V( s0 W* v2 K$ vim /usr/local/nginx/conf/modsec_includes.conf
* _8 w+ j4 E; Z. R& ]5 i* z! a1 {8 k/ w, _) w8 l% L2 }
[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
; Z6 G! w6 j0 w2 k2 }9 ^4 _ t' G; I1 h5 P
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
0 H) s! V6 i8 n' y1 V( d% W! K3 E+ h2 {5 C3 i7 t! C5 U) a
! L" o1 Q* y3 s4 z3 c% e( k! N
配置Nginx支持Modsecurity3 @5 J3 J5 R. S
启用Modsecurity* J, ]; ?6 b# L$ \9 f
使用静态模块加载的配置方法
. O4 f& g3 r0 Z, h在需要启用Modsecurity的主机的location下面加入下面两行即可:, y$ O: x$ I7 t! N _- T
2 m/ `3 f3 e, J0 z( G- |0 `
) B7 P( d* d/ y5 J2 }9 O
ModSecurityEnabled on;
u: H4 ?4 ?6 D, Q8 b$ tModSecurityConfig modsec_includes.conf;
# W3 s/ U* a* {- N3 P+ w修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
' M- |% y- O$ M. }( H9 Z9 r, v! ~, ]* V7 t, f" L; ?
6 U+ K' s' d' x% v5 G, {$ vim /usr/local/nginx/conf/nginx.conf6 M4 ^ Z8 r9 f7 f! O8 U6 H( |: T
, g E% t' x0 m* W7 U4 s3 I( t5 R
5 {$ K8 d3 @* @- `$ Y5 V% }1 oserver {
: D8 h/ W% K1 L5 U listen 80;8 z2 V8 o C4 i
server_name example.com;1 s7 p3 Z" W6 `6 Q( X6 B
0 S9 L2 W/ V: @+ |3 t1 [/ m9 W
9 z# R; I6 p% e: V$ H1 P2 I$ Y( _ location / {; Y ^ O, ^* h" ^* b- `
ModSecurityEnabled on;! |* F0 ]+ X6 z, X: k/ i8 C/ k
ModSecurityConfig modsec_includes.conf;
/ C( D; |" W" t: M/ @/ Y* ` root html;
( `1 p) w2 D" S0 m/ M) S; H index index.html index.htm;% B* E, P& g9 `" J" z! r/ @* ^! t: @
}
% x: u6 Q3 ^& w& u0 Z* }; I+ D}
9 n; s6 d( p* e2 _# H7 M& B$ w/ ?使用动态模块加载的配置方法
5 W3 @4 f J# g0 r在需要启用Modsecurity的主机的location下面加入下面两行即可:/ n5 @/ W) G2 p& f
$ n: T0 U2 L \4 A8 k
) W$ v( j. m8 m3 q Nmodsecurity on;
& w& Q7 r. c$ i% I% Dmodsecurity_rules_file modsec_includes.conf;
7 z" s3 ~0 o5 ~6 B( W5 B修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。& E3 T/ h( }9 J& X; R$ I2 T3 R
+ T5 p0 G4 I* Y" _+ m( g* T5 O, F$ ?% ^' I! h$ m
$ vim /usr/local/nginx/conf/nginx.conf" I+ y7 q7 \/ p2 g+ t
1 _7 \4 I$ }7 P# E- d
6 v+ C$ `2 u h& T3 [3 p
server {
, c. P: v4 W4 i7 `1 m# k listen 80;; i: H' Z7 t/ v
server_name localhost mike.hi-linux.com;
2 _4 w- U% @, ` access_log /var/log/nginx/yourdomain.log;; n- L" D2 S& V! C
; [9 `5 L' G- T9 S( m) q! e1 Y% O
2 [- _1 b- q" r3 n! W2 d. n( Z location / {* h/ p( P% Z% s. _8 S9 j
( Z X7 @) e1 [8 ~% ?7 O& M* j
8 y$ Y' p% _% [; o! a( t- d( F+ B
modsecurity on;
* A S" X2 R5 {8 M+ y' P modsecurity_rules_file modsec_includes.conf;
" R* Y3 Z( [0 g6 z. M" x2 p root html;. x9 q# V" t" @# U. y
index index.html index.htm;
% e; D- v1 B l) u( K' Z9 U `}, q1 L8 d0 v. N2 o" @$ S
}
* a m2 }( y5 V) W8 {; i: a+ L$ ?验证Nginx配置文件
D" L+ r3 w, y. W# e, z7 N* P" A/ k$ /usr/local/nginx/sbin/nginx -t
% l* c1 @/ ^. |3 H0 R. l2 fnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
E) N4 Y" l) |$ {9 J1 enginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
0 X4 I. ?4 c. p1 o启动Nginx
/ |6 S/ p* `, Y* ~6 e/ N% E$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf# P9 T5 z9 a+ { R
3 J% h w, Y9 Z0 q+ n' Z测试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能够战胜更多复杂/未知/混淆的攻击模式。
~9 B( G) u0 X% C |