Pages : 1
#1 Le 23/01/2021, à 02:18
- EuReKa-LoS
Un VPN par utilisateur
Bonjour je vous expose mes interrogations, je cherche à monter un serveur avec plusieurs utilisateurs.
Et j'aimeras que chaque utilisateur puisse utilisé son VPN, par exemple Bob utilise TunnelBear, Léon NordVPN et ainsi de suite.
L'utilisateur se connecte en distant sur le serveur par exemple (VNC, XRDP etc..), accède à son bureau et lance son VPN.
Je suis parti à la base d'un hyperviseur et solution simple c'est créer une VM par utilisateur mais je me suis demandé si via du routage ce n'était pas possible ?
Ou via un système de conteneur ?
J'ai pas mal cherché mais aucun sujet ne correspond vraiment à ce que je cherche.
En général c'est plusieurs personne qui cherche une connexion VPN partagée.
Peut être en splittant les interface réseau par utilisateur ? (vu que c'est sur une base d'hyperviseur je peut modulé).
Merci d'avance pour vos réponse.
Hors ligne
#2 Le 25/01/2021, à 15:43
- Zakhar
Re : Un VPN par utilisateur
Pas sûr de bien comprendre ton exposé !
Cependant, tu peux faire des règles iptables par utilisateur, pour dérouter leur flux sur leur propre VPN.
Exemple, j'ai un vpn (avec une Freebox distante) et quand il monte voici les règles :
$ sudo cat /etc/openvpn/vpnup.sh
#! /bin/sh
# Allow curl01 user to go through the VPN
# Called by openvpn with:
# cmd tun_dev tun_mtu link_mtu ifconfig_local_ip ifconfig_remote_ip [ init | restart ]
#
if [ "${6}" = "init" ]; then
iptables -t mangle -A OUTPUT -m owner --uid-owner 131 -j MARK --set-mark 3
iptables -t nat -A POSTROUTING -o "${1}" -j SNAT --to-source "${4}"
ip route add default via "${4}" table 3
ip rule add fwmark 3 table 3
ip route flush cache
fi
Le script est appelé au "up" par OpenVPN.
Il "détourne" le trafic de l'utilisateur "curl01" (UID 131 en l'occurrence) vers le VPN en question.
Ainsi, si je fais :
sudo -u curl01 curl https://url
Cette URL est téléchargée via le VPN
Un curl "normal" sans le précéder par le changement d'utilisateur, et le téléchargement se fait par l'interface par défaut de la machine.
"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)
Hors ligne
#3 Le 26/01/2021, à 04:08
- EuReKa-LoS
Re : Un VPN par utilisateur
Hello merci pour ta réponse.
Oui j'ai vu que c'était possible de router le tout.
C'est utile pour mettre en place un système Killswitch par exemple si le VPN est down.
Mais est-il possible de connecté deux utilisateurs sur la machine exemple, Bob et Léon et en plus que chacun puisse exploité son VPN simultanément ?
D'après les tests que j'ai fais si les deux utilisateur son log (via RDP par exemple).
Je parle par exemple d'une machine capable d'accueillir 3 utilisateurs avec leur VPN (tunnelbear, nord et compagnie).
Je suis sur le sujet depuis une semaine mais je ne trouve pas réellement le même système que moi..
Router le traffic par exemple au travers du VPN c'est pas le problème mais utilisé deux VPN en même temps ca semble inédit.
Si j'active un des VPN tout le traffic passe par celui-ci, et si le deuxième utilisateur souhaite se connecté sur son VPN ca bascule de VPN.
Hors ligne
#4 Le 26/01/2021, à 21:48
- Zakhar
Re : Un VPN par utilisateur
Si j'active un des VPN tout le traffic passe par celui-ci, et si le deuxième utilisateur souhaite se connecté sur son VPN ca bascule de VPN.
LOL non !
Vous avez une vision d'un VPN qui est déformé par votre usage unique...
Un VPN est juste une interface fictive (le V de virtuel) et chiffrée, de sorte à pouvoir fonctionner sur une réseau public.
Que le trafic de la machine soit redirigé vers ce VPN ou pas est juste une option... que par déformation vous pensez incluse, mais il n'en est rien, c'est à vous de le définir. Bien sûr comme c'est en général "l'usage de leurs clients", et que c'est "un peu technique" ("technique" voulant dire : je n'y comprends rien, et surtout pas envie d'essayer de comprendre, d'autre que moi on réglé ça à ma place... et c'est donc un mot "relatif"), les "fournisseurs de VPN" vous livrent les fichiers de "configuration" avec l'option présente par défaut.
Dans openvpn, la directive qui fait ça est :
redirect-gateway
Qui, comme son nom l'indique clairement, redirige la passerelle de sortie.
Bien sûr avec le script iptables indiqué ci-dessus on ne veut pas ça, on veut juste monter le VPN sans absolument rediriger le trafic.
Et donc c'est d'une simplicité enfantine, on fait ça :
# redirect-gateway
La plupart de mes VPN sont montés ainsi, sans redirection de la passerelle.
Relancer les VPN et hop, plus de redirection globale.
On peut alors avoir 10 VPN si ça nous chante, il y a peut-être une limite système sur le nombre de "tun", et sans doute une limite pratique à avoir des connexions X déportées...
Aussi décliner le script ci-dessus pour chaque utilisateur, en dehors de le faire pour 2 ou 3, ce n'est pas une solution "industrielle" !
Après, je ne connais pas les "marques" citées, j'espère qu'elles fournissent du OpenVPN standard et pas un truc exotique... sinon il va falloir fouiller la doc... et tâcher de comprendre ce qu'elle raconte !
Un autre truc pratique avec VirtualBox, c'est utiliser OpenVPN en "bridge" si autorisé par les fournisseurs. (La Freebox fait les 2 : routé et bridge).
Ainsi, au lieu d'un "tun" on aura un "tap"
On le fait monter avec
sudo ip link set dev tap0 up
Et il suffit de dire à la VirtualBox d'utiliser un "pont" et le pointer sur tap0
Ainsi le trafic de la VirtualBox partira tout via ce VPN "naturellement", le reste de ta machine continue d'utiliser l'interface par défaut.
Dernière modification par Zakhar (Le 26/01/2021, à 22:02)
"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)
Hors ligne
#5 Le 31/01/2021, à 17:42
- EuReKa-LoS
Re : Un VPN par utilisateur
Hello,
LOL non !
Vous avez une vision d'un VPN qui est déformé par votre usage unique...
Alors non, c'est après des tests que j'ai fais ca via l'interface des sessions utilisateurs directement.
Si c'est possible de base sous Windows je savais d'avance que sous une Debian ou un uBuntu c'était possible aussi.
La doc d'OpenVPN étant un peu "dur" j'étais pas au fait d'utiliser les dossiers "client" et "server" pour les fichiers de configurations par exemple.
Tout le monde parle d'un "etc/openvpn/server.conf" non présent chez moi c'est pour cela.
Bon après avoir fouillé avec les instances multiple, j'ai set un premier service TunnelBear dans OpenVPN:
/etc/openvpn/client/server01.conf
Avec les log, crt, key et compagnie.
Visiblement dans le fichier de conf je peut définir moi même le nom de l'interface et le port ?
client
dev tun0
proto udp
comp-lzo
nobind
ns-cert-type server
persist-key
persist-tun
reneg-sec 0
dhcp-option DNS 8.8.8.8
dhcp-option DNS 8.8.4.4
#redirect-gateway
verb 1
auth-user-pass /etc/openvpn/client/tb.txt
ca /etc/openvpn/client/server01TB.crt
cert /etc/openvpn/client/server01TB.crt
key /etc/openvpn/client/server01TB.key
remote au.lazerpenguin.com 443
cipher AES-256-CBC
auth SHA256
keysize 256
Ici tun0 mais sur le prochain serveur je peut set tun1 ?
Le routage sera bien fait avec iptables, si je peut définir les interfaces virtuel en dur et les lier au utilisateur va être une partie de plaisir après cela.
Comme vous l'avez signaler d'ailleurs
Un autre truc pratique avec VirtualBox, c'est utiliser OpenVPN en "bridge" si autorisé par les fournisseurs. (La Freebox fait les 2 : routé et bridge).
Ainsi, au lieu d'un "tun" on aura un "tap"
Je n'utilise pas de bridge, ni VirtualBox ici j'ai un vrai Hyperviseur (XCP-NG) donc si je dois définir une interface ca sera un ajout d'eth0 dans l'hyperviseur directement mais le routage peut aussi se travaillé via des ports.
Hors ligne
#6 Le 31/01/2021, à 18:16
- jplemoine
Re : Un VPN par utilisateur
Je pense surtout que le besoin est mal exprimé. Un VPN est juste une sorte de tuyau dans une grosse conduite (internet).
A moins que je me trompe, si le serveur VPN est actif, peut importe la manière d'y accéder.
Donc, il suffit juste de monter un serveur et d'y accéder.
Par contre, si le but est qu'il y ait un gros serveur qui fasse tourner des VM et que chaque utilisateur accède à "sa" VM via son VPN, c'est plus compliqué mais je pense que le plus simple :
- les VM sont en pont sur l'interface physique et non en NAT
- chaque VM a son propre serveur VPN.
Ce compte ne servira plus : vous pouvez le supprimer si le coeur vous en dit...
Laissé par l'auteur pour historique.
Hors ligne
#7 Le 01/02/2021, à 09:08
- EuReKa-LoS
Re : Un VPN par utilisateur
Je pense surtout que le besoin est mal exprimé.
Et j'aimeras que chaque utilisateur puisse utilisé son VPN, par exemple Bob utilise TunnelBear, Léon NordVPN et ainsi de suite.
L'utilisateur se connecte en distant sur le serveur par exemple (VNC, XRDP etc..), accède à son bureau et lance son VPN.
Ma solution provisoire:
Je suis parti à la base d'un hyperviseur et solution simple c'est créer une VM par utilisateur mais je me suis demandé si via du routage ce n'était pas possible ?
Donc résultat au final sur mon hyperviseur sur une machine, j'ai réussi à initialiser mes deux instance de VPN (Nord VPN et FreeOpenVPN par exemple) et j'ai même choisi le nom des interface tun1 et tun2.
J'ai plus qu'a faire le routage en dur.
VPN inactif, zéro traffic possible pour l'utilisateur de ce VPN.
VPN up, traffic possible pour l'utilisateur de ce VPN.
Hors ligne
#8 Le 03/02/2021, à 19:58
- EuReKa-LoS
Re : Un VPN par utilisateur
Hello, alors j'ai bien set mes VPN dans le dossier:
/etc/openvpn/client/
Je peut les lancer sans soucis via:
sudo systemctl enable openvpn-client@LeVPNDeMonChoix.service
sudo systemctl start openvpn-client@LeVPNDeMonChoix.service
Du coup sur la machine j'ai par exemple trois VPN:
tun0, tun1, tun2
Et la au niveau iptables j'ai du mal.
J'aimerais gardé l'accès à l'eth pour les connexion RDP (3389) et certains utilisateur.
Et que d'autrescertains utilisateur ai accès via VPN uniquement ou juste les ports 80 et 443.
Voici ce que j'ai utiliser (utilisateur 1000 et 1002 son existant sur la machine).
#!/bin/sh
# Reset IPtables
iptables -F
iptables -X
#Start Rules
iptables -P INPUT DROP
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -N f2b-sshd
iptables -A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd
#Tun0 Established
iptables -A INPUT -i tun0 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A INPUT -p udp -m udp -m state --state ESTABLISHED -m comment --comment "Allow the server to reply (related to lport)" -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dports 22,80,443,3389 -j ACCEPT
iptables -A INPUT -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -s 8.8.8.8/32 -p udp -m udp --sport 53 -m state --state ESTABLISHED -m comment --comment "Allow the DNS1 to answer" -j ACCEPT
iptables -A INPUT -s 8.8.4.4/32 -p udp -m udp --sport 53 -m state --state ESTABLISHED -m comment --comment "Allow the DNS2 to answer" -j ACCEPT
iptables -A INPUT -m limit --limit 10/min -m comment --comment "Log Input" -j LOG --log-prefix "FW DROP INPUT: " --log-level 7
iptables -A INPUT -i tun+ -m comment --comment "Accept TUN Input" -j ACCEPT
iptables -A INPUT -p icmp -m icmp --icmp-type 0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -m limit --limit 10/min -m comment --comment "Log Forward" -j LOG --log-prefix "FW DROP FORWARD: " --log-level 7
# User 1000 sur eth ?
iptables -A OUTPUT -o lo -m owner --uid-owner 1000 -j ACCEPT
iptables -A OUTPUT -o eth0 -m owner --uid-owner 1000 -j ACCEPT
# User's VPN
iptables -A OUTPUT -o lo -m owner --uid-owner 1002 -j ACCEPT
iptables -A OUTPUT -o tun0 -m owner --uid-owner 1002 -j ACCEPT
iptables -A OUTPUT -o lo -m comment --comment "Accept localhost Output" -j ACCEPT
iptables -A OUTPUT -p udp -m udp -m comment --comment "Allow my computer to query the DNS server" -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --sports 22,80,443,3389 -j ACCEPT
iptables -A OUTPUT -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
iptables -A OUTPUT -d 8.8.8.8/32 -p udp -m udp --dport 53 -m state --state NEW,ESTABLISHED -m comment --comment "Allow my machine to connect to the DNS1" -j ACCEPT
iptables -A OUTPUT -d 8.8.4.4/32 -p udp -m udp --dport 53 -m state --state NEW,ESTABLISHED -m comment --comment "Allow my machine to connect to the DNS2" -j ACCEPT
iptables -A OUTPUT -m limit --limit 10/min -m comment --comment "Log Output" -j LOG --log-prefix "FW DROP OUTPUT: " --log-level 7
iptables -A OUTPUT -p icmp -m icmp --icmp-type 0 -m state --state RELATED,ESTABLISHED -m comment --comment "Allow ping to Outside" -j ACCEPT
iptables -A OUTPUT -o tun+ -m comment --comment "Accept TUN Output" -j ACCEPT
iptables -A f2b-sshd -j RETURN
Hors ligne
Pages : 1