Apache默认目录解读和加固分析
Posted 网络安全社区悦信安
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Apache默认目录解读和加固分析相关的知识,希望对你有一定的参考价值。
删除无用文件
操作目的 |
删除默认安装时的无用文件 |
检查方法 |
检查Apache目录下是否存在无用文件 |
加固方法 |
删除默认安装的html文件 # cd /usr/local/apache2/htdocs/,有选择性的删除 删除不使用的默认安装的CGI脚本 # rm –rf /usr/local/apache2/cgi-bin/* 删除默认安装的Apache手册文件 # rm –rf /usr/local/apache2/manual |
子进程用户设置
操作目的 |
设置Apache子进程用户 |
检查方法 |
查看Apache配置文件httpd.conf User Apache Group Apache 上面两行,代表Apache子进程的运行用户为Apache |
加固方法 |
Unix系统: 如果没有设置用户和组,则新建用户,并在Apache配置文件中指定 (1) 创建Apache组:groupadd Apache (2) 创建Apache用户并加入Apache组:useradd Apache –g Apache (3) 将下面两行加入Apache配置文件httpd.conf中 User Apache Group Apache Windows系统: (1) 新建一个Apache用户 (2) 设置Apache用户对Apache目录的相关权限 (3) 在服务管理器 (service.msc) 中找到Apache服务,右键选择属性,设置登录身份为Apache用户
|
隐藏版本信息
操作目的 |
隐藏Apache版本信息 |
检查方法 |
客户端:telnet IP 80 输入HEAD / HTTP/1.1,两次回车 服务器返回: HTTP/1.1 400 Bad Request Date: Wed, 13 May 2009 07:07:20 GMT Server: Apache/2.2.3 Connection: close Content-Type: text/html; charset=iso-8859-1 |
加固方法 |
修改Apache配置文件httpd.conf ServerSignature Off #关闭服务器生成页面的页脚中版本信息 ServerTokens Prod #关闭服务器应答头中的版本信息 |
禁止目录遍历
操作目的 |
防止直接访问目录时由于找不到默认主页列出目录下文件 |
检查方法 |
查看Apache配置文件httpd.conf <Directory "/var/www/html"> Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> |
加固方法 |
修改Apache配置文件httpd.conf,在“Indexes”前面添加减号,禁止找不到默认主页列出目录下文件 <Directory "/var/www/html"> Options -Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> |
禁止Apache访问Web目录之外的任何文件
操作目的 |
禁止Apache访问Web目录之外的任何文件。 |
检查方法 |
1、判定条件 无法访问Web目录之外的文件。 2、检测操作 访问服务器上不属于Web目录的一个文件,结果应无法显示。 |
加固方法 |
1、参考配置操作 编辑httpd.conf配置文件,“vi /etc/httpd/conf/httpd.conf” <Directory /> Order Deny,Allow Deny from all </Directory> 2、补充操作说明 设置可访问目录, <Directory /web> Order Allow,Deny Allow from all </Directory> 其中/web为网站根目录。 |
监听地址
操作目的 |
|
检查方法 |
查看Apache配置文件httpd.conf |
加固方法 |
Listen 1.1.1.1:80 |
禁用CGI
操作目的 |
如果服务器上不需要运行CGI程序,建议禁用CGI |
检查方法 |
查看Apache配置文件httpd.conf LoadModule cgi_module modules/mod_cgi.so #加载模块 ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" <Directory "/var/www/cgi-bin"> AllowOverride None Options None Order allow,deny Allow from all </Directory> |
加固方法 |
修改Apache配置文件httpd.conf,把相关配置和模块都注释掉 #LoadModule cgi_module modules/mod_cgi.so #ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" #<Directory "/var/www/cgi-bin"> # AllowOverride None # Options None # Order allow,deny # Allow from all #</Directory> |
禁用SSI
操作目的 |
如果服务器上不需要SSI,建议禁用SSI(Server Side Includes) |
检查方法 |
查看Apache配置文件httpd.conf LoadModule include_module modules/mod_include.so #加载的模块 <Directory "/var/www/html"> Options Indexes FollowSymLinks Includes AllowOverride None Order allow,deny allow from all </Directory> |
加固方法 |
修改Apache配置文件httpd.conf,把相关模块注释掉,在“Include”前面添加减号 #LoadModule include_module modules/mod_include.so <Directory "/var/www/html"> Options Indexes FollowSymLinks -Includes AllowOverride None Order allow,deny allow from all </Directory> |
日志审核
操作目的 |
检查Apache是否记录了错误信息和访问信息 |
|||||||||||||||||||||||||||
检查方法 |
查看Apache配置文件httpd.conf (1)错误日志 ErrorLog logs/error_log #存放诊断信息和处理请求中出现的错误 LogLevel warn #设置错误日志中的信息的详细程度,可以选择下列level:
(2)访问日志 CustomLog logs/access_log common #记录服务器所处理的所有请求 LogFormat "%h %l %u %t \"%r\" %>s %b" common #设置日志格式 |
|||||||||||||||||||||||||||
加固方法 |
修改Apache配置文件httpd.conf,正确设置错误日志和访问日志后,重新启动Apache |
自定义错误信息
操作目的 |
自定义Apache返回的错误信息 |
检查方法 |
查看Apache配置文件httpd.conf,检查是否使用ErrorDocument自定义错误信息 |
加固方法 |
ErrorDocument 500 "The server made a boo boo." ErrorDocument 404 /missing.html ErrorDocument 402 http://www.example.com/subscription_info.html 常见错误代码: 403 禁止访问;404 找不到页面;500是服务器内部错误 |
关闭TRACE
操作目的 |
防止TRACE方法被访问者恶意利用 |
检查方法 |
客户端:telnet IP 80 输入下面两行内容后,两次回车 OPTIONS * HTTP/1.1 HOST:1.1.1.4 服务器返回: HTTP/1.1 200 OK Date: Wed, 13 May 2009 07:09:31 GMT Server: Apache/2.2.3 Allow: GET,HEAD,POST,OPTIONS,TRACE Content-Length: 0 Connection: close Content-Type: text/plain; charset=UTF-8 表示支持TRACE方法,注意查看是否还支持其他方法,如:PUT,DELETE等,一般情况下都不应该出现在生产主机上 |
加固方法 |
修改Apache配置文件httpd.conf,添加“TraceEnable Off” 注:适用于Apache 2.0以上版本 |
关键文件权限
操作目的 |
严格设置配置文件和日志文件的权限,防止未授权访问 |
检查方法 |
使用命令查看配置文件和日志文件的权限 [root@Linux ~]# ls -l /etc/httpd/conf/httpd.conf -rw-r--r-- 1 root root 7571 May 13 17:45 /etc/httpd/conf/httpd.conf [root@Linux ~]# ls -l /var/log/httpd total 16 -rw-r--r-- 1 root root 4164 May 13 17:45 access_log -rw-r--r-- 1 root root 3152 May 13 17:45 error_log -rw-r--r-- 1 root root 0 May 13 16:58 ssl_access_log -rw-r--r-- 1 root root 1896 May 13 17:45 ssl_error_log -rw-r--r-- 1 root root 0 May 13 16:58 ssl_request_log |
加固方法 |
使用命令“chmod 600 /etc/httpd/conf/httpd.conf”设置配置文件为属主可读写,其他用户无权限 使用命令“chmod 644 /var/log/httpd/*.log”设置日志文件为属主可读写,其他用户只读权限 |
禁用非法HTTP方法
操作目的 |
禁用PUT 、DELETE 等危险的HTTP 方法 |
检查方法 |
查看httpd.conf 文件,检查如下内容,是否只允许 get、post方法 <LimitExcept GET POST > Deny from all </LimitExcept> |
加固方法 |
编辑httpd.conf 文件,只允许get、post 方法 <LimitExcept GET POST > Deny from all </LimitExcept> |
session时间设置
操作目的 |
根据业务需要,合理设置session 时间,防止拒绝服务攻击 |
检查方法 |
cat /etc/httpd/conf/httpd.conf查看Timeout、KeepAlive和KeepAliveTimeout的配置 |
加固方法 |
1) 编辑httpd.conf配置文件, Timeout 10 #客户端与服务器端建立连接前的时间间隔 KeepAlive On KeepAliveTimeout 15 #限制每个 session 的保持时间是 15 秒 注:此处为一建议值,具体的设定需要根据现实情况。 (2)重新启动Apache服务 |
连接数设置
操作目的 |
根据机器性能和业务需求,设置最大最小连接数 |
检查方法 |
使用httpd -l 检查Apache的工作模式,如列出prefork.c ,则检查httpd.conf中的<IfModule prefork.c> 模块设置是否满足业务需求 |
加固方法 |
使用httpd -l 检查Apache的工作模式,如列出prefork.c ,则进行下列操作: 修改httpd.conf文件找到 <IfModule prefork.c> StartServers 8 MinSpareServers 5 MaxSpareServers 20 MaxClients 150 MaxRequestsPerChild 1000 </IfModule> 修改 MaxClients 150 为需要的连接数,如1500 ServerLimit 1500 //连接数大于 256 需设置此项 MaxClients 1500
然后保存退出。 重新启动http 服务: /etc/rc.d/init.d/httpd restart |
上传目录设置
操作目的 |
禁止动态脚本在上传目录的运行权限,防止攻击者绕过过滤系统上传webshell |
检查方法 |
找到存放上传文件的目录 |
加固方法 |
修改Apache配置文件httpd.conf,添加以下行,以php为例: <Directory "/var/www/html/upload"> <FilesMatch "\.php$"> Order allow,deny Deny from all </FilesMatch> </Directory> |
保护敏感目录
操作目的 |
对敏感目录设置密码。例如:admin目录 |
检查方法 |
找到要保护的目录 |
加固方法 |
(1)修改Apache配置文件httpd.conf,添加以下行,以admin目录为例 <Directory "/var/www/html/admin"> AuthName "Admin Access Page" AuthType "Basic" AuthUserFile "/etc/httpd/conf/.htpasswd Require valid-user </Directory> (2)新建密码文件,并添加一个用户 [root@Linux ~]# htpasswd -c /etc/httpd/conf/.htpasswd user1 New password: Re-type new password: Adding password for user user1 再添加一个用户 [root@Linux ~]# htpasswd -m /etc/httpd/conf/.htpasswd user2 New password: Re-type new password: Adding password for user user2 添加完成后查看密码文件内容 [root@Linux ~]# cat /etc/httpd/conf/.htpasswd user1:dy4U7/uW5JVrE user2:$apr1$76k4P...$De4fvJ4Qeyded6J6NOElE/ |
限制IP访问
操作目的 |
对网站或敏感目录的访问IP进行限制 |
检查方法 |
|
加固方法 |
查看Apache配置文件httpd.conf <Directory "/var/www/html"> Options Indexes FollowSymLinks AllowOverride None Order allow,deny allow from all </Directory> |
备注 |
例如:我只允许1.1.1.0网段访问 <Directory "/var/www/html"> Options Indexes FollowSymLinks AllowOverride None Order allow,deny allow from 1.1.1 </Directory> |
补充 补丁安装
检查目的 |
安装新版本 |
检查方法 |
本地获取Apache版本信息,在漏洞库中查询此版本存在的漏洞 [root@Linux ~]# httpd -v Server version: Apache/2.2.3 Server built: Jan 21 2009 22:01:41 |
加固方法 |
在http://httpd.apache.org/ 下载最新版Apache源码包,编译安装 |
以上是关于Apache默认目录解读和加固分析的主要内容,如果未能解决你的问题,请参考以下文章