Il kill switch OpenVPN non funziona


0

Ho bisogno di un kill switch che uccida le connessioni in uscita se OpenVPN non è in esecuzione, perché altrimenti una VPN non avrebbe senso - se si disconnette, e c'è una connessione, il mio IP reale viene rilasciato.

Diciamo che 1.2.3.4 è il mio indirizzo del server VPN, e questo è il mio iptables dopo che ho eseguito il mio script kill switch:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  255.255.255.255      anywhere
ACCEPT     all  --  192.168.0.0/16       192.168.0.0/16

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             255.255.255.255
ACCEPT     all  --  192.168.0.0/16       192.168.0.0/16
DROP       all  --  anywhere            !1.2.3.4

Imo dovrebbe funzionare bene. Ma non riesco a connettermi a Internet, mentre il traffico locale passa. Vedi un problema in questa configurazione?

Il mio computer è un Raspberry Pi 3 in questa situazione, e sto usando OpenVPN su TCP e ho un Fritz.Box collegato a WAN.

Vedi qualche errore? Il mio script è il seguente:

#!/bin/bash

# check that OpenVPN is actually running.
running=$(ps -e | grep openvpn)
if [ $? -eq 1 ]; then
    echo "No active VPN session found."
    exit 1
fi

iptables -F

# Get WAN IP
WAN_IP=$(wget -q -O - http://ipecho.net/plain)

# Configure IPTable rules
# Change eth0 to wlan0 (or whatever network interface is being used) for wireless
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -d 255.255.255.255 -j  ACCEPT
iptables -A INPUT -s 255.255.255.255 -j ACCEPT
iptables -A INPUT -s 192.168.0.0/16 -d 192.168.0.0/16 -j ACCEPT
iptables -A OUTPUT -s 192.168.0.0/16 -d 192.168.0.0/16 -j ACCEPT
iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT
iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
iptables -A OUTPUT -o eth0 ! -d $WAN_IP -j DROP

È assemblato con le seguenti fonti: https://github.com/qbwaggle/vpnkillswitch/blob/master/vpnkillswitch.sh , https://www.reddit.com/r/VPN/comments/43djk3/generic_kill_switch_script_for_openvpn_linux/

Ho provato questi script da solo, ma non funzionano (penso che sia lo stesso errore?).

Qualche idea? Grazie in anticipo.


Si noti che cose del genere non può possibilmente "rilascia l'IP reale" (che implicherebbe parlare di DHCP al tuo router). Quello che fanno è semplicemente impedire l'uso dell'indirizzo IP.
grawity

Se OpenVPN fallisce, qualunque sia il motivo, i programmi utilizzano il modo in cui non viene eseguito il tunneling verso il server VPN. I server che il mio client si sta collegando per ottenere il mio vero indirizzo IP WAN, che ho ricevuto dall'ISP. Questo è qualcosa che connette l'intero processo di comunicazione a me. Quindi "rilascia il vero IP" nel mio modo descritto. O mi sbaglio? EDIT: Forse vuoi dire che la parola "reale" non è quella giusta, diciamo originale.
Jonniboy

Ah, quindi intendevi "rilasciare" nel senso di "rivelare".
grawity

@grawity Sì. Ma sai qualcosa per risolvere il problema? : D
Jonniboy

@MariusMatutiae Certo, perché no? Non ho avuto il tempo di risolvere il problema da solo, quindi se hai un'idea, dimmelo.
Jonniboy

Risposte:


1

OpenVPN consente l'uso di script esterni quando la seguente direttiva,

 script-security 2

è incluso nei file di configurazione del client. Usa le direttive

up /path/to/executable/script
down /path/to/another/executable/script

per eseguire questi due script quando le interfacce vengono configurate o eliminate. Nel tuo caso, su è irrilevante, ma puoi usarlo giù abbattere tutte le interfacce di rete quando viene aperto OpenVPN, in modo da assicurarsi che non vi siano perdite di traffico attraverso canali non criptati. Si prega di notare che, se OpenVPN si blocca o è disconnesso, fintanto che il tuo cliente pensa che sia connesso ci sarà nessuna perdita , perché il traffico viene ancora inviato crittografato (e possibilmente compresso) al server OpenVPN. Quindi è impossibile intercettarlo.

Il giù lo script può essere scritto come segue:

#!/bin/bash
find /sys/class/net  -mindepth 1 -maxdepth 1  -exec sh -c '[ "$1" != "lo" ] && ip link set dev $(basename $1) down' something {}   \;

Questo fa crollare tutti interfacce, tranne Lo che è necessario per il tuo pc per funzionare.


Buona idea di farlo in un altro modo. Ci proverò il prossimo fine settimana. Ma hai un'idea di cosa c'è di sbagliato nel mio iptables?
Jonniboy

@Jonniboy L'errore nello script che hai fatto non il post è che presuppone che OpenVPN sia su UDP, mentre dichiari esplicitamente che il tuo è su TCP. Lo script che hai pubblicato dovrebbe funzionare.
MariusMatutiae
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.