Introduction
Le pré-requis pour ce tutoriel est une connaissance basique d’Apache 2, et des virtualhosts.
J’ai récemment fait l’acquisition d’une caméra de surveillance IP, et je voulais pouvoir y accéder depuis l’extérieur sans que l’on ne puisse m’observer.
Mon réseau domestique est structuré en plusieurs VLAN. 3 de ces VLANs nous intéresseront pour la suite de cet article:
- Le VLAN Interconnexion Internet: zone où mon modem et mon firewall sont connectés.
- Le VLAN DMZ: tous mes équipements devant être accessibles depuis l’Internet y sont connectés.
- Le VLAN Serveurs internes: tous les équipements dont j’ai besoin, mais qui ne doivent pas être directement accessibles depuis l’Internet.
Ci-dessous, l’extrait de la politique de sécurité qui nous intéresse (valable autant en IPv4 qu’en IPv6).
- Internet peut initier des connexions TCP et envoyer des paquets UDP dans la DMZ et vice-versa.
- Internet ne peut pas joindre directement les serveurs internes. L’usage d’un reverse proxy dans la DMZ est obligatoire.
- Le reverse proxy est l’unique machine de la DMZ autorisée à accéder aux serveurs internes.
- Les connexions SSH du reverse proxy sont bloquées depuis internet et la DMZ.
Dans cette configuration, pour sécuriser correctement la webcam, j’ai installé cette dernière dans mon VLAN des serveurs internes, et j’ai configuré le reverse-proxy pour qu’il effectue une authentification.
Configuration d’Apache 2 en reverse-proxy
Tout d’abord, j’ai choisi d’utiliser l’authentification HTTP-Digest, qui est simple à mettre en place depuis apache, et qui est un tantinet plus sûre que l’authentification basique, où le mot de passe transite en clair sur le réseau.
Pour concrétiser l’exemple, la racine Web de la webcam est accessible en faisant http://192.168.3.8/ depuis le reverse-proxy. La webcam sera accessible depuis http://services.example.com/webcam/ depuis l’Internet (les noms ont été changés pour protéger les innocents).
Vous devez activer les modules apache suivant pour réussir votre configuration:
- mod_auth_digest
- mod_proxy
- mod_proxy_http
- mod_proxy_connect
- mod_proxy_ftp
LoadModule ou a2enmod sont vos amis ;-þ
Séance gratte papier fichiers
Ensuite, il va falloir générer le fichier avec les mots de passes pour l’authentification HTTP Digest (souvent .htdigest). Pour cela, effectuez la commande suivante:
htdigest -c /chemin/vers/htdigest webcam toto
Le mot de passe de ‘toto‘ vous sera demandé interactivement.
L’argument ‘webcam‘ correspond à ce qu’on appelle un realm ou plus communément Domaine de connexion. Avec l’authentification HTTP-Digest, vous pouvez gérer un utilisateur sur plusieurs domaines (avec des mots de passes naturellement différents).
Une fois le fichier htdigest généré, posé au bon endroit, en veillant que www-data puisse y accéder en lecture, on s’attaque à la configuration des sites.
Rendez-vous dans /etc/apache2/sites-enabled et ajoutez les lignes suivantes, par précaution, si vous n’utilisez pas de forward proxy sur la machine:
ProxyRequests Off Order deny,allow Allow from all
Ces lignes vont interdire l’utilisation des fonctions forward-proxy sur la machine, qui sont testées régulièrement par des petits malins qui s’amusent à scanner votre IPv4 ou votre subnet IPv6.
Dans le fichier contenant le(s) virtualhost(s) correspondant à services.example.com, ajoutez les lignes suivantes dans le bloc virtualhost adéquat:
<Location /webcam/> AuthType Digest AuthName "webcam" AuthDigestDomain /webcam AuthUserFile /chemin/vers/htdigest Require valid-user ProxyPass http://192.168.3.8/ ProxyPassReverse http://192.168.3.8/ </Location>
La chaîne après le mot-clé AuthName doit être impérativement celle du Realm que vous avez choisi lors de la génération du fichier htdigest.
Stress du passage en production
Rechargez votre démon apache. Normalement, à cette étape, lorsque vous tapez http://services.example.com/webcam/ (ne pas oublier le ‘/’ à la fin), un prompt d’authentification devrait s’afficher. Après avoir entré les identifiants valides, vous devriez pouvoir accéder à l’interface de votre webcam.