$7.49 .com domain with free InstantPage Website Builder$1.99 Web Hosting   捷飞网络官方淘宝店   Godaddy 优惠码
返回列表 发帖
分享到:




[应用&技术] 分享如何隐藏Nginx, apache和php的版本号等信息

本帖最后由 jfx 于 2014-8-30 17:19 编辑 3 h1 \; S5 \: c. {" f8 h; X
/ y# U% i9 `( ]! `  M) q
配置完一台服务器后,并不是就可以高枕无忧了,前不久刚刚爆发的PHP 5.3.9版本的漏洞也搞得人心惶惶,所以说经常关注安全公告并及时升级服务器也是必要的。一般来说,黑客攻击服务器的首要步骤就是收集信息,比如说你的软件版本,这些将成为下一步有针对性攻击的依据。所以说一定程度的隐藏这些信息就显得非常有必要了,本文将简单介绍如何在网络上隐藏Nginx版本号以及 PHP的版本号。
) I0 E1 }1 p) g5 P$ Q- `" i5 e0 r. ~
' L) g$ e: ~1 M3 `
1.隐藏Nginx版本号,Nginx的版本号主要在两个地方会有,一个是HTTP header,有个Server:nginx/1.x.x类似会暴露Web服务器所用软件名称以及版本号,这个也是大多数Web服务器最容易暴露版本号的地方,第二个地方是Nginx出错页面,比如404页面没有找到等,这是如果用户没有指定页面的话,那么Nginx自己的页面会有版本戳记。
# a$ I) [+ m- ]
8 h* D5 [2 u% M9 g不过幸运的是对于这两个地方的版本号隐藏,Nginx都提供了简单的办法一步到位,参考server_tokens。通过在配置文件的http节配置server_tokens off来达到我们目的。
, ?/ Q5 [- `2 L6 w# a
3 ^, o6 V$ X5 N+ U; @2 \# \: C8 m; ^
  • http {
  •     # ...省略一些配置
  •     server_tokens off;
  • }
. e3 s2 o$ [0 }! t

0 P) A/ `0 r" C: H- ^最后别忘了使用命令nginx -s reload刷新当前配置。完成后你可以查看所有页面的响应头或者错误页,看看是不是只看到nginx字样而看不到版本号?什么?你想连nginx也改掉?呵呵,这个恐怕就麻烦了,需要改动Nginx源代码然后重新编译,感兴趣的童鞋可以参考《Linux/VPS环境下Nginx安全配置小记(1)》。
! a" G# r2 \* @( I+ W6 c7 |3 {; j# I( e; J6 w+ T7 N8 }
2.隐藏PHP的版本号PHP容易暴露的版本号在什么地方呢?其实也是在HTTP头,以类似X-Powered-By: PHP/5.2.11这种形式存在,大家可能会想到会不会是Nginx问题,而去到Nginx里面找相关配置,呵呵,其实这个是在PHP的配置文件 php.ini里改动,打开php.ini,找到下面叙述:# b/ p/ {. `, B* O9 U3 W( b4 Z" U1 H

4 s% k! E" d: j" [  F
  • ;;;;;;;;;;;;;;;;;
  • ; Miscellaneous ;
  • ;;;;;;;;;;;;;;;;;
  • ; Decides whether PHP may expose the fact that it is installed on the server
  • ; (e.g. by adding its signature to the Web server header).  It is no security
  • ; threat in any way, but it makes it possible to determine whether you use PHP
  • ; on your server or not.
  • ; http://php.net/expose-php
  • expose_php = On

- u. G0 D: K6 ~2 A. D# U- o
  I9 C7 B- z( c& j* X

& n! A) g6 v. ~( O, f4 U7 Eexpose_php = On 改为 expose_php = Off就搞定了,当然,对于Apache服务器还有另外一个方法可以直接尝试在.htaccess文件中Header unset X-Powered-By,删除X-Powered-By节,不过我还是建议改动php.ini的expose_php。% [) E! H- l- e8 X( W! w

( `) Q) l/ \' I6 v. ~; o对于nginx的隐藏版本号和隐藏php版本号是本文的重点,但是对于apache呢?如何隐藏掉apache里的响应头Server web服务器和响应头中的php版本信息
; K: ]5 b( v, s1 W, f
3 ~! n, t5 W7 m5 t7 ?
如何隐藏掉apache服务器和php的版本信息隐藏,为安全而隐藏必要的信息。- r7 C4 n5 m! ?$ y( H3 `
web server避免一些不必要的麻烦,可以把apache和php的版本信息不显示6 A4 K' Z. |' H/ w! s
9 m5 z2 T( h0 ]$ i
3. 隐藏 Apache 版本信息
$ w7 A/ J4 R9 }0 V修改apaceh的配置文件:(跟据apache的版本和安装路径不同,配置文件路径或配置文件名可能会有些小差异)* C' K. e. u  V" _/ L
/etc/apache2/apache2.conf   或者   /etc/httpd/conf/httpd.conf  或者LNMP: /usr/local/apache/conf/httpd.conf8 {  N  z: i+ ~! k! ~
把里面的二项配置信息修改为:
+ L0 x9 Z5 f' b; `0 }8 _, y" w; q; W: K: C+ T

% _* h' A0 o; V: b7 k
  • ServerTokens ProductOnly
  • ServerSignature Off

4 ~" m( f3 l: X$ N" E

+ u' S: P' n. P重启 apache# l$ P1 E6 b% b
现在 http 头里面只看到:
: p& D% Q  Y) }2 H! D  H. [Server: Apache4 N( O* H; H1 W

9 D" u& h! z" H' r0 K- X/ w4 a% H/ _7 y0 X+ J
总结配置详解 :
- v, L' c/ n9 }5 S为了防止某些别有用心的家伙窥视我们的服务器,应该做些什么.& X8 G0 Q1 J3 F
我们来看一下相关的2个参数,分别为ServerTokens和ServerSignature,通过控制这2个阀门应该就能起到一些作用,比如我们可以在配置文件中这么写:
$ {8 O: i+ l) |; Z# H9 [ServerTokens Prod
: b8 X9 Z: f( f7 o- t7 k1 ~) UServerSignature Off- @' Y0 r# A8 q0 i* i
ServerTokens, T' ]6 s6 y9 ]' h3 @+ P
用于控制服务器是否相应来自客户端的请求,向客户端输出服务器系统类型或内置模块等重要的系统信息。 在主配置文件中提供全局控制默认阀值为"Full"(ServerTokens Full),所以,如果你的Linux发行版本没有更改过这个阀值的话,所有与你的系统有关的敏感信息都会向全世界公开。比如RHEL会将该 阀值更改为"ServerTokens OS",而Debian依然使用默认的"Full"阀值' H: i0 g5 D( ]$ _6 [, c
以apache-2.0.55为例,阀值可以设定为以下某项(后面为相对应的Banner Header):
; ]8 X/ Q) R- s3 O  Z: rProd >>> Server: Apache& y- ^+ d1 @& d/ x$ y9 X& |
Major >>> Server: Apache/2
* ]4 o0 ~9 F9 C7 }/ lMinor >>> Server: Apache/2.07 M) ?6 `' Q) Z8 Q+ \
Minimal >>> Server: Apache/2.0.55
5 Y" s- t- F7 Y2 NOS >>> Server: Apache/2.0.55 (Debian)
% `' a  j0 D5 k# z' RFull (or not specified) default >>> Server: Apache/2.0.55 (Debian) PHP/5.1.2-1+b1 mod_ssl/2.0.55 OpenSSL/0.9.8b
3 H# M) ^6 J7 N: E& |ServerSignature7 {: B+ P$ ~7 K: U
控制由系统生成的页面(错误信息,mod_proxy ftp directory listing等等)的页脚中如何显示信息。
5 S1 h7 I& [4 p# t5 H7 V7 r可在全局设置文件中控制,或是通过.htaccess文件控制
" u9 z" a3 |* R  c- b5 t默认为"off"(ServerSignature Off),有些Linux发行版本可能会打开这个阀门,比如Debian在默认的虚拟主机上默认将这个阀门设置为开放 7 d1 K. {0 q9 v- T1 C- d* W. T
全局阀门的阀值会被虚拟主机或目录单位的配置文件中的阀值所覆盖,所以,必须确保这样的事情不应该发生 ) p( K: M/ D$ {9 b# I
可用的阀值为下面所示: , j# f# s+ L. V* W: R
Off (default): 不输出任何页脚信息 (如同Apache1.2以及更旧版本,用于迷惑)
' I! u0 L' @  _8 v  }/ P- U9 rOn:输出一行关于版本号以及处于运行中的虚拟主机的ServerName (2.0.44之后的版本,由ServerTokens负责是否输出版本号)" ?! ~( b  l! r+ W# {- o7 B
EMail: 创建一个发送给ServerAdmin的"mailto"3 {( Y8 t. g& O* q
注意*上述关于如何设置2个阀门从而尽量减少敏感信息泄露的方法,并不会使你的服务器真的更安全,如果你现在使用的版本比较旧,请务必尽快将系统升级,降低被蠕虫攻击的风险。
$ \* \* C1 u5 C* l1 \& K; b1 g/ a% B) ~3 \, u/ q+ y5 l
# R5 f- m% k2 Q% c  {8 c7 w

' B9 H" O5 E  v2 W, p3 o0 i  Q% G

美国VPS、域名代购:http://tu8l.taobao.com

返回列表
Namecheap
Namecheap.com - Cheap domain name registration, renewal and transfers - Free SSL Certificates - Web Hosting
互联网安全