Mise en place d’un serveur PHP local sur Tailscale
Avant de publier un service, il est utile de vérifier ce que Tailscale expose déjà. Cela permet de savoir quels services sont accessibles sur votre tailnet et d’éviter les conflits de ports.
Commande :
tailscale serve status
Exemple de sortie :
https://$mac.$tn.ts.net (tailnet only)
|-- / proxy http://127.0.0.1:5001
|-- /jelly proxy http://127.0.0.1:8096
Explications :
- $mac : nom de votre machine dans le tailnet
- $tn : nom de votre tailnet
- Les services listés sont déjà exposés via Tailscale Serve
Démarrer un service web local
Pour tester, vous pouvez créer un petit serveur PHP local accessible uniquement sur votre machine :
cd ~/Shared/Helloworld
php -S 127.0.0.1:9090
Le service est maintenant disponible sur http://127.0.0.1:9090.

Exposer le service via Tailscale Serve
Pour publier le service sur votre tailnet :
tailscale serve --set-path=/helloworld --bg 9090
Puis vérifier :
tailscale serve status
Résultat attendu :
https://$mac.$tn.ts.net (tailnet only)
|-- / proxy http://127.0.0.1:5001
|-- /jelly proxy http://127.0.0.1:8096
|-- /helloworld proxy http://127.0.0.1:9090
Votre service est maintenant accessible via https://$mac.$tn.ts.net/helloworld.

Configurer l’ACL pour autoriser l’accès
Pour que d’autres membres de votre tailnet puissent accéder au service, configurez les ACL dans l’admin Tailscale :
{
"ACLs": [
{
"action": "accept",
"src": ["group:$name"],
"dst": [
"$ip:9090",
],
}
]
}
- src : group:$name : Le groupe contenant l’utilisateur.
- dst : $ip:9090 : le serveur faisant tourner le serveur PHP.
Considérations de sécurité
- Limiter les utilisateurs : Ne partagez pas les services avec tout le tailnet si ce n’est pas nécessaire. Utilisez des
groupset des ACL pour contrôler précisément qui peut accéder à chaque port ou service. - HTTPS automatique : Tailscale gère automatiquement le HTTPS via
.ts.net, réduisant le risque d’interception du trafic. - Isolation des services : Faites tourner vos services dans des conteneurs (Docker/Podman) ou sur des machines virtuelles pour limiter l’impact en cas de compromission.
- Surveillance et logs : Activez les logs sur vos services et utilisez des outils comme GoAccess pour analyser l’activité et détecter les comportements suspects.
- Principe du moindre privilège : N’ouvrez que les ports nécessaires et configurez vos ACL pour que seuls les utilisateurs autorisés puissent accéder aux services.
- Attention aux exit nodes : Le trafic passant par un exit node peut contourner certaines restrictions locales. Désactivez ou restreignez l’usage de l’exit node pour un contrôle strict des ACL.
- Tags et machines : Utilisez les
tagettagOwnerspour restreindre l’accès à certains services uniquement aux appareils autorisés. Vérifiez régulièrement que ces tags sont correctement appliqués. - Accès local : Même si les ACL restreignent les utilisateurs, une machine peut accéder à ses propres services localement. Prenez ce comportement en compte lors de la conception de vos règles.
- Fail2Ban : Installez et configurez
fail2banpour protéger vos services contre les tentatives répétées de connexion non autorisée, comme les attaques SSH ou HTTP bruteforce. - Firewall : Activez un firewall local (ex.
pfsur macOS ouufw/iptables sur Linux) pour limiter l’accès aux ports essentiels. Même si Tailscale sécurise le trafic, un firewall ajoute une couche de protection supplémentaire contre les accès non autorisés ou les services exposés accidentellement.
Conclusion
Grâce à Tailscale Serve, vous pouvez exposer vos services locaux facilement et en toute sécurité. En combinant ACL et bonnes pratiques de sécurité, vous limitez les risques tout en offrant un accès pratique à vos collaborateurs.



