Apache服务安全加固

  • A+
所属分类:云安全
高性能企业级服务器首台5折

一、账号设置

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

  1. 根据需要,为 Apache 服务创建用户及用户组。如果没有设置用户和组,则新建用户,并在 Apache 配置文件中进行指定。
    1. 创建 Apache 用户组。
      1
      groupadd apache
    2. 创建 Apache 用户并加入 Apache 用户组。
      1
      useradd apache –g apache
    3. 将下面两行设置参数加入 Apache 配置文件 httpd.conf 中:
      1. 1
         <span class="typ">User</span><span class="pln"> apache</span>
      2. 1
         <span class="typ">Group</span><span class="pln"> apache</span>
  2. 检查 httpd.conf 配置文件中是否允许使用非专用账户(如 root 用户)运行 Apache 服务。默认设置一般即符合要求。Linux 系统中默认使用 apache 或者 nobody 用户,Unix 系统默认使用 daemon 用户。

二、授权设置

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

  1. Apache 的 主目录对应于 Apache Server配置文件 httpd.conf 中的 Server Root 控制项,应设置为:
    1. 1
       <span class="typ">Server</span> <span class="typ">Root</span> <span class="pun">/</span><span class="pln">usr</span><span class="pun">/</span><span class="kwd"><span class="hljs-built_in">local</span></span><span class="pun">/</span><span class="pln">apache</span>
    • 判定条件: 非超级用户不能修改该目录中的内容。
    • 检测操作: 尝试进行修改,看是否能修改该目录中的内容。该目录一般设置为 /etc/httpd 目录,默认情况下属主为 root 用户,其它用户不能修改该目录中的文件。默认设置一般即符合要求。
  2. 严格设置配置文件和日志文件的权限,防止未授权访问。
    • 执行
      1
      chmod 600 /etc/httpd/conf/httpd.conf

      命令设置配置文件为属主可读写,其他用户无读写权限。

    • 执行
      1
      chmod 644 /var/log/httpd/*.log

      命令设置日志文件为属主可读写,其他用户拥有只读权限。注意

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

三、日志设置

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

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

  • 错误日志
    1. 1
        <span class="typ">LogLevel</span><span class="pln"> notice </span><span class="com"><span class="hljs-comment">#日志的级别</span></span>
    2. 1
        <span class="typ">ErrorLog</span> <span class="pun">/…/</span><span class="pln">logs</span><span class="pun">/</span><span class="pln">error_log </span><span class="com"><span class="hljs-comment">#日志的保存位置(错误日志)</span></span>
  • 访问日志
    1. 1
        <span class="typ">LogFormat</span> <span class="pun">%</span><span class="pln">h </span><span class="pun">%</span><span class="pln">l </span><span class="pun">%</span><span class="pln">u </span><span class="pun">%</span><span class="pln">t \”</span><span class="pun">%</span><span class="pln">r\” </span><span class="pun">%&gt;</span><span class="pln">s </span><span class="pun">%</span><span class="pln">b </span><span class="pun">“%{</span><span class="typ">Accept</span><span class="pun">}</span><span class="pln">i\”</span><span class="pun">%{</span><span class="typ">Referer</span><span class="pun">}</span><span class="pln">i\” \”</span><span class="pun">%{</span><span class="typ">User</span><span class="pun">-</span><span class="typ">Agent</span><span class="pun">}</span><span class="pln">i\”</span><span class="pun">”</span>
    2. 1
      <span class="pln"><span class="hljs-attribute">  combined</span></span>
    3. 1
        <span class="typ">CustomLog</span> <span class="pun"><span class="hljs-regexp">/…/</span></span><span class="pln">logs</span><span class="pun"><span class="hljs-regexp">/</span></span><span class="pln"><span class="hljs-regexp">access_log combined </span></span><span class="pun"><span class="hljs-regexp">(访问日志)</span></span>

注意

  • 1
    ErrorLog

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

    1
    ErrorLog syslog

    命令。

  • 1
    CustomLog

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

  • 1
    LogFormat

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

  • 1
    LogLevel

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

四、禁止访问外部文件

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

  1. 修改 httpd.conf 配置文件。
    1. 1
       <span class="typ">Order</span> <span class="typ">Deny</span><span class="pun">,</span><span class="typ">Allow</span>
    2. 1
       <span class="typ">Deny</span><span class="pln"> from all</span>
  2. 设置可访问的目录。
    1. 1
       <span class="typ">Order</span> <span class="typ">Allow</span><span class="pun">,</span><span class="typ">Deny</span>
    2. 1
       <span class="typ">Allow</span><span class="pln"> from </span><span class="pun">/</span><span class="pln">web</span>

    说明: 其中 /web 为网站根目录

  3. 默认配置如下,可根据您的业务需要进行设置。
    1. 1
       <span class="typ">Options</span> <span class="typ">FollowSymLinks</span>
    2. 1
       <span class="typ">AllowOverride</span> <span class="typ">None</span>

五、禁止目录列出

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

  1. 修改 httpd.conf 配置文件:
    1. 1
       <span class="com"><span class="hljs-comment">#Options Indexes FollowSymLinks #删掉Indexes</span></span>
    2. 1
       <span class="typ">Options</span> <span class="typ">FollowSymLinks</span>
    3. 1
       <span class="typ">AllowOverride</span> <span class="typ">None</span>
    4. 1
       <span class="typ">Order</span><span class="pln"> allow</span><span class="pun">,</span><span class="pln">deny</span>
    5. 1
       <span class="typ">Allow</span><span class="pln"> from all</span>

    1
    Options Indexes FollowSymLinks

    中的

    1
    Indexes

    去掉,就可以禁止 Apache 显示该目录结构。

    1
    Indexes

    的作用就是当该目录下没有 index.html 文件时,自动显示目录结构。

  2. 重新启动 Apache 服务。

六、错误页面重定向

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

  1. 修改 httpd.conf 配置文件:
    1. 1
       <span class="typ">ErrorDocument</span> <span class="lit">400</span> <span class="pun">/</span><span class="pln">custom400</span><span class="pun">.</span><span class="pln">html</span>
    2. 1
       <span class="typ">ErrorDocument</span> <span class="lit">401</span> <span class="pun">/</span><span class="pln">custom401</span><span class="pun">.</span><span class="pln">html</span>
    3. 1
       <span class="typ">ErrorDocument</span> <span class="lit">403</span> <span class="pun">/</span><span class="pln">custom403</span><span class="pun">.</span><span class="pln">html</span>
    4. 1
       <span class="typ">ErrorDocument</span> <span class="lit">404</span> <span class="pun">/</span><span class="pln">custom404</span><span class="pun">.</span><span class="pln">html</span>
    5. 1
       <span class="typ">ErrorDocument</span> <span class="lit">405</span> <span class="pun">/</span><span class="pln">custom405</span><span class="pun">.</span><span class="pln">html</span>
    6. 1
       <span class="typ">ErrorDocument</span> <span class="lit">500</span> <span class="pun">/</span><span class="pln">custom500</span><span class="pun">.</span><span class="pln">html</span>

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

  2. 重新启动 Apache 服务。

注意: 此项配置需要应用系统设有错误页面,或者不在 httpd 中设置,而完全由业务逻辑实现。

七、拒绝服务防范

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

  1. 修改 httpd.conf 配置文件:
    1. 1
       <span class="typ">Timeout</span> <span class="lit">10</span> <span class="com"><span class="hljs-comment">#客户端与服务器端建立连接前的时间间隔</span></span>
    2. 1
       <span class="typ">KeepAlive</span> <span class="typ">On</span>
    3. 1
       <span class="typ">KeepAliveTimeout</span> <span class="lit">15</span> <span class="com"><span class="hljs-comment">#限制每个 session 的保持时间是 15 秒 注:此处为一建议值,具体的设定需要根据现实情况。</span></span>
  2. 重新启动 Apache 服务。

注意: 默认值为

1
Timeout 120

1
KeepAlive Off

1
KeepAliveTimeout 15

,该项设置涉及性能调整。

八、隐藏 Apache 的版本号

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

修改 httpd.conf 配置文件:

  1. 1
    <span class="typ">ServerSignature</span> <span class="typ">Off</span> <span class="typ">ServerTokens</span> <span class="typ">Prod</span>

九、关闭 TRACE功能

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

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

  1. 1
    <span class="typ">TraceEnable</span> <span class="typ">Off</span>

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

十、禁用 CGI

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

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

  1. 1
    <span class="com"><span class="hljs-comment">#LoadModule cgi_module modules/mod_cgi.so</span></span>
  2. 1
    <span class="com"><span class="hljs-comment">#ScriptAlias /cgi-bin/ “/var/www/cgi-bin/”</span></span>
  3. 1
    <span class="com"><span class="hljs-comment">#</span></span>
  4. 1
    <span class="com"><span class="hljs-comment">#AllowOverride None</span></span>
  5. 1
    <span class="com"><span class="hljs-comment"># Options None</span></span>
  6. 1
    <span class="com"><span class="hljs-comment">#Order allow,deny</span></span>
  7. 1
    <span class="com"><span class="hljs-comment">#Allow from all</span></span>
  8. 1
    <span class="com"><span class="hljs-comment">#</span></span>

十一、绑定监听地址

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

  1. 执行以下命令查看是否绑定 IP 地址。
    1. 1
      <span class="pln"> cat </span><span class="pun">/</span><span class="pln">etc</span><span class="pun">/</span><span class="pln">httpd</span><span class="pun">/</span><span class="pln">conf</span><span class="pun">/</span><span class="pln">httpd</span><span class="pun">.</span><span class="pln">conf</span><span class="pun">|</span><span class="pln">grep </span><span class="typ">Listen</span>
  2. 修改 /etc/httpd/conf/httpd.conf 配置文件。
    1. 1
       <span class="typ">Listen</span><span class="pln"> x</span><span class="pun">.</span><span class="pln">x</span><span class="pun">.</span><span class="pln">x</span><span class="pun">.</span><span class="pln">x</span><span class="pun">:</span><span class="lit">80</span>

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

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

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

  • 删除缺省 HTML 文件:
    1. 1
        <span class="com"><span class="hljs-comment"># rm -rf /usr/local/apache2/htdocs/*</span></span>
  • 删除缺省的 CGI 脚本:
    1. 1
        <span class="com"><span class="hljs-comment"># rm –rf /usr/local/apache2/cgi-bin/*</span></span>
  • 删除 Apache 说明文件:
    1. 1
        <span class="com"><span class="hljs-comment"># rm –rf /usr/local/apache2/manual</span></span>
  • 删除源代码文件:
    1. 1
        <span class="com"><span class="hljs-comment"># rm -rf /path/to/httpd-2.2.4*</span></span>
  • 删除 CGI。可根据实际情况删除,一般情况下 /var/www/html /var/www/cgi-bin 默认就是空的。

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

十三、禁用非法 HTTP 方法

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

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

  1. 1
    <span class="pun">&lt;</span><span class="typ">Location</span> <span class="pun">/&gt;</span>
  2. 1
    <span class="pun">&lt;</span><span class="typ">LimitExcept</span><span class="pln"> GET POST CONNECT OPTIONS</span><span class="pun">&gt;</span>
  3. 1
      <span class="typ">Order</span> <span class="typ">Allow</span><span class="pun">,</span><span class="typ">Deny</span>
  4. 1
      <span class="typ">Deny</span><span class="pln"> from all </span>
  5. 1
    <span class="pun">&lt;/</span><span class="typ">LimitExcept</span><span class="pun">&gt;</span>
  6. 1
    <span class="pun">&lt;/</span><span class="typ">Location</span><span class="pun">&gt;</span>

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

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: