功能
安装加固我们的Apache之前, 我们必须明确:到底我们需要Apache的哪些功能?
Apache各种各样的用途使我们很难做一个通用加固方案,作为一个 例子,本文基
于Apache的以下功能来讨论Apache的安全加固:
安全要求
和每个计算机项目一样,在项目完成之前都必须实现的安全要求,我们的Web服务器也有如的安全要求:
操作系统的安装
在安装Apache之前必须选择一个可以之上运行的操作系统, 由于Apache几乎可以在任何系统上编译、安装 ,所以在这个问题上我们有非常大的选择余地, 本文接下来演示如何在 FreeBSD(4.7上)加固Apache, 当然这些演示同样适用于大多数的UNIX/Linux系统,本是同根生嘛。只是操作系统的问题上由于安全、性能等方面的限制不推荐MS Windows .
Web服务器安全加固的一步是操作系统的加固,这方面的文档,在网络上到处都有,就不做多余的讨论,各位大可可以照猫画虎来加固它。
在操作系统安装和加固之后,我们需要添加一个新的普通用户和组给Apache服务器使用,
以 FreeBSD为例:
groupadd apache
useradd apache -c "Apache Server" -d /dev/null -g apache -s /sbin/nologin
默认情况下, Apache进程是以nobody用户权限(当然Apache主进程出外,它要监听80端口,须root权限下执行) 和nogroup组来执行的。 这就有可能出现安全问题了,因为这样的话,一旦Apache出现问题,入侵者就有访问所有运行于nobody用户和nogroup组之下的进程,进一步危害服务器安全,所以最优的办法就是让Apache运行于独立的UID/GID之下。
准备软件
下一步就是下载最新的Apache Web server ,由于许多选项只能在编译时打开或者关闭,所以当仁不让的是下载源代码而非二进制文件。
在下载解压之后。我们必须决定需要启用Apache的哪些模块? 关于Apache 1.3.X的模块说明参见: http://httpd.apache.org/docs/mod/ .
Apache的模块选择
Apache的模块选择是加固Apache的关键步骤之一。 我们所遵循的规则无非是老生常谈的:越少越好. 为了实现我们的功能和安全要求,以下模块必须启用:
| httpd_core | Apache的核心模块,在Apache的每个拷贝中都必须有 |
| mod_access | 提供基于客户端主机名、IP或者其他客户端特征的访问控制。 由于本 模块对需要使用'order'、'allow'、'deny'等指令来说是必须的,所有启用 |
| mod_auth | 提供用户认证功能 (HTTP Basic Authentication) |
| mod_dir | 提供查找并发送"index.html", "default.htm",这些index文件功能 |
| mod_log_config | 实现Web服务器的日子功能 |
| mod_mime | 用来设置HTML文档的字符集、内容编码、处理句柄 和MIME 类型等功能 |
除此之外所有的Apache模块都予以禁用。因为我们不需要它们。禁用那些模块后,进一步避免因为那些模块出现问题而导致服务器出现危险。
另外单独注一笔的是另外两个Apache的模块: mod_autoindex和mod_info . 前者给目录提供自动索引,默认情况下是启用的,这导致没有index文件的服务器目录(比如http://server_name/icons/)内容很容易就被泄漏,而后者:mod_info , 由于它的作用就是报告apache的配置,也不能启用。
接下来的问题就是我们怎样编译这些启用的模块?一般地是选择动态模块,而此处我们选择静态编译,因为一旦出现新的漏洞,我们最好是重新编译整个Web服务器而不是仅仅编译那个出现问题的模块,这样的话,我们又有一个模块无需编译进Apache了:mod_so 。
编译Apache
好了,使用如下命令开始编译:
./configure --prefix=/usr/local/apache --disable-module=all --server- uid=apache --server-gid=apache --enable-module=access --enable- module=log_config --enable-module=dir --enable-module=mime --enable-module=auth
make
su
umask 022
make install
chown -R root:sys /usr/local/apache
接下来就是实现Apache服务器对文件系统的受限访问了。