Wie kann ich sicherstellen, dass der Übertragungsverkehr ein VPN verwendet?

31

Ich möchte sicherstellen, dass die Übertragung nur dann Datenverkehr sendet / empfängt, wenn der Server, auf dem sie ausgeführt wird, mit einem VPN verbunden ist.

Ich habe diese Frage ähnlich gefunden , möchte aber nicht den gesamten Datenverkehr über das VPN erzwingen und konnte keine gute Anleitung zur Verwendung von Firestarter über die Befehlszeile finden.

Stattdessen habe ich überlegt, ufw zu verwenden, aber ich habe wenig bis keine Erfahrung mit Firewalls, und ich hoffe, dass die Community mir helfen kann.

Eine Idee, die ich hatte, war, die Übertragung zu erzwingen, einen bestimmten Port zu verwenden, z. B. 33442, und dann nur Verkehr von und zu diesem Port von der IP-Adresse des VPN-Servers zuzulassen. Ich habe den Ubuntu-Server-Leitfaden durchgesehen und denke, ich könnte so etwas tun:

sudo ufw enable
sudo ufw deny port tcp from localhost to any port 33442
sudo ufa allow port tcp from localhost to VPNIP port 33442
sudo ufw deny port udp from localhost to any port 33442
sudo ufa allow port udp from localhost to VPNIP port 33442

Hält diese Logik ihr Salz? Wie würdest du es machen? Was würde ich für VPNIP verwenden, die öffentliche IP des VPN-Servers, oder sollte ich den lokalen Subnetzbereich angeben, mit dem mich das VPN verbindet?

Danke für Ihre Hilfe!

Evan
quelle

Antworten:

25

vpnrouteGruppe erstellen :

sudo groupadd vpnroute

Fügen Sie eine iptablesRegel hinzu, die jede ausgehende Netzwerkverbindung ablehnt, die von Mitgliedern der vpnrouteGruppe hergestellt wurde, die die tun0Schnittstelle nicht durchlaufen :

sudo iptables -A OUTPUT -m owner --gid-owner vpnroute \! -o tun0 -j REJECT

Übertragungsvorgang als Mitglied der vpnrouteGruppe starten :

sudo -g vpnroute transmission-gtk &
Anne Onyme
quelle
1
Genau das habe ich gesucht. Vielen Dank!
Taeram
3
Warnung: Dies funktioniert nicht mit Deluge, AFAICT, da Deluge aus Sup-Prozessen hervorgeht. Ich habe es sorgfältig getestet und mein Setup stimmt - sudo -g vpnroute ping google.com zeigt "Ziel nicht erreichbar" an, bis ich das VPN auf tun0 aktiviere. Die Benutzeroberfläche von Deluge kann jedoch jederzeit Torrents herunterladen, unabhängig davon, ob eine VPN-Verbindung besteht oder nicht. Mit pgrep-gvpnroute habe ich festgestellt, dass es so scheint, als ob es nicht so ist, als ob nur der anfängliche / usr / bin / python-Prozess unter der vpnroute-GID ausgeführt wird.
happyskeptic
10
Könnte jemand erklären, was jeder dieser Schritte genau tut?
Johnoplus
2
Die Übertragung kann eine bestimmte Adresse abhören, jedoch nicht eine bestimmte Schnittstelle. Beim Start über die Befehlszeile --bind-address-ipv4 $IP_ADDRwird Transmission mitgeteilt, an welche Adresse gebunden werden soll. Dies erfordert dann die richtigen Routing-Regeln, um sicherzustellen, dass der Verkehr an den richtigen Ort gelangt. Schauen Sie sich diese Frage an, um zu erfahren, wie ich es geschafft habe.
Seanlano
3
@ohnoplus Erstellt eine Gruppe mit dem Namen "vpnroute". fügt eine Firewall-Regel hinzu, die alle ausgehenden Netzwerkverbindungen von Mitgliedern dieser Gruppe ablehnt, die nicht über das VPN gehen (hier als Schnittstelle "tun0" definiert, aber einige Systeme können unterschiedlich sein); Startet den Übertragungsprozess, der als Mitglied der Gruppe "vpnroute" ausgeführt wird.
TommyPeanuts
4

