linux下编译安装的Apache安全优化方案

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux下编译安装的Apache安全优化方案相关的知识,希望对你有一定的参考价值。

上节我们学习了Linux的系统优化解决方案,我个人总结为18项,当然还有别的,例如系统内核裁剪这些我没讲到,为什么呢?大家不用太关心了,要记得我们学习的目的是能够胜任工作即可。我们对一个知识点不要讲的太深,避免钻进死胡同了,那就不好啦。

今天我们讲解下lamp架构安全优化中的Apache服务的安全优化。在讲这节内容之前我说下,静态web请求的流程:

当客户端访问一个静态网站的时候,网站上的Apache服务就会给他发送html文档给客户端浏览器,客户端浏览器会进行解析,然后就是我们看到的内容了。

Web服务Apache的安全优化,首先我们要了解其原理,然后才能入手怎么安全优化。这里我简单说下他的原理:技术分享

Apache HTTP服务器是一个模块化的软件,他采用的是采用的MPMMulti -Processing Modules,多道处理模块)

MPMApache的核心,它的作用是管理网络连接、调度请求。技术分享

Apache2.0MPM分为3种(perforkworkerevent)。

perfork它采用的是进程管理方式,所以它可以提供更可靠的性能和更好的兼容性;

workerApache2.0中新增加的方式,它采用了线程控制方法,可以比perfork更节约系统开销、处理更多的数据量,但同时兼容性并不是很好,很多旧的程序无法工作在worker下;

event仍处于试验阶段,它为每个任务分配不同的进程池,目前不应该采用。


通过命令 /application/apache/bin/apachectl -l可以获取目前Apache采用的是哪种MPM注意这里我是采用编译安装的

本文仅针对perfork方式进行讨论

技术分享


现在我们开始修改我们的配置文件了。我们先回顾下
Apache的文件有哪些?


bin目录用于存放Apache的一些可执行程序

cgi-bin目录用于存放cgi程序的相关程序

conf目录存放Apache的主配置文件及其他扩展文件

error目录用于存放一些错误信息

lib目录用于存放Apache的库文件 

logs目录用于存放Apache的程序日志包括访问日志和错误日志

man目录用于存放 Apache的帮助文档

modules目录用于存放各种模块文件

htdocs目录用于存放网页文档

从上们知道apache采用的是perfork模式。默认Apache的配置文件里没有开启调节进程参数的功能,我们要现在主配置文件里打开此项如下:

技术分享修改380行,去掉前面的#

技术分享

修改为如下表示开启prefork.c进程管理


技术分享

怎么改呢?我们知道那个目录,然后打开就可以看到相应的内容

技术分享技术分享

StartServers 5 #启动apache时启动的httpd进程个数。

MinSpareServers 5#服务器保持的最小空闲进程数。

MaxSpareServers 10#服务器保持的最大空闲进程数。

MaxClients 150 #最大并发连接数。

MaxRequestsPerChild1000 #每个子进程被请求服务多少次后被kill掉。0表示不限制,推荐设置为1000


在该工作模式下,服务器启动后起动5httpd进程(加父进程共6个,通过ps -ax|grep httpd命令可以看到)。当有用户连接时,apache会使用一个空闲进程为该连接服务,同时父进程会fork一个子进程。直到内存中的空闲进程达到MaxSpareServers


以上是Apache的进程优化了!这个是我们Apache优化的重点。技术分享

下面我们说下隐藏版本号,控制会话连接,禁止DNS。(这些我们只要在文件末尾添加即可)

技术分享


选项解释:

   Timeout:设置服务器在断定请求失败前等待的秒数。默认值300

    KeepAlive:设置是否启用HTTP持久链接,On 代表打开,Off 代表关闭。如果用于同一页面包含大量静态文件的应用,设置为On,以提高性能;如果用于主要为动态页面的应用,设置为Off,以节约内存资源;如果服务器前跑有squid或者其它七层设备,设置为On

    MaxKeepAliveRequests:限制当启用KeepAlive时,每个连接允许的请求数量。如果将此值设为"0",将不限制请求的数目。个人建议将此值设为100-500之间的一个值,以确保最优的服务器性能。

    KeepAliveTimeout:设置持久链接中服务器在两次请求之间等待的秒数。对于高负荷服务器来说,KeepAliveTimeout值较大会导致一些性能方面的问题:超时值越大,与空闲客户端保持连接的进程就越多。

    UseCanonicalName:配置服务器如何确定它自己的域名,可选值为On | Off | DNSDNS用于为大量基于IP的虚拟主机支持那些古老级的不提供"Host:"头的浏览器使用。笔者建议设置为Off

    AccessFileName:设置分布式配置文件的名字,默认为.htaccess。如果为某个目录启用了分布式配置文件功能,那么在向客户端返回其中的文档时,服务器将在这个文档所在的各级目录中查找此配置文件,因此会带来性能问题,个人建议关闭分布式配置文件功能。

    ServerTokens:控制服务器回应给客户端的"Server:"应答头是否包含关于服务器操作系统类型和编译进的模块描述信息,同时还控制着ServerSignature指令的显示内容。可选值为Full | OS | Minor | Minimal | Major | Prod。个人建议设置为显示最少信息的Prod

    ServerSignature:配置服务器生成页面的页脚,可选值为On | Off | EMail。采用On会简单的增加一行关于服务器版本和正在伺服的虚拟主机的ServerName,而EMail设置会额外创建一个指向ServerAdmin"mailto:"部分。建议使用默认值Off

    HostnameLookups:设置是否启用对客户端IPDNS查找,可选值为On | Off | DoubleDNS查询会造成明显的时间消耗,建议设置为Off

这样我们就算给Apache做好优化了,是不是很简单啊!大家不用记优化内容,只要记住优化点即可。技术分享






本文出自 “乐乐快跑” 博客,请务必保留此出处http://10851431.blog.51cto.com/10841431/1751488

以上是关于linux下编译安装的Apache安全优化方案的主要内容,如果未能解决你的问题,请参考以下文章

linux下编译安装apache

Linux下编译安装SVN

夺命雷公狗---linux NO:43 linux下编译apache整合php

CentOS 下编译安装Apache

centos7.2下编译安装apache2.4

linux下编译安装nginx