ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
! n9 B% o! E& ~- @, ]! L8 W
: X: ]% l8 ]; b1 T7 u6 @3 ^7 x$ m: k+ k& s; B, [- G$ D
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。' W! ]/ H3 M" G, x# @
2 D6 L/ k+ E. J2 m" K
8 U" a1 E4 i3 w7 @
什么是ModSecurity* Y0 ^' e r y7 ]+ x ?2 I
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。& ]+ `' h; ^! p4 z9 r/ t
$ d/ e" P: {, |9 \- e0 J, _0 a# U8 n& Y. Q X( a! b3 O* x
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。$ ^% R4 v3 w2 e
9 C3 D* P6 h2 Z$ H# `! D U7 V: w. E, m* j7 e9 P
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。& S1 V8 t+ ?/ d v/ V/ r
/ U# k! a% J8 M( X/ ]
/ N" o. x6 P0 j5 {2 d. C官网: https://www.modsecurity.org/! D+ {: ~9 Q8 Y" n @9 Y
% S# E& M8 h3 Z7 o( d2 b
7 w) Z' m; Z, T. {* |, I8 Q L什么是OWASP CRS
4 y9 Z# e% Q `- N6 Q* ^OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。& C& o4 J: j- S' k5 t5 y) a# X! l
3 j) j9 Z5 A& [2 ]1 M- Y+ `- O5 i1 k! `+ d) R4 j
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
! C8 `, `: a# V4 r& T! ?/ L4 e) e$ K
7 Q/ y3 z) H; C1 Z6 Y- ?. fHTTP Protection(HTTP防御)
% [" ?! X2 v* i' O: oHTTP协议和本地定义使用的detectsviolations策略。
1 u* P* d7 `9 d, r) u3 n2 _; Y! R9 D0 Z8 l: b8 Q+ f9 C: ~+ K
2 _7 e% N& e8 Q! [' D/ PReal-time Blacklist Lookups(实时黑名单查询)
, U; m3 ?+ a2 h. W; _利用第三方IP名单。
+ }$ e# G1 Z' V, T2 Q m+ D9 e( ]7 ?" \) T8 J* v$ t: J7 b" t
5 M5 T6 w# L! L
HTTP Denial of Service Protections(HTTP的拒绝服务保护)0 W$ T) W: _$ E7 Y* Y* g) s& f
防御HTTP的洪水攻击和HTTP Dos攻击。
- w, s+ a2 f: a! u+ q& V d% T9 ]6 T% `- J. B
" l0 ^. S# t n
Common Web Attacks Protection(常见的Web攻击防护)
+ G! R: b; i1 Z检测常见的Web应用程序的安全攻击。) u- Q% f, |1 \* b8 L1 Z9 B ^: t
* u/ r* m2 Z4 \) R, Z; S4 E
) j0 j8 V, y/ k$ gAutomation Detection(自动化检测)
1 O) N, i$ `2 X1 T检测机器人,爬虫,扫描仪和其他表面恶意活动。
8 b5 \3 w" k( c K9 h3 M) x3 n' I$ P& s# S, r$ v
- G' M6 g( N9 [2 t2 y" m
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)
3 ~3 D6 R q& s检测通过Web应用程序上传的恶意文件。
% K- P T* T' n* W* ? b& q4 ?+ L0 a# i5 @6 @3 k
P: c8 X) D% K" P) q
Tracking Sensitive Data(跟踪敏感数据)4 ]5 O$ i9 q- k
信用卡通道的使用,并阻止泄漏。. M' H& [2 D. ]% q
$ d# q6 W( A3 l3 K
0 ~$ I: d3 k* P# lTrojan Protection(木马防护)
7 H& t4 W k5 a7 D检测访问木马。3 W2 S* g. n) l/ h
7 ~9 [. D3 }2 x; {! n/ K; Q
9 W) M* e4 @! ^1 u
Identification of Application Defects(应用程序缺陷的鉴定); P7 e7 i' u( t) J5 Z
检测应用程序的错误配置警报。6 f8 W P1 v9 j; ? k
6 k' q& ~( A, o! W& M) t" C
2 y4 _0 C9 |- @% o3 ~5 e$ V0 A/ HError Detection and Hiding(错误检测和隐藏)
7 F- X8 j* f# C I, M+ x检测伪装服务器发送错误消息。
0 V3 D- s8 H. i: S0 O3 O
; D6 b0 O7 |# {) I( g7 T2 i; g5 l; l& s0 }7 q$ Y5 ], \
安装ModSecurity
1 a8 `4 v! j' O( P软件基础环境准备
2 G0 P9 P/ G" q) r" w( D下载对应软件包
/ ^5 E/ h+ r+ Q* k$ cd /root
8 w+ A8 e i* _& W# p0 ]$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
/ C! N! W* {* h) o1 c' q$ j( B( 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; x, l4 u4 j5 p3 i2 c
安装Nginx和ModSecurity依赖包
: e. C& F* d/ F( `1 ZCentos/RHEL
5 r& r5 g! Y' x/ M! t1 Y- R8 t) Q" X- `9 ^, l& ?- \4 u; A6 h/ A/ O
; W- Q- C1 g$ p2 z z: w/ ]$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
3 C$ r# a9 Z! C9 o VUbuntu/Debian
d4 v! I: J2 z6 L2 P' O$ h: ]; C2 i( C% q
+ t5 z M) K, H# h( i. P
$ 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
6 f7 f. {6 u9 }: X编译安装ModSecurity) o# d' K8 U$ z- s7 W
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。' k* [5 a( ]$ h5 x) `+ k3 a# L0 h- y
+ u. s/ b/ v( `- \% [
# V( a/ G$ R$ t0 d方法一:编译为Nginx静态模块! Z! j9 o- C! m. e" D1 G
+ V+ W7 y) q9 m- C7 u5 T% ]7 F- N$ M; c8 W5 }7 S" S
编译为独立模块(modsecurity-2.9.1)
: l/ a5 v K( Z5 [. d/ n! B- X# N$ tar xzvf modsecurity-2.9.1.tar.gz) F$ b, U- E+ _4 {$ }, I
$ cd modsecurity-2.9.1/" `3 L* l! S+ T; |
$ ./autogen.sh
" O& ~$ d6 Q4 m- }9 j$ ./configure --enable-standalone-module --disable-mlogc
6 w- ]* N% `0 d$ make
, ]4 W9 H( D) [8 ?编译安装Nginx并添加ModSecurity模块
# W1 `6 f; d2 Q$ tar xzvf nginx-1.9.2.tar.gz8 X& e. W& Q. v' @' |4 |
$ cd nginx-1.9.2
4 o. c5 P: Y- o: z6 L% O3 a$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
; b( a" w. W. Y+ {# L$ make && make install
# v ]7 g. I6 R1 I+ v方法二:编译通过ModSecurity-Nginx Connector加载的动态模块1 s% a7 ^& j: i
1 u6 E$ p" K; _6 O, U
! k0 I% c8 D: m; Q$ g9 K& N
编译LibModSecurity(modsecurity-3.0)! v$ K7 B5 W3 O6 A0 X/ W! q
$ cd /root! Y q1 x9 o f' `
$ git clone https://github.com/SpiderLabs/ModSecurity6 v2 v7 _3 B' [0 W2 ]% D4 Q; u
$ cd ModSecurity+ n$ c. a0 a0 _1 _6 u1 L
$ git checkout -b v3/master origin/v3/master0 d& ^( _9 U. I) _
$ sh build.sh
9 L3 Y; Q( J: Z$ N9 y& L1 a& M$ git submodule init6 l) m6 V# e' z, y
$ git submodule update) b0 F+ A- L/ D+ ^
$ ./configure" z( T+ ]+ R3 J6 i7 I' b
$ make* b/ N8 f4 Y& w. h1 F& b% p
$ make install1 R# o: w9 G( }& A) f- A
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。- t% p: ?6 f7 l# z0 D& k
/ o& Q' m5 [9 J Z
. u# h" C" u: j' H, V$ ls /usr/local/modsecurity/lib
" N4 F9 x R/ `7 d: n7 i% ulibmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0
( k+ G1 y! E) ? Q# f- m# B编译安装Nginx并添加ModSecurity-Nginx Connector模块9 @. v, p0 D1 [4 p* ^+ B- J8 e) \/ H1 ]
使用ModSecurity-Nginx模块来连接LibModSecurity
5 u6 G& p3 C7 F/ K8 P
7 ~. e* O) g. J' L4 C) ]. x
! M$ b6 q0 c5 S! ?2 u, v$ cd /root) Q& G4 a- D4 _9 U9 I, A
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
0 f/ k: O- G7 u8 D( o- Q& G& q3 Z$ tar xzvf nginx-1.9.2.tar.gz2 ~, k6 n' @* B! |9 A4 s: C; @
$ cd nginx-1.9.2
5 _5 @& L5 ]; N' ]$ ./configure --add-module=/root/modsecurity-nginx+ d& L J! M8 a" l1 S
$ make3 ^! @8 g3 J2 }# a. z
$ make && make install
& R" H9 \( e& L添加OWASP规则
' z2 q- W6 [7 b& EModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。# R: N9 X' I+ A. X: V( T7 [
. Q7 x8 X" H: W& j
: I2 g4 \; q& Z" u) ~' i( n/ ^下载OWASP规则并生成配置文件
/ u$ y5 n3 O: @2 P& K% ~$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
- L9 d) ]5 g) i7 Z+ [4 t. a9 s$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/
+ |4 Y% I' {# H% J }4 q# J; [) w$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
3 K, k% z, t1 v0 j P* M6 ^$ cp crs-setup.conf.example crs-setup.conf
1 \+ p9 f! Q/ ?" H配置OWASP规则
k7 d" h1 q. ~/ k& N编辑crs-setup.conf文件, }! K" _1 W1 R! U. m7 W
0 p5 c+ X" ^# ]+ }0 O' Z0 w6 O
0 J/ q3 E% B W& @$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf" _+ }2 V8 h% I, s9 S
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
# a8 I+ T- a. I) A& i9 y: n6 Z/ o$ }" R% |$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf% p" J7 v( e8 Y9 u3 L5 g
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
% u' z0 |- k6 A; Y: T0 T默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。# i2 ]0 o5 M4 v2 f# _8 d# k
5 D8 K( i& C: `3 @2 a% F
. L, n/ z% o- C
启用ModSecurity模块和CRS规则
! f5 A+ i y/ _1 A复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
3 C2 B' T; V9 o# o M6 T A9 [3 h+ P( I2 d6 o
0 F2 c' D: w) c; `0 O" mmodsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
1 l q9 W' b+ _$ T' \- L
9 a, \1 B! Y* T+ d/ J* y
, t3 L& o: q' T. {$ cd /root/modsecurity-2.9.1/$ z! ?5 I4 P' T& Z; a3 m) a, @
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf 0 r+ y1 I7 [* f6 j9 t' C
$ cp unicode.mapping /usr/local/nginx/conf/* u# y% n/ b+ V; R% y
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
- d* O' L H, s/ q$ G& N: M4 E1 l# Z: @# E8 t
! E/ q+ ~" \( @& G4 Y U; ]$ vim /usr/local/nginx/conf/modsecurity.conf* ^' E. i1 p2 ~0 Y+ s
SecRuleEngine On
) t. [' A6 s w0 Q: K4 | qModSecurity中几个常用配置说明:$ e U- o6 L( O7 f! n- e
7 v/ \6 r5 U* H2 f+ U$ k/ l- t; }* w! y
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
5 y, X( C6 I9 M: F, G! X. B6 V; m' k. O* E+ c M2 H
$ |, O0 ~7 M3 T1 q8 T# U/ M2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。- b3 P$ W3 {5 Z
. K* S; d; x) `% [3 ^( q/ t) O) b& ?0 H
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。& W4 H& m; T& k! z( U6 Q3 W6 c
6 u' Z7 |( }7 u; _8 J/ ~0 ^+ A9 P" @- g, z5 @( p
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
V6 R9 m4 D5 ~4 Z! H4 c
" F r; l ~5 f0 _2 m1 k
, J- j9 h( e$ H在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。% M/ `% V. T9 B+ |1 V
3 g' q9 a& m/ {. |7 K
: a* P' i, T7 G6 p( D* p
3.x版本CRS7 Z: ~; p$ g- P/ M( P" g6 E
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs/ @( O' ]- A# j7 ^0 D% O
# 生成例外排除请求的配置文件
: p4 @" i" u* `! P4 J! { o8 D- q$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf1 i. H k! `# X+ Y5 y
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
" S3 V3 F7 ^1 b& ?: H: \3 p5 l$ cp rules/*.data /usr/local/nginx/conf
3 g. @' _# K2 R7 I5 D1 ?, _为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。3 J( V7 g% q- {) [& ^/ y( ^5 x- F
. j2 p0 \5 ~ h6 Q2 R
$ r4 D( @, c; ~7 N4 t$ vim /usr/local/nginx/conf/modsec_includes.conf2 O+ U) P4 ^6 ^3 U* [/ P7 V
0 ], \ b) F3 }7 l8 p: S/ w[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
6 [( W0 k. k& C4 _. c. {$ K
6 z' [: q( ~% M7 R: b, t1 H注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。2 |# H \& w% T3 W+ a& H( v) l
. `4 F5 H& U' z7 L' V) o# p) k4 q6 K8 z0 p
配置Nginx支持Modsecurity
4 B3 {" c( ]4 i7 H! g2 O启用Modsecurity
# y+ B7 z( ^ W4 i" p* X, V/ x使用静态模块加载的配置方法8 P$ b6 ]: I" A# @9 Q
在需要启用Modsecurity的主机的location下面加入下面两行即可:
/ \- B( ]5 R* _7 q I; ]5 X" \5 F" U+ S I
; I3 T7 m) D1 J4 O
ModSecurityEnabled on;
# V# O. U0 b. d2 w& s/ p+ iModSecurityConfig modsec_includes.conf;
3 {2 b2 Y2 N+ Z8 ^0 K6 e4 l修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。7 V) l# }. ` A' ?
8 Q, p& x1 d- k1 l, p7 y+ x- N. J
$ vim /usr/local/nginx/conf/nginx.conf
7 G8 n4 H& u I: M; t, x: C4 _6 G# f6 z9 {( W
5 g* r! P/ p- oserver {
. \4 O: J% V0 Y0 T listen 80;2 l/ [1 d8 f Q6 R, w0 C6 M* h/ F
server_name example.com;% M; U; R* T: y9 q& T: ^1 B4 K
3 H+ d+ t/ M: T2 J" d; u4 d5 G0 g1 Q1 v
. |* K& J; ?7 M6 U
location / {& s7 G1 B' x4 t. M- a8 w3 C
ModSecurityEnabled on;0 ^* z- |; O8 Q6 V9 Y
ModSecurityConfig modsec_includes.conf;
7 ~! h+ Y% t& M r% _7 u) G; }6 \ root html;: ?# K$ ~9 Y5 Q* t0 q) E8 j
index index.html index.htm;
/ k/ e+ `& r! `" w% S }6 A/ H: f" h: q1 N. F' Y7 G/ c. ?0 D( c
}
& t S8 v4 {: n) T使用动态模块加载的配置方法" S1 A# g/ ^! P2 W8 X
在需要启用Modsecurity的主机的location下面加入下面两行即可:
! @8 ?# K9 R7 }. E
+ x1 v1 @* s' V9 f2 j4 J' \. l; J( l( Z7 J3 n- C) `. v0 ~9 K
modsecurity on;
, x# P; N6 }& xmodsecurity_rules_file modsec_includes.conf;1 Y! Q1 O9 w+ u3 V% L
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
' c- U0 x- P5 I' D A
( l& p3 `9 ]+ a) y5 g; N, h
- ]; v# B: E6 q: v$ vim /usr/local/nginx/conf/nginx.conf0 Y, j% m' _9 l
a- u) H; S* f) }- R4 b9 m5 R# ~
+ `) d4 N6 c: b) b6 ?" r {+ eserver {
4 a3 g0 c6 V/ z" B1 |" s _) @ listen 80;
4 A6 F& v( T# a9 X( y; t server_name localhost mike.hi-linux.com;+ \# X* v5 t; V0 S
access_log /var/log/nginx/yourdomain.log;% d+ o/ W, e$ _3 D+ T) h$ ^# m0 A
' j7 L1 q7 V: _& Q/ A8 P& }# h" g& P# ~+ t, g4 r% R7 l
location / {
5 K3 k# Q9 r9 F
. |! I5 ~# ?3 n7 \4 o
0 M. Q8 ^4 Z1 x# D9 I# Q- b! H8 m9 D modsecurity on;+ ?8 e, o7 u5 a. z; t+ R
modsecurity_rules_file modsec_includes.conf;
/ [! _# S4 u4 B root html;! o, z) _& ~+ v. ~
index index.html index.htm;
: U$ P- b b+ N# o}
9 v1 n2 S5 O/ c/ Y$ H}
2 Q8 l8 Q W( ?+ W验证Nginx配置文件6 ]9 u' p. z; c7 {' l4 u
$ /usr/local/nginx/sbin/nginx -t2 _0 d/ X* k* d2 ]/ t: R0 i
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok+ G5 z) ]$ t1 C$ ~5 L
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
5 |# \$ t" B V9 k" R启动Nginx
. l+ T# \. C E$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
5 W! J2 m9 n4 A7 J, x$ X
- |0 b* _) `4 H' c5 R* A测试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能够战胜更多复杂/未知/混淆的攻击模式。 8 D: Y/ N2 g! o( X5 Y
|