Dies funktioniert für eine kopflose Übertragung. Ich beschränke den Datenverkehr basierend auf dem Benutzer, der den Übertragungsdienst ausführt. 10.0.0.0/8Ist Ihr internes Netzwerk, sollten Sie es an Ihr Netzwerk tun0anpassen. Ist Ihre OpenVPN-Schnittstelle, eth0ist Ihre LAN-Verbindung.

In sudoBefehlen, wenn Sie nicht als root angemeldet sind:

iptables -F (Wir haben die Option -F verwendet, um alle vorhandenen Regeln zu löschen, sodass wir mit einem bereinigten Status beginnen, von dem aus neue Regeln hinzugefügt werden können.)

iptables -L (aktuelles Setup auflisten)

NET=10.0.0.0/8
GROUP=debian-transmission
IFACE_INTERNAL=eth0
IFACE_VPN=tun0
ALLOW_PORT_FROM_LOCAL=9091
iptables -A OUTPUT -d $NET -p tcp --sport $ALLOW_PORT_FROM_LOCAL -m owner --gid-owner $GROUP -o $IFACE_INTERNAL -j ACCEPT
iptables -A OUTPUT -d $NET -p udp --sport $ALLOW_PORT_FROM_LOCAL -m owner --gid-owner $GROUP -o $IFACE_INTERNAL -j ACCEPT
iptables -A OUTPUT -m owner --gid-owner $GROUP -o $IFACE_VPN -j ACCEPT
iptables -A OUTPUT -m owner --gid-owner $GROUP -o lo -j ACCEPT
iptables -A OUTPUT -m owner --gid-owner $GROUP -j REJECT

Stellen Sie sicher, dass die Iptables nach dem Neustart dauerhaft sind

apt-get install iptables-persistent
service iptables-persistent start
TheZeroth
quelle
Dieser gibt mir folgendes: $ sudo iptables -A OUTPUT -d 10.0.0.0/8 -p tcp --sport 9091 -m Besitzer --gid-Besitzer debian-transmission -o eth0 -j ACCEPT iptables v1.4.12: Besitzer : Schlechter Wert für "--gid-owner" Option: "debian-transmission" Vermisse ich etwas?
ohnoplus
Ja, @ohnoplus :) Sie müssen zuerst die Debian-Übertragung der Gruppe (oder des Eigentümers) erstellen. Und stellen Sie sicher, dass Sie die Anwendung als diese Gruppe oder Benutzergruppe ausführen.
Joachim
Dies war genau das, was ich brauchte, um die Weboberfläche von Transmission Remote zu aktivieren, danke!
Zane Hooper
4

Hier ist ein vollständiges 'HOW TO' für NOOBS (unter Verwendung von debian), um sicherzustellen, dass die Benutzergruppe von debian-transmission (dh die Übertragung) nur Daten über den VPN weiterleitet

Verwenden Sie NICHT das ausführlichere "How to" für vpn, das auf komplexen Systemskripten basiert ...! Iptables ist die beste (und narrensichere) Methode !!! - VERWENDUNG EINIGER IPTABLE-REGELN basierend auf dem Übertragungsbenutzer und der Übertragungsgruppe zur Steuerung des VPN (nicht wie bei vielen komplexeren Hack-Methoden, bei denen Systemd-Skripte, Up- und Down-Skripte usw. verwendet werden) und es ist soooo einfach!

Schritt 1 - Setup: (Angenommen, die Übertragung ist installiert und der Benutzer debian-transmission existiert daher!)

sudo apt-get install iptables
sudo apt-get install iptables-persistent

