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?Vous pouvez l'empêcher d'afficher la version de Nginx et le système d'exploitation en ajoutant
server_tokens off;
à un http
, server
ou location
le contexte.
Si vous souhaitez supprimer complètement l'en-tête Server, vous devez compiler Nginx avec le module Headers More, car l'en-tête est codé en dur dans le code source de Nginx, et ce module permet de modifier n'importe quel en-tête 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 et qui peuvent aider à identifier le système. Par exemple, la façon dont 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
Si vous avez installé nginx à l'aide d'apt-get dans Debian ou Ubuntu, vous devrez peut-être installer le paquet nginx-extras pour définir ou supprimer l'en-tête "Server".
Une fois ceci fait, vous pouvez ajouter les lignes ci-dessous dans nginx.conf (habituellement /etc/nginx/nginx.conf) :
Pour effacer complètement l'en-tête "Server" :
more_clear_headers Server;
Pour définir une chaîne personnalisée comme "Serveur".
more_set_headers 'Server: some-string-here';
@Martin F. Oui, c'est possible. Vous devrez le compiler à partir des sources et modifier ce qui est nécessaire avant de compiler les sources.
Je suppose que vous avez téléchargé la dernière version stable, que vous l'avez décompressée et que vous savez où se trouvent les fichiers. Si c'est le cas, faites ce qui suit :
nano src/http/ngx_http_header_filter_module.c
Ensuite, cherchez la ligne 48 si je me souviens bien.
static char ngx_http_server_string[] = "Server: nginx" CRLF;
Remplacer nginx par MyWhateverServerNameIWant, par ex.
static char ngx_http_server_string[] = "Server: MyWhateverServerNameIWant" CRLF;
Dann
nano src/core/nginx.h
cherchez la ligne
#define NGINX_VER "nginx/" NGINX_VERSION
changez "nginx/" en "MyWhateverServerNameIWant/" pour qu'il soit lu
#define NGINX_VER "MyWhateverServerNameIWant" NGINX_VERSION
Enfin, si vous voulez aussi changer le numéro de version
cherchez la ligne #define NGINX_VERSION "1.0.4"
et remplacez "1.0.4" par la version que vous souhaitez. Par exemple, cela donnera
#define NGINX_VERSION "5.5.5"
J'espère que cela vous aidera. Néanmoins. La sécurisation d'un serveur va bien au-delà du fait de ne pas montrer ce qui est en cours d'exécution. PHP est par nature peu sûr, tout comme linux. Bien sûr, Linux peut être assez sécurisé si toutes les mesures nécessaires sont prises pour obtenir une sécurité décente. En ce qui concerne PHP, je recommande l'utilisation de Suoshin pour aider à renforcer la sécurité de votre code.
Après avoir passé beaucoup de temps à travailler sur la façon de faire une saveur 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 fichier nginx-extras
vous pouvez supprimer l'en-tête du serveur en utilisant :
header_filter_by_lua 'ngx.header["server"] = nil';
Lancez ceci dans le bloc http et chaque requête sera dépourvue d'un Server
en-tête.
Si cela ne fonctionne pas, exécutez nginx -V
pour vérifier que le module lua est compilé dans votre copie de nginx. Si ce n'est pas le cas, il existe probablement un autre paquetage que vous pouvez utiliser pour l'obtenir.
- Réponses précédentes
- Plus de réponses