ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。4 o. S0 D2 G0 f
1 y4 ^( i; W! N! I. T" {* t* v2 W* u: w! F
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
T# Z( v, F; C) ~3 O/ _ E7 O- j+ W, ^. X) L
7 Y4 r( h/ p& [0 b9 a
什么是ModSecurity6 {' X% L& r6 o3 m. @# m8 c8 O
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
; n+ w$ o8 Y& o: k! N6 [
* R$ m3 d" M- Q+ O0 H
' Q. |7 e! U5 F) f* T" m, F yModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。1 Q- q( k5 f$ }( H7 F
1 Y/ f" T D9 \0 n. x4 y
7 p! ~& b+ q6 DModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。: ~! P( w# p/ Y" A9 n I P
2 m# |$ X; _5 I' _5 {
5 L$ ^# A& c0 w# _/ H `) p
官网: https://www.modsecurity.org/* i/ K @6 q: Q3 b# z: O0 o C( Y4 R
% x7 d& Y8 V0 G3 d7 p9 S0 I
) y6 x+ f* \1 `4 V5 S什么是OWASP CRS
* a+ L4 |! X# `OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。2 b0 ?! V- m' V( D
$ V; O& q% d, e% S0 I
" b5 S' Q" Z8 }2 `* l2 B$ R' @' s
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。6 d: g; Q3 H z) K! C3 L2 P- d
- ?8 B( V) s/ U& C
7 h: f" @! e( F0 T ]HTTP Protection(HTTP防御)
% K; x* Z" D- u. [; B, JHTTP协议和本地定义使用的detectsviolations策略。" d3 ]/ o; t& A" m
& e5 {8 F$ |) C1 O8 W% B
" p# ~1 D, w: o6 YReal-time Blacklist Lookups(实时黑名单查询)1 x& Z9 k" Q: [1 F9 \) y: {
利用第三方IP名单。 u+ |1 R7 u S* o' L( N
3 _8 S9 C: N* P- B
4 t; y$ _/ Y7 \% v5 z* hHTTP Denial of Service Protections(HTTP的拒绝服务保护)
7 A# ~2 j. P( ^) A# K# V& w防御HTTP的洪水攻击和HTTP Dos攻击。" ` h5 M6 G5 m3 b8 h
( _, q. O* }/ ^2 X. z! J5 u: X$ K
' k- G7 q' S' }9 F
Common Web Attacks Protection(常见的Web攻击防护)1 \0 o- t; p, p) N2 h" b
检测常见的Web应用程序的安全攻击。, j% ^% J' a9 a2 ^5 j: E- G
+ W7 R( m( H% m0 w W2 o# o
0 P( ^6 G1 |% ]; V6 s2 _/ v
Automation Detection(自动化检测)+ J8 S) Y7 z/ S7 T; x& z
检测机器人,爬虫,扫描仪和其他表面恶意活动。
+ [& t+ N, M" G; G5 o& l4 a H% v1 w0 I, s# X% F
2 o6 P" `7 z$ {6 e. V/ CIntegration with AV Scanning for File Uploads(文件上传防病毒扫描); `8 l9 ?! I+ X4 Z5 F% r+ e
检测通过Web应用程序上传的恶意文件。+ s: g' E# M3 I
. V% E% N: {; C# y5 r# j. C* X' x0 c. U
Tracking Sensitive Data(跟踪敏感数据)
+ O" K3 |; `8 E# i- I0 }! D0 l信用卡通道的使用,并阻止泄漏。
! M/ Q2 L0 I' N) x! c4 I: M3 }! q' l' h# L5 c5 a# D4 L/ k2 }/ O# k
4 B+ z! t. O F. E4 d! g
Trojan Protection(木马防护)
1 j; @$ s8 m- K检测访问木马。2 W F1 n" l1 L+ {
3 ^ h. N6 F- u2 \& J# Z; j
1 t- C7 \6 @! h" vIdentification of Application Defects(应用程序缺陷的鉴定)
0 C7 L2 T! T4 h) f3 b检测应用程序的错误配置警报。. ?9 ~' c4 j$ S8 F$ e. [
) q9 r0 I1 i4 n) q4 Z9 a: y( h* p6 s3 X3 h. N
Error Detection and Hiding(错误检测和隐藏)
' C3 ^: k8 Y0 A: w* _9 x; z! x检测伪装服务器发送错误消息。
% x; I. z. ~$ z
1 M/ p8 n {5 R$ n9 o- o1 R& A$ `7 t' T: S) K8 A+ k6 H
安装ModSecurity
/ S- |( b. k Q6 b/ t* ~软件基础环境准备
) k( P F$ u5 \# b: T) m下载对应软件包8 a F, G5 ~' h+ G& A
$ cd /root
# h p0 D" r& b Q% }, Q/ d# t0 J$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
; V/ q9 ^- k/ Z- p$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz' o7 d) u% r6 R! o) l4 W
安装Nginx和ModSecurity依赖包
/ @! l' g( D/ O5 _Centos/RHEL
' o4 F2 D0 a! j* P! D/ z, A! T% S8 ^; S$ R4 T) @9 t+ k0 E$ E3 c
& b3 W" M! l. ]" R$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
$ r8 {8 f3 [+ p2 Z' r# Z% @" `Ubuntu/Debian8 {* V5 p8 q9 Y. _
3 A% ^( u* z8 B" {+ q2 X' Z
]( m5 e" o3 Y$ [( H0 s. q$ 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, m7 ^7 t% v& e% Z* t0 r
编译安装ModSecurity( O, z/ A) `8 \; K$ S3 x
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。( [ |- n g3 ?9 ^0 t
. R5 H% G+ I8 p/ C
( k8 N0 n3 o( v0 Q方法一:编译为Nginx静态模块- q4 {4 y U5 K, p% ]! i
1 X# E, C" v# W
/ K0 L. r# p! S* q7 w U
编译为独立模块(modsecurity-2.9.1)
5 H0 J4 W8 @- D6 g- G2 `, N4 @5 o$ tar xzvf modsecurity-2.9.1.tar.gz6 k% F9 X, p2 { {: n% c. ~
$ cd modsecurity-2.9.1/, c M( E. n9 K0 D9 z
$ ./autogen.sh5 N3 ?2 {6 Q# L
$ ./configure --enable-standalone-module --disable-mlogc8 F6 Z, E+ ]0 h/ K
$ make
/ | k; e2 Y" b8 Z编译安装Nginx并添加ModSecurity模块
' e3 }( G5 \, f$ J4 g$ tar xzvf nginx-1.9.2.tar.gz
$ V f7 d% \% [: D; M$ Z4 N$ cd nginx-1.9.2/ I) r9 J, o g% L7 T# b) D
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
2 m5 s! l9 {2 {. V5 ^$ make && make install
/ M t* N5 b9 l2 D方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
2 S/ P; F7 g1 u( r2 g: b+ F0 D, @3 v, e' |( ~
; i k) g: y$ R5 v; x0 a编译LibModSecurity(modsecurity-3.0)
^3 Q& P0 D4 N+ M$ cd /root f% {& ~" x, ~1 ?! l; m, M
$ git clone https://github.com/SpiderLabs/ModSecurity
2 `. U' @+ w! G( R# L6 m8 `$ cd ModSecurity* y1 A- Z5 z& O: T) ^0 z) c1 A/ O
$ git checkout -b v3/master origin/v3/master
( h+ n- `0 I5 e) I. \# x0 l$ sh build.sh0 u6 r9 ?; K% S" k5 E
$ git submodule init
: l. r" u2 w- |+ Y4 }$ git submodule update4 R- j4 ?% i2 q5 ~) x8 ]- G
$ ./configure
( F# V% ^6 q, }, N+ |0 E+ l% A) q$ make
, q8 z7 i0 v5 e* x+ Q$ make install
) @) j, [6 b* r# YLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
7 G* T* F' }0 c- G6 h$ K; m: U( `8 X! M: r: y0 N
& a6 z7 {# L2 x1 u1 B8 w$ ls /usr/local/modsecurity/lib& d$ F X) U9 l3 I+ h
libmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0
/ _- m4 h8 B. F8 x编译安装Nginx并添加ModSecurity-Nginx Connector模块
" b! V; y/ e C0 Q使用ModSecurity-Nginx模块来连接LibModSecurity' H& {0 z* w# l* b0 E& n# e
" B" s; g6 H& j6 z5 B0 c Q- k* d( { Y' l7 M/ J
$ cd /root0 T4 I+ S, y: k7 L& E, e: S
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx- G+ {# y5 P& T0 t9 F' n
$ tar xzvf nginx-1.9.2.tar.gz
+ m0 Z/ j) F3 W- B$ cd nginx-1.9.27 k) B( g+ Z: C g K/ Z/ d
$ ./configure --add-module=/root/modsecurity-nginx9 v4 v1 z2 O# `) r1 C! i
$ make0 D( D- l) K, h9 E' k8 K+ X. l9 S7 @
$ make && make install
% e4 Q7 J7 B( H: H' F; ?5 c添加OWASP规则$ W: o9 Q# W+ y$ h& a6 S* Y" [
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
% k' Z# E3 o" E7 h6 V! U1 ^1 r, P4 J$ ~. F
( L8 n# M7 u1 v' o0 t下载OWASP规则并生成配置文件# ]% @1 m# ^# W8 w) x
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
, P I. P+ m5 |$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/; q* Y3 @6 F! @+ g) e
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs, V7 p) l I$ a8 b8 p8 g+ c* x
$ cp crs-setup.conf.example crs-setup.conf
1 x8 |6 R2 O- R% L8 D配置OWASP规则4 E& V: a7 e2 J) _) j
编辑crs-setup.conf文件
# R$ p$ I1 q1 a4 p+ m3 Q# A4 b5 j: [1 h: U
- F' C0 j* o, ^* H' P* P1 F1 B$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf4 X3 _0 I) P+ h! ~' t
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf9 B2 U* d1 J$ `% y0 z* ]( Y( ~
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf& ]: U9 x# n9 H: M7 L1 x e
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
( [6 n( l3 |* b# e6 b默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
2 q3 f- D" F8 o. w- s- X+ Q+ s2 Z( y/ b
" V6 v( x8 S) n* J' M& _& q- F
启用ModSecurity模块和CRS规则
. o, m5 y! `, s# Z复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
" q$ t6 K! M; I" Z- U, m/ [# S+ d+ s9 {
- ~" o H2 ]& L7 i5 f
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。9 r2 \ }# U; L+ F# k- h: h
2 e" d3 B5 }( `, K& n9 \- M9 ~5 E- ?" S/ n/ {
$ cd /root/modsecurity-2.9.1/* ?( O" D C3 k0 I
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
/ s5 G b! k8 Z- w$ Z3 w$ cp unicode.mapping /usr/local/nginx/conf/
1 e$ v5 d" i' Y将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
5 d+ h9 L1 w8 V' ?) J' j0 x- ?8 _" c0 M8 }
3 K& J4 j3 T, ]5 S9 d1 a) K! |& s+ I
$ vim /usr/local/nginx/conf/modsecurity.conf
$ Z! x- g& R# C8 S1 H, QSecRuleEngine On1 J6 t6 q% j# ? i
ModSecurity中几个常用配置说明:
3 G( A1 V: {5 I v* X% g+ M0 \; g. v. \" f: Y, T. i/ O* k" ^
8 |, O1 }0 H8 C) S& s6 ^# P a1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。' n) z, O. U5 b% ?/ [/ J
7 l/ W) m/ q: I* Q
# J+ z A2 V0 i4 C! ^: N2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
4 F# n" s q: J/ B# Y6 x
% M( D! H3 |* S( |3 p- Z5 O- K5 I+ V4 y" d; V2 A0 P
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。/ P7 V7 {. c7 e. D
) `5 C: I' H& S8 N& G- e l' y
: z* N z! L o4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。: w1 w4 W0 E) z) d" l% x* u
, P% t% p5 x2 @! c, m# E
. v7 I" A1 A# J- |在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。: Z7 z3 I: ]+ T# n+ i
. e B9 V, z7 V/ h& Y5 a
: _% i; h2 Y) Y9 c% w' C3.x版本CRS# b: M9 X! \7 x! T# M" i
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs# P5 }( N W+ c
# 生成例外排除请求的配置文件* p! ?/ K* y" W: Z2 h( Q
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf5 q) E, K: o' h) i! }+ x y
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
0 _. L ]* p B$ cp rules/*.data /usr/local/nginx/conf: Q1 F3 M7 |5 \# ~3 W
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。/ g' R6 F! U5 t2 S! _, T
7 @8 t& r9 p7 B" }* q3 D4 `$ i7 ^9 M$ h& x# o
$ vim /usr/local/nginx/conf/modsec_includes.conf& X4 T- N" F$ M Y% |" @+ N# }
8 q" \% b: l3 h+ w8 G, F o[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 ; k" C* ^ F3 @
4 o& \; P1 N, S7 c$ a5 {0 [* ~$ f8 `" ]注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
0 g3 t; _9 p% v1 p# n8 K
3 }" C* p% O; Y
- a0 c& N( K* y$ K- Z% t# J2 V配置Nginx支持Modsecurity
! A' v9 q. R1 W" `1 X启用Modsecurity9 s$ I: ~6 r7 j' {7 H
使用静态模块加载的配置方法
* [( H" ?4 B3 e在需要启用Modsecurity的主机的location下面加入下面两行即可:( ^/ I: M' j5 A
9 E1 l* C% V9 q
s" D" `6 Z/ x$ ?* h4 t2 \5 x0 |
ModSecurityEnabled on;# N1 w( @! m7 x T
ModSecurityConfig modsec_includes.conf;
: g5 u: Z% M( T8 n# Q7 U9 V修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
* E) f# s$ y/ {5 }) X2 @, ^5 w8 E5 w% |- A: c6 s; R5 C6 Y/ q' f+ p
4 H6 u( s |6 f$ vim /usr/local/nginx/conf/nginx.conf T- S4 }1 U% u' N8 Y. k4 \% @( x
- q N, ^/ C: H6 y% P
+ j: f. P8 {) M4 S' t3 `% A
server {
* d' Q3 W, m' G7 E listen 80;
, @2 _7 l! x ~6 D! N/ b! p/ C server_name example.com;" y! b9 Y& u8 s' x) Y
8 t& k8 }1 P9 f! l: u
/ S# Z- w" \% ^ Q2 C* t1 {
location / {
O5 S# \. C8 o- e5 { ModSecurityEnabled on;4 ~; l6 f& b v! {" t) @* K* j& m
ModSecurityConfig modsec_includes.conf;* ]4 E1 }9 ^- }2 ~* T
root html;* ^" ?6 R% \2 O/ v9 y
index index.html index.htm;
% U1 `; n& q1 ^1 d }$ v# V* H2 M: [$ B) f
}2 }: k2 d" A3 i/ n
使用动态模块加载的配置方法% o. C w: @4 W/ j
在需要启用Modsecurity的主机的location下面加入下面两行即可:
. Q9 I6 ~ k9 r* d( _+ _1 J) g2 `; W- Q$ S# V6 O4 Q7 @. r! V. N
- b3 u7 x ?. f. p* ?- E- l+ J
modsecurity on;
6 \; c. H. O. J: K" o6 V! ^modsecurity_rules_file modsec_includes.conf;
! D& S/ q* D" l7 s3 d) y K1 f修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
( [, p# |! o5 P; n% u& a
) T! b' J. M, @- {
. [1 }1 L( j4 N/ \ w4 c: H$ vim /usr/local/nginx/conf/nginx.conf
$ s8 Y( i& H- Z d
/ U4 b/ J9 }0 U! q3 |: Z8 d+ W
3 R n/ Y2 o% W6 A& aserver {1 x* K2 v9 A# ^: v4 ]6 w
listen 80;
& Q, K, f0 D" e, }+ |$ t server_name localhost mike.hi-linux.com;) h# `. ~5 U! c4 ~3 ~2 P
access_log /var/log/nginx/yourdomain.log;
/ N8 S. s( {: f$ r6 A
1 O8 @/ ~: C$ w. S' y/ m- L# ], {) k5 I- b; G N
location / {
2 q. v- z5 H/ B& p
+ A. s, T6 m4 [) h. y* a1 h2 W& t) v" R, @
modsecurity on;# j& x: b6 P0 X4 T2 F
modsecurity_rules_file modsec_includes.conf;2 L. K* E+ b2 l- E
root html;0 C9 ~% ^, A4 ^1 I% @& e
index index.html index.htm;- N4 W+ ^4 {/ H9 J" z2 R3 `' V; \! E
}
* t9 C4 o2 A% M1 B1 |}9 y6 }2 l6 o8 l$ M: O- m
验证Nginx配置文件
J$ L' a3 |3 ~$ /usr/local/nginx/sbin/nginx -t+ q) M. M9 H% H% f0 \7 K
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
: S/ R8 m0 E L2 _nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful+ w, A# ~0 a+ I+ z/ o" o) O
启动Nginx- y6 S5 L0 v4 f
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf8 M. d9 [+ r# A* g5 F* i5 ?
# o) x5 I( X1 w7 Z, U测试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能够战胜更多复杂/未知/混淆的攻击模式。 ( V3 B7 L* O# M9 L j
|