隐藏nginx/tengine、apache、php版本号

一、隐藏nginx or tengine版本号

Nginx和tengine默认情况下是显示版本号的,如下所示
http://openskill.cn/uploads/article/20150629/b4541ea53ca0340ed9eaff8f01d1f2c3.png
如上图所示可以看出服务器是tegine 2.0.0版本,有时候会暴露哪个Tengine或Nginx版本的漏洞,就是说有些版本有漏洞,而有些版本没有。这样暴露出来的版本号就容易变成攻击者可利用的信息。所以,从安全的角度来说,隐藏版本号会安全很多。

下面我们就来看看怎么设置,可以隐藏Tengine/Ngine的版本号:
1.进入到你Tengine/Nginx的安装目录,然后编辑主配置文件

# vim nginx.conf
在http {......}里加上server_tokens off;如:
http {
.....省略
    sendfile        on;
    tcp_nopush      on;
    gzip            on;
    proxy_redirect  off;
    server_tokens   off;
.....省略
}

2.如果后端接了php-fpm,则编辑配置文件fastcgi.conf或fcgi.conf (这个配置文件名也可以自定义的,根据具体文件名修改):

找到:
  fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
改为:
  fastcgi_param SERVER_SOFTWARE nginx;

3.重新加载tengine/nginx配置:

./sbin/nginx -s reload

这样就完全对外隐藏了nginx版本号了,就是出现404、501等页面也不会显示nginx版本。

最后验证结果:
http://openskill.cn/uploads/article/20150629/32d4167c40c13920726709c8e2965c0a.png
如果想把Tengine也隐藏点,需要编辑Tengine源码中的src/core/nginx.h头文件
http://openskill.cn/uploads/article/20150629/731dafd01ac3a3f81fd13def4c16033c.png
也可修改成你想要的显示信息,然后重新编译安装。
http://openskill.cn/uploads/article/20150629/4207588ab5f9d552483dedbae6921919.png

二、隐藏Apache版本号

一般情况下,软件的漏洞信息和特定版本是相关的,因此,软件的版本号对攻击者来说是很有价值的。
在默认情况下,系统会把Apache版本模块都显示出来(http返回头信息)。如果列举目录的话,会显示域名信息(文件列表正文),如:
http://openskill.cn/uploads/article/20150629/68a027776796da86188dd86698ffbc0d.png
隐藏方法:
1、隐藏Apache版本号的方法是修改Apache的配置文件,如Centos系统Linux默认是:

# vim /etc/httpd/conf/httpd.conf

分别搜索关键字ServerTokens和ServerSignature,修改:

ServerTokens OS 修改为 ServerTokens ProductOnly

ServerSignature On 修改为 ServerSignature Off

2、重启或重新加载Apache就可以了

# /etc/init.d/httpd restart

验证:
http://openskill.cn/uploads/article/20150629/86dfd48d0613d7c1d8edb9cd7d5fbcaf.png
版本号与操作系统信息已经隐藏了

3、上面的方法是默认情况下安装的Apache,如果是编译安装的,还可以用修改源码编译的方法:
进入Apache的源码目录下的include目录,然后编辑ap_release.h这个文件,你会看到有如下变量:

#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 2
#define AP_SERVER_PATCHLEVEL_NUMBER 15
#define AP_SERVER_DEVBUILD_BOOLEAN 0

可以根据自己喜好,修改或隐藏版本号与名字

三、隐藏php版本号

为了安全起见,最好还是将PHP版本隐藏,以避免一些因PHP版本漏洞而引起的攻击。

1、隐藏PHP版本就是隐藏 “X-Powered-By: PHP/5.4.42″ 这个信息:
编辑php.ini配置文件,修改或加入: expose_php = Off 保存后重新启动Nginx或Apache等相应的Web服务器即可。
验证:
http://openskill.cn/uploads/article/20150629/fc833bac8a73c326d88c9410e307e947.png
2、其它几个PHP的基本安全设置:

disable_functions = phpinfo,system,exec,shell_exec,passthru,popen,dl,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
#该指令接受一个用逗号分隔的函数名列表,以禁用特定的函数。

display_errors = Off
# 是否将错误信息作为输出的一部分显示。在最终发布的web站点上,强烈建议你关掉这个特性,并使用错误日志代替。打开这个特性可能暴露一些安全信息,例如你的web服务上的文件路径、数据库规划或别的信息。

allow_url_fopen = Off
# 是否允许打开远程文件,建议关闭,如果网站需要采集功能就打开。

safe_mode = On
# 是否启用安全模式。打开时,PHP将检查当前脚本的拥有者是否和被操作的文件的拥有者相同,相同则允许操作,不同则拒绝操作。开启安全模式的前提是你的目录文件权限已完全分配正确。

open_basedir = /var/www/html/devopsh:/var/www/html/zhouuupc
# 目录权限控制,devopsh目录中的php程序就无法访问zhouuupc目录中的内容。反过来也不行。在Linux/UNIX系统中用冒号分隔目录,Windows中用分号分隔目录。

0 个评论

要回复文章请先登录注册