阿里云首页 阿里云安全产品和技术 相关技术圈

Apache服务安全加固

以专门的用户账号和用户组运行Apache服务。

  1. 根据需要,为Apache服务创建用户及用户组。如果没有设置用户和组,则新建用户,并在Apache配置文件中进行指定。

    1. 创建Apache用户组。

      groupadd apache

    2. 创建Apache用户并加入Apache用户组。

      useradd apache –g apache

    3. 将下面两行设置参数加入Apache配置文件httpd.conf中:

              User apache
              Group apache
                                                      
  2. 检查httpd.conf配置文件中是否允许使用非专用账户(如root用户)运行Apache服务。

    默认设置一般即符合要求。Linux系统中默认使用apache或者nobody用户Unix系统默认使用daemon用户。

二、授权设置

严格控制Apache主目录的访问权限,非超级用户不能修改该目录中的内容。

  1. Apache的主目录对应于Apache Server配置文件httpd.conf中的Server Root控制项,应设置为:

            Server Root /usr/local/apache
                                            
    • 判定条件:非超级用户不能修改该目录中的内容。

    • 检测操作:尝试进行修改,看是否能修改该目录中的内容。

    该目录一般设置为/etc/httpd目录,默认情况下属主为root用户,其它用户不能修改该目录中的文件。默认设置一般即符合要求。

  2. 严格设置配置文件和日志文件的权限,防止未授权访问。

    • 执行chmod 600 /etc/httpd/conf/httpd.conf命令设置配置文件为属主可读写,其他用户无读写权限。

    • 执行chmod 644 /var/log/httpd/*.log命令设置日志文件为属主可读写,其他用户拥有只读权限。

    注意

    - /etc/httpd/conf/httpd.conf配置文件的默认权限是644,可根据需要修改权限为600。 - /var/log/httpd/*.log日志文件的默认权限为644,默认设置即符合要求。

三、日志设置

Apache设备应配置日志功能,对运行错误、用户访问等事件进行记录,记录内容包括时间,用户使用的IP 地址等内容。

修改httpd.conf配置文件,设置日志记录文件、记录内容、记录格式。

  • 错误日志

            LogLevel notice #日志的级别
            ErrorLog /…/logs/error_log #日志的保存位置(错误日志)
                                            
  • 访问日志

            LogFormat %h %l %u %t \”%r\” %>s %b “%{Accept}i\”%{Referer}i\” \”%{User-Agent}i\””
            combined
            CustomLog /…/logs/access_log combined (访问日志)
                                            

注意

  • ErrorLog指令设置错误日志文件名和位置。错误日志是最重要的日志文件。Apache httpd程序将在这个文件中存放诊断信息和处理请求中出现的错误。若要将错误日志传送到 Syslog,则执行ErrorLog syslog命令。

  • CustomLog指令指定了保存日志文件的具体位置以及日志的格式。访问日志中会记录服务器所处理的所有请求。

  • LogFormat命令用于设置日志格式,建议设置为combined格式。

  • LogLevel命令用于调整记录在错误日志中的信息的详细程度,建议设置为notice。日志的级别,默认是 warn级别notice级别比较详细,但在实际中由于日志会占用大量硬盘空间。

四、禁止访问外部文件

禁止Apache访问Web目录之外的任何文件。

  1. 修改httpd.conf配置文件。

            Order Deny,Allow
            Deny from all
                                            
  2. 设置可访问的目录。

            Order Allow,Deny
            Allow from /web
                                            
    说明

    其中 /web为网站根目录。

  3. 默认配置如下,可根据您的业务需要进行设置。

            Options FollowSymLinks
            AllowOverride None
                                            

五、禁止目录列出

目录列出会导致明显信息泄露或下载,建议禁止Apache列表显示文件。在/etc/httpd/httpd.conf配置文件中删除Options的Indexes设置即可。

  1. 修改httpd.conf配置文件:

            #Options Indexes FollowSymLinks #删掉Indexes
            Options FollowSymLinks
            AllowOverride None
            Order allow,deny
            Allow from all
                                            

    Options Indexes FollowSymLinks中的Indexes去掉,就可以禁止Apache显示该目录结构。Indexes的作用就是当该目录下没有index.html文件时,自动显示目录结构。

  2. 重新启动Apache服务。

六、错误页面重定向

Apache错误页面重定向功能可以防止敏感信息泄露。

  1. 修改httpd.conf配置文件:

            ErrorDocument 400 /custom400.html
            ErrorDocument 401 /custom401.html
            ErrorDocument 403 /custom403.html
            ErrorDocument 404 /custom404.html
            ErrorDocument 405 /custom405.html
            ErrorDocument 500 /custom500.html
                                            
    注意

    Customxxx.html为要设置的错误页面。

  2. 重新启动Apache服务。

七、拒绝服务防范

根据业务需要,合理设置session时间,防止拒绝服务攻击。

  1. 修改httpd.conf配置文件:

            Timeout 10#客户端与服务器端建立连接前的时间间隔
            KeepAlive On
            KeepAliveTimeout 15 #限制每个session的保持时间是15秒。此处为建议值,具体的参数值需要根据现实际情况设定。
                                            
  2. 重新启动Apache服务。

注意

默认值为Timeout 120KeepAlive OffKeepAliveTimeout 15,该项设置涉及性能调整。

八、隐藏Apache的版本号

隐藏Apache的版本号及其它敏感信息。

修改httpd.conf配置文件:

ServerSignature Off ServerTokens Prod
                        

九、关闭TRACE功能

关闭TRACE功能,防止TRACE方法被访问者恶意利用。

在/etc/httpd/conf/httpd.conf配置文件中添加以下设置参数:

TraceEnable Off
                        
注意

该参数适用于Apache 2.0以上版本。

十、禁用 CGI

如果服务器上不需要运行CGI程序,建议禁用CGI。

如果没有CGI程序,可以修改/etc/httpd/conf/httpd.conf配置文件,把cgi-bin目录的配置和模块都进行注释。

#LoadModule cgi_module modules/mod_cgi.so
#ScriptAlias /cgi-bin/ “/var/www/cgi-bin/”
#
#AllowOverride None
# Options None
#Order allow,deny
#Allow from all
#
                        

十一、绑定监听地址

服务器有多个IP地址时,只监听提供服务的IP地址。

  1. 执行以下命令查看是否绑定IP地址。

            cat /etc/httpd/conf/httpd.conf|grep Listen
                                            
  2. 修改/etc/httpd/conf/httpd.conf配置文件。

            Listen x.x.x.x:80
                                            

监听功能默认监听所有地址,如果服务器只有一个IP地址可不修改该项设置,如果有多个IP可根据需要进行设置。

十二、删除缺省安装的无用文件

删除缺省安装的无用文件。

  • 删除缺省HTML文件:

            # rm -rf /usr/local/apache2/htdocs/*
                                            
  • 删除缺省的CGI脚本:

            # rm –rf /usr/local/apache2/cgi-bin/*
                                            
  • 删除Apache说明文件:

            # rm –rf /usr/local/apache2/manual
                                            
  • 删除源代码文件:

            # rm -rf /path/to/httpd-2.2.4* 
                                            
  • 删除CGI:

    可根据实际情况删除,一般情况下/var/www/html /var/www/cgi-bin默认就是空的。

注意

根据安装步骤不同和版本不同,某些目录或文件可能不存在或位置不同。

十三、禁用非法 HTTP 方法

禁用PUT、DELETE等危险的HTTP方法。

修改httpd.conf配置文件,只允许get、post方法。

<Location />  
<LimitExcept GET POST CONNECT OPTIONS> 
  Order Allow,Deny 
  Deny from all 
</LimitExcept> 
</Location> 
                        

您可根据需要进行设置,如果需要用到PUT或Delete等HTTP方法的话,在/etc/httpd/conf/httpd.conf配置文件中相应添加即可。