web-dev-qa-db-fra.com

Puis-je masquer toutes les informations serveur / système d'exploitation?

Je ne veux pas que quiconque puisse détecter que j'utilise NGINX ou même Ubuntu sur Internet. Il existe des outils (tels que BuiltWith) qui analysent les serveurs pour détecter les outils qu'ils utilisent. De plus, certains outils de craquage peuvent aider à la suppression. Quel est le meilleur/le plus proche que je peux obtenir pour cacher toutes ces informations de l'extérieur?

96
orokusaki

Vous pouvez arrêter la sortie de la version de Nginx et OS en ajoutant

server_tokens off;

dans un contexte http, server ou location.

Ou si vous souhaitez supprimer complètement l'en-tête du serveur, vous devez compiler Nginx avec le module Headers More, car l'en-tête est codé en dur dans la source Nginx, et ce module permet de modifier les en-têtes http.

 more_clear_headers Server;

Cependant, il existe de nombreuses façons cachées que les serveurs exécutent par accident via leur implémentation, ce qui peut aider à identifier le système. par exemple. Comment il répond à une mauvaise demande SSL. Je ne vois pas de moyen pratique d'empêcher cela.

Certaines des choses que je pourrais suggérer:

  • modifier les modèles d'erreur
  • bloquer tous les ports sauf les services nécessaires
127
Andy

Si vous avez installé nginx en utilisant apt-get dans Debian ou Ubuntu, vous devrez peut-être installer le paquet nginx-extras pour définir ou effacer l'en-tête "Server"

Une fois cela fait, vous pouvez ajouter les lignes ci-dessous dans nginx.conf (généralement /etc/nginx/nginx.conf):

Pour effacer complètement l'en-tête "Serveur":

more_clear_headers Server; 

Pour définir une chaîne personnalisée en tant que "serveur"

more_set_headers 'Server: some-string-here';
36
packetlord

@Martin F. Oui, c'est le cas. Vous devrez le compiler à partir de la source et modifier ce qui est nécessaire avant de compiler la source.

Je suppose que vous avez téléchargé la dernière version stable, vous l'avez décompressée et vous savez où se trouvent les fichiers. Si tel est le cas, procédez comme suit:

nano src/http/ngx_http_header_filter_module.c

Recherchez ensuite la ligne 48 si je me souviens bien.

static char ngx_http_server_string[] = "Server: nginx" CRLF;

Remplacez nginx par MyWwhatServerNameIWant, par ex.

static char ngx_http_server_string[] = "Server: MyWhateverServerNameIWant" CRLF; 

Alors

nano src/core/nginx.h 

chercher la ligne

#define NGINX_VER          "nginx/" NGINX_VERSION

changer "nginx /" en "MyWwhatServerNameIWant /" pour qu'il se lise

#define NGINX_VER          "MyWhateverServerNameIWant" NGINX_VERSION

Enfin si vous voulez aussi changer le numéro de version

recherchez la ligne #define NGINX_VERSION "1.0.4"

et changez "1.0.4" pour la version que vous voulez. Par exemple, il lira

#define NGINX_VERSION      "5.5.5"

J'espère que cela aide. Néanmoins. La sécurisation d'un serveur va bien au-delà de l'affichage de ce qui fonctionne. PHP est par nature peu sûr, de même que linux. Bien sûr, linux peut être assez sécurisé si toutes les mesures nécessaires sont prises afin d'obtenir une sécurité décente. En ce qui concerne PHP est préoccupé, je recommanderais d'utiliser Suoshin pour renforcer la sécurité de votre code.

20
Martin M

Après avoir passé beaucoup de temps à découvrir comment créer une version personnalisée de nginx sur ubuntu, j'ai réalisé que vous pouvez utiliser le module lua pour cela.

Sur ubuntu 14.04 si vous installez le nginx-extras package vous pouvez supprimer l'en-tête du serveur en utilisant:

header_filter_by_lua 'ngx.header["server"] = nil';

