Autoriser l'accès à un hôte virtuel Apache à partir du réseau local uniquement

19

J'ai une page Web sur un serveur Linux que j'administre, exécutant Apache 2.2. Ce serveur est visible par le monde extérieur pour certains autres services.

Je voudrais configurer Apache pour qu'un hôte virtuel donné ne soit visible que depuis l'intérieur du réseau local, afin de pouvoir déployer une application Web pour obtenir des commentaires d'autres personnes de mon organisation. Je pense que cela a à voir avec la directive Allow, mais mes expériences ne vont pas bien.

Comment puis-je modifier mon fichier de configuration pour y parvenir? Dois-je également modifier la configuration du pare-feu?

Btz
la source
Utilisez-vous une adresse IP privée (non routable) telle que 10.0.0.100 ou une adresse IP publique (routable) pour votre serveur?
closetnoc
Le serveur a une adresse IP publique et je peux me connecter depuis l'extérieur du réseau professionnel - depuis chez moi par exemple. Les ordinateurs des collègues ont tous des adresses IP locales de type 10. *. *. *.
Btz

Réponses:

12

Facile. Définissez simplement quelque chose comme ceci dans votre configuration principale ou votre configuration virtuelle:

<Directory /var/www/path/to/your/web/documents>

  Order Deny,Allow
  Deny from all
  Allow from 127.0.0.1 ::1
  Allow from localhost
  Allow from 192.168
  Allow from 10
  Satisfy Any

</Directory>

La <Directory></Directory>déclaration dit essentiellement: «Utilisez ces règles pour tout dans ce répertoire. Et par «ce répertoire» qui fait référence à celui /var/www/path/to/your/web/documentsque j'ai défini dans cet exemple mais qui doit être modifié pour correspondre au chemin du répertoire local de votre site.

Ensuite, dans la <Directory></Directory>zone, vous modifiez le comportement Apache par défaut, qui Allowest tout par défaut Order Deny,Allow. Ensuite, vous définissez à Deny from allpartir de l'accès refusé à tout le monde. Voici les Allow frominstructions qui permettent l'accès depuis 127.0.0.1 ::1(adresse IP de l'hôte local), localhost(l'hôte local lui-même). C'est tout ce qui est standard. Étant donné que l'accès à partir de localhostest nécessaire pour de nombreux processus système internes.

Ce qui suit est ce qui compte pour vous.

Le Allow frompour 192.168ainsi que 10permettra l'accès à partir de n'importe quelle / toutes les adresses réseau dans la plage réseau qui est préfixée par ces numéros.

Donc, en indiquant 192.168que cela signifie essentiellement si un utilisateur a une adresse comme 192.168.59.27ou 192.168.1.123il pourra voir le site Web.

De même, l'utilisation du préfixe Allow fromfor 10garantit que si quelqu'un a une adresse IP 10.0.1.2ou même 10.90.2.3qu'il pourra voir le contenu.

Presque tous les réseaux internes du monde utilisent la 192.168plage ou quelque chose dans la 10plage. Rien d'extérieur. Ainsi, l'utilisation de ce combo atteindra votre objectif de bloquer l'accès au monde extérieur, mais autorisera uniquement l'accès à partir de votre réseau local.

JakeGould
la source
Que Satisfy Anydoit-on faire dans ce cas? Je ne sais rien de tout cela mais quand il était présent dans mon scénario, j'ai pu accéder à la page (que j'ai utilisée <Location /path>) depuis un réseau externe. Le supprimer a cependant résolu mes problèmes. Ce serait bien de comprendre pourquoi c'était le cas car il était légèrement inquiet que je puisse accéder à la page même avec les règles en place.
liamnichols
@liamnichols Comme expliqué ici : "Permet la demande si une exigence est satisfaite (authentification OU accès)."
JakeGould
14

Les personnes atterrissant dans cette réponse, veuillez noter que cela est spécifique à Apache 2.2.

