Bagaimana saya bisa memastikan lalu lintas transmisi menggunakan VPN?

31

Saya ingin memastikan bahwa transmisi hanya mengirim / menerima lalu lintas ketika server yang dijalankannya terhubung ke VPN.

Saya menemukan pertanyaan ini yang serupa tetapi saya tidak ingin memaksa semua lalu lintas melalui VPN dan saya belum dapat menemukan panduan yang baik tentang cara menggunakan firestarter dari baris perintah.

Alih-alih saya berpikir untuk menggunakan ufw, tetapi saya memiliki sedikit atau tidak ada pengalaman dengan firewall, dan saya berharap komunitas dapat membantu saya.

Satu ide yang saya miliki adalah memaksa transmisi untuk menggunakan port tertentu, katakanlah 33442, dan kemudian hanya mengizinkan lalu lintas ke dan dari port itu dari alamat IP server VPN. Saya memeriksa panduan server Ubuntu dan saya pikir bisa melakukan sesuatu seperti ini:

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

Apakah logika ini mengandung garam? Bagaimana Anda melakukannya? Apa yang akan saya gunakan untuk VPNIP, IP publik dari server VPN, atau haruskah saya menentukan rentang subnet lokal yang menghubungkan saya dengan VPN?

Terima kasih atas bantuan Anda!

Evan
sumber

Jawaban:

25

Buat vpnroutegrup:

sudo groupadd vpnroute

Tambahkan iptablesaturan yang menolak koneksi jaringan keluar yang dibuat oleh anggota vpnroutegrup yang tidak melalui tun0antarmuka:

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

Mulai proses transmisi sebagai anggota vpnroutegrup:

sudo -g vpnroute transmission-gtk &
Anne Onyme
sumber
1
Ini persis apa yang saya cari. Terima kasih!
Taeram
3
Peringatan: ini tidak berfungsi dengan Deluge, AFAICT karena Deluge memunculkan proses sup. Saya telah mengujinya dengan cermat dan pengaturan saya benar - sudo -g vpnroute ping google.com akan menampilkan 'Destination unreachable' hingga saya mengaktifkan VPN pada tun0. Tetapi Deluge UI selalu dapat mengunduh torrent, baik VPN terhubung atau tidak. Dengan pgrep -G vpnroute saya menemukan itu karena hanya proses awal / usr / bin / python dijalankan di bawah GID vpnroute, proses spuge-out-gtk tampaknya tidak terjadi.
happyskeptic
10
Bisakah seseorang menjelaskan apa yang dilakukan masing-masing langkah ini, tepatnya?
ohnoplus
2
Transmisi memang memiliki kemampuan untuk mendengarkan alamat tertentu - tetapi tidak ke antarmuka tertentu. Ketika mulai dari baris perintah, --bind-address-ipv4 $IP_ADDRakan memberi tahu Transmission ke alamat mana untuk diikat. Ini kemudian membutuhkan aturan perutean yang tepat untuk memastikan lalu lintas sampai ke tempat yang tepat. Lihat pertanyaan ini untuk mengetahui bagaimana saya berhasil melakukannya.
seanlano
3
@ohnoplus Membuat grup yang disebut "vpnroute"; menambahkan aturan firewall yang menolak koneksi jaringan keluar yang dibuat oleh anggota grup yang tidak melalui VPN (didefinisikan di sini sebagai antarmuka "tun0" tetapi beberapa sistem mungkin berbeda); memulai proses transmisi yang berjalan sebagai anggota grup "vpnroute".
TommyPeanuts
4

Ini berfungsi untuk transmisi tanpa kepala, saya membatasi lalu lintas berdasarkan pengguna yang menjalankan layanan transmisi, 10.0.0.0/8adalah jaringan internal Anda, Anda harus mengubahnya agar sesuai dengan jaringan Anda, tun0adalah antarmuka OpenVPN Anda, eth0adalah koneksi LAN Anda.

Tambahkan sudoke perintah, jika Anda tidak melakukan root:

iptables -F (Kami menggunakan saklar -F untuk menyiram semua aturan yang ada sehingga kami mulai dengan keadaan bersih untuk menambahkan aturan baru.)

iptables -L (daftar pengaturan saat ini)

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

buat iptables tetap ada setelah restart

apt-get install iptables-persistent
service iptables-persistent start
TheZeroth
sumber
Yang ini memberi saya yang berikut ini: $ sudo iptables -A OUTPUT -d 10.0.0.0/8 -p tcp --sport 9091 -m pemilik --gid-pemilik debian-transmisi -o eth0 -j ACCEPT iptables v1.4.12: owner : Nilai buruk untuk opsi "--gid-owner": "debian-transmission" Apakah saya kehilangan sesuatu?
ohnoplus
Ya, @ohnoplus :) Anda harus membuat transmisi debian grup (atau pemilik) terlebih dahulu. Dan pastikan Anda menjalankan aplikasi sebagai grup ini atau pengguna: grup.
Joachim
Inilah yang saya butuhkan untuk mengaktifkan antarmuka web Transmission Remote, terima kasih!
Zane Hooper
4

Berikut ini adalah 'CARA UNTUK' yang lengkap untuk NOOBS (menggunakan debian) untuk memastikan grup pengguna transmisi-debian (yaitu transmisi) hanya merutekan data melalui vpn

