移动安全 安全管理 应用案例 网络威胁 系统安全应用安全 数据安全 云安全
当前位置: 主页 > 信息安全 > 应用安全 >

Apache安然和强化的十三个技能

时间:2013-12-16 12:53来源:TuZhiJiaMi企业信息安全专家 点击:
Apache是一个很受欢迎的web办事器软件,其安然性对网站的安然运营可谓存亡攸关。下面介绍一些可帮忙治理员在Linux上建设Apache确保其安然的编制和技能。 本文假定你知道这些根基常识: 文档
Tags应用安全(1006)Apache安全(2)  

  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

  一般环境下,在用源代码安装或用yum等包安装法度安装Apache时,Apache办事器的版本号和办事器把持系统的名称都可以在弊端动静中显示,并且还会显示安装在办事器上的Apache模块信息。

Apache安然和强化的十三个技能

  在上图中,可以看犯弊端页面显示了Apache的版本和办事器所安装的把持系统版本。这有可能成为Web办事器和Linux系统的一个首要威胁。为避免Apache把这些信息泄漏出来,我们需要在Apache的首要建设文件中进行更改:

  用vim编纂器打开建设文件,查找“ServerSignature”,默许环境下它是打开状况。我们需要封锁办事器签名。ServerTokens Prod奉告Apache只在每个要求网页的办事器响应的头部,仅返回Apache产品名称。

  # 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文件时,Apache会列示root目次的所有内容。以下图所示:

Apache安然和强化的十三个技能

  对某个特定目次,我们可以在建设文件顶用“Options directive”封锁目次列示。可以在httpd.conf或apache2.conf文件中加进以下项目:

  Options -Indexes

  其结果近似于下图:

Apache安然和强化的十三个技能

  3、常常更新Apache

  Apache的开辟社区一向在不竭地改良安然标题问题,并常常发布带有新的安然特点的最新版本。所以我们建议你利用最新的Apache作为本身的web办事器。为查抄Apache的版本,我们可以用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

  假定你其实不是在特定把持系统或内核上运行某个出格的软件,建议你保持内核和Linux把持系统为最新版本。

  4、禁用不需要的模块

  为了尽可能削减网站蒙受Web报复打击的机缘,治理员最好禁用今朝不消的所有模块。你可利用下面的号令,列示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,例如,我们要利用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、对用户的承诺和避免,限制对目次的拜候

  我们可以用httpd.conf文件中的“Allow” 和“Deny”限制对目次的拜候。在本例中,我们要包管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办事器免受暴力破解报复打击。借助默许的包安装法度,我们可以轻松地把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:

  # yum install mod_security

  # /etc/init.d/httpd restart

  另外一个模块mod_evasive的工作效力很高,它只采取一个要求便可以很好地工作,可以避免DDoS报复打击造成巨大年夜风险。mod_evasive可以应对http暴力破解报复打击和DoS(或DDoS)报复打击。该模块可以在三种环境下检测报复打击:一是在每秒钟内有太多要求达到统一个页面时,二是在任何子过程试图发出超越50个并发要求时,三是在任何地址已被姑且列进黑名单时它仍试图测验测验新的要求。

  8、禁用Apache遵守符号链接

  默许环境下,Apache遵守符号链接,我们可以用options指令的FollowSymLinks来封锁这个特点。为此,我们需要在主建设文件中加进一条:

  Options –FollowSymLinks

  假定有一个特定的用户或网站需要遵守符号连接,我们可以在阿谁网站的.htaccess文件中增加法则:

  # Enable symbolic links

  Options +FollowSymLinks

  寄望:为将法则从头写进到.htaccess文件中,在主建设文件中,该当全局避免“AllowOverride All”

  9、封锁办事器端包含和CGI履行

  假定我们不需要,便可以封锁办事器端包含(mod_include)和CGI履行。为此,我们需要点窜主建设文件:

  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办事器可以接管大年夜量要求时,你就有可能成为DoS报复打击的受害者。我们可以用directiory标签来限制 LimitRequestBody指令的要求大年夜小。

  你可以用字节来设置这个值(从0到2147483647,0暗示无限制)。你可以按照本身的需要限制这个值。假定你要限制user_uploads这个目次所包含的用户上传文件量,并且限制为500K,就该当:

  LimitRequestBody 512000

  11、DDoS报复打击的防御和强化

  你不成能完全禁止企业网站免受DdoS报复打击。下面这些号令便于你进行节制。

  TimeOut指令用于设置在特定事务掉效之前,办事器等候事务完成的时候长度。其默许值是300秒。对等闲蒙受DDoS报复打击的网站,把这个值降落很有好处。这个值的大年夜小取决于网站上的要求种类。寄望,对某些CGI脚本,这个设置可能会产生标题问题。

  MaxClients:此指令承诺用户设置办事器可同时办事的连接限制。每个新连接都要按照这个限制进行列队。它合用于Prefork和Worker。其默许值为256。

  KeepAliveTimeout:在封锁连接之前,办事器随后的等候时候长度。默许值是5秒。

  LimitRequestFields:这个设置可以帮忙我们限制可以接管的HTTP要求的头部字段数量。其默许值为100。 有时,因为http的要求头部过量而导致产生DDoS报复打击,用户无妨降落这个值。

  LimitRequestFieldSize:帮忙我们设置HTTP要求头部的大年夜小。

  12、启用Apache日记功能

  Apache承诺你自力记实把持系统的日记。例如,在用户与Web办事器进行交互时所输进的号令信息就很是有效。

  为此,你需要包含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证书用加密的编制保障信息传输的安然。在电子商务网站中,消费者为了买东西,有时需要供给账户或诺言卡的细节,默许环境下,Web办事器用明文发送这些信息。建设办事器使其借助于SSL证书便可觉得用户进行加密传输。

  企业可以从不合的SSL供给商采办SSL证书。小型企业一般其实不肯意采办SSL证书,此时,你仍可觉得网站分派一个自签名证书。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建设中增加这个证书。用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 ravi.saive@example.com

  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

  此时,打开浏览器,并输进https://example.com,便可以看到自签名的证书。

------分隔线----------------------------

推荐内容