ModSecurityModSecurity是一个开源的、跨平台的Web应用防火墙,它可以通过检查Web服务器收发的数据来对网站流量进行安全防护最初设计ModSecurity项目时,它只是一个Apache模块。随着时间的推移,该项目已经扩展到支持其他平台,如Nginx;为了满足对额外平台支持不断增长的需求,有必要删除该项目底层的Apache依赖项,使其更加独立于平台当前ModSecurityv3由Libmodsecurity(对ModSecurity平台的完全重写)和对应web服务器的连接器(模块)组成请求处理阶段RequestHeaders、RequestBody、ResponseHeaders、ResponseBody、Logging组件版本nginxv1。20。1libmodsecurityv3。05ModSecuritynginxv1。0。2corerulesetv3。3。2CentOSLinuxrelease7。6。1810(Core)libmodsecurity 基于SecRules的web流量处理引擎,提供了加载解释与ModSecuritySecRules格式编写的规则的能力 1、安装libmodsecurity所需依赖库安装依赖yuminstallyepelreleasegitgccgcccautoconflibtoolpcredevellibxml2develcurldevelyajldevelflexdevelluadevellmdbdevelssdeepdevel安装依赖项libmaxminddbwgetchttps:github。commaxmindlibmaxminddbreleasesdownload1。6。0libmaxminddb1。6。0。tar。gz。configuremakemakeinstall 2、下载编译安装libmodsecurityv3。05gitclonehttps:github。comSpiderLabsModSecuritycdModSecurity下载libInjectiongitsubmoduleinitgitsubmoduleupdate开始构建,默认安装位置usrlocalmodsecurity。build。sh。configuremakemakeinstall备注:。build。sh执行中提示fatal:Nonamesfound,cannotdescribeanything。暂时忽略modsecuritynginx nginx和libmodsecurity之间的连接器,其实就是一个第三方Nginx模块,Nginx可以通过静态或动态方式加载该模块 1、Nginx的编译安装wgethttp:nginx。orgdownloadnginx1。20。1。tar。gztarxzfnginx1。20。1。tar。gzcdnginx1。20。1yuminstallopenssldevelgitclonedepth1https:github。comSpiderLabsModSecuritynginx。git。configureprefixetcnginxsbinpathusrsbinnginxmodulespathusrlib64nginxmodulesconfpathetcnginxnginx。conferrorlogpathvarlognginxerror。loghttplogpathvarlognginxaccess。logpidpathvarrunnginx。pidlockpathvarrunnginx。lockhttpclientbodytemppathvarcachenginxclienttemphttpproxytemppathvarcachenginxproxytemphttpfastcgitemppathvarcachenginxfastcgitemphttpuwsgitemppathvarcachenginxuwsgitemphttpscgitemppathvarcachenginxscgitempusernginxgroupnginxwithcompatwithfileaiowiththreadswithhttpadditionmodulewithhttpauthrequestmodulewithhttpdavmodulewithhttpflvmodulewithhttpgunzipmodulewithhttpgzipstaticmodulewithhttpmp4modulewithhttprandomindexmodulewithhttprealipmodulewithhttpsecurelinkmodulewithhttpslicemodulewithhttpsslmodulewithhttpstubstatusmodulewithhttpsubmodulewithhttpv2modulewithmailwithmailsslmodulewithstreamwithstreamrealipmodulewithstreamsslmodulewithstreamsslprereadmodulewithccoptO2gpipeWallWp,DFORTIFYSOURCE2fexceptionsfstackprotectorstrongparamsspbuffersize4grecordgccswitchesm64mtunegenericfPICwithldoptWl,z,relroWl,z,nowpieadddynamicmodule。。ModSecuritynginxmakej4mkdirvarcachenginxuseraddrnginxmkdiretcnginxmodulescpobjsngxhttpmodsecuritymodule。soetcnginxmodulesnginx配置文件首行添加如下配置,全局加载该模块loadmodulemodulesngxhttpmodsecuritymodule。so; 2、添加modsecurity相关配置文件modsecurity。conf,main。conf创建配置文件modsecurity。confmkdiretcnginxmodseccdetcnginxmodsecwgethttps:raw。githubusercontent。comSpiderLabsModSecurityv3mastermodsecurity。confrecommendedmvmodsecurity。confrecommendedmodsecurity。conf修改modsecurity。conf中的对应配置项vimetcnginxmodsecmodsecurity。confSecRuleEngineOn默认DetectionOnly(开启规则匹配,但不执行任何拦截操作),On(开启规则匹配并进行相应的拦截)SecUnicodeMapFileunicode。mapping20127默认启用,现变更为注释该行创建主配置main。conf及自定义规则catetcnginxmodsecmain。confEOFIncludeetcnginxmodsecmodsecurity。conf自定义安全规则,参数x值中包含test字符串,则返回403状态SecRuleARGS:xcontainstestid:1234,deny,log,status:403SecUploadFileLimit15配置在multipartPOST中处理的最大文件上传数量EOF在Nginx的server上下文中添加如下配置modsecurityon;modsecurityrulesfileetcnginxmodsecmain。conf; 3、完整的Nginx配置文件如下catetcnginxnginx。confloadmodulemodulesngxhttpmodsecuritymodule。so;workerprocesses1;events{workerconnections1024;}http{includemime。types;defaulttypeapplicationoctetstream;keepalivetimeout65;server{listen80;servernamelocalhost;modsecurityon;modsecurityrulesfileetcnginxmodsecmain。conf;location{roothtml;indexindex。htmlindex。htm;}}}OWASP OWASPModSecurity核心规则集(CRS)是一组通用攻击检测规则,用于ModSecurity或兼容的Web应用程序防火墙;CRS旨在保护Web应用程序免受包括OWASP前十名在内的各种攻击,同时将错误警报降至最低 1、在Modsecurity中启用OWASP核心规则集下载部署crswgethttps:github。comcorerulesetcorerulesetarchiverefstagsv3。3。2。tar。gztarxzfv3。3。2。tar。gzcdcdcoreruleset3。3。2cpcrssetup。conf。examplecrssetup。confcd。。mvcoreruleset3。3。2etcnginxmodseccrs3在主配置文件main。conf中引用modsecurity及crs配置catetcnginxmodsecmain。confEOFmodsecurity基本配置Includeetcnginxmodsecmodsecurity。confOWASPCRSv3rulesIncludeetcnginxmodseccrs3crssetup。confIncludeetcnginxmodseccrs3rules。conf自定义规则集SecRuleARGS:xcontainstestid:1234,deny,log,status:403EOF安全验证 1、请求参数x不包含字符串test的请求,返回状态200http:192。168。31。66?xwyun 2、请求参数x包含非法字符串test的请求,返回状态403http:192。168。31。66?xwyuntest在varlognginxerror。log中可以看到拦截的详细日志2021091319:28:06〔error〕2470224702:7〔client192。168。31。220〕ModSecurity:Accessdeniedwithcode403(phase1)。MatchedOperatorContainswithparametertestagainstvariableARGS:x(Value:test11)〔fileetcnginxmodsecmain。conf〕〔line3〕〔id1234〕〔rev〕〔msg〕〔data〕〔severity0〕〔ver〕〔maturity0〕〔accuracy0〕〔hostname192。168。31。66〕〔uri〕〔uniqueid1631532486〕〔refo0,4v8,6〕,client:192。168。31。220,server:localhost,request:GET?xtest11HTTP1。1,host:192。168。31。66