JANGAN gunakan 'How to' yang lebih panjang untuk vpn berdasarkan skrip sistem yang rumit ...! iptables adalah METODE TERBAIK (dan sangat mudah) !!! - MENGGUNAKAN BEBERAPA ATURAN IPTABLE yang didasarkan pada pengguna dan grup transmisi untuk mengontrol vpn (tidak seperti banyak metode 'peretasan' yang lebih kompleks yang menggunakan skrip systemd, skrip atas dan bawah dll ...) dan sangat sederhana!

Langkah 1 - Pengaturan: (Diasumsikan transmisi telah terpasang dan oleh karena itu, pengguna transmisi debian!)

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

Langkah 2 - Buat file transmission-ip-rules

sudo nano transmission-ip-rules

dan tambahkan teks dalam blok kode di bawah ini mulai dari #!/bin/bash

PENTING

  • Jika jaringan lokal Anda bukan dari bentuk 192.168.1.x Ubah variabel NET agar sesuai dengan format pengalamatan jaringan lokal Anda sendiri !!.
  • Perlu diketahui juga tentang kekhasan yang 192.168.1.0/25 benar-benar memberikan kisaran 192.168.1.0-255!
  • Kadang-kadang antarmuka Anda eth0, tun0 (yang merupakan vpn) dll. Mungkin berbeda - periksa dengan 'ifconfig' dan ubah jika perlu.
#!/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

Simpan file dan kemudian jalankan

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

lalu pastikan aturan ini tetap ada antara reboot dengan:

sudo dpkg-reconfigure iptables-persistent

dan ketuk ya untuk kedua petunjuk. DIBUAT!

Apa yang hebat tentang skrip ini adalah ia akan melacak semua data melalui perangkat! Saat Anda mengeluarkan

sudo iptables -L -v

itu akan menunjukkan berapa banyak data yang pergi ke antarmuka mana dan sisi mana INPUT atau OUTPUT sehingga Anda dapat yakin bahwa skrip vpn berfungsi dengan baik. Misalnya;

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

Script ini telah diuji secara mendalam pada koneksi, terputus, reboot dari vpn. Ini bekerja dengan baik. Transmisi HANYA dapat menggunakan VPN. Keuntungan besar skrip ini dibandingkan yang lain adalah bahwa saya telah memastikan seperti yang Anda lihat (viaiptables -L -v) bahwa data Anda sesuai dengan apa yang ditarik transmisi (dengan menambahkan aturan INPUT (semua) dan Maju (semua) untuk setiap antarmuka eth0, vpn (tun0)). Jadi, Anda tahu persis apa yang terjadi !!! Total data tidak akan persis sesuai dengan transmisi - Sayangnya saya tidak dapat membedakan sisi INPUT ke pengguna transmisi debian, dan akan ada overhead tambahan dan mungkin proses lain menggunakan VPN yang sama, tetapi Anda akan melihat data yang kira-kira masuk akal. di sisi INPUT dan sekitar setengah pada OUTPUT untuk vpn yang mengkonfirmasikan kerjanya. Hal lain yang perlu diperhatikan - perlu beberapa saat pada putuskan vpn (semua lalu lintas berhenti dengan transmisi) dan sambungkan kembali untuk transmisi 'pergi' pada vpn baru jadi jangan khawatir jika dibutuhkan sekitar 5 menit untuk mulai torrent lagi .. .

TIP - google 'MAN iptables' dan lihat artikel ini tentang pemantauan bandwidth jika Anda ingin tahu baris demi baris cara kerja skrip ini ...

Musclehead
sumber
Kisaran 192.168.1.0/25 adalah 192.168.1.0-127.
Zachary822
3

Idealnya Anda harus menggunakan klien torrent yang memiliki fitur untuk mengikat ke antarmuka tertentu (antarmuka VPN).

Di antara klien torrent, Deluge melakukan ini. Jadi, Anda dapat menginstal Deluge dan mengkonfigurasi antarmuka di Preferensi dan Anda siap!

pengguna4124
sumber
Terima kasih atas jawaban anda. Saya sebenarnya cukup siap menggunakan Transmission untuk saat ini, apakah Anda tahu apakah mungkin untuk mengikat antarmuka tertentu atau rentang IP (jadi itu hanya menggunakan VPN) dengan Transmission? Terima kasih!
Evan
2
@ user4124 Apakah Anda tahu cara mengikat Deluged ke antarmuka jaringan tertentu melalui baris perintah atau webui? Karena sepertinya tidak ada yang tahu bagaimana melakukan ini dengan Transmission, saya sudah mencoba Deluge tetapi belum beruntung sejauh ini. Terima kasih!
Evan
3
@ Evan Anda dapat menentukan alamat ip yang akan diikat di Deluge dengan listen_interfacedi deluge-console atau Interface di opsi Jaringan.
Cas
Meskipun ini benar, saya pikir ini masih saran yang buruk bahkan jika satu-satunya tujuan Anda adalah untuk menyembunyikan unduhan torrent ilegal Anda, Anda harus merangkul anonimitas VPN Anda dan mencari solusi yang luas sistem dan tidak hanya bekerja untuk satu program.
redanimalwar