Restreindre l'accès à des répertoires Apache

Résolu/Fermé
Lou - 2 sept. 2022 à 10:34
yg_be Messages postés 23350 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 novembre 2024 - 25 oct. 2022 à 11:56

Bonjour,

J'ai récemment hébergé via Apache une page Web, qui est en fait un répertoire que je souhaite publier à des organisations spécifiques.

Je donne accès à des répertoires différents selon les organisations et dois donc filtrer, bloquer, par IP, les non concernés.

Pour ce faire, j'ai utilisé la méthode :

<Directory "/var/www/site-web.fr/html/directory_1">
          Require all denied
          Require ip @IP
          # or : 
          IncludeOptional /etc/apache2/whitelist.conf
</Directory>

Je bloque tout le trafic et accepte une certaine IP, ou j'utilise une whitelist d'IP. Cependant, il peut arriver que des organisations proposent de large rang d'IP. Par exemple, une liste d'une centaine d'IP. Cela me déplaît un peu, j'aimerais éviter d'ouvrir un répertoire à autant d'IP.

Je voulais donc savoir s'il y avait une autre solution que de bloquer par IP, peut être avec certificat SSL ? Je ne sais pas.

A voir également:

2 réponses

yg_be Messages postés 23350 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 novembre 2024 Ambassadeur 1 554
2 sept. 2022 à 12:01

bonjour,

peut-être en envoyant un lien spécifique à chaque organisation, genre

infos.abc.fr/bienvenue?ks=ef4ez54fe4gf4ese6g4f

1

Je n'y avais pas pensé. Mais cela n'est pas "hyper" sécure, non ?

Bien qu'il est toujours compliqué de trouver une solution très sécurisée..

0
yg_be Messages postés 23350 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 novembre 2024 1 554 > Lou
2 sept. 2022 à 13:35

Ton projet ne me semble pas "hyper" pro, si?

Tu pourrais demander à chaque utilisateur de s'enregistrer, vérifier qu'ils ont une adresse email de l'organisation cliente, et ensuite s'authentifier par mot de passe.
Tu peux ensuite vérifier régulièrement si ils ont toujours accès à cette adresse email.
 

Si cela n'est pas assez sécurisé, tu peux y ajouter une authentification à deux facteurs.

1
avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 505
2 sept. 2022 à 12:47

Bonjour,

Le filtrage par IP peut servir à limiter le trafic indésirable mais ne doit certainement pas être un substitutif à une authentification au niveau de l'application. Par exemple, avec ton modèle actuel, n'importe qui connecté au réseau de l'organisation (même un guest) pourrait accéder à la ressource que tu fournis, ce qui impliquerait que l'organisation doit aussi mettre en place un filtrage de son côté basé sur les IP.

Il vaut mieux mettre en place une authentification  :

  • Avec nom d'utilisateur / mot de passe ; implémenté au niveau de ton application Web
  • Avec nom d'utilisateur / mot de passe ; implémenté au niveau du serveur HTTP
  • Avec un jeton (méthode proposée par yg_be) qui est finalement une chaine aussi compliquée à deviner qu'un couple utilisateur + mot de passe.
  • SSO (SAML / OIDC)

Et une fois l'utilisateur authentifié, il faut gérer la partie "autorisation" pour déterminer à quelles ressources il a accès. https://www.onelogin.com/learn/authentication-vs-authorization

1

Bonjour et merci pour ta réponse. Je comprends l'idée globalement, par contre je n'arrive pas à comprendre comment peut-on ajouter à la fois une authentification sur le serveur http et sur l'application web.

Pour moi, avec Apache, il est facile de configurer une authentification avec utilisateur et mot de passe avec mod_auth_form il me semble, dans :

/etc/apahce2/sites-availables/site.conf

qui est dans ce cas, l'authentification pour le serveur http, mais pour l'application web je ne vois pas :/

0
avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 505 > Lou
2 sept. 2022 à 14:43

Bonjour,

Je pensais plutôt à une authentification HTTP avec htaccess/htpasswd :
https://httpd.apache.org/docs/2.4/howto/auth.html
Cette solution convient si le contenu que tu publies n'est rien de plus que des fichiers statiques et qu'il n'y a pas d'application derrière.

Si en revanche ton contenu est publié par le biais d'une application côté serveur (PHP, NodeJS, Python, ...), le mieux est de gérer l'authentification au niveau de l'application, afin de ne pas créer une dépendance par rapport au type de serveur qui déploie l'application. Imaginons que tu mettes en place une authentification avec Apache, il faudra tout recréer si plus tard tu passes sur Nginx. Si tu intègres l'authentification au niveau du code qui constitue ton application Web, le changement de serveur sera transparent.

0
yg_be Messages postés 23350 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 novembre 2024 1 554 > Lou
2 sept. 2022 à 16:16

Si tu n'as pas d'application, tu peux utiliser le token comme nom de page, ou nom de dossier.

1
Lou > yg_be Messages postés 23350 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 novembre 2024
2 sept. 2022 à 17:02

Super, je vais réfléchir à tout ceci, merci à vous deux !!

0

Bonjour :)

Je reviens vers vous, je ne sais pas si je fais bien de répondre à ce sujet 1 mois et demi après ?

Bon, quoi qu'il en soit, j'étais occupée par autre chose puis je suis revenue sur ma recherche en étudiant vos réponses.

J'ai testé l'authentification, avec gestion de mot de passe sur base de donnée, c'est plutôt pas mal.

Cependant, j'ai peut-être trouvé une autre solution, avec les certificats. En effet, j'ai vu qu'avec la directive Apache :

SSLVerifyClient

on pouvait vérifier que le client qui se connecte à un certificat SSL valide. Ce serait donc un certificat que j'aurais signé moi-même, avec ma propre autorité de certification, puis envoyé au client.

Cependant, je souhaite payer un certificat SSL chez Globalsign (car je n'ai qu'une IP et Globalsign permet de le faire sans nom de domaine).

Ma question est donc que pour l'authentification par certificat sur Apache, il faut obligatoirement avoir notre propre autorité de certification ?

0