Schritt 2 - Erstellen Sie die Datei mit den Übertragungs-IP-Regeln

sudo nano transmission-ip-rules

und fügen Sie den Text in den folgenden Codeblock ein, beginnend mit #!/bin/bash

WICHTIG

  • Wenn Ihr lokales Netzwerk nicht die Form 192.168.1.x hat, ändern Sie die NET-Variable so, dass sie Ihrem eigenen lokalen Netzwerkadressierungsformat entspricht !!.
  • Beachten Sie auch die Eigenart, dass 192.168.1.0/25 tatsächlich den Bereich 192.168.1.0-255 ergibt!
  • Manchmal sind Ihre Schnittstellen eth0, tun0 (das ist der VPN) usw. vielleicht anders - überprüfen Sie mit 'ifconfig' und ändern Sie sie bei Bedarf.
#!/bin/bash
# Set our rules so the debian-transmission user group can only route through the vpn
NET=192.168.1.0/25
GROUP=debian-transmission
IFACE_INTERNAL=eth0
IFACE_VPN=tun0
ALLOW_PORT_FROM_LOCAL=9091
iptables -A OUTPUT -d $NET -p tcp --sport $ALLOW_PORT_FROM_LOCAL -m owner --gid-owner $GROUP -o $IFACE_INTERNAL -j ACCEPT
iptables -A OUTPUT -d $NET -p udp --sport $ALLOW_PORT_FROM_LOCAL -m owner --gid-owner $GROUP -o $IFACE_INTERNAL -j ACCEPT
iptables -A OUTPUT -m owner --gid-owner $GROUP -o $IFACE_VPN -j ACCEPT
iptables -A OUTPUT -m owner --gid-owner $GROUP -o lo -j ACCEPT
iptables -A OUTPUT -m owner --gid-owner $GROUP -j REJECT
# not needed - but added these to properly track data to these interfaces....when using iptables -L -v
iptables -A INPUT -i $IFACE_VPN -j ACCEPT
iptables -A INPUT -i $IFACE_INTERNAL -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
# track any forward (NAT) data for completeness - don't care about interfaces
iptables -A FORWARD

Speichern Sie die Datei und führen Sie sie aus

sudo iptables -F 
sudo chmod +x transmission-ip-rules
sudo ./transmission-ip-rules

Stellen Sie dann sicher, dass diese Regeln zwischen den Neustarts bestehen bleiben:

sudo dpkg-reconfigure iptables-persistent

und tippen Sie auf Ja, um beide Eingabeaufforderungen zu bestätigen. GETAN!

Das Tolle an diesem Skript ist, dass es alle Daten über das Gerät verfolgt! Wenn Sie ausstellen

sudo iptables -L -v

Es wird angezeigt, wie viele Daten auf welcher Schnittstelle und auf welcher Seite EINGABE oder AUSGABE gespeichert sind, sodass Sie sicher sein können, dass das VPN-Skript ordnungsgemäß funktioniert. Z.B;

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination                                                                                         
1749K  661M ACCEPT     all  --  tun0   any     anywhere             anywhere                                                                                            
3416K 3077M ACCEPT     all  --  eth0   any     anywhere             anywhere                                                                                            
 362K  826M ACCEPT     all  --  lo     any     anywhere             anywhere                                                                                            

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination                                                                                         
    0     0            all  --  any    any     anywhere             anywhere                                                                                            

Chain OUTPUT (policy ACCEPT 2863K packets, 2884M bytes)
 pkts bytes target     prot opt in     out     source               destination                                                                                         
 1260  778K ACCEPT     tcp  --  any    eth0    anywhere             192.168.1.0/                                                                                        25       tcp spt:9091 owner GID match debian-transmission
    0     0 ACCEPT     udp  --  any    eth0    anywhere             192.168.1.0/                                                                                        25       udp spt:9091 owner GID match debian-transmission
