ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
) \* s t7 ?; R' o6 ?$ v- \' t w1 G1 {# @
) q9 r3 F( _( y$ {; r
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。 I1 t# _2 U1 n0 N& b D+ h0 a
( k. z4 \% @, x1 _% r5 f. T' Q0 P$ T' R& H# z7 B1 H4 b! w% _
什么是ModSecurity' \' v+ \# p# L+ h8 K" n
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
" f K8 }4 K1 @8 O$ c% B3 B' l- g
. V2 Q- }. R- p: E- T
6 q2 ^" j4 _' U) ~2 N, W/ nModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
" O0 p% D& u" J! F s$ X# W( g, o: E ^# H/ O
2 o1 K- R" D+ r5 c1 `
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。; u1 ^( p" d/ D2 t
- I# `' L( Q; T0 {6 N0 i
% H* m% e3 [0 G6 X$ r# E, H; r
官网: https://www.modsecurity.org/
8 c$ Q7 z( E0 h4 t1 S t; i( `/ A i: ~& r2 y& f
9 i. u/ r! ^9 W什么是OWASP CRS
' O' \' q( `2 g0 vOWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。6 n. d* ^2 n, d5 c" s5 q
: p. X; N+ L/ I
9 H5 {. h% [7 \$ s5 Q' k" W. P+ _ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
! T1 _3 g4 P# D3 o' u$ k: c3 U* K$ S7 A0 |9 k" {4 L$ ]
2 G8 j6 p/ _8 T/ {3 O' X) x
HTTP Protection(HTTP防御)! H( }+ ]% s# |; o- j% s
HTTP协议和本地定义使用的detectsviolations策略。" [4 }' `7 Z/ w5 i
0 d* T5 V) n/ S E. ]5 h
9 ]9 q7 L3 L3 N1 |+ O$ j: FReal-time Blacklist Lookups(实时黑名单查询)3 ]2 \) A. O( o* v: s
利用第三方IP名单。6 C; X: o, t5 H J. Y& m
2 F5 z" J+ l* C( l
, @, D9 w' I- ]0 f: o& d( PHTTP Denial of Service Protections(HTTP的拒绝服务保护)- T9 {9 [/ l* I6 H) d9 U" p
防御HTTP的洪水攻击和HTTP Dos攻击。7 I5 M4 G' M* k% T! A7 y1 R/ q
- u" N. g! P; b* M2 f+ v6 T# e6 t3 E7 P! [# G# H$ S7 k
Common Web Attacks Protection(常见的Web攻击防护)
4 Q% u; B$ G8 x5 b: K0 [检测常见的Web应用程序的安全攻击。' T* W% N Q, e& K2 Z7 Q! L3 |
+ ]6 p. K, f+ b# {* L0 j1 N
, N$ w5 _) I! v' ?, b1 }& gAutomation Detection(自动化检测)7 b+ o- ?- Z, p
检测机器人,爬虫,扫描仪和其他表面恶意活动。& g$ b5 o3 j& V5 C8 ^
1 @+ i$ R9 n/ A j3 I) R
- T6 a( |6 \4 b4 tIntegration with AV Scanning for File Uploads(文件上传防病毒扫描)$ D2 z4 v5 g B0 W0 | J1 _
检测通过Web应用程序上传的恶意文件。0 _: E( i! ?& s$ Z
3 D2 [9 T3 v- k% i* G! \0 _7 m+ m# u! @- r' j d7 e* E9 z
Tracking Sensitive Data(跟踪敏感数据)/ f4 `" ?" S5 X9 @" V% y
信用卡通道的使用,并阻止泄漏。
0 w6 y5 `$ v( e. L! M" Y6 o: [% |8 y& k' t. n; ?' u
* r" p' ]& X- z# z0 _1 L# tTrojan Protection(木马防护); N0 q2 }1 E+ a$ L; F: a/ Q8 }
检测访问木马。
) L; R. `0 W1 R- l P
7 T7 J9 s8 J/ Z. R' G
% U4 M" H2 V9 E9 MIdentification of Application Defects(应用程序缺陷的鉴定)
! |# ]# S6 ?$ g2 [检测应用程序的错误配置警报。
0 c, Q# {" z* X1 N$ x) b$ A0 B, g# u3 ?
( m8 W' j% ^3 ]" i
Error Detection and Hiding(错误检测和隐藏)
% ~* }' O# u" m5 s检测伪装服务器发送错误消息。
; R. X, L/ I$ `3 O u' x* q$ Q* l" I6 T( Z' V) o
5 A1 t2 o( ^+ I2 U
安装ModSecurity# s" u2 ^ Z; g, {; h) M
软件基础环境准备
7 U8 G: g' L d4 f下载对应软件包
9 D6 h: K2 v3 ~# T) }$ cd /root- U% Q- \$ O/ \: [* E4 y! j) q* E+ h0 }
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
0 Q$ K0 y2 \! I. P* B5 n Q$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz
6 H: L2 X2 s3 K3 o( b1 F4 h$ }安装Nginx和ModSecurity依赖包
- O3 C6 n& U; ^1 p7 i/ @0 }6 fCentos/RHEL( }9 g* m- ~7 D1 Q/ ]
$ T( E5 Y! G9 {7 ]9 F! h1 X- r
+ }7 T- P. f8 d: }& p$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel- ?" j) N _8 }$ ~* W
Ubuntu/Debian
- B* V: \, O" X& ]0 u5 q L( u0 z; J6 G0 b" _% a5 Y7 u- U
& \4 r" B9 a, F3 u* @$ 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++-dev7 O; i! R6 h! k& \
编译安装ModSecurity
, x, y# Z: b' e9 D1 u. u: L: gNginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
- Q0 y3 r, ^' T
1 I7 v0 S& X) D% K3 h0 Q) N2 q. y/ a$ z8 d6 u' |
方法一:编译为Nginx静态模块7 T4 a- b+ u' k9 N1 Y
- b! z& O7 o! e. N, Y, p6 J% i" ? P4 @& h- v; `! r
编译为独立模块(modsecurity-2.9.1)$ H7 a4 Q( c3 P* G$ R5 ]% |7 d# q% c
$ tar xzvf modsecurity-2.9.1.tar.gz# Q/ }6 k6 T7 N$ F; W5 r
$ cd modsecurity-2.9.1/; }1 n, |" k6 U& ~ t/ T0 t
$ ./autogen.sh6 z6 Z! D6 t( a2 K, ^8 P) y( l" K
$ ./configure --enable-standalone-module --disable-mlogc) m* T0 r0 s4 v! _1 F0 F) `# ]$ m
$ make6 Y/ \5 U! D2 F) F s
编译安装Nginx并添加ModSecurity模块% `0 d- D& A. d1 Y, |' e- X5 R( W
$ tar xzvf nginx-1.9.2.tar.gz1 _& J& M. D2 _4 s, P! ~
$ cd nginx-1.9.2% Z3 U# J: Z: k
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/3 ^* x, o4 l: p
$ make && make install
6 n5 ]& |- Q- v' c1 T方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
+ v8 [, L/ Z$ N: O! s9 v# _; ^* S' p! M! I5 I
+ |) @% ^+ }0 \! G3 i8 S
编译LibModSecurity(modsecurity-3.0)% v' \+ M6 Y, l- T/ B
$ cd /root0 D/ D2 c% F2 L
$ git clone https://github.com/SpiderLabs/ModSecurity
2 R0 L. ^8 g: f& V0 e1 }8 O* b; b i# W0 B6 ]$ cd ModSecurity- x$ {8 j2 ^* _9 g* @! |
$ git checkout -b v3/master origin/v3/master
0 f: Q3 T! ~0 a! Y) ]$ sh build.sh
$ q1 Q9 v2 K( H+ g' F2 z* L$ git submodule init
1 `- o% f# h) O4 E, \; H$ git submodule update
; ~" b6 }( q2 K$ ./configure
% i. E" b- e: a& Z7 p9 ^# I$ make
: h6 s# C. O8 c$ make install* d- j) Y5 ^7 Y. r/ @
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
% @0 b5 t+ S6 ~: s4 O5 T
) P& I5 b! A, f8 V0 e
# A# n4 b5 l6 B6 e$ ls /usr/local/modsecurity/lib5 F# @( x; A# N% V
libmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0
1 w9 V6 b* F; [4 [! G) V编译安装Nginx并添加ModSecurity-Nginx Connector模块; J7 J$ ^2 q0 ~. M+ [
使用ModSecurity-Nginx模块来连接LibModSecurity) D U1 j1 _% {2 P- {8 \! L4 [
: i: W( T9 A; C& t$ u4 {
9 h, K$ t! i# J# O8 ~, r
$ cd /root2 M, p* c) C; f) ]2 Q0 B) ?
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx/ c7 `! ^9 |1 {* w/ v3 P+ d
$ tar xzvf nginx-1.9.2.tar.gz5 ^; d0 i& b) m* |5 Q! u
$ cd nginx-1.9.2
/ ~: t$ c `8 N$ ./configure --add-module=/root/modsecurity-nginx
/ F/ c: Q8 D% T$ make% j1 i3 ?% ^3 x
$ make && make install* y2 R4 l3 Q* i8 e
添加OWASP规则! E+ ?9 S" D: X! e- l% l" @ j: ?
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
! `7 C) t8 E; `6 Z* h( I3 ~5 d9 V/ V! d9 t
) M) R* [8 e& Q5 ]! l$ L; c下载OWASP规则并生成配置文件
% X+ H( Y4 h7 k# z* P4 h# z$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git' y6 ?3 q; x0 s
$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/( P% q1 M; f6 M: c: U0 z) j
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
! T8 Z0 S) K2 G" B$ cp crs-setup.conf.example crs-setup.conf+ f, R7 m6 `9 W8 A" q/ Z
配置OWASP规则- k* G; Q1 o& K, t& \* U- w
编辑crs-setup.conf文件
, I) i {' g. ~; j
1 s; |2 v: H1 y0 s' P4 C
8 T b8 A5 h: E5 V& }7 z$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf& C1 ?* m, U7 n$ d. s3 R* F
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
. j4 s1 P0 u2 A6 m3 N$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf1 a! Q' F/ }% z. ]" M& x( T G" H: r; l
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
6 A0 [$ d& z7 c: l0 M+ ]% Y默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。; H1 w4 p9 T* y, e
$ K% C8 N C- I& |# M
$ m. n0 A9 I. _$ R6 R+ O# T. d
启用ModSecurity模块和CRS规则3 V# {9 e0 v: z. a: O) `
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。# R' N0 H. g6 F$ v# y) }9 a
% Q% T$ H3 c- s% \
; y+ }1 U( D R4 H1 ?# a
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。5 r ^) k8 h8 u, |$ }8 o: Y
8 N ?$ w+ U* F0 k; A: R- s) S) ^
, V9 o0 u& \. x. o! M
$ cd /root/modsecurity-2.9.1/, ~0 o+ p) _; s0 H* H0 w1 g5 A
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
6 {, u. @5 U; L$ cp unicode.mapping /usr/local/nginx/conf/( a) H" |$ Z. d) R
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。9 a- k/ ~4 V/ v) Z7 Q& n" J k
/ l4 F( P2 R* g
* ^3 [* L! \2 x" r# x
$ vim /usr/local/nginx/conf/modsecurity.conf
7 q1 [! n; Q/ E) cSecRuleEngine On
& T# V4 P4 E( \* K9 o# fModSecurity中几个常用配置说明:
8 }0 f! n$ S; i( E# j; q6 V7 Z1 `2 P# F5 M1 Y- }2 @$ }9 o2 r4 M
# F# T! j! p& B3 R# w1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。2 o3 R& O! X) g5 p" {1 q
1 V- F0 d( `$ C# m
3 @, ]5 F. f' E8 t' D. q
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
0 s J5 V5 f! }5 X% b! a( s
u) G& Y2 ?6 I* Z& I! a/ W4 p8 E+ Q
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
$ s; s8 v9 M: s: Q2 x* P: ^, }7 D- H1 ^, Z! ? R( i( y
+ I# r' `$ o7 D% @4 A
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。8 q/ f! G% I, _' }" {' m
1 C% G1 d) ]( a
1 [& Y. q& A; O, S' g0 @在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。' u1 B% F8 K$ R& S6 @
3 V/ l* m/ a4 u( N( i: O! G) T: \' u# t. j- @8 w3 E6 l# V) r
3.x版本CRS
) S% ]& a% I6 u3 l$ cd /usr/local/nginx/conf/owasp-modsecurity-crs, V( h7 A; f% |" X4 f% ~5 l
# 生成例外排除请求的配置文件
, M3 P. Q8 s& J7 G$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf9 ~& r& {6 T. u8 A! u5 W! m A; s1 z
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
3 z1 C+ P$ c& D' m' c, R m5 r$ cp rules/*.data /usr/local/nginx/conf
: c. @$ k$ ~; Q为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
( k q5 p2 }" P% d) j" |8 F% p' z" P8 _. {4 c0 q. }5 t" S
/ |' A+ o2 c, Y. D L+ t$ vim /usr/local/nginx/conf/modsec_includes.conf
, O4 w, q# Y) E( w: p' N. o5 ^$ [- u* |: J* v
[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
* I. Y9 R7 F$ S, n4 S- X7 I% ^# D" {6 k- r
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。$ n; z/ {. x# e* \
J; v% _; M/ Y$ b4 W k" C/ i
+ O" m0 y" w# A8 _$ S配置Nginx支持Modsecurity% f) f6 U# {. ?/ r) y7 n+ n
启用Modsecurity, J$ G8 N: z7 E" [
使用静态模块加载的配置方法
: o2 L X: ` U5 ~7 C% V1 F' U c/ f在需要启用Modsecurity的主机的location下面加入下面两行即可:4 I7 Q( N+ q4 n) R) @
Q: D |4 U; p* F* h
+ J0 y7 v( s M/ ~ @* nModSecurityEnabled on;8 t P3 |4 c2 l' P; n4 c
ModSecurityConfig modsec_includes.conf;( E! C. Y; W0 i( `) b/ s
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。- R! ~7 o% |. A* I6 r' s
' f2 @& n7 M7 y9 H" p, t) A' s
) l8 b1 Y1 J3 B
$ vim /usr/local/nginx/conf/nginx.conf
9 ]0 X7 i {+ H6 g* U0 Q6 O5 g- _0 j9 @2 h
. \& R7 j+ f, j" O0 I) ]
server {
9 e- |9 v8 l1 R w& G listen 80;
- M6 c2 s! }- O* U3 i* S ^; k3 f server_name example.com;+ h% }9 i6 J3 A: J! E L/ w
' q, z5 B5 F4 f- G+ q& L2 g% Q$ `; t; h1 y- R! H. N% h" h( F8 n
location / {) W* J' I: m" T2 a* P
ModSecurityEnabled on;
6 r5 I' A) V- R* p# P ModSecurityConfig modsec_includes.conf;. a8 ?* N. x+ s. d
root html;
2 K6 S @8 \; }/ Z. D D- i index index.html index.htm;
. ^) a; x* W% c7 j+ {& N' ? x' N }
2 T# q: I0 ]7 j- e+ X' h3 D}# v' `& E5 I+ D6 f& ]
使用动态模块加载的配置方法
( {8 O! [2 n' ?5 Y* h在需要启用Modsecurity的主机的location下面加入下面两行即可:
4 M8 G* w a# Q: h( C9 X) U" B. Y6 Q; a2 U7 j6 f5 D+ e8 A
+ C( y& I8 v9 a) m# ?" Wmodsecurity on;
: q8 M: |- M7 l4 x$ dmodsecurity_rules_file modsec_includes.conf;
9 I$ y" `! h8 z修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。# y( @+ A+ n0 w6 [* D" n% C7 U V3 f
9 n! h! Y+ H! b; u1 i& L
0 s& H V D/ A$ Q9 W V- z" O$ vim /usr/local/nginx/conf/nginx.conf
* X( _) ]9 n. v7 b6 ]( i% b* |# R
/ W! N m9 s* K% C# }server {
I# y/ l! J/ s Z listen 80;; y7 B$ U5 Q0 ?4 \* S$ K. Q4 Z4 l$ T
server_name localhost mike.hi-linux.com;: q) B. W- q* d
access_log /var/log/nginx/yourdomain.log;
1 W' S( v. `, h' J! u! l- G7 u
% W9 c+ N: `' L# `$ @1 B' X& U: ~: Q. A
location / {
2 A5 e' D$ X) O& E; I* C! u0 k8 I8 R% y
) c3 ?, ?; @( g& I' ? modsecurity on;0 r# {8 c8 P8 g0 K: n! k
modsecurity_rules_file modsec_includes.conf;* A" N4 j0 V. h& p9 s! n& \! }$ a! @
root html;
& q, ~& [' u+ a. m1 c* @0 E% m, g- J0 L) c index index.html index.htm;' Q, A9 H+ w9 C+ U
}
3 J# J6 d& r8 e5 `$ _& {9 {3 M}( H8 J( }" J8 i9 ?+ p2 x& A
验证Nginx配置文件
' v% r2 [6 F' K+ A9 Q* O( B: J: u% O$ /usr/local/nginx/sbin/nginx -t* A6 O! D% S9 K
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok8 @/ ~6 r# d/ j) w
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
- B. q6 C6 \, a0 n/ O- x启动Nginx
& I. z3 v# y0 z! m$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
. b* m, X& G: l, L3 q: V1 [
# I) j* S4 c9 q6 H0 B+ w, D: F测试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能够战胜更多复杂/未知/混淆的攻击模式。 0 J1 K- h5 z. m+ h6 N8 w8 J9 z/ [% d
|