ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
. S; \3 i9 m5 \- P. n5 v
- B& p+ X# s" L, ^3 W0 r. i3 E
* t& v) c* Z% g$ g在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。$ U( c2 Q: R0 O6 _
( n6 X3 A3 a( O1 X4 O' K0 c* C* \: E2 u" q. a
什么是ModSecurity
1 ^5 u4 t/ E3 o ]ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
5 V, _. f- ]7 v& k
7 k# l8 R! C4 }* }! `, C/ p
h- \) i3 G. X6 r" U# NModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。2 \2 w2 h; ]! V+ m3 U
; \6 y* k$ e. n
; Z. C p2 I4 X; I s; D7 c: ~ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
" P1 I5 |7 ]- [0 N* t1 z; U/ e+ M. o, b. \& A
$ @6 U9 @2 U& \, _
官网: https://www.modsecurity.org/
% L2 M* Q) X) t% x2 F# x; f/ v3 u% m
6 H S$ \. |! q! m2 G0 R z% A什么是OWASP CRS
0 K" a' H- Z: j8 {OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
) T# ?' m0 c6 s& e- `) ]& ^6 Z' ^" k' e+ I5 t2 E6 C3 F! {
" A( g7 E/ b1 ^: BModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
/ a* a. _+ D5 e- p6 Z' t7 M% h$ {& V+ a- \
$ o8 t- p! }! |9 u' H5 Z7 I7 q
HTTP Protection(HTTP防御)
3 B2 p# z" H/ N( U3 H; wHTTP协议和本地定义使用的detectsviolations策略。
9 k( K7 o% U, @ P! s9 t1 T1 p" V
/ k- I7 k* N' z" YReal-time Blacklist Lookups(实时黑名单查询)
; c+ u/ D8 _6 g$ a6 `+ p利用第三方IP名单。! h7 S1 O, `& l/ y& f# s% h
3 h' g) n! p4 s, T- c; u
& G4 z% ~, b M: I+ l" uHTTP Denial of Service Protections(HTTP的拒绝服务保护)' i! A% _) {2 P
防御HTTP的洪水攻击和HTTP Dos攻击。3 C5 c7 ^7 d) H" w `; N
0 X2 Q' \- f# Z* q) h- {) A& s b
( \1 M) s$ P, M! V7 hCommon Web Attacks Protection(常见的Web攻击防护)
: f' l6 r) ]8 D5 y$ z检测常见的Web应用程序的安全攻击。! ]7 E. _7 a5 f$ u y/ a6 C
8 I' R5 H0 H. q2 D( M6 E. s
8 U- g4 f& T) w! x Z
Automation Detection(自动化检测)
% }" v4 H- {0 C检测机器人,爬虫,扫描仪和其他表面恶意活动。
. g9 r, ]1 w8 h
* q ?0 d% l& V/ w. k8 h0 U
& s$ I3 a/ g% N% N! vIntegration with AV Scanning for File Uploads(文件上传防病毒扫描)* O, r/ S) s4 y3 x/ X
检测通过Web应用程序上传的恶意文件。6 }3 S2 h* f4 R" ] R
( L% c1 h7 Q" l: w/ n
+ r( w3 F( @+ ^& O+ k z$ {, E7 XTracking Sensitive Data(跟踪敏感数据)% g5 k2 s1 G7 ~" X6 R8 r
信用卡通道的使用,并阻止泄漏。0 d9 X, Q( N6 q0 G
0 ]6 C! D6 Z2 @1 j3 L% t7 m
( N) T: D! ]6 |Trojan Protection(木马防护)/ ^5 a4 e! }3 f k: v, s
检测访问木马。+ @5 M& |/ E7 u% o* Q/ S% S
\; Y9 L; D/ E" Z
: p. w( z3 M5 s5 w4 D( AIdentification of Application Defects(应用程序缺陷的鉴定)( A" K7 @( ~# @; {6 W% J
检测应用程序的错误配置警报。
( q! Y* p+ s: \) E1 n; k' |9 {
/ u, u+ c/ H2 J
$ t4 o+ A1 S, a. s6 o2 JError Detection and Hiding(错误检测和隐藏)5 y* v/ V F4 H; Y4 \3 j0 r
检测伪装服务器发送错误消息。4 g+ n$ _# m9 y4 k# g
Q F% U/ z. W9 @2 S. e. b J1 v. J1 a5 ?/ c$ f4 n
安装ModSecurity1 l: m4 u( N" d8 P5 y/ D: a
软件基础环境准备
- e) S6 Z K( `0 S% o# V$ V下载对应软件包/ _1 W" W3 x8 I) q3 r2 d9 G# a- y
$ cd /root
, u5 L/ Y- P3 K$ P$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
, K+ c7 _9 {7 Q3 f3 q5 ?5 Y& Y$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz0 W- M5 _( \% b! L
安装Nginx和ModSecurity依赖包: U" @' B5 l- W
Centos/RHEL
. z, r D- I7 E, Z @7 @3 ?8 _1 C; x. `" Q- V/ G
4 K1 `/ b- ~8 u- G& i
$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
) Y9 H6 b$ ^) X. ^( G+ n5 oUbuntu/Debian
; C2 |0 O# j' f4 K# I K4 l5 A+ n* }8 p/ v) I! V+ _
6 G$ Z( o5 v- l' E
$ 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++-dev5 ?, h4 D; I( l7 \, Q; h
编译安装ModSecurity5 p' \/ r% B. ]" S- v
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
7 ]2 [2 n. V9 l
1 K% o- T9 _2 ^+ ]/ g" H0 b. Y! p) O
方法一:编译为Nginx静态模块6 p: h8 C' Y$ J1 ]: }+ v. n- [
$ q& j, P1 m" B" M# P" U. l- L Z
编译为独立模块(modsecurity-2.9.1)2 I$ ~( K- p. D% s7 L7 J
$ tar xzvf modsecurity-2.9.1.tar.gz
7 M j, d9 A2 D! U$ cd modsecurity-2.9.1/7 |. }' Y4 @, D( x, U1 b
$ ./autogen.sh( ^& i C( U# G
$ ./configure --enable-standalone-module --disable-mlogc
2 @1 t( G8 N0 s, z* r6 ?. a$ make$ f. K9 Z3 y& j4 [/ u
编译安装Nginx并添加ModSecurity模块
# Q o% W# R% q8 y/ H! B* v+ @$ tar xzvf nginx-1.9.2.tar.gz
+ T& A# m, I, x9 s* x; N$ cd nginx-1.9.2/ D' A: ^- }9 [
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/3 m9 {" ]6 y- H6 N+ M* r7 C: ~: }
$ make && make install
8 u' V6 D, n/ q1 W5 d! D Y' n方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
+ P' Z0 j7 _9 Z0 ~( z' n0 }3 d! \4 A- i. k: N9 S
7 `; Q1 U1 t* |0 V* G, `' e
编译LibModSecurity(modsecurity-3.0)
, S+ [; }# S. v' \5 E1 ]" A$ cd /root% j3 j8 w( c% k3 [. m: l4 a
$ git clone https://github.com/SpiderLabs/ModSecurity
* ]. ?% J8 x* p- }, x7 e: D$ cd ModSecurity
5 k$ g# S9 q# m9 |0 A$ git checkout -b v3/master origin/v3/master; y1 U5 z! X* I* Q! E
$ sh build.sh' W0 s& t1 Q1 }1 }
$ git submodule init: c7 r$ N6 o+ v" I- {5 t; |- Z4 x
$ git submodule update
5 R" k: f# H' B9 K% a- t$ ./configure
" M8 c) O* c7 T7 K+ o6 u$ K7 h. p$ make
( E6 U/ E- Q: \1 F$ make install2 l$ S: ^- H+ R8 M6 d/ x1 {
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
# K( T3 _7 }4 O3 n4 s& U
* s3 G8 n' C; V0 h; R2 h7 Z7 e! j" n
$ ls /usr/local/modsecurity/lib
% d# p' ]& _, elibmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0# Y) U2 o; M# P& \: z% N
编译安装Nginx并添加ModSecurity-Nginx Connector模块
& z$ O" `. d- {' n- U; s! N9 S使用ModSecurity-Nginx模块来连接LibModSecurity* b6 ]( |: F% @
0 P4 N$ a1 k+ `2 B9 [
. d8 }) S, Y' @# P# ^& d* T
$ cd /root( I. {" o9 C. t5 H8 p
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
3 d' F8 i4 r* Z6 _. p: \$ tar xzvf nginx-1.9.2.tar.gz9 z6 E' l8 v" B4 c0 ^) h0 r
$ cd nginx-1.9.27 ^. u+ s5 P" J' W& ^
$ ./configure --add-module=/root/modsecurity-nginx9 X: A O8 e9 l( H$ }! j
$ make! Y2 Z! @' G5 b, j2 g
$ make && make install
1 [* [8 _3 o: o) i添加OWASP规则
+ }0 w. Z# ]/ U* U5 j) n3 CModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。8 b- C! i6 H, ]! k8 B6 M
) T. |2 p+ s& @* y2 M
. R! ^* c/ }- a2 ^# \. p; I% J
下载OWASP规则并生成配置文件7 V/ }" x; f+ f% [0 w
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
' b$ N: a0 D" o; L5 F/ ~- j$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/
: J/ d8 |" M2 A4 W5 G/ e( h$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
; _$ P# J- h! R& H; j+ a2 i4 \$ cp crs-setup.conf.example crs-setup.conf1 K9 F x: J# m! W3 B# G& W. `+ V
配置OWASP规则
0 p' y; ^7 Z# m" y编辑crs-setup.conf文件
& \4 a1 R( o# |+ @# }
9 q* _. S" `4 G* T' m& o
! ^' U6 s. i9 m9 w/ f$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf. f `# X! g* ^( T
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf" t4 Q6 ^9 Q: {& Q) U) I" _
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf# ` }7 |# }; t |1 ]
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf; x2 V6 J' p6 ~( w2 \+ v
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
5 Y" g* Z# m a r. e# d( @- |# j2 ^5 i4 J9 I' l1 D* o
, y) V8 L3 A0 u. I, D8 n+ f5 _
启用ModSecurity模块和CRS规则
( @$ E6 N7 {8 |, c0 X复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。: S# R. J) c; G' E% s
, E: X: Y* l$ Y( w8 j
! v, W9 |6 G% K2 i+ Cmodsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
( I7 d0 z% f3 X% i8 K- i7 ~
. ]% S5 h; F7 }3 T/ o$ I9 z3 J0 z( `' J
$ cd /root/modsecurity-2.9.1/$ d/ a! o5 H; Z: ~) {
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf . ]& s; l$ R9 n: i. A* m& k! N( X
$ cp unicode.mapping /usr/local/nginx/conf/
' H% q( T9 Z$ Z5 q ]将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
+ a" P+ [( D1 N) b: V& t k( ~$ o
; J2 Y" ]" V E; [ U7 L# V/ w* Z
$ vim /usr/local/nginx/conf/modsecurity.conf8 m+ ]0 M: |2 n( d1 B, T7 c# ^
SecRuleEngine On( E7 a2 G% g7 _8 P8 N
ModSecurity中几个常用配置说明:
% o9 }# Q5 A" q6 ?$ [/ [ f' \9 L* {) c# B) X+ j, Y
( O4 B w! f9 U/ b2 L1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
+ h& X+ `$ f( w/ O% T
: A/ v4 ^2 U: Z* S' p5 a6 p# W3 ?' ^+ g
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。: P( h; _# z( |
i8 `( m% u: L: [6 S! N1 [9 O9 T) @- R
/ j' m/ a! L# E6 @3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。* @* l# @6 ~! [) @! R
. e7 W/ t( T! K
& q& O( d$ l1 f: ~& f% X4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。& H3 X8 Y' G. h
4 o* X( q8 s! X: c$ y& m
* f& j; M* w( f7 h5 Z在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。( q6 J, P; `) F( M5 x6 L
( D2 B3 q0 Y( [5 }& ]
/ `' T+ ]0 f! _4 V3 @6 Y3.x版本CRS
8 p7 r' }- K b; |$ cd /usr/local/nginx/conf/owasp-modsecurity-crs2 q0 x8 a, ]0 V+ Y; W
# 生成例外排除请求的配置文件0 B% u+ H# v) C2 g
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf' l: P$ j, ~4 H0 u# D) t
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
1 P4 j/ T( E! u/ f$ cp rules/*.data /usr/local/nginx/conf2 X0 n2 t$ V1 F a: w- r* }
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。! p9 G* u0 E$ z, L% ]8 q; J
/ m8 @% W: W8 C3 S+ }6 `) Q1 C- l3 d, ^
$ vim /usr/local/nginx/conf/modsec_includes.conf+ V: j% A6 O. n7 n
5 k# r& B8 a# P( D& q; d- N3 Z
[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 ^7 }" B0 P0 K* ^9 C7 x8 Z" g' R: I/ p. z
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。7 _$ r4 r/ T: t: E+ r
! A. F2 Q7 x' L/ S: C" z" G5 d! J, U4 y. l
配置Nginx支持Modsecurity9 m$ L& b' j) `' ]5 m
启用Modsecurity
+ p W5 |. {$ t5 O/ O使用静态模块加载的配置方法
' V7 j/ n# y2 N, M9 d' J在需要启用Modsecurity的主机的location下面加入下面两行即可:* _- y1 s9 ]0 m! y0 U( Q6 l9 ~
, K* q# Y* J: f' s5 w+ C4 e% q7 I
/ }' Z. F1 Y2 ~( x; p, iModSecurityEnabled on;. e' w: k% W; t6 K, S: v
ModSecurityConfig modsec_includes.conf;: O+ C7 `* \% o: E2 t* \
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。- B" }" s5 g0 o! a, ^4 b0 Z
; ^+ }+ b& m+ }, C k! l @9 A9 Q5 M; S$ I1 Q$ P6 D
$ vim /usr/local/nginx/conf/nginx.conf
9 W1 E/ T. F P3 K3 r. Z8 \( d# q# k7 I/ t6 s& U
9 v8 W4 [+ m. A$ L3 g9 o
server {
, Q3 a' D" \% B. f6 B6 B2 g listen 80;
, L, D5 @$ u; F4 s1 c3 n server_name example.com;' g) P: h/ x: N% M: [
* t) k. C, j+ ~. o9 X
' z( Z7 G# V8 i& a% L3 v# @6 f* f location / {' t0 Q/ l+ X& ~) A$ U* ?) ?1 a \
ModSecurityEnabled on;# j5 H/ x. c& O/ s& k8 z* N
ModSecurityConfig modsec_includes.conf;+ U8 b# U/ t; Q; F
root html;
- F! q$ C2 D0 V& T3 h index index.html index.htm;
! H. H( `$ Z3 X, Q }9 _7 p3 F. i$ {2 [
}
0 F4 d9 X$ \+ d+ k使用动态模块加载的配置方法6 G w. z7 o* O) ~# B) b, S
在需要启用Modsecurity的主机的location下面加入下面两行即可:
) m- Z' J* W5 H- h8 [) q2 N/ u" Q {2 y: e: B4 U; j- _7 n' B
9 M1 f8 y, Q; j, Y- B
modsecurity on;
4 X6 P! r t8 _modsecurity_rules_file modsec_includes.conf;
' v0 t7 u! K S! z& q" S0 P2 M+ Q修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。+ p* m2 m1 \# K- d2 y+ `7 j
6 o4 Q& K& ~& U
6 l: X' d3 s) A4 d1 T# Z3 ^$ vim /usr/local/nginx/conf/nginx.conf( J$ I$ F( {9 h" L
+ \0 V- t; \! P* w
0 Z _4 m; E9 v/ j5 W7 `
server {6 B% }; B3 @/ D: T
listen 80;/ o$ d7 A! I1 d) P, H8 }2 R2 B" `
server_name localhost mike.hi-linux.com;
: U. O6 J8 U2 R; ^" Q# x/ _ access_log /var/log/nginx/yourdomain.log;3 K3 E4 f0 K0 O+ W. e: z6 G4 l
4 T- s4 r+ }: j% a7 Z
1 A7 N9 E, V, I4 f/ W* ?" @
location / {/ f( T5 f# M+ V- t6 A! G
+ R- h# K+ y) k
" r" A, _9 }* h4 o7 v3 R3 w* j, P
modsecurity on;
/ L% W6 a$ P5 w% J modsecurity_rules_file modsec_includes.conf;+ _' G. o$ \: N! Z& x/ E
root html;8 d' ]# {% H1 x4 c! ^+ O
index index.html index.htm;" O+ W1 T. v" e j# W* I
}
! O; {; |5 {1 f: I6 |}
. k! t" D, S: b( r {* n. t验证Nginx配置文件5 U. _' o) ]3 N S4 z$ B
$ /usr/local/nginx/sbin/nginx -t
# \$ d- k# w& u T4 u0 h, J+ fnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok: R4 N( X# n) Q! ~& c2 D" L( v
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
" N$ q e6 w5 s" U启动Nginx
( Y) G+ G5 T0 i+ l3 V2 @$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf/ e4 K3 x7 ]! J' A4 r! ^
, E6 |0 o# a" e) T+ N
测试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能够战胜更多复杂/未知/混淆的攻击模式。 * l" ]$ P. l. I6 Y7 U7 s& v
|