Apache安全配置规范资料下载.pdf
《Apache安全配置规范资料下载.pdf》由会员分享,可在线阅读,更多相关《Apache安全配置规范资料下载.pdf(16页珍藏版)》请在冰点文库上搜索。
![Apache安全配置规范资料下载.pdf](https://file1.bingdoc.com/fileroot1/2023-4/30/22d22c5b-cdb7-4acc-8121-2c875c780aaa/22d22c5b-cdb7-4acc-8121-2c875c780aaa1.gif)
Apache安全配置规范Page3of152.1.2.使用使用ModSecurity【说明】强烈建议使用ModSecurity,因为其已经成为最广泛部署的Web应用防火墙。
ModSecurity详细介绍见http:
/www.modsecurity.org/documentation/.ModSecurity执行以下的功能:
在WebServer处理前,拦截HTTP请求拦截请求的内容(RequestBody),例如POSTPayload拦截,存储,有选择性地验证上传的文件通过在设置文件中定义一系列的规则,执行对请求的分析在HTTPResponse发送给客户端之前拦截,并进行安全检测和相应的分析当对HTTPRequest或Response分析发现问题是,执行相应的预定义操作或者脚本执行日志审计ModSecurity中的CoreRuleSet通过协议一致性检查、攻击检测以及其他的错误检测提供对Web应用的防护。
CoreRuleSet是Apache中的一系列配置文件。
不同于IDS和IPS是针对于已知的漏洞,CoreRuleSet是基于通用的规则,目的是防止“零日攻击”和Web应用中常发现的未知漏洞。
这些漏洞一般为一些自定义的代码。
CoreRuleSet特点:
优化了性能通过一些改进减少误报检测通用的攻击而不是特定的已知攻击,所以有更加的性能更详细的规则信息即插即用CoreRules使用了如下的技术:
协议合规性:
HTTPRequest验证HTTP协议异常限制HTTP各种协议属性Apache安全配置规范Page4of15HTTP使用策略攻击检测:
恶意客户端软件检测,如恶意的自动程序,可以防止Spam通用的攻击检测,可以检测的攻击类型包括:
oSQLinjectionandBlindSQLinjection.oCrossSiteScripting(XSS).oOSCommandInjectionandremotecommandaccess.oFilenameinjection.oColdFusion,PHPandASPinjection.oE-MailInjectionoHTTPResponseSplitting.oUniversalPDFXSS.检测对已安装在主机中的木马的访问错误检测,防止应用错误信息发送给客户端XML保护,检查XMLPayload搜索引擎监控【具体配置】可以在http:
/www.modsecurity.org/download/index.html下载源代码,http:
/www.modsecurity.org/documentation/modsecurity-apache/2.1.2/modsecurity2-apache-reference.html#02-installation给出了安装的步骤。
以下是ModSecurity的快速安装步骤:
ExtracttheCoreRuleSetcontentintoadirectorycalledmodsecurityunderyourApacheconfigurationdirectory.Editandcustomizemodsecurity_crs_10_config.conf.Thisfilecontainscommentswhichexplainhowtosetupeachdirective.Youmayalsowanttoeditmodsecurity_crs_30_http_policy.confwhichsetsrulesspecifictoyourapplication.AddthedirectiveIncludeconf/modsecurity/*.conftoyourhttpd.confafterthelinewhereModSecurityitselfitloaded.RestartApache.Checkthattheserverworksnormally,andsimulateanattackbybrowsingtotheURLhttp:
/yourhost/cmd.exe.Insteadofa“pagenotfound”error,youshouldgeta“MethodNotImplemented”error.强烈建议开始的时候只使用MonitoringOnly模式,通过以下方式实现:
ChangethedirectiveSecRuleEngineinfilemodsecurity_crs_10_config.conffromApache安全配置规范Page5of15OntoDetectionOnly.经过一段时间的观察和对错误信息的验证,再使用On的模式。
2.1.3.最小化最小化httpd.conf文件文件【说明】缺省的文件因为包括了许多模块的目录和一些说明导致非常大,使得配置文件难读和难以管理。
建议建立一个空的配置文件后,一项项填入必要的配置。
可以通过命令“apachectlconfigtest”命令测试文件的语法。
【具体配置】增加一个新的配置文件(/usr/local/apache2/conf/httpd.conf),添加诸如以下的内容:
#locationofthewebserverfilesServerRoot/usr/local/apache2#locationofthewebservertreeDocumentRoot/var/www/htdocs#pathtotheprocessID(PID)file,which#storesthePIDofthemainApacheprocessPidFile/var/www/logs/httpd.pid#whichporttolistenatListen80#donotresolveclientIPaddressestonamesHostNameLookupsOff2.1.4.最小化最小化Apache模块模块【说明】禁用不必须的Apache模块,以减小Web服务器的风险并增加性能。
只启用网站必须的功能模块。
若不确定功能模块是否有用,可参考Apache文档站点http:
/httpd.apache.org/docs/2.2/mod/,禁止掉模块后测试功能性。
【具体配置】观察Apache的配置文件,注释掉不需要的模块,如下示例:
LoadModuleaccess_modulemodules/mod_access.soLoadModuleauth_modulemodules/mod_auth.soLoadModuleauth_anon_modulemodules/mod_auth_anon.so#LoadModuleauth_dbm_modulemodules/mod_auth_dbm.so#LoadModuleauth_digest_modulemodules/mod_auth_digest.so#LoadModuleldap_modulemodules/mod_ldap.so#LoadModuleauth_ldap_modulemodules/mod_auth_ldap.so#LoadModulecern_meta_modulemodules/mod_cern_meta.so#LoadModuledav_modulemodules/mod_dav.soApache安全配置规范Page6of152.1.5.创建创建Apache用户和组帐号用户和组帐号【说明】一个尽量避免遭受攻击的方法是为Web服务器应用创建一个独特的、没有特权的用户ID和组。
不应该使用类Unix系统中默认的“nobody”用户ID和组,由于该账户通常还为其他守护进程使用。
Apache使用的帐号也不需要赋予访问其他服务的不必要的权限。
而且Apache用户的用户ID应该分配1和499之间的一个值,由于这些值是为特殊的系统账户保留,而不可以被普通用户使用。
【具体配置】创建一个名字类似:
apache的用户来运行WebServer,如下例子中,指定Webdocumentroot为该用户的主目录该用户永远不应被使用用来登录Shell通过以下命令创建新的apache用户#groupaddapache#useraddapache-gapache-d/dev/null-s/sbin/nologin该命令禁止了apache用户的登录在Apache配置文件中键入如下两行:
UserapacheGroupapache2.1.6.限制访问限制访问【说明】检查Allow和Deny指令(Directive)的访问控制逻辑性,限制对操作系统根目录、Web根目录及其他目录的访问。
注意“Order”指定的顺序。
如下例子中,Orderallow,denyallowfromapache.orgdenyfromfoo.apache.org“Order”指令的顺序表明先评估Allow指令,Allow指令表明来自于apache.org域的所有访问都不允许,Deny指令表明禁止掉来自于foo.apache.org域的访问。
合起来的意思是“除了来自于foo.apache.org域的访问外,允许所有其它来自apache.org域的访问”【具体配置】增加增加OSRoot目录的访问控制:
目录的访问控制:
Apache安全配置规范Page7of15为了防止目录遍历到DocumentRoot以外的内容,应该添加下面的指令。
OptionsNoneAllowOverrideNonedenyfromallApache存在一个缺省访问的功能,就是如果WebServer能找到一个正常的URL路径,就可以将该路径映射的文件提供给Client,除非明确禁止掉这个URL路径。
增加OSRoot和DocumentRoot目录的访问控制:
以下例子允许任何人访问DocumentRootOrderallow,denyallowfromall以下例子指定IP段(202.54.X.X)访问DocumentRootOrderallow,denydenyfromallallowfrom202.54.2.1.7.通过选项指令(通过选项指令(OptionsDirective)加强目录的功能性控制)加强目录的功能性控制【说明】为了增加安全性,只有那些必要的功能才被开启,所有其他的功能应该被禁止。
OptionDirective控制了应用到目录或文件上的扩展功能。
All表明了所有功能都可用,除了MultiviewsExecCGI表明允许在目录内执行CGI脚本,该命令应该只被应用到CGI-bin目录FollowSymLinks表明服务器允许调用目录中的符号链接(symboliclink)。
如果允许符号链接,攻击者可能浏览制定目录以外的内容。
SymLinksIfOwnerMatch表明服务器只当文件和符号链接是同样的Owner时才允许调用符号链接。
Includes表明允许执行服务器端的Includes。
会有一些OS命令存在于网页的HTML代码中,ServerSideIncludes(SSI)会在发送到Client端之前被执行。
如果Apache安全配置规范Page8of15必须使用SSI,建议使用IncludesNoExec选项,该选项允许服务器解析包括SSI的网页,但不执行系统的命令。
Indexes表明当没有缺省页面存在时,自动创建一个包括所有文件的页面,也就是说允许遍历该目录的内容。
该命令在必须要时应当被禁止。
AllowOverride告诉服务器如何处理.htaccess文件中的访问控制。
当服务器知道一个.htaccess文件(由AccessFileName指定)时,它需要知道该文件中声明的哪一条directive可以超越之前定义的访问控制。
如果该directive设置为None,表明.htaccess文件可以被忽略。
当设置为All,表明任何.htaccess中设置为允许的directive都被允许。
【具体配置】验证验证DocumentRoot包括以下设置:
包括以下设置:
Orderallow,denyAllowfromallOptionsNoneAllowOverrideNone2.1.8.CGI脚本脚本【说明】只有当需要的时候才启用CGI脚本,当需要使用cgi脚本时,最好的方式是将所有的脚本置于同一目录中(通常命名为cgi-bin)。
【具体配置】以下命令允许执行该目录的cgi脚本OptionsExecCGISetHandlercgi-script2.1.9.限制限制HTTP请求方式请求方式【说明】限制Web服务器只接受和处理某一类HTTP方式。
对于通常的WebServer操作,只需要允许POST和GET请求(在一些时候可能会用到HEAD请求)
【具体配置】Apache安全配置规范Page9of15使用ModSecurityCoreRules限制请求的方式:
modsecurity_crs_30_http_policy.conf文件包括以下的规则,#allowrequestmethods#TODOMostapplicationsonlyuseGET,HEAD,andPOSTrequest#methods,ifsouncommentthelinebelow.Otherwiseyouareadvised#toeditthelinebeforeuncommentingit.#SecRuleREQUEST_METHOD!
(?
:
POS|GE)T|OPTIONS|HEAD)$phase:
1,log,auditlog,status:
501,msg:
Methodisnotallowedbypolicy,severity:
2,id:
960032,2.1.10.限制限制HTTP协议版本协议版本【说明】许多恶意程序、漏洞扫描器和指纹工具会发送非正常的HTTP协议版本以观察Web服务器如何响应。
这些请求通常是攻击者枚举过程的一部分,因此有必要拒绝这些请求。
【具体配置】使用ModSecurityCoreRules限制HTTP协议类型:
modsecurity_crs_30_http_policy.conf文件包括以下的规则,#Restrictprotocolversions.#TODOAllmodernbrowsersuseHTTPversion1.1.Fortightsecurity,#allowonlythisversion.#NOTEAutomationprograms,bothmaliciousandnonmaliciousmanytimes#useotherHTTPversions.Ifyouwanttoallowaspecificautomated#programtouseyoursite,trytocreateanarrowerexceptionandnot#allowanyclienttosendHTTPrequestsinaversionlowerthan1.1#SecRuleREQUEST_PROTOCOL!
HTTP/(0.9|1.01)$t:
none,deny,log,auditlog,status:
505,msg:
HTTPprotocolversionisnotallowedbypolicy,severity:
960034,2.1.11.限制文件扩展名限制文件扩展名【说明】一些存放在Web服务器DocumentRoot目录中的文件可能提供敏感信息,通常这些文件可能因安装、排错或备份被错误地遗留在改目录中。
因此有必要对敏感文件扩展名限制访问,如.bak,.config,.old等等。
【具体配置】Apache安全配置规范Page10of15使用ModSecurityCoreRules限制文件扩展名:
modsecurity_crs_30_http_policy.conf文件包括以下的规则,#Restrictfileextension#TODOthelistoffileextensionsbelowarevirtuallyalways#consideredunsafeandnotinuseinanyvalidprogram.Ifyour#applicationusesoneoftheseextensions,pleaseremoveitfromthe#listofblockedextensions.#YoumayneedtouseModSecurityCoreRuleSetTemplatestodoso,#otherwisecommentthewholerule.#SecRuleREQUEST_BASENAME.(?
c(?
o(?
nf(?
ig)?
|m)|s(?
proj|r)?
|dx|er|fg|md)|p(?
rinter|ass|db|ol|wd)|v(?
b(?
proj|s)?
|sdisco)|a(?
s(?
ax?
|cx)|xd)|d(?
bf?
|at|ll|os)|i(?
dacq|nci)|ba(?
kt|ckup)|res(?
ources|x)|s(?
h?
tm|ql|ys)|l(?
icx|nk|og)|w,5|webinfo|htrw|xsdx|key|mdb|old)$t:
urlDecodeUni,t:
lowercase,deny,log,auditlog,status:
500,msg:
URLfileextensionisrestrictedbypolicy,severity:
960035,2.1.12.防止防止DoS攻击攻击【说明】不像网络层的DoS攻击需要大量的连接尝试,应用层的DoS攻击更容易实现。
可以通过调整下列Apache指令(directives)防范应用层DoS攻击:
TimeoutKeepAliveKeepAliveTimeout【具体配置】以下为建议的值:
(修改httpd.conf)Timeout10KeepAliveOnKeepAliveTimeout15AcceptFilterhttpdataAcceptFilterhttpsdata对于其他的性能调整的建议,参考官方文档http:
/httpd.apache.org/docs/2.2/misc/perf-tuning.html.2.1.13.缓冲区溢出防护的调整缓冲区溢出防护的调整【说明】使用以下指令可以很大程度地减少成功缓冲区溢出的机会:
LimitRequestBody,限制发送到ApacheServer的HTTPRequestbody的大小Apache安全配置规范Page11of15LimitRequestFields,限制Client发送的HTTPRequest中额外的headers的数量LimitRequestFieldsize,限制Client发送的HTTPHead的最大长度LimitRequestlLine,限制HTTPRequest本身的最大长度在实际环境中使用这些参数要经过充分的测试。
【具体配置】使用使用httpd.conf中的中的directive限制:
限制:
#Maximumsizeoftherequestbody.LimitRequestBody64000#Maximumnumberofrequestheadersinarequest.LimitRequestFields32#Maximumsizeofrequestheaderlines.LimitRequestFieldSize8000#Maximumsizeoftherequestline.LimitRequestLine4000或者编辑或者编辑ModSecurityrulefilemodsecurity_crs_23_request_limits.conf#-Argumentslimits#Limitargumentnamelength#SecRuleARGS_NAMES.100phase:
2,t:
403,msg:
Argumentnametoolong,id:
960209,severity:
4#Limitvaluenamelength#SecRuleARGS.400phase:
Argumentvaluetoolong,id:
960208,severity:
4#Maximumnumberofargumentsinrequestlimited