篮球介绍英语
当前位置:主页 > 网页教程 > 网站发布 > web服务器 > 内容欢迎大家投稿

Apache安全和强化的十三个技巧

时间:2015-10-12 07:34来源:未知 作者:大宝库 点击:读取中
阅读工具£º字体£º

¡¡¡¡Apache是一个很受欢迎的web服务器软件£¬其安全性对于网站的安全运营可谓生死攸关¡£下面介绍一些可帮助管理员在Linux上配置Apache确保其安全的方法和技巧¡£

¡¡¡¡本文假设你知道这些基本知识£º

¡¡¡¡文档的根目录: /var/www/html or /var/www

¡¡¡¡主配置文件: /etc/httpd/conf/httpd.conf (RHEL/CentOS/Fedora等系统) 或/etc/apache/apache2.conf (Debian/Ubuntu).

¡¡¡¡默认HTTP 端口: 80 TCP

¡¡¡¡默认 HTTPS 端口: 443 TCP

¡¡¡¡测试配置文件设置及语法: httpd -t

¡¡¡¡对Web服务器的日志文件的访问: /var/log/httpd/access_log

¡¡¡¡Web服务器错误日志文件: /var/log/httpd/error_log

¡¡¡¡1¡¢避免在错误中显示Apache版本和操作系统的ID

¡¡¡¡一般情况下£¬在用?#21019;?#30721;安装或用yum等包安装程序安装Apache?#20445;¬Apache服务器的版本号和服务器操作系统的名称都可以在错误消息中显示£¬而?#19968;?#20250;显示安装在服务器上的Apache模块信息¡£

¡¡¡¡

Apache安全和强化的十三个技巧

¡¡¡¡在上图中£¬可以看出错误页面显示了Apache的版本以及服务器所安装的操作系统版本¡£这有可能成为Web服务器和Linux系统的一个重要威胁¡£为?#20048;¹Apache把这些信息泄露出来£¬我们需要在Apache的主要配置文件中进行更?#27169;?/p>

¡¡¡¡用vim编辑器打开配置文件£¬查找“ServerSignature”£¬默认情况下它是打开状态¡£我们需要关闭服务器签名¡£ServerTokens Prod告诉Apache只在每一个请求网页的服务器响应的头部£¬仅返回Apache产?#35775;?#31216;¡£

¡¡¡¡# vim /etc/httpd/conf/httpd.conf (RHEL/CentOS/Fedora)

¡¡¡¡# vim /etc/apache/apache2.conf (Debian/Ubuntu)

¡¡¡¡ServerSignature Off

¡¡¡¡ServerTokens Prod

¡¡¡¡# service httpd restart (RHEL/CentOS/Fedora)

¡¡¡¡# service apache2 restart (Debian/Ubuntu)

¡¡¡¡

Apache安全和强化的十三个技巧

¡¡¡¡2¡¢禁用目录列表

¡¡¡¡默认情况下£¬在缺少index文件?#20445;¬Apache会列示root目录的所?#24515;?#23481;¡£如下图所示£º

¡¡¡¡

Apache安全和强化的十三个技巧

¡¡¡¡对于某个特定目录£¬我?#24378;?#20197;在配置文件中用“Options directive”关闭目录列示¡£可以在httpd.conf或apache2.conf文件中加入如下项目£º

¡¡¡¡Options -Indexes

¡¡¡¡其效果类似于下图£º

¡¡¡¡

Apache安全和强化的十三个技巧

¡¡¡¡3¡¢经常更新Apache

¡¡¡¡Apache的开发社区一直在?#27426;?#22320;改善安全问题£¬并经常发布带有新的安全特性的最新版本¡£所以我们建议你使用最新的Apache作为自己的web服务器¡£为检查Apache的版本£¬我?#24378;?#20197;用httpd –v命令来检查最新的版本¡£

¡¡¡¡# httpd -v

¡¡¡¡Server version: Apache/2.2.15 (Unix)

¡¡¡¡Server built: Aug 13 2013 17:29:28

¡¡¡¡可以用下面的命令更新Apache版本¡£

¡¡¡¡# yum update httpd

¡¡¡¡# apt-get install apache2

¡¡¡¡如果你并不是在特定操作系统或内核上运?#24515;?#20010;特别的软件£¬建议你保持内核和Linux操作系统为最新版本¡£

¡¡¡¡4¡¢禁用不必要的模块

