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.confUser ApacheGroup Apache上面两行,代表Apache子进程的运行用户为Apache

加固方法

Unix系统:如果没有设置用户和组,则新建用户,并在Apache配置文件中指定(1) 创建Apache组:groupadd Apache(2) 创建Apache用户并加入Apache组:useradd Apache –g Apache(3) 将下面两行加入Apache配置文件httpd.conf中User ApacheGroup ApacheWindows系统:(1) 新建一个Apache用户(2) 设置Apache用户对Apache目录的相关权限(3) 在服务管理器 (service.msc) 中找到Apache服务,右键选择属性,设置登录身份为Apache用户

隐藏版本信息

操作目的

隐藏Apache版本信息

检查方法

客户端:telnet IP 80输入HEAD / HTTP/1.1,两次回车服务器返回:HTTP/1.1 400 Bad RequestDate: Wed, 13 May 2009 07:07:20 GMTServer: Apache/2.2.3Connection: closeContent-Type: text/html; charset=iso-8859-1

加固方法

修改Apache配置文件httpd.confServerSignature 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为网站根目录。

监听地址

操作目的

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

检查方法

查看Apache配置文件httpd.conf

加固方法

修改Apache配置文件httpd.conf,设置只监听1.1.1.1地址的80端口Listen 1.1.1.1:80

禁用CGI

操作目的

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

检查方法

查看Apache配置文件httpd.confLoadModule 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.confLoadModule 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 #设置日志格式

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 ..."

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 ..."

加固方法

修改Apache配置文件httpd.conf,正确设置错误日志和访问日志后,重新启动Apache

自定义错误信息

操作目的

自定义Apache返回的错误信息

检查方法

查看Apache配置文件httpd.conf,检查是否使用ErrorDocument自定义错误信息

加固方法

修改Apache配置文件httpd.conf,自定义错误信息,可以设置返回指定字符串,文件或重定向地址,如下:ErrorDocument 500 "The server made a boo boo."ErrorDocument 404 /missing.htmlErrorDocument 402 http://www.example.com/subscription_info.html常见错误代码:403 禁止访问;404 找不到页面;500是服务器内部错误

关闭TRACE

操作目的

防止TRACE方法被访问者恶意利用

检查方法

客户端:telnet IP 80输入下面两行内容后,两次回车OPTIONS * HTTP/1.1HOST:1.1.1.4服务器返回:HTTP/1.1 200 OKDate: Wed, 13 May 2009 07:09:31 GMTServer: Apache/2.2.3 Allow: GET,HEAD,POST,OPTIONS,TRACEContent-Length: 0Connection: closeContent-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/httpdtotal 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,denyDeny 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 user1New password: Re-type new password: Adding password for user user1再添加一个用户[root@Linux ~]# htpasswd -m /etc/httpd/conf/.htpasswd user2New password: Re-type new password: Adding password for user user2添加完成后查看密码文件内容[root@Linux ~]# cat /etc/httpd/conf/.htpasswduser1:dy4U7/uW5JVrEuser2:$apr1$76k4P...$De4fvJ4Qeyded6J6NOElE/

限制IP访问

操作目的

对网站或敏感目录的访问IP进行限制

检查方法

未设置此参数时,任意IP地址都可以访问网站或敏感目录

加固方法

查看Apache配置文件httpd.conf<Directory "/var/www/html"> Options Indexes FollowSymLinks AllowOverride None Order allow,deny allow from all</Directory>Order定义了allow和deny的生效顺序,deny排在后面代表先处理下面allow from定义的允许访问的地址,其余地址均deny

备注

例如:我只允许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 -vServer version: Apache/2.2.3Server built: Jan 21 2009 22:01:41

加固方法

在http://httpd.apache.org/ 下载最新版Apache源码包,编译安装

本文分享自微信公众号 - 网络安全社区悦信安(yuexin_an)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-12-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏C/C++基础

Linux基础知识点

文件(包括目录)权限分为三类别,从左至右依次是:文件所属主的权限、文件所属所在用户组的权限和其他用户的权限。

33620
来自专栏芋道源码1024

分布式事务 TCC-Transaction 源码分析 —— 事务恢复

1. 概述 本文分享 TCC 恢复。主要涉及如下二个 package 路径下的类: org.mengyun.tcctransaction.recover Rec...

43730
来自专栏散尽浮华

Centos7下ELK+Redis日志分析平台的集群环境部署记录

之前的文档介绍了ELK架构的基础知识(推荐参考下http://blog.oldboyedu.com/elk/),日志集中分析系统的实施方案: - ELK+Red...

38140
来自专栏左瞅瞅,右瞅瞅

Linux LVM简明教程

逻辑卷管理LVM是一个多才多艺的硬盘系统工具。无论在Linux或者其他类似的系统,都是非常的好用。传统分区使用固定大小分区,重新调整大小十分麻烦。但是,LVM可...

48510
来自专栏码生

react native 增量升级 热更新 思路

28030
来自专栏电光石火

springMVC的url重写

 1.利用maven下载相关jar文件,pom文件配置如下:

233100
来自专栏bboysoul

在树莓派上搭建使用gitlab

gitlab是一个代码托管平台,因为我的树莓派系统是安装在128G的u盘上的,用来放电影太小,但是空着就是空着了,所以还不如再搭建一个gitlab服务来存放自己...

36220
来自专栏简书专栏

分布式爬虫scrapy+redis入门

利用分布式爬虫scrapy+redis爬取伯乐在线网站,网站网址:http://blog.jobbole.com/all-posts/ 后文中详情写了整个工程...

58510
来自专栏AndroidTv

记录 FTPClient 超时处理的相关问题问题源码跟进结论常见异常

apache 有个开源库:commons-net,这个开源库中包括了各种基础的网络工具类,我使用了这个开源库中的 FTP 工具。

39020
来自专栏PhpZendo

深度挖掘 Laravel 生命周期

这篇文章我们来聊聊 「Laravel 生命周期」 这个主题。虽然网络上已经有很多关于这个主题的探讨,但这个主题依然值得我们去研究和学习。

17820

扫码关注云+社区

领取腾讯云代金券