Autoriser uniquement les utilisateurs locaux dans nginx


22

Je souhaite restreindre l'accès à certains VHosts afin que seul 127.0.0.1 puisse y accéder. J'ai toujours utilisé quelque chose comme ça pour lier le VHost à l'hôte local et non à l'IP externe:

server {
    listen 127.0.0.1;
    server_name myvhost.local;
    location / {
        ....
    }
}

Mais j'ai remarqué que certains didacticiels incluent également des allowdirectives explicites pour le localhost et refusent expressément tous les autres:

server {
    listen 127.0.0.1;
    server_name myvhost.local;
    location / {
        allow 127.0.0.1;
        deny all;
        ...
    }
}

Ces directives allow/ sont-elles denyvraiment nécessaires lorsque j'écoute déjà uniquement à la 127.0.0.1?


Essayez de changer la ligne d'autorisation pour:allow 127.0.0.1/32;
Itai Ganot

Ma question est de savoir si j'en ai besoin allowparce que je me suis mis listenà 127.0.0.1.
Biggie

Réponses:


15

La listendirective indique au système d'exploitation sur quelle interface le serveur Web se lie. Ainsi, lorsque vous regardez netstat -aaprès le démarrage de nginx, vous verrez que nginx écoute uniquement sur le port IP 127.0.0.1 80, ce qui signifie que le serveur nginx ne peut être atteint via aucune autre interface.

La liaison à une adresse IP spécifique fonctionne à un niveau inférieur dans la pile réseau réelle par rapport aux directives allow/ denydans la configuration nginx.

Cela signifie que vous n'avez pas besoin de directives allow/ séparées denydans votre configuration avec votre cas d'utilisation, car les connexions sont limitées plus bas dans la pile réseau.

Si vous spécifiez listen 80;uniquement et utilisez les directives allow/ deny, nginx enverra un code d'erreur HTTP au client, indiquant que l'accès est refusé.

Dans ce listen 127.0.0.1;cas, le navigateur ne peut pas du tout se connecter au serveur, car il n'y a pas de port TCP ouvert pour que le navigateur puisse se connecter.


1
D'accord, j'ai oublié de mentionner que j'ai encore plus de VHosts et certains d'entre eux ne sont pas uniquement liés à localhost. Tous (locaux uniquement et non locaux) s'exécutent sur la même instance nginx. Affiche ainsi netstatune adresse locale de 0.0.0.0:80(toutes les interfaces). Puis-je alors omettre deny/ allowsur les serveurs locaux uniquement?
Biggie

Dans ce cas, nginx affichera le contenu de l'hôte virtuel qui a été défini avec la listen 80 default_server;directive lorsqu'un client demande un vhost lié à 127.0.0.1:80. Si vous n'avez pas default_serverdéfini, alors il affichera un serveur qui a listen 80;défini.
Tero Kilkanen du

OK, il n'y a donc aucune possibilité que des utilisateurs non locaux puissent accéder à des listen 127.0.0.1serveurs et je n'en ai même pas besoin allow/denysur ces serveurs?
Biggie

Oui, il n'y a aucune possibilité pour cela.
Tero Kilkanen

Cela répond à la question, contrairement à la première réponse actuelle. Pourquoi n'est-ce pas top?
Jortstek

16

Supposons que votre ID réseau soit 192.168.1.0, modifiez votre fichier conf comme ceci:

location / {
  # block one workstation
  deny    192.168.1.1;
  # allow anyone in 192.168.1.0/24
  allow   192.168.1.0/24;
  # drop rest of the world
  deny    all;
}

Veuillez me faire savoir comment cela fonctionne pour vous.

Édition n ° 1:

Oui, la directive allow est un must selon le wiki officiel de Nginx . Leur exemple est:

location / {
    allow 192.168.1.1/24;
    allow 127.0.0.1;
    deny 192.168.1.2;
    deny all;
}

1
Je veux vraiment limiter l'accès à 127.0.0.1;) Ma question est de savoir si je dois que allowdu tout parce que je l' ai déjà mis listenà 127.0.0.1.
Biggie

Veuillez cocher Edit # 1.
Itai Ganot

Sry, je ne pense pas que vous compreniez ma question;) Ce que vous avez posté est (plus ou moins) déjà ce que j'ai écrit dans ma question ci-dessus. Mais ce n'est pas une réponse à ma question.
Biggie

1
@Biggie Vous n'avez pas à limiter l'accès à 127.0.0.1, il n'est disponible que sur la machine locale.
user9517 prend en charge GoFundMonica

Vraisemblablement, cela est vrai, mais cela ne répond pas spécifiquement à la question d'OP! La réponse acceptée le fait.
Jortstek

4

Je voulais obtenir la même fonctionnalité (autoriser uniquement les utilisateurs locaux dans nginx) et j'ai compris que je pouvais faire quelque chose de simple comme ceci:

server {
    listen 127.0.0.1:80;

    index index.html index.htm index.nginx-debian.html;

    location = /favicon.ico { access_log off; log_not_found off; }

    location /static/ {
        root /path/to/folder;
    }       

    location / {
        include proxy_params;
    }
}

Ce fichier de configuration fonctionne très bien pour moi, je n'utilise aucune allowdirective, mais seulement 127.0.0.1:80, et avec cela je suis en mesure de restreindre l'accès nginx aux utilisateurs locaux uniquement!


grande et simple réponse pour limiter aux utilisateurs locaux.
new2cpp
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.