¡¡¡¡为了尽量减少网站遭受Web攻击的机会£¬管理员最好禁用目?#23433;?#29992;的所?#24515;?#22359;¡£你可以使用下面的命令£¬列示Web服务器所有的已编译模块¡£

¡¡¡¡# grep LoadModule /etc/httpd/conf/httpd.conf

¡¡¡¡# have to place corresponding `LoadModule' lines at this location so the

¡¡¡¡# LoadModule foo_module modules/mod_foo.so

¡¡¡¡LoadModule auth_basic_module modules/mod_auth_basic.so

¡¡¡¡LoadModule auth_digest_module modules/mod_auth_digest.so

¡¡¡¡LoadModule authn_file_module modules/mod_authn_file.so

¡¡¡¡LoadModule authn_alias_module modules/mod_authn_alias.so

¡¡¡¡LoadModule authn_anon_module modules/mod_authn_anon.so

¡¡¡¡LoadModule authn_dbm_module modules/mod_authn_dbm.so

¡¡¡¡LoadModule authn_default_module modules/mod_authn_default.so

¡¡¡¡LoadModule authz_host_module modules/mod_authz_host.so

¡¡¡¡LoadModule authz_user_module modules/mod_authz_user.so

¡¡¡¡LoadModule authz_owner_module modules/mod_authz_owner.so

¡¡¡¡LoadModule authz_groupfile_module modules/mod_authz_groupfile.so

¡¡¡¡LoadModule authz_dbm_module modules/mod_authz_dbm.so

¡¡¡¡LoadModule authz_default_module modules/mod_authz_default.so

¡¡¡¡LoadModule ldap_module modules/mod_ldap.so

¡¡¡¡LoadModule authnz_ldap_module modules/mod_authnz_ldap.so

¡¡¡¡LoadModule include_module modules/mod_include.so

¡¡¡¡LoadModule log_config_module modules/mod_log_config.so

¡¡¡¡LoadModule logio_module modules/mod_logio.so

¡¡¡¡LoadModule env_module modules/mod_env.so

¡¡¡¡LoadModule ext_filter_module modules/mod_ext_filter.so

¡¡¡¡……

¡¡¡¡上述模块在默认情况下都是启用的£¬但往往并不需要£¬特别是mod_imap,mod_include, mod_info, mod_userdir, mod_autoindex¡£要禁用特定的模块£¬可以在该模块所在行的开头插入“#”注释£¬并重新启动服务¡£

¡¡¡¡5¡¢用独立的用户和组运行Apache

¡¡¡¡在默认的安装方式中£¬运行Apache进程时的用户是“nobody”或daemon¡£为安全起见£¬我们建议用非特权账户运行Apache£¬例如£¬我?#19988;?#20351;用http-web£¬就需要创建该Apache 用户和组£º

¡¡¡¡# groupadd http-web

¡¡¡¡# useradd -d /var/www/ -g http-web -s /bin/nologin http-web

¡¡¡¡现在你需要告诉Apache用这个新用户运行£¬为此£¬我们需要在/etc/httpd/conf/httpd.conf中加入一个新条目£¬并重新启动服务¡£

¡¡¡¡用vim编辑器打开/etc/httpd/conf/httpd.conf £¬查找关键字“User” 和 “Group”£¬然后将后面的用户名和组名改为http-web£º

¡¡¡¡User http-web

¡¡¡¡Group http-web

¡¡¡¡6¡¢对用户的允许和禁止£¬限制对目录的访问

¡¡¡¡我?#24378;?#20197;用httpd.conf文件中的“Allow” 和“Deny”限制对目录的访问¡£在本例中£¬我?#19988;?#20445;证root目录的安全£¬在httpd.conf文件中进行如下的设置£º

¡¡¡¡Options None

¡¡¡¡Order deny,allow

¡¡¡¡Deny from all

¡¡¡¡其中£¬Options “None”表示不允许用户启用任何可选特性¡£

¡¡¡¡Order deny, allow---在这里处理“Deny” 和 “Allow”指令£¬首先禁用£¬然后才是允许¡£

¡¡¡¡Deny from all£¬禁用所有人对root目录的请求£¬任何人都不能访问根(root)目录¡£

¡¡¡¡7¡¢使用mod_security和mod_evasive来保障Apache的安全

