Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 18/04/2019, à 20:48

abecidofugy

[Résolu] Couper internet en cas de déconnexion à un vpn

Salut,

Je voudrais pouvoir couper toute connexion à internet si une déconnexion à mon vpn devait arriver. Une idée de comment faire ça ?

Je précise que je suis sous KDE, mais bon, je ne pense pas que ça joue… ?

Merci de votre aide.

//EDIT : ça existe sous Windows : http://www.logitheque.com/articles/comm … n_1300.htm

Dernière modification par abecidofugy (Le 22/04/2019, à 17:08)

Hors ligne

#2 Le 18/04/2019, à 22:06

kamaris

Re : [Résolu] Couper internet en cas de déconnexion à un vpn

Salut, ça va être à base d'iptables si tu dois le faire à la main. Tu bannis par défaut toute connexion, et tu ne l'autorises ensuite que sur ton vpn.
Pour bannir c'est :

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

Ensuite pour autoriser sur un vpn d'interface tun0, de protocole udp sur le port 1194, ça peut être :

iptables -A INPUT -i tun0 -j ACCEPT
iptables -A INPUT -i tun0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p udp -m udp --sport 1194 -j ACCEPT
iptables -A OUTPUT -o tun0 -j ACCEPT
iptables -A OUTPUT -o tun0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p udp -m udp --dport 1194 -j ACCEPT

C'est tiré de ce qui est fait pour ProtonVPN.
Après ça, à voir si tu dois rajouter des choses, comme autoriser le trafic en local, ou vers des IPs particulières… il faut que tu prennes le temps de lire la page de manuel d'iptables.

Dernière modification par kamaris (Le 18/04/2019, à 22:08)

Hors ligne

#3 Le 21/04/2019, à 20:54

LukePerp

Re : [Résolu] Couper internet en cas de déconnexion à un vpn

abecidofugy a écrit :

Je voudrais pouvoir couper toute connexion à internet si une déconnexion à mon vpn devait arriver.

Voici deux solutions pour répondre à ton besoin, ce sont des kill switch :
https://github.com/primaryobjects/vpndemon
https://github.com/Philippe734/VPN-Lifeguard
J'utilise le premier en l'ayant un peu modifié, car c'est du script


Desktop & Laptop - Ubuntu Mate dernière LTS - Intel i5 - 16 Go - Dual boot Windows offline

Hors ligne

#4 Le 22/04/2019, à 17:08

abecidofugy

Re : [Résolu] Couper internet en cas de déconnexion à un vpn

LukePerp a écrit :
abecidofugy a écrit :

Je voudrais pouvoir couper toute connexion à internet si une déconnexion à mon vpn devait arriver.

Voici deux solutions pour répondre à ton besoin, ce sont des kill switch :
https://github.com/primaryobjects/vpndemon
https://github.com/Philippe734/VPN-Lifeguard
J'utilise le premier en l'ayant un peu modifié, car c'est du script

Merci beaucoup, ça marche impeccablement smile

Juste à installer Zenity

Hors ligne

#5 Le 01/05/2019, à 16:16

abecidofugy

Re : [Résolu] Couper internet en cas de déconnexion à un vpn

@LukePerp : J’ai épinglé l’icône de VPN Demon, mais lorsque je cherche à le lancer via celui-ci, j’ai ce message d’erreur : "Impossible d'exécuter la commande spécifiée. Le fichier ou le dossier zenity n'existe pas."
Si j’efface le lanceur et fais un ALT + F2 en pointant VPN Demon, là le script se lance. Une idée de comment résoudre ça ?

Merci.

Hors ligne

#6 Le 01/05/2019, à 18:15

LukePerp

Re : [Résolu] Couper internet en cas de déconnexion à un vpn

Oui, moi aussi j'avais le même problème. J'avais trouvé une solution. Je la récupère et je complète ce post.
Edit : voici la solution
J'avais trouvé un utilisateur qui avait modifié le script VPNDemon pour palier à ce défaut. La solution est d'utiliser trois scripts, dont vpndemon.sh que je colle ici. Le premier est à démarrer, il va démarrer vpndemon, connecter le vpn et démarrer les applications surveillées tel que qBittorrent. Le second va déconnecter le vpn à la fin et le troisième est vpndemon.

Premier script, celui qui va démarrer le vpn. Il est à épingler dans ton dock ou ajouter son lien dans le menu démarrer :
AutorecoVPN.sh