Jetez-le dans le bloc http et chaque requête n'aura pas d'en-tête Server.

Si cela ne fonctionne pas, exécutez nginx -V pour vérifier que le module lua est compilé dans votre copie de nginx. Sinon, il existe probablement un autre package que vous pouvez utiliser pour l'obtenir.

7
matschaffer

Au lieu de header_filter_by_lua , il est recommandé d'utiliser la nouvelle directive header_filter_by_lua_block qui insère la source Lua directement entre les accolades ({}). Avec cela, il n'est pas nécessaire d'échapper aux caractères spéciaux.

header_filter_by_lua_block { ngx.header["server"] = nil }

https://github.com/openresty/lua-nginx-module#header_filter_by_lua_block

6
Juergen Kraus

Je veux juste souligner que même si l'en-tête du serveur est supprimé de la réponse, le nom du serveur (nginx ou openresty par exemple) est toujours clairement visible dans la réponse d'erreur html que le serveur envoie en cas d'erreur.

Tout le monde peut très facilement obtenir cette réponse, par ex. envoi d'un en-tête trop long. Nginx renverra une 400 Bad Request, qui ne contient pas d'en-tête de serveur (s'il est fixe), mais le html lui-même le montrera:

Nginx error

P.S. Je ne sais pas comment me débarrasser de celui-ci aussi, vraiment le HTML lui-même le donnera, donc il devrait peut-être y avoir un moyen de ne pas les générer du tout?

3
Ilya Chernomordik

D'abord et avant tout: pourquoi utiliser un module supplémentaire comme en-têtes More Nginx? Uniquement pour masquer l'en-tête du serveur. Si quelques lignes, un simple patch peut atteindre la même solution pour vous.

L'utilisation d'un module supplémentaire peut entraîner une instabilité (dans quelle mesure a-t-il été testé avec votre environnement? Avec vos autres modules, etc.) ou de l'insécurité (ce module est-il régulièrement mis à jour avec des bogues et/ou des correctifs liés à la sécurité?)

Deuxièmement. Ce fil décrit comme réponse 279389 comment vous pouvez ajuster le code Nginx pour changer l'en-tête du serveur. Le problème est qu'ils ont oublié HTTP/2. Bref, rien ne changera. L'en-tête du serveur sera toujours visible.

Moins c'est mieux c'est mieux. Ok J'avoue, je cherche aussi depuis longtemps une bonne solution. Mais finalement trouvé:

Correctif de suppression d'en-tête du serveur Nginx

Je suis enfin racheté de cet en-tête de serveur Nginx ennuyeux.

1
Bertus Du Jang

Exécutez cette fonction bash dans le dossier de code source nginx. Dans la version nginx- $, pas dans src /.

Basé sur cette réponse .

hidengxver () {
read -r -p "Your own http_server_string for safety: " http_server_string
first_string="static char ngx_http_server_string\[\] = \"Server: nginx\" CRLF;"
second_string="static char ngx_http_server_string\[\] = \"$http_server_string\" CRLF;"
sed -ire "s/$first_string/$second_string/g" src/http/ngx_http_header_filter_module.c

read -r -p "Your own NGINX_VER const: " nginx_ver
third_string="\#define NGINX\_VER          \"nginx\/\" NGINX\_VERSION"
forth_string="\#define NGINX\_VER          \"$nginx_ver\" NGINX\_VERSION"
sed -ire "s/$third_string/$forth_string/g" src/core/nginx.h

real_nginx_version=$( grep '#define NGINX_VERSION' src/core/nginx.h | gawk -F'"' '{print $2}' )
read -r -p "Your own NGINX_VERSION const: " new_nginx_version
fifth_string="\#define NGINX\_VERSION      \"$real_nginx_version\""
sixth_string="\#define NGINX\_VERSION      \"$new_nginx_version\""
sed -ire "s/$fifth_string/$sixth_string/g" src/core/nginx.h
}
0
stranger777