一、环境描述:
在上一篇博文中通过源码安装了LAMP,打上快照,此文章基于LAMP源码安装后调优。调优部分是相对独立的,随着自己的环境可以灵活运用。在生产环境中,部署了apache之后,无论从安全还是性能角度考虑,在apache服务上线之前,需要做诸多的优化调试才行。这些优化会涉及到效率问题以及用户体验等问题。
恢复实验环境:
操作系统:Centos 7.6.1810
Apache版本 : httpd-2.4.16
PHP版本:php5.6.13
源码包存放位置:/usr/local/src/
源码包编译安装位置:
Apache :/usr/local/apache2.4
PHP :/usr/local/php
Mysql : /usr/local/mysql
检查服务端口是否正常:
为什么需要隐藏?
因为所有的攻击渗透,都是基于Apache或者Nginx的版本的bug来进行的,所以在优化内容中,出于安全的考虑,需要将Apache的版本号隐藏掉。
使用Curl来测试百度和淘宝的网站,可以查看到Server的情况,百度是隐藏掉了,而淘宝使用了301的重定向,实际上访问的是淘宝的代理服务器,Tengine是Nginx的二次开发。
访问我们目前的环境,可以看到使用的Apache的版本是2.4.16,以及PHP版本,导致我们黑客想攻击的话,是非常容易的,所以需要隐藏掉该内容!
二、隐藏Server里面的内容
隐藏Server信息是需要修改源码包内容,然后重新进行预编译安装!所以现在需要将整个的源码delete掉,重新修改编译安装!
1、删除源码安装包解压之后的文件
[root@Lamp src]# rm -rf ./httpd-2.4.16
2、删除Apache安装的内容,
[root@Lamp src]# rm -rf /usr/local/apache2.4
3、重新解压Apache安装包到/usr/local/src/下面
[root@Lamp src]# tar xf /opt/httpd-2.4.16.tar.bz2 -C
4、在重新编译安装之前,就需要修改安装包里的include/ap_release.h文件内容,如下:
文件绝对路径:/usr/local/src/httpd-2.4.16/include/ap_release.h
修改前:
7行内容说明:
#define AP_SERVER_BASEVENDOR "Apache Software Foundation"
##服务的提供商名称
#define AP_SERVER_BASEPROJECT "Apache HTTP Server"
##服务的项目名称
#define AP_SERVER_BASEPRODUCT "Apache"
##服务的产品名
#define AP_SERVER_MAJORVERSION_NUMBER 2
##主要版本号
#define AP_SERVER_MINORVERSION_NUMBER 4
##小版本号
#define AP_SERVER_PATCHLEVEL_NUMBER 16
##补丁级别
#define AP_SERVER_DEVBUILD_BOOLEAN 0
注:上述列出的行,可以修改成自己想要的,然后编译安装之后,
再对httpd-default.conf文件进行修改,用户就彻底无法知道版本号了!
修改后:
这7行自己随便写
5、重新预编译安装
预编译:
[root@Lamp httpd-2.4.16]# ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --enable-deflate --with-apr-util=/usr/local/apr-util --enable-modules=most --enable-mpms-shared=all --with-mpm=event
#注:–sysconfdir=/etc/httpd 表示将Apache配置文件放在/etc/httpd。如果不写,默认情况下,配置文件会在安装路径/usr/local/apache下面。
编译&&安装:
[root@Lamp httpd-2.4.16]# make -j4 && make install -j4
补充内容:
restart 等价于stop & start ——容易引起用户404错误
reload 平滑重启 用户无感知 ——Nginx支持 Apache不支持
graceful ——Apache里面的平滑重启
apachectl -t ——检测apache配置文件语法是否有错
apachectl -M ——检测支持的模块
6、删除原来的apache的启动文件,并且将新安装的apache的启动文件软连接过去!
[root@Lamp httpd-2.4.16]# rm -rf /etc/init.d/apachectl
[root@Lamp httpd-2.4.16]# ln -s /usr/local/apache/bin/apachectl /etc/init.d/
7、修改Apache配置文件,并重启Apache!
配置文件路径,是在预编译的时候设置的/etc/httpd/,如果不设置会在安装路径下/usr/local/apache ,
[root@Lamp httpd-2.4.16]# vim /etc/httpd/httpd.conf
在重启的时候出现如下报错,是因为之前的Apache没有停止!
利用kill命令将httpd的进程全部杀掉:
杀掉Apache所有进程之后,80的监听端口就关闭了!
重新启动Apache:
[root@Lamp httpd-2.4.16]# /etc/init.d/apachectl start
8、使用Curl重新测试
目前Server里的参数,是我们在之前步骤中设置的,但是所在平台Unix还是能够显示出来。
9、修改Apache配置文件,和 httpd-default.conf 隐藏掉一些内容!
[root@Lamp httpd-2.4.16]# vim /etc/httpd/httpd.conf
将#号取消掉,让 Include /etc/httpd/extra/httpd-default.conf 配置生效!
编辑httpd-default.conf 文件,路径如下:
该路径是在预编译的时候由–sysconfdir参数设置的配置文件路径:
[root@Lamp httpd-2.4.16]# vim /etc/httpd/extra/httpd-default.conf
修改前
参数说明:
下面是ServerTokens的一些可能的赋值:
ServerTokens Prod 表示显示“Server:Apache”
ServerTokens Major 表示显示“Server:Apache/2”
ServerTokens Minor 表示显示“Server:Apache/2.2”
ServerTokens Min 表示显示“Server:Apache/2.2.17”
ServerTokens OS 表示显示“Server:Apache/2.2.17(Unix)”
ServerTokens Full 表示显示“Server:Apache/2.2.17(Unix)PHP/5.3.5” (如果你这指定任何值,这个是默认的返回信息)
修改后:
10、重启Apache,并使用Curl进行测试,发现Server内容里的版本以及Unix都被隐藏掉了,只剩余一个Server名称,是之前在编译安装之前修改ap_release.h 进行设置的内容。如下:
到此为止,Apache隐藏版本号内容就结束了!