#!/bin/bash
# étape 1 : récupérer le UUI du vpn : nmcli con
# étape 2 : saisir le UUI dans ce script et DecoVPN.sh

TargetProgramName="qbittorrent"
VPNUUID="xxxxxxxxxxxx" # <<<<<<<< modifier ce UUI
#notify-send "Connexion du VPN..."
exec /ThePathTo/vpndemon.sh &
while [ "true" ]
do
	VPNCON=$(nmcli con show --active | grep "$VPNUUID")
	if [ -z "$VPNCON" ]; then
		echo "VPN déconnecté"
		(sleep 1s && nmcli con up uuid "$VPNUUID") 
		FLAGRECO="vrai"
	else
		if [[ $FLAGRECO = "vrai" ]]; then
			FLAGRECO="faux"
			#exec $TargetProgramName &
		fi
	fi
	sleep 10
done

Le second script va fermer les applications surveillées lors de la déconnexion manuel du vpn, tel que qBittorrent :
DecoVPN.sh

#!/bin/bash
KillProgName="qbittorrent"
notify-send "Fermeture des torrents..."
pkill $KillProgName
pkill $KillProgName
pkill $KillProgName
sleep 2
notify-send "Déconnexion..."
pkill AutorecoVPN.sh
sleep 2
nmcli con down uuid xxx-xx-xx-xx-xxxxx # <<<< remplacer xxx par UUID du VPN
notify-send "VPN déconnecté"

Et le troisième script, vpndemon.sh

#!/bin/bash

killProgramName="qbittorrent"
killProgramNameB="firefox"
interface="org.freedesktop.NetworkManager.VPN.Connection"
member="VpnStateChanged"
logPath="/tmp/vpndemon"
header="VPNDemon\nProtection contre déconnexion VPN\n\n"

# Clear log file.
> "$logPath"

list_descendants()
{
    local children=$(ps -o pid= --ppid "$1")

    for pid in $children
    do
        list_descendants "$pid"
    done

    echo "$children"
}

# Consider the first argument as the target process
if [ -z "$killProgramName" ]
then
    killProgramName=$(zenity --entry --title="VPNDemon" --text="$header Enter name of process to kill when VPN disconnects:")
fi

result=$?
if [ $result = 0 ]
then
    if [ $killProgramName ]
    then
        header="$header Cibles : $killProgramName + $killProgramNameB\n\n"

        (tail -f "$logPath") |
        {
            zenity --progress --title="VPNDemon" --text="$header Surveillance du VPN"

            # Kill all child processes upon exit.
            kill $(list_descendants $$)
        } |
        {
            # Monitor for VPNStateChanged event.
            dbus-monitor --system "type='signal',interface='$interface',member='$member'" |
            {
                # Read output from dbus.
                (while read -r line
                do
                    currentDate=`date +'%m-%d-%Y %r'`

                    # Check if this a VPN connection (uint32 2) event.
                    if [ x"$(echo "$line" | grep 'uint32 3')" != x ]
                    then
                        echo "VPN Connected $currentDate"
                        echo "# $header VPN Connecté $currentDate" >> "$logPath"
                    fi

                    # Check if this a VPN disconnected (uint32 7) event.
                    if [ x"$(echo "$line" | grep 'uint32 6\|uint32 7')" != x ]
                    then
                        echo "VPN Disconnected $currentDate"
						notify-send "Déconnexion du VPN" "Reconnexion en cours..."
                        echo "# $header VPN Déconnecté $currentDate" >> "$logPath"

                        # Kill target process.
						pkill $killProgramName
						pkill $killProgramName
						pkill $killProgramName
						pkill $killProgramNameB
						pkill $killProgramNameB
						pkill $killProgramNameB
                    fi
                done)
            }
        }
    else
        zenity --error --text="No process name entered."
    fi
fi
echo "Déconnecter VPN"
exec /ThePathTo/DecoVPN.sh &

Dernière modification par LukePerp (Le 01/05/2019, à 19:51)


Desktop & Laptop - Ubuntu Mate dernière LTS - Intel i5 - 16 Go - Dual boot Windows offline

Hors ligne

#7 Le 02/05/2019, à 18:16

abecidofugy

Re : [Résolu] Couper internet en cas de déconnexion à un vpn

Donc je résume :
juste à installer Zenity
J'ai changé d’icône : j’ai épinglé /usr/share/applications/VPNDemon.desktop à mon panel de lancement, et ça marche sans autre procédure.

Dernière modification par abecidofugy (Le 05/01/2020, à 23:39)

Hors ligne