一、账号设置

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

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

    1. 创建 Apache 用户组。

      groupadd apache

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

      useradd apache –g apache

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

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

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

二、授权设置

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

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

     
     
    1. 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 配置文件,设置日志记录文件、记录内容、记录格式。

  • 错误日志:

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

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

注意:

  • ErrorLog指令设置错误日志文件名和位置。错误日志是最重要的日志文件。Apache httpd 程序将在这个文件中存放诊断信息和处理请求中出现的错误。若要将错误日志传送到 Syslog,则执行ErrorLog syslog命令。
  • CustomLog指令指定了保存日志文件的具体位置以及日志的格式。访问日志中会记录服务器所处理的所有请求。
  • LogFormat命令用于设置日志格式,建议设置为 combined 格式。
  • LogLevel命令用于调整记录在错误日志中的信息的详细程度,建议设置为 notice。日志的级别,默认是 warn 级别,notice 级别比较详细,但在实际中由于日志会占用大量硬盘空间。

四、禁止访问外部文件

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

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

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

     
     
    1. Order Allow,Deny
    2. Allow from /web

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

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

     
     
    1. Options FollowSymLinks
    2. AllowOverride None

五、禁止目录列出

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

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

     
     
    1. #Options Indexes FollowSymLinks #删掉Indexes
    2. Options FollowSymLinks
    3. AllowOverride None
    4. Order allow,deny
    5. Allow from all

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

  2. 重新启动 Apache 服务。

六、错误页面重定向

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

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

     
     
    1. ErrorDocument 400 /custom400.html
    2. ErrorDocument 401 /custom401.html
    3. ErrorDocument 403 /custom403.html
    4. ErrorDocument 404 /custom404.html
    5. ErrorDocument 405 /custom405.html
    6. ErrorDocument 500 /custom500.html

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

  2. 重新启动 Apache 服务。

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

七、拒绝服务防范

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

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

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

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

八、隐藏 Apache 的版本号

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

修改 httpd.conf 配置文件:

 
 
  1. ServerSignature Off ServerTokens Prod

九、关闭 TRACE功能

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

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

 
 
  1. TraceEnable Off

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

十、禁用 CGI

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

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

 
 
  1. #LoadModule cgi_module modules/mod_cgi.so
  2. #ScriptAlias /cgi-bin/ “/var/www/cgi-bin/”
  3. #
  4. #AllowOverride None
  5. # Options None
  6. #Order allow,deny
  7. #Allow from all
  8. #

十一、绑定监听地址

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

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

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

     
     
    1. Listen x.x.x.x:80

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

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

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

  • 删除缺省 HTML 文件:

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

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

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

     
     
    1. # rm -rf /path/to/httpd-2.2.4*
  • 删除 CGI。

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

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

十三、禁用非法 HTTP 方法

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

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

 
 
  1. <Location />
  2. <LimitExcept GET POST CONNECT OPTIONS>
  3. Order Allow,Deny
  4. Deny from all
  5. </LimitExcept>
  6. </Location>

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

Apache服务安全加固的更多相关文章

  1. Apache服务停止:信号灯超时时间已到,指定的网络名不再可用

    环境说明:Apache2.4.10,Windows Server 2008 R2 问题说明: apache服务用于下载文件,但是在运行一段时间后,突然挂了. 其错误提示如下所示: [error] (7 ...

  2. Mac下配置Apache服务

    这篇文章主要是针对Mac用户,第一次搭建本地开发环境的同学,已经搭建过的同学可以忽略. Mac自带的Apache还是XAMPP? That is a question. 其实自带的apache也够用了 ...

  3. ubuntu关于apache服务命令

    一.Start Apache 2 Server /启动apache服务 # /etc/init.d/apache2 startor$ sudo /etc/init.d/apache2 start 二. ...

  4. WampServer Apache 服务无法启动解决办法

    问题:WampServer 安装后mysql服务可以启动,但Apache服务启动不了(前提是已经安装Apache Server) 解决办法: 1.端口冲突,改Apache里httpd.conf中的端口 ...

  5. Android开发--Apache服务器安装,解决Apache服务无法启动的问题

    昨天学习Android XML解析的时候,想在自己的电脑上搭建一个最简单的Web服务器来存放一段XML文本,然后在Android程序中解析,查找了一些资料后,看到Apache服务器比较容易上手,使用范 ...

  6. 第10章 使用Apache服务部署静态网站

    章节简述: 本章节中通过对比目前热门的网站服务程序来说明Apache服务程序的优势,并新增主机空间选购技巧小节. 了解SELinux服务的3种工作模式,小心谨慎的使用semanage命令和setseb ...

  7. RHEL7-使用Apache服务部署静态网站

    1. 安装Apache服务程序 1.1 在虚拟机中选中光盘镜像,并设置连接 1.2 将光盘设备挂载到/media/cdrom目录 [root@localhost ~]# mkdir -p /media ...

  8. 《Apache服务之php/perl/cgi语言的支持》RHEL6——服务的优先级

    安装php软件包: 安装文本浏览器 安装apache的帮助文档: 测试下是否ok 启动Apache服务关闭火墙: 编辑一个php测试页测试下: perl语言包默认系统已经安装了,直接测试下: Apac ...

  9. 《Apache服务用户身份验证管理》RHEL6.3

    1.安装apache软件包 Yum install httpd 2.启动apache服务 /etc/init.d/httpd restart 3.创建一个目录,内编辑一个index.html文件 4. ...

随机推荐

  1. PL-SLAM

    双目 1.PL-SLAM: a Stereo SLAM System through the Combination of Points and Line Segments ubuntu14.04配置 ...

  2. centos7安装Apache

    1.下载安装包wget http://mirrors.hust.edu.cn/apache/httpd/httpd-2.4.37.tar.gz 2.解压tar zxvf httpd-2.4.37.ta ...

  3. Linux下的几种IPC方式及其C语言实现

    写在前面:本博客为本人原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文! 本博客全网唯一合法URL:ht ...

  4. CS231n: Convolutional Neural Networks for Visual Recognition

    https://zhuanlan.zhihu.com/p/28522637 https://zhuanlan.zhihu.com/p/21930884 mark

  5. LeetCode 942 DI String Match 解题报告

    题目要求 Given a string S that only contains "I" (increase) or "D" (decrease), let N ...

  6. 使用U盘为虚拟机安装系统

    前提:使用虚拟机安装WIN8系统时,由于WIN8镜像文件大于4G无法使用虚拟安装,所以使用U盘安装. 1.装有U盘启动的WINPe系统 (1)下载 老毛桃U盘启动盘制作工具 (2)U盘清空 2.虚拟机 ...

  7. scala-数组/列表

    import scala.collection.mutable.ArrayBuffer var ary=Array(1,2,3) println(ary.mkString) println(ary(1 ...

  8. spring根据name或者id获取实例

    @Resource(name="beanname") private ClassType scheduler; 其中ClassType需要跟实例的类型对应上.

  9. java 线程 (二) 线程池

    package cn.sasa.demo2; import java.util.concurrent.ExecutorService; import java.util.concurrent.Exec ...

  10. Orchard Core 增加了一个API模块,要怎么调用

    如下,我在Orchard Core框架中添加了一个API的模块,并且定义了对应的权限才可以调用,那么我们现在考虑的就是要怎么去调用它. 首先,我们用Fiddler查看下我们正常的登录的http报文,直 ...