1.搭建 Apache
Apache HTTP Server(简称 Apache)是 Apache 软件基金会的一个开放源代码的网页服务器软件,可以在大多数电脑操作系统中运行,由于其跨平台和安全性(尽管不断有新的漏洞被发现,但由于其开放源代码的特点,漏洞总能被很快修补。因此总的来说,其安全性还是相当高的。)。被广泛使用,是最流行的 Web 服务器软件之一。它快速、可靠性并且可通过简单的 API 扩充,将 Perl / Python 等解释器编译到服务器中。
在 Linux 中安装 Apache 的方法,可以进行在线安装,通过命令 yum -y install httpd* 来进行安装
安装完成后,根目录在/etc/httpd
Apache 目录结构
| 服务目录 | /etc/httpd |
|---|---|
| 主配置文件 | /etc/httpd/conf/httpd.conf |
| 网站数据目录 | /var/www/html |
| 访问日志 | /var/log/httpd/access_log |
| 错误日志 | /var/log/httpd/error_log |
在 httpd 服务程序主配置文件中最为常见的参数如下
| ServerRoot | 服务目录 |
|---|---|
| ServerAdmin | 管理员邮箱 |
| User | 运行服务的用户 |
| Group | 运行服务的用户组 |
| ServerName | 网站服务器域名 |
| DocumentRoot | 网站数据目录 |
| Listen | 监听的 IP 地址与端口号 |
| DirectoryIndex | 默认的牵引页页面 |
| ErrorLog | 错误日志文件 |
| CustomLog | 访问日志文件 |
| Timeout | 网页超时时间,默认为300秒 |
| Include | 需要加载的其他文件 |
2.Apache 发布工程
Apache 的工程发布有两种方式,第一种方式是将工程放入/var/www/html 中,或放入 $APACHE_HOME\Apache24\htdocs 中。第二种是配置 httpd.conf,将conf/extra/httpd-vhosts.conf 前的 “#” 号去掉,然后在 extra 目录下的 httpd-vhosts.conf 文件中进行配置,示列如下:
我们使用第一种方法发布工程,进入/var/www/html 目录,将工程 copy 到目录下。由于本列中并没有工程可用,所以,在/var/www/html 目录下创建新目录,目录名为:demo。并入 demo 编辑并创建新文件 test.html。内容如下:
完成后通过 systemctl start httpd 来运行 Apache,在宿主机中通过浏览器输入 IP
访问刚才编写的工程页面
3.Apache 安全配置
3.1错误详情页 banner 隐藏
渗透的过程中,收集服务器的信息是至关重要的,这对于他在后期漏洞的利用上有很大的帮助。在访问站点时,访问一个不存在的页面,如果站点没做 404 重定向的话,就会泄露一些敏感信息。详情如下图
修护方法:
- 修改配置文件:/etc/apache2/apache2.conf 或者/etc/httpd/conf/httpd.conf 隐藏中间件信息。修改或者添加以下配置:
ServerTokens Prod
ServerSignature Off
- 修改配置文件:/etc/php5/apache2/php.ini 第 367 行隐藏 PHP 信息,将 expose_php = On 修改为 Off
376 expose_php = Off
保存配置后重启服务,再次访问不存在的页面,此时已经没有 banner 信息了
3.重定向 404 页面
默认的 404 页面是非常不友好的。当一个用户访问到一些不存在的页面或者错误的链接时,如果我们没有制作一个页面去引导用户访问该站点的其他页面时,会损失大量用户。自定义 404 页面会告诉百度、谷歌、bing 等搜索引擎的爬虫,这条记录本站已经删除,请搜索放弃收录,利于 seo 优化
修复方法:
- 在工程根目录新建一个 .htaccess 文件,内容如下
- 在同目录下新建 404.html,文件名与上一步指定的文件名相同,内容如下
不要将 404 错误直接转向到网站首页,这将导致首页不被收录;
/404.html 前面不要带主域名,否则返回的状态码是 302 或 200 状态码;
自定义的 404 页面必须是大于 512B,如果小于这个大小,浏览器就不会执行;
3.3 默认目录
当 Web 服务器配置不当的时候,如果当前目录不存在默认文件(比如 index.html),Apache 会列出当前目录下所有文件,造成敏感信息泄露。如下图所示
修复方法:
- 修改配置文件/etc/apache2/apache2.conf 或者/etc/httpd/conf/httpd.conf
3.4 文件权限问题
现在大部分站点都存在文件上传,比如说头像上传、附件上传等等。如果在代码层对上传的文件限制的不够严格,很容易被上传 Webshell。一旦被上传 Webshell 对服务器造成十分大的威胁
如果我们对存放上传文件的目录限制脚本执行的权限的话,上传的脚本文件就无法执行,在一定程度上能够减轻黑客攻击造成的危害,并且还不影响正常的业务,上传的图片不需要执行权限,也能正常打开
3.5 服务运行权限
查看 Apache 的进程:lsof -i:80
第一行是 Apache 的主程序,是以 root 运行的。因为 Apache 的 Web 开放的端口是 80 或者 443,小于 1024 的端口需要有 root 权限,因此主进程必须是 root。从第二行开始为 Apache 的子进程。用户为 apache,权限较低。如果用户为 apache 用户,此时就算黑客拿到一个 webshell,权限也是比较低的。
但由于安装配置不当,造成此处为高权限用户,需要修改为低权限用户,那么需要进入/erc/httpd/conf中编辑 htttpd.conf,将 user 和 group 修改成更低权限
3.6 Apache 日志
Apache 会生成两个主要的日志文件,一个是 Web 访问日志 access.log,一个是记录服务器运行时出错的日志 error.log
通过配置文件/etc/apache2/apache2.conf 或者/etc/httpd/conf/http.conf 中定义了日志格式
通过/var/log/httpd/error.log 查看日志