Embora existam formas de se descobrir a versão do seu Apache, se você puder mascará-la, melhor. Nesta dica mostro como esconder o máximo de informações possíveis.
Exemplo de um servidor com a assinatura full habilitada (teste local, basta substituir localhost pelo site desejado):
$ telnet localhost 80
Trying ::1...
Connected to localhost.
Escape character is '^]'.
GET / HTTP/1.0
HTTP/1.1 302 Found
Date: Wed, 24 Mar 2010 02:47:38 GMT
Server: Apache/2.2.14 (Fedora) DAV/2 PHP/5.3.1 mod_python/3.3.1 Python/2.6.2 mod_ssl/2.2.14 OpenSSL/1.0.0-fips-beta4 mod_perl/2.0.4 Perl/v5.10.0
...
Opa! Olha que legal, de cara descobrimos que o servidor web consultado roda Apache versão 2.2.14 em Fedora
GNU/Linux, isso sem contar com as informações sobre PHP, Python, SSL, Perl e o que diabos a mais seu servidor estiver rodando.
NOTA: Para o exemplo habilitei o máximo de informações possíveis, mas a configuração de fábrica expõe a versão do Apache e o sistema operacional hospedeiro.
Agora o script kiddie vai gastar a semana inteira caçando exploits para as versões dos softwares e módulos habilitados.
Solução:
Desativar essa assinatura é simples, basta editar o seu httpd.conf (ou apache2.conf) e mudar a linha:
ServerTokens OS (ou Full)
Para:
ServerTokens Prod
Reinicie o Apache e teste novamente:
$ telnet localhost 80
Trying ::1...
Connected to localhost.
Escape character is '^]'.
GET / HTTP/1.0
HTTP/1.1 302 Found
Date: Wed, 24 Mar 2010 03:01:22 GMT
Server: Apache
...
Agora a única informação disponível é que o servidor roda Apache.
Nas versões do Apache 1.3 ou inferiores, a diretiva que controlava isso era a ServerSignature. Ex.:
ServerSignature Off
A partir do Apache 2 a diretiva acima passou a ser controlada pelo ServerTokens, portanto ela será ignorada pelo servidor.