1973K 1832M ACCEPT     all  --  any    tun0    anywhere             anywhere                                                                                                     owner GID match debian-transmission
 8880  572K ACCEPT     all  --  any    lo      anywhere             anywhere                                                                                                     owner GID match debian-transmission
13132  939K REJECT     all  --  any    any     anywhere             anywhere                                                                                                     owner GID match debian-transmission reject-with icmp-port-unreachable

Dieses Skript wurde eingehend auf Verbindungen, Verbindungsabbrüche und Neustarts über den VPN getestet. Es funktioniert super Die Übertragung kann NUR über das VPN erfolgen. Der große Vorteil dieses Skripts gegenüber den anderen ist, dass ich dafür gesorgt habe, wie Sie sehen können (viaiptables -L -v) dass Ihre Daten mit dem übereinstimmen, was über die Übertragung abgerufen wird (durch Hinzufügen von INPUT (all) - und Forward (all) -Regeln für jede Schnittstelle eth0, vpn (tun0)). Sie wissen also genau, was passiert !!! Die Gesamtsummen der Daten stimmen nicht genau mit der Übertragung überein - Leider kann ich auf der INPUT-Seite nicht nach dem Debian-Übertragungsbenutzer unterscheiden, und es wird sowohl zusätzlichen Overhead als auch möglicherweise andere Prozesse geben, die dasselbe VPN verwenden, aber die Daten sind ungefähr gleich hoch Auf der INPUT-Seite und ungefähr zur Hälfte auf dem OUTPUT, damit der vpn seine Funktion bestätigt. Noch etwas zu beachten - es dauert eine Weile, bis die VPN-Verbindung getrennt wird (der gesamte Datenverkehr wird mit der Übertragung unterbrochen) und die Verbindung wiederhergestellt wird, damit die Übertragung auf dem neuen VPN "in Gang kommt". Machen Sie sich also keine Sorgen, wenn es ungefähr 5 Minuten dauert, bis das Torrenting erneut beginnt. .

TIPP - googeln Sie 'MAN iptables' und lesen Sie diesen Artikel über die Bandbreitenüberwachung, wenn Sie zeilenweise wissen möchten, wie dieses Skript funktioniert ...

Muskelkopf
quelle
Der Bereich von 192.168.1.0/25 liegt zwischen 192.168.1.0-127.
Zachary822 vor
3

Idealerweise sollten Sie einen Torrent-Client verwenden, der über eine Funktion zum Binden an eine bestimmte Schnittstelle (die VPN-Schnittstelle) verfügt.

Bei Torrent-Kunden tut Deluge dies. So können Sie Deluge installieren und die Schnittstelle in den Einstellungen konfigurieren und Sie sind eingestellt!

user4124
quelle
Danke für deine Antwort. Eigentlich bin ich im Moment ziemlich auf die Verwendung von Transmission fixiert. Weißt du, ob es möglich ist, mit Transmission eine Bindung an eine bestimmte Schnittstelle oder einen bestimmten IP-Bereich herzustellen (sodass nur das VPN verwendet wird)? Vielen Dank!
Evan
2
@ user4124 Wissen Sie, wie Deluged über die Befehlszeile oder das Webui an eine bestimmte Netzwerkschnittstelle gebunden wird? Da niemand zu wissen scheint, wie man das mit Transmission macht, habe ich Deluge ausprobiert, aber bisher noch kein Glück gehabt. Vielen Dank!
Evan
3
@Evan Sie können die IP-Adresse angeben, an die in Deluge mit den listen_interfaceOptionen in Deluge -Console oder Interface in Network gebunden werden soll.
Cas
Obwohl dies zutrifft, denke ich, dass dies immer noch ein schlechter Rat ist, selbst wenn Ihr einziger Zweck darin besteht, Ihre illegalen Torrent-Downloads zu verbergen, sollten Sie Ihre VPN-Anonymität stärken und nach systemweiten Lösungen suchen, die nicht nur für ein Programm funktionieren.
Redanimalwar