ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。# b2 F( O, k3 V2 B6 n
0 h: t( j H( \# R) B6 P3 L. q) N" g! b' ~9 o
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
. u- _' O0 U3 D% G% L9 X6 R8 s5 B* A$ p+ K# d7 }/ ?
7 h, I( {' k5 \- {6 h0 Z2 Q: W什么是ModSecurity& T/ `$ Y( j4 ?7 M9 I0 Z
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
: ^/ ?) }% e3 p- M6 ]' l" W9 q( y7 R9 x& \/ n) a' R j5 w; D( s
: v- j: V, d8 }: ]4 L3 H4 V6 y2 RModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。& p2 e, k) J3 Z+ v, D$ B2 U
1 ~, u O! { T7 |3 ?/ T
! w( P" v% f) {+ P9 ^, gModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
2 r5 \8 C+ m4 S& M' R( S2 f0 K; d. f+ ~1 x8 r: \% n* v
. ^, h) H6 N0 H1 o2 Q- i5 e官网: https://www.modsecurity.org/3 W; t& y. ?7 y
3 e; X2 p! H8 ?4 c* B. F+ D K
1 j. n8 Q! N8 Z什么是OWASP CRS, p7 E+ @6 k. q: ~0 W6 F' N
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。- N6 V1 v$ i2 x, p+ F2 p9 o, a
- I: J+ a% a) n! A X" ~5 G+ S D
% X$ f P9 ?6 E
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
6 h8 P* U7 @6 R9 W8 x. `
$ \. N+ Y6 B. A4 }9 r0 k
, e' l' D t% `HTTP Protection(HTTP防御), v) S0 V3 k% T3 s7 X
HTTP协议和本地定义使用的detectsviolations策略。
/ d: d' T! N: G6 [1 U0 H# x& b: |6 n
- |1 ]4 p$ t2 ]# g- m" |Real-time Blacklist Lookups(实时黑名单查询)3 t8 n# N; J% _1 S' }$ ^
利用第三方IP名单。$ A' \ n' x+ z
( y: s! v& q1 |$ @2 O e- f) y& }
2 m" W1 X0 \+ z1 ^
HTTP Denial of Service Protections(HTTP的拒绝服务保护)7 T) F/ F: p6 V" b
防御HTTP的洪水攻击和HTTP Dos攻击。% w# R9 `# I) n) W/ M3 |
* U# v. i; S5 F! b3 }& \" I) O) J( W5 n/ d$ z- Y
Common Web Attacks Protection(常见的Web攻击防护)( G- l( r! ]! ]4 o
检测常见的Web应用程序的安全攻击。5 Y9 j( h. g7 g% k; V/ f
7 A2 V/ P1 V8 ?) A' m9 @
! v6 m: N5 _" h, S7 X# H) @Automation Detection(自动化检测)0 o5 b; y. _4 T
检测机器人,爬虫,扫描仪和其他表面恶意活动。* Q; Y- x' o" J7 _8 I
& a/ P& C% r$ [6 ?2 M9 R _1 ` L
* Q) Y" s( }- @( O4 ~Integration with AV Scanning for File Uploads(文件上传防病毒扫描)
% g3 e. G+ h5 X6 ]7 R检测通过Web应用程序上传的恶意文件。
$ Z4 p7 a8 @& s' E0 @" j% N& i6 w( J. w2 O; _" X9 C5 [
& `/ B1 p# E# x
Tracking Sensitive Data(跟踪敏感数据)
) [# d( a! a8 G) Y4 Y3 z信用卡通道的使用,并阻止泄漏。
: N% s# }* p6 \) D( K1 v7 z2 t3 i9 ]5 ^' a
+ p- C- [2 r0 k9 ?0 h' T" FTrojan Protection(木马防护)
! a! n1 n+ e; m3 C) k5 o8 p( h, Z检测访问木马。) j0 d: @0 a) g% H! [( r' N
. D; W$ w# Y# V, |$ E" G" }; k
B m; a. n( n8 J
Identification of Application Defects(应用程序缺陷的鉴定)
& I5 Q) u: r `$ G1 T6 a7 p检测应用程序的错误配置警报。5 W$ ~) K0 Q# ~) N+ B* P- Q
% E: R) c4 J; S0 D# i3 {0 Q: A
% ~ W% Q! b y7 YError Detection and Hiding(错误检测和隐藏)& E" ?2 p9 S& s/ G5 `( N, g5 M- G
检测伪装服务器发送错误消息。& T6 T7 l0 v0 ]2 S6 B6 p
& l( V! r$ s. x: [+ J5 I- V' e6 m: x: P# @* V1 B% e
安装ModSecurity' c. d+ {9 [. H9 s
软件基础环境准备" r* ^" Y( x8 j9 K6 l! V
下载对应软件包6 A/ ~7 I% p( c; V5 c& o8 _
$ cd /root; K/ H" i1 X5 V3 p! p/ W: u) M
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'' P" x( l, t0 k- d
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz
" k9 P, {+ {6 _* k* R安装Nginx和ModSecurity依赖包
# K! d5 E( a: z2 X/ u7 \/ F* pCentos/RHEL
1 \: \9 x0 m4 [, u$ L& I. a G; V u. t* P) j$ ^, |
$ ?2 ]5 o: P0 R$ G9 `' z$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel0 b3 t! i* J$ X1 o! |
Ubuntu/Debian
6 t! ]" v8 v' e4 n R" V9 J, Y* m8 g X7 x \! i
c+ i* t7 w( H
$ 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++-dev4 R, ]" q& G0 `9 B# W
编译安装ModSecurity
6 r' p3 @7 s2 [# w+ x6 k" i& DNginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
! F* F0 z$ e p" Q; Y( u* p0 X* N* L/ n4 a
, p# F* v N7 I/ q9 l
方法一:编译为Nginx静态模块
" m; S* v- B% F6 b+ ]2 P) A6 Y! Y! F% O& _7 M! G6 Z
4 w! f9 D2 j+ R( M2 q编译为独立模块(modsecurity-2.9.1)( A1 p2 c! c- F1 o4 L* M! d& `% [1 P
$ tar xzvf modsecurity-2.9.1.tar.gz
' `! E# \1 |0 B4 J( c$ cd modsecurity-2.9.1/
4 b7 z6 P, I0 c$ ./autogen.sh
& U/ k$ e" x% ^$ ./configure --enable-standalone-module --disable-mlogc
7 g( ?2 |8 K4 V v5 F$ make
6 K" @, j/ B& [! J9 ~. Q' ]编译安装Nginx并添加ModSecurity模块
1 C( z1 J4 f5 F: p1 \$ tar xzvf nginx-1.9.2.tar.gz6 I, T8 o: E, t" d' J
$ cd nginx-1.9.2
& S' X6 h: n' w- f Q- O$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/$ m% s! t/ C% \. r
$ make && make install
9 y5 @( K4 L& X$ q3 D; [方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
7 v; W: F, ]# A& c; r7 O/ \/ y) U' Q% F5 ^
V _4 V1 ^- s" p: d* E编译LibModSecurity(modsecurity-3.0)
' e; n2 b/ n# t* V. ?: j9 m$ cd /root9 A' ~# d4 R$ D E1 V$ Q
$ git clone https://github.com/SpiderLabs/ModSecurity
( Y) ? Z- M6 f; y1 d" z$ cd ModSecurity2 J7 P" ~- j6 P6 h& H! f" `% x
$ git checkout -b v3/master origin/v3/master8 F$ B& L4 r7 G$ @+ D
$ sh build.sh
/ E( U3 M6 G2 n( W" u4 p3 F9 L1 ~$ git submodule init4 [' \! y# b' D$ `* J/ D. b
$ git submodule update
2 I3 A$ S' e$ ?* e$ ./configure
* R1 _2 Y/ e3 V; e) `$ W) j) ^$ make4 I1 y% L4 d* e
$ make install0 a3 @/ r! v. y; U
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
; R4 U2 f8 Z, p# K
0 p- H+ X0 H( f6 @, Z& D' t" W9 P4 h J6 g
$ ls /usr/local/modsecurity/lib# D% u2 ]* v4 G' M: r ~* G
libmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0; q! W4 {$ S$ e7 w
编译安装Nginx并添加ModSecurity-Nginx Connector模块
6 v2 X, V: c/ c2 ^3 q使用ModSecurity-Nginx模块来连接LibModSecurity
9 P5 g) m2 i4 \, J- p- K% ~
% `' w/ U$ M8 n4 C4 B/ j* v. v1 q# p P: a( t6 G* l) C# h
$ cd /root
' p7 a3 Q- h' P7 t2 ]; b$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
0 n$ L4 H; k9 ^$ tar xzvf nginx-1.9.2.tar.gz
# q( a4 M1 y! c% @$ cd nginx-1.9.2
% X+ \6 m9 B; B h$ ./configure --add-module=/root/modsecurity-nginx+ I8 Q2 ?7 F- ?" K/ I! w
$ make
( W2 j+ K$ l1 F) n$ make && make install! a; ~: G" n( O9 B
添加OWASP规则8 U0 p1 l" Y/ v- H" O* p s
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。5 T, b4 f% Q% b! {. N) ?
* ?- t0 ?- ?! D( f, J
l& w$ {( _# M- j1 N/ `下载OWASP规则并生成配置文件5 D. c* C- L. J8 P: ~
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
% W% I! j8 P2 u+ r, X% q) @: A$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/
_+ s j7 m) o' `$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
6 s j, G( b2 {% l _$ cp crs-setup.conf.example crs-setup.conf
& G e/ V @6 E$ d配置OWASP规则0 F, E1 n% A5 R- }5 s1 F9 R# L
编辑crs-setup.conf文件
- t5 N$ \/ A* t5 O' z$ l3 g+ v- }3 X% ]4 \8 q- e" x
6 D G$ q3 I% r# Z
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
; R9 R' ?8 }+ l0 i! A+ c$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
7 r: X) n. o. k5 }% o( U. F, [$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf6 V7 w5 O; [5 ?/ {0 P3 e4 [( F
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
" x6 V6 b6 p7 Q) n默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
1 J8 `* U2 g) W, ~, C% j
% l, c$ N* z' f4 M3 i9 B2 ^3 f- y
% G' C. K- q y- o启用ModSecurity模块和CRS规则% n# j& |8 m$ Q
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。2 C/ u3 Q/ ?3 o# a+ l9 V3 H/ M
$ i1 ^9 z* F# W
5 x: } P+ S* Y, Y5 V2 X& H8 x9 Amodsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。7 F: {, J* R4 S( ?% b2 M8 ^
% [+ I: M. c4 k, a( A" r" _3 _5 b
8 {6 l& N* ?+ N9 t. F$ cd /root/modsecurity-2.9.1/
2 k, H3 w. P; `$ _ E& f$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
/ Z# ?) l! i6 I7 ?' b7 ~5 T$ cp unicode.mapping /usr/local/nginx/conf/
$ C- N- K) c% o4 Y ]/ L6 @5 t7 r将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
6 s0 S c/ o$ I8 c2 ~$ L0 x4 B& s$ C
) v- m7 @8 z# P' Z5 d$ vim /usr/local/nginx/conf/modsecurity.conf
5 k3 D4 B. e/ b; u2 B& uSecRuleEngine On7 X$ O9 r, F9 g, r7 O. v
ModSecurity中几个常用配置说明:$ o/ V. J; b2 U r8 _+ m3 B
- r, e7 L; g# V3 x. e/ n- z- t
* H' S) r; ?6 O2 }7 p1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。$ e3 B, u0 j6 X ]
- @- j- c1 e- d7 z0 O/ D/ Q5 v
: y% ]8 O- f+ B: p* d8 \2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
) Y d! D* l' r/ p4 c
8 [9 w+ B Z5 `: F8 A! ]
2 ^% s: q) Z8 n! `: D3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
: J6 A% o2 C" X: ?5 P" O. }3 L" D8 [' W6 h& W p& L) k/ @
* j. D8 o2 g- a# B }7 u7 |4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
( x8 N" E" W. T9 w7 S: Z) @% r b4 M( [
0 |/ k6 s) e) K
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。. b7 f9 n2 }5 h% o: X) y
. J/ y. B; g5 ?" w
& h- o) C- R2 H$ Y& U3.x版本CRS" s' B# p0 q$ _' X& `! B8 Y# {
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs% S& [4 x/ J& ^5 v0 S- F, u
# 生成例外排除请求的配置文件
0 G: ]" v! a) m) c+ |2 ?3 x8 l5 U$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
; s9 y. q% L5 U- v& h3 X$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
9 A6 [1 @4 m1 ]( |! N$ cp rules/*.data /usr/local/nginx/conf- C* d/ I" B4 S' |# k
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。2 j; V7 {" |" @3 n2 X7 b: b1 ]
5 o \1 Y. z4 }" {0 l: _+ `
. Y8 X0 U% |2 S" y
$ vim /usr/local/nginx/conf/modsec_includes.conf
/ x y4 G* B! A% \/ {8 _8 Y6 D7 e$ f) x
[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
+ j1 M# M0 u3 f( `
: e! p/ Q6 m3 b) q' r8 U注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。3 k: z( U$ v9 D. Q% M; ^4 c
- [, Z: r2 l1 L" A: D- i
; |& `8 x0 ` }: @
配置Nginx支持Modsecurity
4 s& @9 p* z' n: u1 ?启用Modsecurity
& A# E) u7 i" P1 \/ R使用静态模块加载的配置方法+ f# v6 x. k, U6 n2 h0 N: B
在需要启用Modsecurity的主机的location下面加入下面两行即可:/ u1 F7 W3 |* h* H1 x5 C8 X' B, i1 y
m2 {6 F% L5 X; n3 }; |7 _' Z5 F
; k a$ s3 n# W6 n) ]7 `% M1 h7 H$ jModSecurityEnabled on;
0 |0 T% u: w3 G4 B: bModSecurityConfig modsec_includes.conf;
* e% e4 |* z0 i! _6 D修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
4 S, N/ K& s$ l! J! C3 K m3 z3 `" u
' r- {/ R \: n) }# L$ vim /usr/local/nginx/conf/nginx.conf
& i4 N! Q# _4 P, E, m; D& }/ W! p6 B
5 S% n/ M7 f6 |3 j
server {- W7 q! C, M/ A2 I% x' P% r
listen 80;
$ f q! [9 m7 E( ^ server_name example.com;. F4 t: g6 d. P- [* Q
/ y9 Z) k; }, F9 M& ]
" U7 q1 z; V* x0 \7 z8 Y location / {' ]7 y9 x. p8 p
ModSecurityEnabled on;: o u/ I/ q* ^
ModSecurityConfig modsec_includes.conf;& Y: u; U1 l+ x9 @2 Q p+ Y
root html;
" r1 R' [, m, z# [- R index index.html index.htm;
$ p p& L/ B: E' _/ E }
U/ g3 E5 n) r% y a" k}* U k7 [5 |# x" Q7 y
使用动态模块加载的配置方法5 I& _9 {/ E! k( x! G' F: x8 t
在需要启用Modsecurity的主机的location下面加入下面两行即可:
# ~4 z5 O8 ~; `$ o. b$ S* M9 p
4 K: V$ r' _$ {9 }) @ i6 r9 U6 d2 F, x+ n# Y* ^$ I
modsecurity on;5 P8 a' B& p7 F9 U: |* I, U
modsecurity_rules_file modsec_includes.conf;
; z! u5 g# }0 O! \! s9 F v修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。/ e' l. r# _$ {# }& ^
7 C0 w6 B* _* l/ w; B) B
4 B- P+ `6 C( L8 ]$ vim /usr/local/nginx/conf/nginx.conf
8 ^8 g" R# {+ H% q" r' b' Z3 g8 H8 H# ~
) T% X! @* j3 ?7 @" V! j4 ]1 Nserver { P) Y! ^0 S/ K+ v
listen 80;7 S+ G, Q- P2 t6 W. [3 L: Z7 H
server_name localhost mike.hi-linux.com;
) h* b" `* N) W. v @ access_log /var/log/nginx/yourdomain.log;% a2 S0 N5 m7 ]1 h. S1 D) B, ?8 i
7 D3 X( y' A, v8 W/ X
0 O! y# s$ L5 R$ y& s" }" m location / {
' s5 R( F( S! s. Q
, a4 b* \: P1 A1 t( M3 s M' n
7 e8 e- J" [' Q& L# k0 _& U- H# [ modsecurity on;4 s9 D6 D" {& T2 z: @
modsecurity_rules_file modsec_includes.conf;5 w; p) p) Q0 | }: D& u
root html;
4 \3 ?7 d' _5 N" }9 G' {3 D3 O index index.html index.htm;
$ p r% H! Z& E# N4 x}3 ?5 a' C" O$ M$ R4 d' |5 V: x
}
3 l7 @1 x/ B2 X. @: G7 d验证Nginx配置文件8 ]; U& P3 A0 M8 R X" N
$ /usr/local/nginx/sbin/nginx -t
6 W; C, _& B/ k( nnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok' L3 p" Q/ N* C
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
* L! d4 R! y2 {2 G' W5 |3 K3 u启动Nginx+ @* X- A; X3 q9 _1 O7 _: x
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf e0 `1 p3 ?6 B1 j6 G" z# ~9 P2 V
/ R( }2 {/ X$ j7 j8 s测试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能够战胜更多复杂/未知/混淆的攻击模式。 ( Z. X2 S2 }/ f/ l7 a
|