Modifier Apache httpd «Server:» header HTTP

33

"Serveur" est l' un des en-têtes HTTP renvoyés par Apachehttpd avec les données de réponse. Par exemple, ma machine serveur Web est relativement récente Arch Linux. Il renvoie des en-têtes ressemblant beaucoup à ce qui suit:

HTTP/1.1 404 Not Found
Date: Thu, 10 Apr 2014 17:19:27 GMT
Server: Apache/2.4.9 (Unix)
Content-Length: 1149
Connection: close
Content-Type: text/html

J'ai ServerSignature offdans /etc/httpd/conf/httpd.conf, mais l'en-tête "Server:" apparaît toujours. J'ai expérimenté avec mod_headers . Je l'ai activé, et j'ai essayé plusieurs choses:

<IfModule headers_module>
Header set ProcessingTime "%D"
Header set Server BigJohn
</IfModule>

Après avoir arrêté et démarré httpdavec la configuration ci-dessus, les en-têtes HTTP incluent quelque chose comme ProcessingTime: 1523, mais la ligne d'en-tête "Serveur:" reste inchangée. Je sais donc que "mod_headers" est installé et activé, et qu'il fonctionne, mais pas comme je le souhaite.

Je vois que quelque chose appelé "mod_security" prétend le faire, mais je ne veux pas tout le reste du bagage que mod_security comporte.

MISE À JOUR:

Une fois mod_securityinstallé, il vous suffit de quelques directives:

<IfModule security2_module>
SecRuleEngine on
ServerTokens Full
SecServerSignature "Microsoft-IIS/6.0"
</IfModule>

C'est pour mod_security2.7.7

Bruce Ediger
la source
3
Avez-vous redémarré Apache depuis la modification du fichier de configuration? De plus, je n'ai jamais vu le fichier appelé «httpd.com», généralement «httpd.conf».
Michael Ozeryansky
@ MichaelOzeryansky - merci d'avoir attrapé l'orthographe. Il s'agit de "httpd.conf". Je m'arrête et je lance httpd après avoir modifié httpd.conf.
Bruce Ediger

Réponses:

12

L'en-tête d'ID de serveur / jeton est contrôlé par la directive " ServerTokens " (fournie par mod_core). Hormis la modification du code source HTTPD Apache ou l'utilisation d'un mod_securitymodule, il n'existe pas d'autre moyen de supprimer complètement l'en-tête d'ID de serveur.

Avec cette mod_securityapproche, vous pouvez désactiver toutes les directives / fonctions du module dans le modsecurity.conffichier et utiliser uniquement la directive ID du serveur en-tête sans aucun "bagage" supplémentaire.

Chipster
la source
Cela fonctionne, merci beaucoup. Je dois noter que mod_security ne fait pas partie des paquets ordinaires d'Arch Linux. Il y a un PKGBUILD dans l'AUR, mais il n'a pas été mis à jour depuis le 12 avril 2014 et fait référence à une version très ancienne de mod_security. Comme toujours, votre distribution peut varier.
Bruce Ediger
25

mod_security est formidable, mais vous n'en avez pas vraiment besoin pour atteindre votre objectif.

Une fois que tous les mods ont été inclus, httpd.confvous pouvez simplement désélectionner les en-têtes de votre choix.

Header unset Server

ServerSignature Off
ServerTokens Prod

http://httpd.apache.org/docs/2.4/mod/core.html#serversignature

Matt Ryan
la source
2
mod_sec est nécessaire pour qu'un texte personnalisé cache complètement le travail apache, sinon votre solution est simple et efficace :)
Intika
Cela n'a pas d'incidence sur moi avec Apache 2.2 (corrigé) sur Centos 6.
jph
1
Dans Apache 2.4, il est signalé comme une erreur de syntaxe: commande 'En-tête' invalide, peut-être mal orthographiée ou définie par un module non inclus dans la configuration du serveur
Raptor
3
@Raptor Vous devez installer mod_headers avecsudo a2enmod headers
Ortomala Lokni
1
Header unset Serverne fonctionne pas dans Apache 2.2 et 2.4. Les en-têtes de réponse contiennent toujoursServer: Apache
Maris B.
13

Juste la mise à jour pour les personnes qui cherchent encore. J'avais du mal à faire changer la ligne Serveur dans l'en-tête HTTP. Ce conseil devrait fonctionner pour les distributions de branches Debian avec systemd et Apache 2.4.7. Plus précisément, j'utilise Ubuntu Server LTS 14.04.03. Certains conseils que j'ai trouvés étaient à faire

grep -Ri servertokens /etc/apache2

Cela m'a conduit à /etc/apache2/conf-available/security.conf où ServerTokens et ServerSignature ont été spécifiés. Par conséquent, toutes les modifications apportées à /etc/apache2/apache2.conf étaient écrasées par les directives déjà spécifiées dans security.conf.

J'ai simplement changé les directives dans security.conf et Apache a commencé à fonctionner comme je le voulais.

ServerTokens Prod
ServerSignature Off

En ce qui concerne Header unset Server, j'ai trouvé un rapport de bogue dans lequel les développeurs Apache ont déclaré qu'il ne résolvait pas le problème. Apparemment, il s’agit là d’un problème philosophique, malgré la spécification HTTP / 1.1, RFC 2616, rédigée en partie par Tim Berners-Lee, affirmant que la balise Server est facultative.

Je voulais vraiment définir le tag Serveur sur "Inconnu" pour rendre nos analyses Qualys heureuses. J'ai donc installé mod_security, maintenant appelé libapache2-modsecurity, à la suite de ce tutoriel sur DigitalOcean . Bonne chance, j'espère avoir aidé tous vos futurs lecteurs.

slmaq
la source
1

J'ai testé quelque chose sur Oracle HTTP Server 11.1.1.9 (qui repose sur Apache 2.2.22) qui a fonctionné pour moi, dans une certaine mesure.

Définir "ServerTokens" sur "none" semble supprimer la valeur d'en-tête "Server", bien que l'en-tête lui-même continue à être envoyé dans la réponse, mais il a maintenant une valeur null.

ServerTokens aucun

L'en-tête de la réponse ressemblerait à ceci:

HTTP / 1.1 200 OK

Date: lundi 28 décembre 2015 à 07:02:45 GMT

Serveur:

Dernière mise à jour: dimanche 27 décembre 2015 à 07:29:13 GMT

.

.

Mohab Elsayed
la source
2
Sur Apache 2.2, dans Centos 6 Repo, si vous définissez la valeur "none", Apache génère toutes les données. Par exemple: "Serveur: Apache / 2.2.15 (CentOS) DAV / 2 PHP / 5.3.3 mod_ssl / 2.2.15 OpenSSL / 1.0.1e-fips Phusion_Passenger / 4.0.59 mod_perl / 2.0.4 Perl / v5.10.1"
jph
d'accord, vous ne pouvez pas utiliser nonele dernier Apache:ServerTokens takes 1 argument: 'Prod(uctOnly)', 'Major', 'Minor', 'Min(imal)', 'OS', or 'Full'
vladkras