Je ne veux pas que quelqu'un puisse détecter que j'utilise NGINX ou même Ubuntu depuis Internet. Il existe des outils (comme BuiltWith) qui analysent les serveurs pour détecter les outils qu'ils utilisent. De même, certains outils de craquage pourraient aider à la détection. Quelle est la meilleure solution / la plus proche que je puisse obtenir pour cacher toutes ces informations de l'extérieur ?
Réponses
Trop de publicités?Au lieu de la header_filter_by_lua il est recommandé d'utiliser la nouvelle directive header_filter_by_lua_block qui met en ligne le source Lua directement entre accolades ( {}
). Avec cela, il n'est pas nécessaire d'échapper les 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
Je tiens à 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.
N'importe qui peut très facilement obtenir cette réponse en envoyant, par exemple, un en-tête trop long. Nginx renverra une requête 400 Bad, qui ne contient pas d'en-tête de serveur (si elle est corrigée), mais le html lui-même le montrera :
P.S. Je ne sais pas comment me débarrasser de celui-ci, le html lui-même le trahit, il devrait donc y avoir un moyen de ne pas le générer du tout ?
Avant tout : Pourquoi utiliser un module supplémentaire comme Headers More Nginx ? Seulement pour cacher l'en-tête du serveur. Si quelques lignes, simple patch peut atteindre la même solution pour vous.
L'utilisation d'un module supplémentaire pourrait entraîner une instabilité (dans quelle mesure a-t-il été testé avec votre environnement ? Avec vos autres modules, etc.) ou d'insécurité (ce module est-il régulièrement mis à jour avec des corrections de bogues et/ou de problèmes de sécurité ?)
Deuxièmement. Ce fil de discussion décrit dans la réponse 279389 comment vous pouvez ajuster le code de Nginx pour modifier l'en-tête du serveur. Le problème est qu'ils ont oublié HTTP/2. En bref, rien ne changera. L'en-tête du serveur sera toujours visible.
Moins, c'est plus, c'est mieux. Ok, j'admets que j'ai aussi cherché une bonne solution pendant longtemps. Mais j'ai finalement trouvé :
Correctif pour la suppression de l'en-tête du serveur Nginx
Je suis enfin libéré de cet ennuyeux en-tête de serveur Nginx.
Comme mentionné par rapstacke dans les commentaires, nginx-extras
installe beaucoup de choses supplémentaires (surprise). En plus de cela, j'ai découvert qu'après l'installation de nginx-extras, nginx ne redémarre pas après l'exécution de systemctl reload nginx
à plusieurs reprises.
Si vous voulez seulement supprimer l'en-tête du serveur, vous devez installer libnginx-mod-http-headers-more-filter :
sudo apt-get install libnginx-mod-http-headers-more-filter
Cela fonctionne pour moi sans aucun problème sur Ubuntu 20.04.
Exécutez cette fonction bash dans le dossier du code source de nginx. Dans nginx-$version, pas dans src/.
Basé sur 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
}