installer un VPN dans Qubes-OS:
Un vpn peut être installer facilement, directement via le network manager de la sys-net. Le problème avec cette méthode est que si la connexion avec le vpn se coupe, vous ne vous en rendrez pas compte et pourrez continuer à surfer sur le net mais SANS être protégé par votre vpn. De plus, toutes vos VMs passeront par le vpn (et nous voulons avoir la liberté de choisir laquelle peut ou pas passer par le vpn!) La meilleure méthode est de dédié directement une VM pour le vpn.
créez une nouvelle VM basée le template debian et en sélectionnant "provides network" (comme ca, si la connexion est perdu, la connexion internet se coupera.
Dans le template debian:
sudo apt-get install openvpn
sudo systemctl disable openvpn.service
Eteignez le template et redémarrer la sys-vpn.
Dans la sys-vpn:
sudo mkdir /rw/config/vpn
redirect-gateway def1
et
auth-user-pass pass.txt
utilisateur
mot de passe
enregistrez le tout.
Pour tester si tout fonctionne bien, taper la commande:
sudo openvpn --cd /rw/config/vpn --config openvpn-client.ovpn
puis,
ping 1.1.1.1
si tout ce passe bien, faite « cntrl+C » pour fermer la commande.
Maintenant, créez le fichier qui permettra de démarrer le vpn automatiquement lors du démar rage de la sys-vpn:
sudo gedit /rw/config/vpn/qubes-vpn-handler.sh
#!/bin/bash set -e export PATH="$PATH:/usr/sbin:/sbin" case "$1" in up) # To override DHCP DNS, assign DNS addresses to 'vpn_dns' env variable before calling this script; # Format is 'X.X.X.X Y.Y.Y.Y [...]' if [[ -z "$vpn_dns" ]] ; then # Parses DHCP foreign_option_* vars to automatically set DNS address translation: for optionname in ${!foreign_option_*} ; do option="${!optionname}" unset fops; fops=($option) if [ ${fops[1]} == "DNS" ] ; then vpn_dns="$vpn_dns ${fops[2]}" ; fi done fi iptables -t nat -F PR-QBS if [[ -n "$vpn_dns" ]] ; then # Set DNS address translation in firewall: or addr in $vpn_dns; do iptables -t nat -A PR-QBS -i vif+ -p udp --dport 53 -j DNAT --to $addr iptables -t nat -A PR-QBS -i vif+ -p tcp --dport 53 -j DNAT --to $addr done su - -c 'notify-send "$(hostname): LINK IS UP." --icon=network-idle' user else su - -c 'notify-send "$(hostname): LINK UP, NO DNS!" --icon=dialog-error' user fi ;; down) su - -c 'notify-send "$(hostname): LINK IS DOWN !" --icon=dialog-error' user ;; esac
sudo chmod +x /rw/config/vpn/qubes-vpn-handler.sh
sudo gedit /rw/config/vpn/openvpn-client.ovpn
script-security 2
up 'qubes-vpn-handler.sh up'
down 'qubes-vpn-handler.sh down'
Supprimer les autres lignes script-security » « up » et « down »
sudo gedit /rw/config/qubes-firewall-user-script
#!/bin/bash # Block forwarding of connections through upstream network device # (in case the vpn tunnel breaks): iptables -I FORWARD -o eth0 -j DROP iptables -I FORWARD -i eth0 -j DROP ip6tables -I FORWARD -o eth0 -j DROP ip6tables -I FORWARD -i eth0 -j DROP # Accept traffic to VPN iptables -P OUTPUT ACCEPT iptables -F OUTPUT # Add the `qvpn` group to system, if it doesn't already exist if ! grep -q "^qvpn:" /etc/group ; then groupadd -rf qvpn sync fi sleep 2s # Block non-VPN traffic to clearnet iptables -I OUTPUT -o eth0 -j DROP # Allow traffic from the `qvpn` group to the uplink interface (eth0); # Our VPN client will run with group `qvpn`. iptables -I OUTPUT -p all -o eth0 -m owner --gid-owner qvpn -j ACCEPT
enregistrez et rendez le exécutable:
sudo chmod +x /rw/config/qubes-firewall-user-script
sudo chmod +x /rw/config/rc.local
Effacez les lignes du fichier et remplacez les par:
#!/bin/bash VPN_CLIENT='openvpn' VPN_OPTIONS='--cd /rw/config/vpn/ --config openvpn-client.ovpn --daemon' su - -c 'notify-send "$(hostname): Starting $VPN_CLIENT..." --icon=network-idle' user groupadd -rf qvpn ; sleep 2s sg qvpn -c "$VPN_CLIENT $VPN_OPTIONS"
rendez le éxécutable:
sudo chmod +x /rw/config/rc.local
Il ne reste plus qu’a redemarrer la sys-vpn et configurer les AppVMs que vous vous voulez faire passer par le vpn en paramétrant «sys-vpn» dans le «networking» des paramétres.
Plus de renseignement dans la documentation de Qubes-OS.