¡¡¡¡“mod_security”和“mod_evasive”是Apache在安全方面非常流行的两个模块¡£mod_security作为防火墙而运行£¬它允许我们适时地监视通信£¬还可以有助于我们保护网站或Web服务器免受暴力破解攻击¡£借助默认的包安装程序£¬我?#24378;?#20197;轻松地把mod_security安装在服务器上¡£下例说明如何在Ubuntu或Debian系统上安装mod_security£º

¡¡¡¡$ sudo apt-get install libapache2-mod-security

¡¡¡¡$ sudo a2enmod mod-security

¡¡¡¡$ sudo /etc/init.d/apache2 force-reload

¡¡¡¡下面的命令可以在RHEL/CentOS/Fedora系统上安装mod_security£º

¡¡¡¡另一个模块mod_evasive的工作效率很高£¬它只采用一个请求就可以很好地工作£¬可以?#20048;¹DDoS攻击造成巨大危害¡£mod_evasive可以应对http暴力破解攻击和DoS(或DDoS)攻击¡£该模块可以在三种情况下检测攻击£º一是在每秒钟内有太多请求到达同一个页面时,二是在任何子进程试图发出超过50个并发请求?#20445;?#19977;是在任何地址已经被临时列入黑名单时它仍试图尝试新的请求¡£

¡¡¡¡8¡¢禁用Apache遵循符号链接

¡¡¡¡默认情况下£¬Apache遵循符号链接£¬我?#24378;?#20197;用options指令的FollowSymLinks来关闭这个特性¡£为此£¬我们需要在主配置文件中加入一条£º

¡¡¡¡Options –FollowSymLinks

¡¡¡¡如果有一个特定的用户或网站需要遵循符号连接£¬我?#24378;?#20197;在那个网站的.htaccess文件?#24615;?#21152;规则£º

¡¡¡¡# Enable symbolic links

¡¡¡¡Options +FollowSymLinks

¡¡¡¡注意£º为将规则重新写入到.htaccess文件中£¬在主配置文件中£¬应当全?#22336;乐?ldquo;AllowOverride All”

¡¡¡¡9¡¢关闭服务器端包含和CGI执行

¡¡¡¡如果我们不需要£¬就可以关闭服务器端包含(mod_include)和CGI执?#23567;?#20026;此£¬我们需要修改主配置文件£º

¡¡¡¡Options -Includes

¡¡¡¡Options –ExecCGI

¡¡¡¡我们还可以用Directior标记对特定目录执行这种操作¡£在本例中£¬我们关闭了/var/www/html/web1这个目录的Includes和Cgi文件执行£º

¡¡¡¡Options -Includes -ExecCGI

¡¡¡¡下面列示的是其它一些可以用Options指令打开或关闭的值£º

¡¡¡¡Options All£º立即启用所有选项¡£如果你不想在Apache配置文件或.htaccess中明确地指定任何值£¬那么它就是默认值¡£

¡¡¡¡Options IncludesNOEXEC£º该选项允许服务器端包含文件但不执行命令或CGI¡£

¡¡¡¡Options MultiViews£º允许内容协商多重视图(使用mod_negotiation)

¡¡¡¡Options SymLinksIfOwnerMatch£º跟FollowSymLinks类似¡£但是要当符号连接和被连接的原始目录是同一所有者时才被允许¡£

¡¡¡¡10¡¢限制请求的大小

¡¡¡¡Apache在默认情况下对HTTP请求的总大小是没有限制的¡£在你允许Web服务器可以接受大量请求?#20445;?#20320;就有可能成为DoS攻击的受害者¡£我?#24378;?#20197;用directiory标签来限制 LimitRequestBody指令的请求大小¡£

¡¡¡¡你可以用字节来设置这个值(从0到2147483647,0表示无限制)¡£你可以根据自己的需要限制这个值¡£假设你要限制user_uploads这个目录所包含的用户上传文件量£¬并且限制为500K£¬就应?#20445;?/p>

¡¡¡¡LimitRequestBody 512000

¡¡¡¡11¡¢DDoS攻击的防御和强化

¡¡¡¡你不可能完全阻止企业网站免受DdoS攻击¡£下面这些命令便于你进行控制¡£

¡¡¡¡TimeOut指令用于设置在特定事件失效之前£¬服务器等待事件完成的时间长?#21462;?#20854;默认值是300秒¡£对于容?#33258;?#21463;DDoS攻击的网站£¬把这个?#21040;档?#24456;有好处¡£这个值的大小取决于网站上的请求种类¡£注意£¬对于某些CGI脚本£¬这个设置可能会产生问题¡£

