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,建议禁用SSIServer 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

Level 

描述 

例子 

emerg 

紧急(系统无法使用)

"Child cannot open lock file. Exiting"

alert 

必须立即采取措施

"getpwuid: couldn't determine user name from uid"

crit 

致命情况

"socket: Failed to get a socket, exiting child"

error 

错误情况

"Premature end of script headers"

warn 

警告情况

"child process 1234 did not exit, sending another SIGHUP"

notice 

一般重要情况

"httpd: caught SIGBUS, attempting to dump core in ..."

info 

普通信息

"Server seems busy, (you may need to increase StartServers, or Min/MaxSpareServers)..."

debug 

调试信息

"Opening config file ..."

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方法,注意查看是否还支持其他方法,如:PUTDELETE等,一般情况下都不应该出现在生产主机上

加固方法

修改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 文件,检查如下内容,是否只允许 getpost方法

<LimitExcept GET POST >   

Deny from all   

</LimitExcept>

加固方法

编辑httpd.conf 文件,只允许getpost 方法

<LimitExcept GET POST >   

Deny from all   

</LimitExcept>

 

session时间设置

操作目的

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

检查方法

cat /etc/httpd/conf/httpd.conf查看TimeoutKeepAliveKeepAliveTimeout的配置

加固方法

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默认目录解读和加固分析的主要内容,如果未能解决你的问题,请参考以下文章

Apache漏洞利用与安全加固实例分析

Apache加固之目录文件限制

centos及apache 安全加固

安全服务之安全基线及加固Apache篇

Apache安全加固

Apache服务安全加固