前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Apache默认目录解读和加固分析

Apache默认目录解读和加固分析

作者头像
用户1467662
发布2018-03-30 12:08:52
2.2K0
发布2018-03-30 12:08:52
举报
文章被收录于专栏:农夫安全农夫安全

删除无用文件

操作目的

删除默认安装时的无用文件

检查方法

检查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源码包,编译安装

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-12-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 网络安全社区悦信安 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 删除无用文件
  • 子进程用户设置
  • 隐藏版本信息
  • 禁止目录遍历
  • 禁止Apache访问Web目录之外的任何文件
  • 监听地址
  • 禁用CGI
  • 禁用SSI
  • 日志审核
  • 自定义错误信息
  • 关闭TRACE
  • 关键文件权限
  • 禁用非法HTTP方法
  • session时间设置
  • 连接数设置
  • 上传目录设置
  • 保护敏感目录
  • 限制IP访问
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档