¡¡¡¡-MaxClients£º此指令允许用户设置服务器可同时服务的连接限制¡£每一个新连接?#23478;?#26681;据这个限制进?#20449;?#38431;¡£它适用于Prefork和Worker¡£其默认值为256¡£

¡¡¡¡-KeepAliveTimeout£º在关闭连接之前£¬服务器随后的等待时间长?#21462;?#40664;认值是5秒¡£

¡¡¡¡-LimitRequestFields£º这个设置可以帮助我们限制可以接受的HTTP请求的头部字?#38382;?#37327;¡£其默认值为100¡£ 有?#20445;?#30001;于http的请求头部过多而导致发生DDoS攻击£¬用户不?#20004;档?#36825;个值¡£

¡¡¡¡-LimitRequestFieldSize£º帮助我?#24039;?#32622;HTTP请求头部的大小¡£

¡¡¡¡12¡¢启用Apache日志功能

¡¡¡¡Apache允许你独立记录操作系统的日志¡£例如£¬在用户与Web服务器进行交互时所输入的命令信息?#22836;?#24120;有用¡£

¡¡¡¡为此£¬你需要包含mod_log_config模块¡£Apache有三个主要的与日志相关的指令£º

¡¡¡¡TransferLog£º创建日志文件

¡¡¡¡LogFormat £º设置定制格式

¡¡¡¡CustomLog £º创建并格式化一个日志文件

¡¡¡¡我们还可以在虚拟主机部分设置这些命令¡£例如£¬下面的例子是启用了日志功能的一个网站的虚拟主机配置£º

¡¡¡¡DocumentRoot /var/www/html/example.com/

¡¡¡¡ServerName www.example.com

¡¡¡¡DirectoryIndex index.htm index.html index.php

¡¡¡¡ServerAlias example.com

¡¡¡¡ErrorDocument 404 /story.php

¡¡¡¡ErrorLog /var/log/httpd/example.com_error_log

¡¡¡¡CustomLog /var/log/httpd/example.com_access_log combined

¡¡¡¡13¡¢用ssl证书保障Apache的安全

¡¡¡¡你还可以用SSL证书用?#29992;?#30340;方式保障信息传输的安全¡£在电子商务网站中£¬消费者为了买东西£¬有时需要提供账户或信用卡的细节£¬默认情况下£¬Web服务器用明文发送这些信息¡£配置服务器使其借助于SSL证书就可以为用户进行?#29992;?#20256;输¡£

¡¡¡¡企业可?#28304;?#19981;同的SSL供应商购买SSL证书¡£小?#25512;?#19994;一般并不愿意购买SSL证书£¬此?#20445;?#20320;仍可以为网站分配一个自签名证书¡£Apache使用mod_ssl模块来支持SSL证书¡£

¡¡¡¡# openssl genrsa -des3 -out example.com.key 1024

¡¡¡¡# openssl req -new -key example.com.key -out exmaple.csr

¡¡¡¡# openssl x509 -req -days 365 -in example.com.com.csr -signkey example.com.com.key -out example.com.com.crt

¡¡¡¡在创建并签署了证书后£¬你需要在Apache配置?#24615;?#21152;这个证书¡£用vim编辑器打开主配置文件£¬并增加下面的内容£¬然后重启服务£º

¡¡¡¡SSLEngine on

¡¡¡¡SSLCertificateFile /etc/pki/tls/certs/example.com.crt

¡¡¡¡SSLCertificateKeyFile /etc/pki/tls/certs/example.com.key

¡¡¡¡SSLCertificateChainFile /etc/pki/tls/certs/sf_bundle.crt

¡¡¡¡ServerAdmin [email protected]

¡¡¡¡ServerName example.com

¡¡¡¡DocumentRoot /var/www/html/example/

¡¡¡¡ErrorLog /var/log/httpd/example.com-error_log

¡¡¡¡CustomLog /var/log/httpd/example.com-access_log common

¡¡¡¡此?#20445;?#25171;开浏览器£¬并输入https://example.com£¬就可以看到自签名的证书¡£

(责任编辑£º大宝库)


------?#25351;?#32447;----------------------------
推荐内容
赞助商链接
赞助商链接


ÀºÇò½éÉÜÓ¢Óï