Apache 2.4 a déprécié ces directives.

La nouvelle façon utilise le module mod_authz_hostet les Requiredirectives. ( lien )

Dans Apache 2.4, vous devriez faire

<Directory /var/www/ncp-web/>
  Require host localhost
  Require ip 127.0.0.1
  Require ip 192.168
  Require ip 10
</Directory>

et supprimez toutes les directives Allow.

nachoparker
la source
5

Ajoutez cette section dans votre directive d'hôte virtuel:

<Location /mypathurl>
    Order deny,allow
    Deny from all
    Allow from 192.168.1.10
</Location>

Remplacez votre IP ci-dessus. Cela ne devrait pas être utilisé pour la sécurité au niveau financier, FYI.

Chloe
la source
-1

Je ne sais pas comment vous avez votre configuration réseau, cependant, je suppose que quelque chose va essayer de faire une meilleure réponse.

Supposons que vous ayez un petit bureau avec une connexion DSL. Vous auriez une adresse IP publique statique ou un bloc d'adresses affecté à votre ligne, un modem DSL et un pare-feu. Sans entrer dans les détails de la façon dont cela se produit, je vais passer à la partie importante.

Vous devez utiliser NAT (traduction d'adresse réseau). Cela permet aux adresses IP publiques de résider du côté WAN (Internet) de votre réseau et d'utiliser des adresses IP privées (comme 10.0.0.100) au sein du réseau du côté LAN. Il s'agit d'une procédure d'opération standard. Si vous hébergez un serveur Web au sein de votre réseau, vous utiliserez alors la redirection de port ou un autre mécanisme similaire) pour pointer tout trafic Web vers votre serveur Web.

Dans ce scénario standard, vos ordinateurs internes utiliseraient tous les adresses IP privées.

En supposant que vous ayez une configuration réseau standard similaire, vous changeriez l'adresse IP de votre ordinateur d'une adresse IP publique à une adresse IP privée. Votre réseau peut avoir une configuration DHCP où votre ordinateur peut demander une adresse IP disponible. Cela signifie qu'au lieu de spécifier une adresse IP, vous choisissez d'utiliser DHCP et une adresse IP sera attribuée. Si DHCP n'est pas disponible, vous devrez vérifier sur certains autres ordinateurs un espace d'adresse IP privé qui peut être utilisé et sélectionner une adresse IP dans l'espace qui n'est pas utilisé. Vous pouvez spécifier cette adresse IP inutilisée dans votre configuration réseau. Cela devrait empêcher votre système d'être vu sur Internet.

placard
la source
J'y ai pensé, mais ce n'est pas une solution pratique. Il y a des services sur cette machine qui doivent rester visibles de l'extérieur, et dans tous les cas, je prévois de rendre l'application Web visible à nouveau dans quelques jours - inutile de révolutionner la configuration du réseau pendant quelques jours. Cependant, je peux travailler sur des choses comme la configuration d'Apache.
Btz
Si vous avez un pare-feu, vous pouvez fermer certains ports à cette adresse IP.
closetnoc
Les paramètres du pare-feu pourraient être utilisés, mais c'est vraiment exagéré. Apache a intégré des fonctionnalités pour refuser ou autoriser en fonction de l'adresse IP et d'autres critères connexes. Voir ma réponse pour plus de détails.
JakeGould
Les pare-feux @JakeGould ne sont pas nécessairement une solution excessive. Je connais vraiment très bien Apache. Cependant, il existe des options de filtrage HTTP dans la plupart des bons pare-feu qui aident sans mettre une charge sur le serveur lui-même. De plus, même si Apache est excellent, ce n'est pas sans faute. De plus, les accès aux ports, y compris les accès alternatifs aux ports, peuvent être manipulés à l'aide d'un pare-feu afin que certains services Web restent publics et que d'autres ne soient accessibles que sur le réseau local.
closetnoc