ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
0 f8 _, ~$ b" `/ B; \
3 \2 I: ?" E. n/ b9 R) X6 u% N
4 L6 V' | Z6 d在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。. O# }- ~+ L9 U
% g% d+ M, _0 {& d1 r
. v2 w9 p# N8 q/ t, B0 Q2 P什么是ModSecurity, k4 d5 V% L' H5 Q) K$ s% F
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
5 k3 N0 \0 c) d1 j, }' P+ Y) @
" C/ g: p* N8 k" h* O9 ^
2 \7 V: T" U' h, \. G% pModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
7 \5 {- g$ }) U/ |3 V" l
+ j. o* k ?7 S/ _" ?
4 a) P' K8 b7 D H! N7 ~! @ u/ FModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
6 L9 _& a, D. a9 ?) b4 |5 N& f
4 `: G) M" u* G! ^
/ ~( V+ F8 u3 R+ [官网: https://www.modsecurity.org/" h$ S, C- Z" ~! I: O# F1 U
( Z8 y2 @2 k; `
! h: @% B) }' W7 d: ^9 R* }% T
什么是OWASP CRS
6 z! l# D: Q# C5 v6 LOWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
5 S- s" Q; P" B Z/ l9 e. t$ C9 x* g, j+ d. q* w, d' @9 {
7 [3 S/ k8 `5 |) Y6 V0 s+ E+ N
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。& z% K; O' t( M4 C0 T
0 h- [( r) R1 r
' |# X& V& U6 v4 v
HTTP Protection(HTTP防御)
& A; Q# o. B/ ZHTTP协议和本地定义使用的detectsviolations策略。) P) S6 P4 R" t
! W0 A9 S8 W* u1 M
9 ]5 [* t& }5 w$ k
Real-time Blacklist Lookups(实时黑名单查询)
. s( z! Y; J& G+ M. K3 a% N4 A利用第三方IP名单。: H. a% g9 W0 _( O. Y; B' z# l
) p4 C% _# _0 o3 t; G; d K! q
! q6 `# o) K. ?% |
HTTP Denial of Service Protections(HTTP的拒绝服务保护)0 N4 E" D$ F% T2 E" v' U* g
防御HTTP的洪水攻击和HTTP Dos攻击。" l$ i( ]+ J- i& |0 Z1 z; y4 [
q% q4 X' J" m4 v9 Z6 w8 @
8 ?9 h& G; ]: a d- oCommon Web Attacks Protection(常见的Web攻击防护)/ d+ P+ \* |* ^- m! Y. o: l1 S& a
检测常见的Web应用程序的安全攻击。
: B" d* @4 @/ u5 p1 k u$ R' F* \
0 B% `9 U8 @# b5 KAutomation Detection(自动化检测)$ D& ]. A; N r1 r3 E1 D
检测机器人,爬虫,扫描仪和其他表面恶意活动。
+ @) x4 J6 ?0 b6 ?2 H0 ]3 l8 v: X0 G- n, E: l1 U% B
! Y9 v: ^4 B/ ~# O# [% jIntegration with AV Scanning for File Uploads(文件上传防病毒扫描)
; L$ J$ G7 s6 U' O6 D检测通过Web应用程序上传的恶意文件。# \& {" x( l3 `) q, ]+ t: g
2 Z: B, o( E" ]; z/ Z+ k% z
" r9 P2 H5 f7 P# ?# i8 C$ v- W* ^
Tracking Sensitive Data(跟踪敏感数据)( U$ j4 Y; z4 l6 { D7 w
信用卡通道的使用,并阻止泄漏。9 }2 [5 a1 |3 R; A" ]! k
: K% O# J' S* d! I% D/ m
. [7 b2 ^* [3 N- kTrojan Protection(木马防护)
) U) Q$ g! U9 W* P检测访问木马。3 K* a- d$ W( X; e1 P% f2 ~
' p2 f, p1 H! S2 u! O
7 k8 S" J& N6 N) o( t$ c rIdentification of Application Defects(应用程序缺陷的鉴定)
z, c% H3 V; j+ S检测应用程序的错误配置警报。2 ^3 u% d7 e4 P& N5 `% S3 ]
a% Q' v$ f& U/ P3 d
; O8 O1 R- Q- R& }: gError Detection and Hiding(错误检测和隐藏)
7 g! u8 P3 @" V检测伪装服务器发送错误消息。/ v! w; G# _4 E
9 \. _; k) p+ G( _7 Z) G3 P8 I M
[: T( M! u! ?! r: |. s安装ModSecurity
4 J) S' v; `8 Q, I软件基础环境准备; [$ F: Y4 J8 V+ {
下载对应软件包
! k! E9 o1 A# v$ cd /root1 o3 d* a+ w; @( R X/ J
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
1 l: Q: z( h" t- { L; b L9 `- ?$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz
5 H* A' k8 ], m7 o安装Nginx和ModSecurity依赖包
+ W, O. u+ d( _4 MCentos/RHEL+ @, s+ o* ^, T
! ~( B( @: D- T) ~3 a0 f% t
- P8 H5 X0 V7 B0 A6 y4 r9 v$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
" Q% ]3 k. n9 x" gUbuntu/Debian
N% I; ]3 b1 i; I1 s8 G, F6 X# h Z# w$ u
/ v$ T& M& u4 \0 a
$ 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( W( U( m, P, D
编译安装ModSecurity. n/ D) ?" m, Z
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。- Y- @7 h' f4 k8 h) v* Y: l
1 x$ Q3 v" \ N8 v! p6 ^
' h. m* G6 x' Y* x: s4 E- W& x方法一:编译为Nginx静态模块' s& P9 d7 m, y+ y8 d
+ d7 |# V H8 q; H# P/ f1 E; c
6 L7 ]; L, I- M' V6 c编译为独立模块(modsecurity-2.9.1)
' D/ H$ k* @2 ], w$ tar xzvf modsecurity-2.9.1.tar.gz# [+ ^* Q" V) B$ u, A
$ cd modsecurity-2.9.1/( X7 G; T, M7 ^" g0 X
$ ./autogen.sh
; _# z2 m' z% r. F1 B$ ./configure --enable-standalone-module --disable-mlogc0 I$ B0 j4 g5 `% S
$ make$ |# j7 C8 z. Z3 }. `7 X3 j
编译安装Nginx并添加ModSecurity模块
& [) \& _' W0 ~9 a6 r g" w2 p: F$ tar xzvf nginx-1.9.2.tar.gz/ R! L2 @/ r4 J2 ?
$ cd nginx-1.9.2
) Q" C6 w& Y5 v7 z$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
' x5 q! J- g9 u" U& y. o$ make && make install7 g9 c; U S% ?% q% w, F- w* F5 A
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块2 m7 W4 p: H4 c
' ~# @4 [1 T, X$ f* `! w- {+ |$ o, d3 t/ \) h7 [' v
编译LibModSecurity(modsecurity-3.0)# f3 n' A9 \: p9 Y- F/ m* E+ L) W
$ cd /root
, I4 [# m! H0 n, {' d' ? _$ git clone https://github.com/SpiderLabs/ModSecurity
d4 S3 ^& T( `" l/ H$ cd ModSecurity
0 @# x/ V' X, y$ git checkout -b v3/master origin/v3/master
6 W2 c# l6 {, i1 Y4 \$ x2 Y0 G$ sh build.sh
* W5 C& ~" w' R( @- _) N$ F$ git submodule init: D( U9 p$ Z* a1 d2 O5 X
$ git submodule update
. N- U; O9 k5 l- r; g4 [/ b1 ^$ ./configure
4 C5 ^; W i! n p6 ]1 o2 \$ make
* z3 A5 F9 ]. t" D0 |; f, t$ make install6 s" g! _% S- a, \
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
/ R9 Q- b& H- v4 v$ }1 ^# _3 D: U" A! ?) f u x
' S9 K0 V6 s& `) H8 Q: K0 l$ ls /usr/local/modsecurity/lib, S7 e$ W# ?9 @+ k# _' p) w
libmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0! x6 H: F- A) m; u2 S
编译安装Nginx并添加ModSecurity-Nginx Connector模块
# @7 H9 q8 @! D/ ~使用ModSecurity-Nginx模块来连接LibModSecurity
0 v9 Z I6 D; Y0 v* I, t/ l
, \2 C% e7 m% `6 T3 v3 \# n
5 a! G4 x: O$ q2 s- J" l; H$ cd /root
& k' R+ P- `9 m* r0 z$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx+ X2 s$ d, L9 b$ f( a3 M1 Z* n0 V
$ tar xzvf nginx-1.9.2.tar.gz
/ A! _; N2 O1 U' c4 r" R3 l Q$ cd nginx-1.9.2
' p9 ]' d1 {7 V0 h- R g' \4 D$ ./configure --add-module=/root/modsecurity-nginx
/ y& s9 y l% ?$ make- l& t# a9 W2 o# c- ?
$ make && make install7 f+ ^- Z1 r7 ~9 n# ]- K
添加OWASP规则; R7 Q6 p# D# u+ T9 ^
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
@9 m' u* U) j3 N" z7 n( |, A- g$ j/ h, J h! j+ i+ D0 ^
2 |, `0 I& u- B* ^, a- \. z
下载OWASP规则并生成配置文件2 U2 m) a8 X6 r3 t' \5 b1 q8 x7 c
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
* ?3 ^& M/ i' A$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/
! R/ A. a: }5 _% R1 f$ cd /usr/local/nginx/conf/owasp-modsecurity-crs% m' t5 c0 T. G3 ]
$ cp crs-setup.conf.example crs-setup.conf# ^8 _/ L* b/ T2 ~* o# ?& R
配置OWASP规则, `9 {5 B( [" b3 r# d$ I" b
编辑crs-setup.conf文件! Z9 u* \0 x/ Z! b" I
4 Y# P l; t- @2 j# b+ ^( y3 _
$ Y3 d6 a' ]# b# }. M/ S
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf3 ?/ k5 t: s! r( A2 r- z1 l
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
2 J# Q" {( F+ c: c5 T" {: I$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
1 L9 B, u* u' U0 I/ I. m- l' _$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
4 l7 G2 K, I, u% @' M默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
0 ~, j- {; o2 I8 @5 |( \3 y
$ u& {) @( H9 `& `! o& f; N8 X( [) ~& N; h9 |
启用ModSecurity模块和CRS规则3 f9 c; ^" [( P/ P6 u! U
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。& _$ u5 @( |9 i
3 e% r( x( s u1 `7 i$ |/ n: c! s7 A& w6 \! [( Y
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
1 q: s- q( k# q* y* K3 j" y) b6 ~4 z0 N5 b8 j! S5 j9 R
- D0 l% O" d; q% u% u$ cd /root/modsecurity-2.9.1/
j9 e, W! R3 ]" u8 y$ v+ j# K$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf % p; g0 C' z7 E. F' Y+ j2 s9 L T
$ cp unicode.mapping /usr/local/nginx/conf/, L, j; v2 I6 R8 x# G
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
& N' G, e- _# i9 P; S
, `) |% m' L* j9 a( O8 Z) b
/ k; H- d& D* F4 a. d+ n$ vim /usr/local/nginx/conf/modsecurity.conf
4 w. k9 G/ V9 Q' k! b* j! _SecRuleEngine On( r1 O9 w7 c% w
ModSecurity中几个常用配置说明:: A; b6 s. j, u1 Q2 F
+ m; W9 a3 d* A- O6 _" b' l
4 N- l w& F; g5 A+ y- z. P1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。, h$ k3 @+ b: m. {) |$ i* p
' f) ~! C \$ u: M8 R/ x" O' C4 A4 L) X" }& Y
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
0 V, o Z3 l4 p6 o" Y" Z4 V5 e: ~' n( o# d& y7 h
: w" P5 _9 R/ ?# h J9 u- F3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。5 ]1 g' s* ? M# N& {8 x
+ D3 b/ z1 j. m3 p# T( g) ~
0 P7 D4 I+ G2 a: ^: j3 a& Y! G% b
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。9 a; K& R2 C% _; ]6 j6 p: b
2 K$ q' k; A" C: |
8 F" o' k0 I% H: E
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
5 C+ j2 ~. {& f* b1 _ k" [7 n3 ~% o7 k' ^6 i2 c- Y4 x, S2 G7 _+ a
5 N P3 N \& @% U
3.x版本CRS6 A7 X: ]0 u% ?+ I4 X4 w
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
: A& A5 x" I* ~9 t0 ^0 D) U1 M5 ?# 生成例外排除请求的配置文件
' p' v7 E7 `& e# h: F" Z$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
4 V! q( f5 }+ A6 ~$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf% O8 r1 _. S4 ]& @5 k3 o
$ cp rules/*.data /usr/local/nginx/conf
' E) W7 q1 a& v% c为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。9 t0 n: c' {8 N' \5 S) i: K
" h6 X; z( j( x8 q8 @
7 n9 @3 s& P% k$ ]1 D% Z$ vim /usr/local/nginx/conf/modsec_includes.conf- }( b* ^ \7 N- l K
, n! Y( w7 K" k! N* E, a: j
[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
" R" }& I, ?2 u( d7 c6 f& Y6 r6 o4 ?' o& n9 ^* m
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。' n& @+ N+ [9 B! E' R
7 E& r3 ?9 y! J& Y$ A4 V1 u
9 X" ]0 q8 ]9 m8 Z' S) e2 z
配置Nginx支持Modsecurity
& F/ u3 `9 ]) p' V4 {启用Modsecurity( p+ V: s& |5 y$ x$ ]3 U' p
使用静态模块加载的配置方法* E4 n4 L9 K2 M) J6 h1 y5 Y
在需要启用Modsecurity的主机的location下面加入下面两行即可:0 |$ Z, r% w# m( i r
" ?( i" S5 V8 g% ~' x
! }7 `' c2 g( e; |3 W# ~! M4 }
ModSecurityEnabled on;& e) ?& h( c- F
ModSecurityConfig modsec_includes.conf;* N! p2 {0 v2 B% n% Q' m
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。$ {- p/ T. X" d5 ~) x
, M1 ?1 U1 g0 |! t# ?% C6 J j
$ vim /usr/local/nginx/conf/nginx.conf
5 p5 y, b6 p1 s% s( n8 N
# [6 h( \1 f2 I# f7 G* Q8 t Z, n& x, J4 i
server {
, G2 i( Z. K8 S( j! Z2 c6 F# S listen 80;" {& K8 G% _2 j$ c
server_name example.com;6 H g/ T: G% B: @5 W, X
* O7 n) c+ k- u* m' D& K9 h9 P; s. e" X0 M, A& ~5 i5 m( X
location / {
+ E7 D; H/ H5 q) n ModSecurityEnabled on;% b9 N& L5 M- c9 @
ModSecurityConfig modsec_includes.conf;8 z+ a0 r- s u/ f2 m, Y% E: k
root html;2 |4 s0 j8 k9 i* T$ D) S2 R( ?" L
index index.html index.htm;, y1 W. }/ a$ `& D; B% F
}
1 ~; F; p7 P& X) w8 C! N}
% m( Q) n" U8 u$ `) c使用动态模块加载的配置方法3 {4 }1 K) L# {% m: ]8 l8 k
在需要启用Modsecurity的主机的location下面加入下面两行即可:
" \7 f9 b! \" {5 q! y0 k- O. D$ m2 _5 G: q K
; z( k) S: @8 t7 J
modsecurity on;
8 o/ s! H3 _' T( o0 Jmodsecurity_rules_file modsec_includes.conf;
! t9 x4 I% z8 H8 C# ~0 M修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
& T6 z2 @" g V7 {% r. `% F& I8 Z; E) k* K& C. g+ O9 Z
+ |" {% [) J/ [' \
$ vim /usr/local/nginx/conf/nginx.conf
& @& @$ ~- A1 S6 M6 y5 G; K1 ~1 j! O5 q
% W/ }( C- R% F' D: e
server {$ J( {; W3 g2 X
listen 80;- M8 v/ ]1 o4 ]) f$ z1 L& p. r7 \
server_name localhost mike.hi-linux.com; L" I5 Z5 J/ Z
access_log /var/log/nginx/yourdomain.log;
1 z/ d4 _. ~* a% P3 b- ^3 t7 i0 {) @9 i1 J2 m. ?& @9 p
3 C3 z2 P( ?7 ` location / {$ n7 y, a6 p7 o
$ E% m0 n1 t0 j& l6 Y8 C2 e3 _4 E* m2 h, F
modsecurity on;
" g# P) q8 t. ]7 J- U modsecurity_rules_file modsec_includes.conf;9 t2 T7 [% z, r* d
root html;
0 c2 r r4 C# }: L; k index index.html index.htm;
( m: J& J8 ~4 C- X8 N$ J}, x8 U, h7 A7 S+ W
}
# I4 S0 x' T& Q2 r/ q* g0 g! p验证Nginx配置文件
9 |8 a! a& c! r, N- f- S( z% U$ /usr/local/nginx/sbin/nginx -t8 v+ ^7 _; j2 b* `" \ u+ o
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
6 i$ c# V) R% ~9 z4 W- q2 mnginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
5 N( v8 C; z( ~1 Z启动Nginx0 ^: i) z; _+ S) N+ _
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf$ T. n9 ~6 G( f. t* e- R. W/ C
; x k$ W5 Q% c' y2 t" l+ }9 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能够战胜更多复杂/未知/混淆的攻击模式。 : m& ] R* m5 ~# T# Z
|