ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。 b. F8 U1 b/ \; X- E L/ `
J7 S. ~3 ]: J* W/ }6 R6 q
h3 v0 ?9 f% p* c5 O( B
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。" l% d8 M& _0 L1 n
: Z9 Z# ~' b! x" Q" _9 t2 Z1 S! B7 }% D# r, u- B& V" d' g
什么是ModSecurity
# L m2 z: M, _- lModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。4 J6 {* M+ m8 q+ M: s J* \3 F6 h
- Z& l$ K/ y- @ J5 L
8 O \. ~* I7 ~) q$ k) _2 hModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
?+ o) d0 t: C l
+ G3 v- ~: ]- e9 O/ T
) O6 C6 t+ }! wModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。* X, A! ]. d: W" A$ e0 i
+ D7 k) [3 J% q' E
3 X) C& y% G# N4 G
官网: https://www.modsecurity.org/
. w1 v8 t. w8 R% ]. E4 W- M' u2 b2 r& |/ Y! t h, A
$ K! I( A d; e什么是OWASP CRS- Z( O; G% E6 W3 W: A
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。5 ?1 D% r2 D" {2 F9 w4 u
+ c& Q$ A( o2 ~: s6 f
) H( k4 Y$ Y. W
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
* o! q0 t9 u- |+ O# h4 M4 M+ J" Y3 e1 f# L
/ a" N" M" M7 _) Q* {3 m y
HTTP Protection(HTTP防御); B' u3 R8 q5 M* ~ g
HTTP协议和本地定义使用的detectsviolations策略。
5 g; @4 O7 t( \& ^; e8 s" K! X% j( m/ Q9 y
+ m, O4 i6 ]% l2 R6 p9 `Real-time Blacklist Lookups(实时黑名单查询)
" n7 d- Z5 M/ m3 R利用第三方IP名单。2 _, V$ b" b1 s* E0 g* h$ O
- U$ q$ k: S! B
7 C |$ q3 j, C% nHTTP Denial of Service Protections(HTTP的拒绝服务保护)
, _8 u) P8 o4 a防御HTTP的洪水攻击和HTTP Dos攻击。
2 j! d6 k# G( ?/ p' Q
$ M9 W: Z1 ^/ @/ I
1 |$ k- f. y+ j. j( o) ^+ \5 Y% `Common Web Attacks Protection(常见的Web攻击防护)' b. {+ q t4 ]7 i+ K
检测常见的Web应用程序的安全攻击。% |% q/ [3 {; S" F5 U3 ], a+ ^0 m
3 e2 D0 h( u& x4 k& w$ ~
' V# P: M! c# t) j5 d& S
Automation Detection(自动化检测)
# P4 A. n' G' z5 z# ?- b' b检测机器人,爬虫,扫描仪和其他表面恶意活动。
; l2 j, h% a; l6 Q) \4 v ~& H: C% V
& \4 `% o: i! sIntegration with AV Scanning for File Uploads(文件上传防病毒扫描)
! w: y3 w* g$ s" B1 f5 }( j- d, s9 w检测通过Web应用程序上传的恶意文件。
9 a% a9 f2 D4 `3 E4 `
: G: l9 c j/ c- I6 M @1 B% Z6 X; G3 b' O1 ?' C
Tracking Sensitive Data(跟踪敏感数据), A2 m2 V" q9 v7 e i
信用卡通道的使用,并阻止泄漏。' \" h% E- k/ V& o
z3 {+ F/ ?5 {' v" ^. p$ r
/ c$ N+ @ o2 L' u6 xTrojan Protection(木马防护)
1 f: y( f: j6 x) |$ z5 \6 l( n: Y检测访问木马。
+ P5 t( O- m, ~' ^5 p' v8 r5 X6 k8 P n9 Z4 o4 s: V7 V
; z6 ^% L2 j- g) g, D6 e
Identification of Application Defects(应用程序缺陷的鉴定)
1 I. {8 x6 d( m, j) }检测应用程序的错误配置警报。
7 Z) c7 K, M$ C3 E( V1 l+ i W
* V% D. y" x v3 H0 _* u6 e" [
: G/ S) T* q! | s1 c4 R6 ZError Detection and Hiding(错误检测和隐藏)
0 i4 m- ]& j. j0 o检测伪装服务器发送错误消息。
" @" l. J$ T7 {& c1 C' K# W* c( x% B/ ^$ H* @0 m. K# Z& ]
+ T+ j# B) f; w' ]1 _) d* y& A/ n安装ModSecurity
. G- E$ k! b& K0 a软件基础环境准备2 {% n. C- }8 _# L( G
下载对应软件包
7 z7 A/ p" s* @, x) J$ cd /root" W; c" |( T* m
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'; o9 y( @% }7 U" X. A/ i# f
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz& p p( X0 e+ N" y$ U
安装Nginx和ModSecurity依赖包
) s) C2 E" g3 `8 F& OCentos/RHEL
, w9 i6 @1 @1 c
3 c7 ~9 _( G6 k3 X8 R9 z
+ e; V/ w) s; `: J- [1 }$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
9 Z: A8 ?# B* d, CUbuntu/Debian
/ \8 v; A/ a7 h
' P# B. d# d4 [/ J- G5 l( [
4 M) c+ B- ~" C, v! K$ 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
' d4 L7 l& g9 U$ e$ V) J' a5 ]编译安装ModSecurity: B7 @2 H5 x5 [7 G
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。! D4 w) Y( ?9 D Y1 J
* z5 y& X8 W/ w4 J- L! g& ~
/ R- H& V$ @( X! [& c方法一:编译为Nginx静态模块
' ?# w$ y5 M+ M
. d" o, w. r% X' l+ n9 ]' b
4 Z7 z" S! e1 I0 T, Y7 @* R7 y, y编译为独立模块(modsecurity-2.9.1)
* D: x& S& z. d* X0 {' M& u- U' f. ~* T$ tar xzvf modsecurity-2.9.1.tar.gz
' @) J1 r9 N# j7 c% m$ cd modsecurity-2.9.1/
4 S/ {; ~: h! K& _7 z, j$ ./autogen.sh
0 I0 g: y; h' M( C* K- X$ ./configure --enable-standalone-module --disable-mlogc+ w$ s& a" b2 j0 V$ A
$ make
# K: c: g; \# P& R& A1 f编译安装Nginx并添加ModSecurity模块
7 _- O9 `' S5 k% j2 G1 b$ tar xzvf nginx-1.9.2.tar.gz
9 r* b4 {! K" a; {$ cd nginx-1.9.2
F1 d; Q/ ~7 j1 U& B1 H$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
/ o/ `6 Q2 N; I" m$ make && make install
% G i& g6 e7 t! ?- r4 g, \+ `% B$ o/ U方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
. Q3 C( q+ k- Q, b
' ]# _; [: E) ]5 i* S& f1 Q
7 X- L8 q# W* Q8 C! s/ V+ }编译LibModSecurity(modsecurity-3.0)
# Q: e$ o$ ]- l+ I$ cd /root, A. b8 L$ l: l0 J, J/ R
$ git clone https://github.com/SpiderLabs/ModSecurity
- W$ j$ O" z8 q4 b+ j' g' d9 K$ cd ModSecurity b# T- R+ x) ~
$ git checkout -b v3/master origin/v3/master
% N7 E, {) z/ |. ~! z1 [$ sh build.sh$ b3 v/ V/ A' h7 }
$ git submodule init6 b) }2 V+ ~ G: a
$ git submodule update2 E$ K7 P; E* B( o# |
$ ./configure% l3 `+ d4 w" N5 b" j8 p2 ^
$ make
& v3 L) a" Y5 D" f- F$ make install
% h S+ V* w( t- R6 ~7 X* nLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
3 ~4 s' g! Z8 p0 f( g, u9 n8 y% S' e) |! t+ s6 H% T
, w2 j: H, s: d; T# R5 Z3 i1 |1 R# d
$ ls /usr/local/modsecurity/lib1 S( E7 e5 t8 v q* K
libmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0
: W4 Q! E' S& A% F- b9 R编译安装Nginx并添加ModSecurity-Nginx Connector模块% G7 y$ t: c* C+ \$ f
使用ModSecurity-Nginx模块来连接LibModSecurity; R$ j# c5 t1 H
8 a+ M3 I5 W* M8 a* ^* j, n, ?& Y/ O; O1 X
$ cd /root
/ c1 k- W6 v6 r, A: T8 J) Q$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx3 U4 a' x' c/ o0 C
$ tar xzvf nginx-1.9.2.tar.gz8 V. ~: Q/ S% c! E
$ cd nginx-1.9.29 U. m' D. |( d3 @5 U
$ ./configure --add-module=/root/modsecurity-nginx* p* r; E" |& r* D: R7 `
$ make1 Z2 X# y* b; U6 c1 {
$ make && make install
E( Y6 g; G7 y& q! {/ U添加OWASP规则
( w W9 ?/ z- ? g6 cModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。& y, k# n$ A# s+ v7 ?1 E+ P: {
2 z. }8 ~! U$ V d, _
- u% f* |+ j( _# Z/ b* s
下载OWASP规则并生成配置文件
. c9 Q* c; @6 ]/ ` }: f$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
" X# O: U8 J& B7 u( J+ b2 J4 b; U; ]$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/
# L2 a7 D' [ C9 L6 ]$ cd /usr/local/nginx/conf/owasp-modsecurity-crs1 R+ o1 m7 y3 s2 Z
$ cp crs-setup.conf.example crs-setup.conf
, U/ W- R- V. x* H. n# l配置OWASP规则3 @% @) g1 y8 `4 i: \9 h+ V
编辑crs-setup.conf文件
. P3 O7 E9 R/ v; j5 T
! D5 X. ~/ H) _6 K+ j, F7 ?2 K
, _- [( i5 }# T8 u1 \5 t4 O+ h! k$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf+ t$ R e( D" S( J. k. I
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
, P3 S: u0 s* ^; A4 Y+ O2 v0 q# e$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf" J) A1 \. v* V! f$ J& x
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
8 W' Y& |5 A. q: ^9 G默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
1 Z$ N( G- x3 |( E9 C1 u/ I) b2 `
) F+ P, s7 m5 \7 P% V2 z6 C
: v4 D8 g$ s9 d8 x启用ModSecurity模块和CRS规则
/ T0 h2 U( }2 \/ p5 [5 y, C: ?复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。/ y1 E, M9 @ b7 r2 c
0 U6 P( ]2 Y4 ?
5 o0 {' h5 s" y8 X% ]+ Qmodsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。! C$ C% R7 O5 B" A5 z m) D( h
. ]: O7 C1 V" Z9 h7 w
) M3 _7 n: X3 k5 [1 A$ cd /root/modsecurity-2.9.1/$ W% o4 O1 z6 S' N+ Q4 B4 P
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf 2 |8 o) C$ @$ T* |& ^
$ cp unicode.mapping /usr/local/nginx/conf/
4 ^7 Q2 T. L; w, @ P- _将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。2 [* i, H+ G7 C2 A0 y) h
( i) r) }6 O4 j$ n8 h# W
. @* W" v$ h. s9 Z/ S+ l% j( L$ vim /usr/local/nginx/conf/modsecurity.conf
% m' A. J* l5 m) r4 }3 bSecRuleEngine On2 T+ C. ]2 D2 W( G# _1 y
ModSecurity中几个常用配置说明:/ |0 Z8 U/ F3 m/ L3 l& J ~$ M
" H8 p5 r6 L% o7 U# G6 m+ V# n, J- V: R2 e4 L0 x$ m; {
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。' K9 |) C" p% g5 Z) P/ s" Z% w/ S$ I, O
1 }; ?+ ?3 p3 g5 r# N+ g/ p* I: q; R) `$ x/ [
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
' `+ v) L1 _5 s) h! l% [# X$ s/ r! Z8 I, j2 D& [0 [
" x9 Z9 t$ W0 \- b* W
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
% V# O4 ?' \. Q0 M g4 D
( }1 T" N+ L8 z2 E
* h3 J/ T; L, p1 N5 Y8 d4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。0 c9 h# N3 [! A6 }
% }9 z5 \( D6 E6 Q% F
( N: n) Y) z% p" d' ]" j
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。6 Y5 U7 j3 K$ p6 Y( t+ N+ V
( k3 Z& S p* ^# ^5 R& _
' ^4 P$ m& M3 j# C! h# i
3.x版本CRS( p1 [5 A, b9 P1 x) F
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
( `) m* a6 G5 w# 生成例外排除请求的配置文件
* F9 i1 Q3 b; F9 d8 J$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
" ~- X7 H9 k; N3 j0 _! `$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
6 u8 p3 w$ N; u' D$ cp rules/*.data /usr/local/nginx/conf
) a! Q+ a4 V" f3 j为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。5 w$ \4 A% |0 t
+ {7 b$ Y: b3 m& K! ^( i
) ~& } t1 h9 U' C7 o: ^: s$ vim /usr/local/nginx/conf/modsec_includes.conf
$ Y5 R ^; ^5 f9 v( L4 y7 E0 O% w: Y* ^2 I
[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
! t8 d( M6 }( K9 T/ o4 ]/ {$ X* L4 W
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
# ^0 Y0 C9 W6 d5 i
+ `; n3 ^: Y c! ^* |$ H
0 e; _* m' }5 Y3 a: _$ A! T! b7 z配置Nginx支持Modsecurity
6 P( ]! U" h. ]7 }' Q启用Modsecurity
& y7 [6 ^; O. T& S# f, Z; D+ M使用静态模块加载的配置方法
# K- E7 {7 ]; J6 @4 C+ C2 Z在需要启用Modsecurity的主机的location下面加入下面两行即可:
) `- C2 b& _$ B# p" z
% C: T A' u. D! }; a9 l/ ?( A# A/ l) K7 g8 g, Z( W, t
ModSecurityEnabled on;7 X3 D; z6 `8 _8 R, d* P3 a
ModSecurityConfig modsec_includes.conf;
3 ]6 I% O; v. Z1 H修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。% \2 \; H3 T, f( Q* h( ]+ k
8 N1 e, s; \3 o# d- C# h7 b
& `) T/ M6 `# e' U
$ vim /usr/local/nginx/conf/nginx.conf
6 H8 e" c2 e* X& r9 w$ j9 R0 ]# a, i) Y
2 N; ?* A7 e4 V6 \) t# I8 p# D H. V. Hserver {
4 M w- J# Y0 J! q& w7 }! c listen 80;( R5 r5 J4 _- `+ D9 a, n
server_name example.com;
' p; B, h4 M2 E7 b* T; ]0 F( w6 A+ z5 {. r a+ O( _' K6 k
1 S# @, m$ p1 a/ _$ f+ J
location / {2 |' c u! `! r; ?7 R
ModSecurityEnabled on;
9 N% P" v O2 K! d& a ModSecurityConfig modsec_includes.conf;
+ z6 _+ b ~2 j: U root html;8 h& s! P* ? [ {
index index.html index.htm;
' C2 m- M& a v3 B, S }
0 v. ^1 ^; b w% |$ \/ y9 V# x$ y" K: n2 @}; h% T( L# g% E9 {& a5 t
使用动态模块加载的配置方法( M1 V0 q8 @# [' c- w/ T
在需要启用Modsecurity的主机的location下面加入下面两行即可:6 f% ~8 ]8 Y2 F. @, w
' ?! a& A* D @) g8 q Z
/ g! j5 H6 k9 ^0 Y8 smodsecurity on;
, y, X U4 T1 I8 U9 }0 L& ?% fmodsecurity_rules_file modsec_includes.conf;
# k* H& L4 b( a4 Z- p1 P修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。% q+ W! G4 g& Q1 P) J$ B
/ H* D- i' R& ^% Y& N' g; S8 J9 f6 W) p5 B0 ~! W2 c& T, _
$ vim /usr/local/nginx/conf/nginx.conf( W6 y( v b" g- j/ H8 N8 X' O
8 j9 x: R/ Y ^! u8 _
6 y8 Z9 h" C+ Q$ Z: Kserver {
. v& q( @# m5 z+ w" } listen 80;
2 L' m/ I0 R% |) S8 `+ L server_name localhost mike.hi-linux.com;2 {: k {: L& N7 s8 K
access_log /var/log/nginx/yourdomain.log;
$ n. w2 Z x4 Z. W* y) l* A* z" m; L, W* J
; j _# P$ Y% ^5 G location / {" H1 a1 j+ T3 y* h$ i0 p. n) U0 Q. T
8 U4 d) W' x& e1 F" ]& m" u, J# v
7 g: m- p" {7 g3 q- x3 d( G modsecurity on;' c. y! f0 a# B( E8 U
modsecurity_rules_file modsec_includes.conf;
6 t9 _+ x: O6 }6 y: ~ root html;- Q& M7 C. u% Z" i8 M* c+ c( \+ u
index index.html index.htm;
; d1 t2 B" p. [) G* {& P0 o+ _}
2 ^. S3 c- D8 `( ~+ M: J4 ~9 }}" a" }9 h R' L& a. H
验证Nginx配置文件
% a; E! t2 b# E% d, {$ /usr/local/nginx/sbin/nginx -t
3 {( j9 {$ P s9 l5 [2 Z7 ~nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok: w; {! m- ?% e# R
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
1 z5 ]3 J, p1 x7 E3 R4 g$ k) ~ X启动Nginx/ x" d2 X0 v) N2 S! C0 ^3 z8 N, ^
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf: b5 | {; S$ a% d
7 Y0 r: V+ W. `) V3 l" W( y+ 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能够战胜更多复杂/未知/混淆的攻击模式。 $ d7 e6 x! F0 d1 l* X0 B* c
|