隐藏系统版本及apache、nginx、php软件版本信息

1、隐藏服务器系统信息
当登陆到linux系统时,会显示该linux发行版的名称、版本、内核版本、服务器的名称。为了不让这些默认的信息显示出来,我们设置它只显示一个”login:”提示符。
删除/etc/issue和/etc/issue.net这两个文件。
本地登陆输入用户名和密码前显示的信息写在/etc/issue,当然,在这个文件你也可以写入其它的信息。


而/etc/issue.net是供telnet远端登入显示的信息,内容与/etc/issue是一样的。

issue文件中的参数

\d 本地端时间的日期;
\l 显示第几个终端机介面;
\m 显示硬体的等级 (i386/i486/i586/i686…);
\n 显示主机的网路名称;
\o 显示 domain name;
\r 作业系统的版本 (相当于 uname -r)
\t 显示本地端时间的时间;
\s 作业系统的名称;
\v 作业系统的版本。

登陆系统后的显示信息是保存在/etc/motd文件中,默认为空。

2、服务软件版本信息屏蔽

通过 curl 命令 查看服务器提供HTTP服务的相关信息,可以显示出服务器的HTTP是什么程序,哪个版本,如:
[root@r1 ~]# curl -I 192.168.0.103
HTTP/1.1 200 OK
Date: Sat, 21 May 2011 13:26:56 GMT
Server: Apache/2.2.3 (Red Hat)
X-Powered-By: PHP/5.1.6
Set-Cookie: PHPSESSID=uoe9ar9mc470njdlp1litrjr37; path=/
Connection: close
Content-Type: text/html; charset=utf-8

根据提示显示用了apache 2.2.3版本,系统是redhat,php版本为5.1.6。
隐藏apache版本信息:

编辑 httpd.conf:
ServerTokens ProductOnly   (默认为OS,显示操作系统信息)
ServerSignature Off                (一般在页面出现问题时,底部显示的信息)

比如404错误信息:

Not Found

The requested URL /a.html was not found on this server.

 


Apache/2.2.3 (Red Hat) Server at 192.168.0.103 Port 80

修改后再次测试:

[root@r1 conf]# curl -I 192.168.0.103
HTTP/1.1 200 OK
Date: Sat, 21 May 2011 13:51:30 GMT
Server: Apache    //web服务器版本号系统厂商隐藏
X-Powered-By: PHP/5.1.6
Set-Cookie: PHPSESSID=rs4q0jm73ph17llmppn99kb3k0; path=/
Connection: close
Content-Type: text/html; charset=utf-8

404错误页错误提示:

Not Found

The requested URL /a.html was not found on this server.

如果想隐藏橙色部分 Server: Apache,需要修改源代码,将ap_release.h文件中浅绿色部分修改:

#define AP_SERVER_BASEVENDOR “Apache Software Foundation”
#define AP_SERVER_BASEPROJECT “Apache HTTP Server”
#define AP_SERVER_BASEPRODUCT “VENUS”   

#define AP_SERVER_MAJORVERSION_NUMBER 2    //版本号
#define AP_SERVER_MINORVERSION_NUMBER 2
#define AP_SERVER_PATCHLEVEL_NUMBER   22
#define AP_SERVER_DEVBUILD_BOOLEAN    0

隐藏Nginx版本信息:

开启 nginx.conf,在http { }里加上:
server_tokens off;

隐藏php-fpm版本信息(未测):

编辑php-fpm配置文件:
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
改为:
fastcgi_param SERVER_SOFTWARE nginx0.0.0; #(这个nginx0.0.0就是显示的内容)

隐藏PHP版本信息:

编辑php.ini :
expose_php = Off    //重新启动 Apache或者php-fpm即可。

测试:

[root@r1 conf]# curl -I 192.168.0.103
HTTP/1.1 200 OK
Date: Sat, 21 May 2011 13:54:15 GMT
Server: Apache
Set-Cookie: PHPSESSID=hgt5rq69ftu0sg1s0lg5tni620; path=/
Connection: close
Content-Type: text/html; charset=utf-8
我们看到X-Powered-By: PHP/5.1.6信息隐藏了。

关于ssh弱口令及暴力破解

最近在研究服务器入侵方面的资料,然后根据进度,写写自己的想法:

看过xxx黑客的入侵教程(暂称之为黑客),过程基本还是那些:

1、拿扫描工具扫描某个网段开启ssh服务的服务器

2、其次开始密码字典穷举,匹配成功后登陆系统

3、开后门,清理登陆日志。

了解了入侵思路,那么现在考虑一下怎么防止黑客攻击,前面看到了,第一步是扫描哪些IP开启了ssh端口(22),随便拿个工具都行,到此,我们会想到什么?ssh服务的默认端口是22号,那么,我们将此端口改掉,换成一个不常用的,那么在黑客初步的IP段扫描的时候,我们就可以躲过这一次浩劫。

比如端口改为:49825 (计算机端口范围:1-65535,1-1024是系统为各种服务预留的,所以不要用)

编辑:/etc/ssh/sshd_config

修改:#Port 22 ,改为: Port 49825

重启ssh服务,OK,那么下次登录的时候需要指定端口,推荐用putty客户端,个人觉得很不错的远程登录工具。

下面说一下密码,服务器管理员,密码设置的一定要满足密码复杂性要求,大小写、数字、特殊符号,密码长度最好在18位以上,我服务器设置的是三十位以上。密码设置的乱乱的,这样,基本可以断绝暴力破解的可能性了。千万别设置为简单密码,比如123,admin888等等,如果这样,那么你不是一位合格的运维师。

再说一下软件漏洞,每个软件都不是很完美的,或多或少有漏洞,被发现只是时间问题,那么出于这种情况,我们是没的办法的,可以参考软件的官方网站,了解最新漏洞信息,然后进行升级补救。

PS:

我们可以通过第三方软件来监控服务器日志,如果某个IP,再短时间内不停的暴力登陆服务器的时候,那么程序自动判断并将其IP加入到黑名单,比如DenyHosts之类这样的工具,服务器会更安全一些。

养成良好的习惯,每天检查日志。

denyhosts链接: http://denyhosts.sourceforge.net/