sshuttle versus VPN penuh: apa yang sebenarnya dicakup metodenya
sshuttle hanya membawa apa yang didukung metode penerusannya: periksa dulu cakupan TCP, DNS, dan UDP, hak istimewa lokal yang dibutuhkannya, dan pembantu jarak jauhnya.
sshuttle dipilih karena SSH sudah berjalan dan kriptografinya terasa familiar, dan penalaran itu melewati satu-satunya pertanyaan yang menentukan kecocokannya. Paket mana yang meninggalkan mesin, akun mana yang membawanya di sisi jauh, dan berapa banyak hak istimewa lokal yang diminta alat itu. Ketiga jawaban itu berbeda menurut metode penerusan, sehingga penyiapan yang berhasil untuk satu aplikasi bisa gagal diam-diam untuk aplikasi berikutnya. Uraian di bawah dimulai dari protokol yang benar-benar dibutuhkan aplikasi.
Mulai dari protokol yang dibutuhkan aplikasi
Dukungan protokol di sshuttle 2.0 bergantung pada metode yang Anda pilih. Metode NAT dan nft di Linux menangani TCP dan DNS, dan TPROXY menambahkan UDP umum. Setiap platform dan metode punya batasnya sendiri, dan macOS mencegat lewat mekanisme yang sama sekali berbeda. Catat versi terpasang, metode yang dipilih, dan protokol yang dibutuhkan aplikasi sebelum Anda memilih apa pun.
Karena itu, permintaan TCP yang berhasil membuktikan sangat sedikit tentang aplikasi UDP atau tentang setiap pencarian DNS. sshuttle juga memperlakukan TCP sebagai aliran alih-alih menerowongkan paket IP utuh, sehingga kesimpulan throughput yang dipinjam dari VPN konvensional tidak berlaku di sini. Bandingkan mekanisme yang benar-benar Anda jalankan dengan beban kerja yang benar-benar Anda miliki.
| Approach | What it carries | What it needs locally |
|---|---|---|
| SSH local forward | One explicitly named TCP destination | Nothing beyond the SSH client |
| sshuttle, nft or nat method | TCP and DNS to the routed prefixes | Root or sudo for firewall rules |
| sshuttle, tproxy method | TCP, DNS and general UDP | Root or sudo, and kernel support |
| IP VPN | Routed IP traffic in a tunnel | A client with the required privileges |
Apa yang dibutuhkan klien secara lokal
Susunan klien yang didokumentasikan memerlukan root atau sudo, karena ia memasang aturan intersepsi lokal alih-alih membuat antarmuka terowongan. Satu fakta itu mengubah kisah keamanan: proses dengan hak istimewa tersebut dapat mengalihkan lalu lintas seluruh mesin, bukan hanya satu aplikasi. Perlakukan hak istimewa itu sebagai bagian dari desain, bukan detail pemasangan.
Pastikan aturan mana yang dipasang alat itu dan bahwa aturan itu hilang saat alat keluar. Sesi yang mogok dan meninggalkan aturan intersepsi dapat mengirim lalu lintas ke lubang hitam jauh setelah operator percaya koneksi sudah pergi, dan gejalanya tampak seperti gangguan jaringan, bukan aturan yang tertinggal.
sudo sshuttle --method nft --dns 172.19.4.0/24
nft list ruleset | grep -i sshuttle
ip route
Perintah pertama adalah bentuk pemanggilan tipikal, dengan awalan yang benar-benar Anda butuhkan. Perintah kedua menunjukkan apa yang dipasang alat itu, dan yang ketiga memastikan tidak ada antarmuka terowongan yang muncul, yang merupakan hasil yang diharapkan untuk desain ini.
Apa yang dijalankan sisi jauh
Sisi jauh adalah akun SSH yang diizinkan ditambah lingkungan pembantu Python yang kompatibel. Login yang berhasil di bawah shell terbatas tidak otomatis memberi izin menjalankan pembantu itu, dan akun yang dapat menjalankan pembantu tidak otomatis menjangkau setiap layanan target. Kedua fakta itu termasuk dalam permintaan akses, bukan dalam catatan pemecahan masalah.
Lindungi verifikasi identitas host dan autentikasi akun. Menerima kunci host yang tidak dikenal agar koneksi pertama berhasil menghapus pemeriksaan bahwa sisi jauh adalah mesin yang Anda maksud, dan itu lebih penting di sini daripada pada penerusan untuk satu tujuan.
Batasi akun jauh pada layanan yang dibutuhkan alur kerja, dan negosiasikan cakupan itu dengan pihak yang mengoperasikan host. Mereka bagian dari hubungan kepercayaan, dan tidak ada pengaturan di sisi klien yang mengubahnya.
Di mana batas kepercayaan berada
Meneruskan koneksi API privat melalui SSH tidak mengizinkan setiap operasi API. TLS aplikasi dan login aplikasi tetap berlaku, dan alat itu tidak dapat membuat layanan tanpa autentikasi menjadi aman. Lompatan berikutnya dari host jauh juga tidak otomatis menjadi segmen terlindungi yang sama dengan kanal SSH, karena koneksi kedua itu mengikuti kebijakan apa pun yang dimiliki host jauh.
Tuliskan batas itu dalam satu kalimat: lalu lintas ke awalan ini keluar melalui akun ini di host itu. Jika kalimat itu membutuhkan satu paragraf pengecualian, desainnya melakukan lebih dari yang diklaim dokumentasinya dan pantas ditinjau ulang sebelum mencapai produksi.
Buktikan per protokol, lalu pilih alatnya
Uji setiap protokol yang dibutuhkan dengan permintaan tak berbahaya, termasuk jalur pemecah alamat dan keluarga alamat yang dipakai aplikasi. Sertakan pemutusan dalam pengujian, agar perilaku kegagalan yang diizinkan menjadi hasil yang diketahui dan bukan kejutan saat insiden. Sesi yang meneruskan dengan benar selama aktif tidak mengatakan apa pun tentang apa yang terjadi setelah sesi itu putus.
Untuk segelintir layanan yang disebutkan eksplisit, penerusan lokal biasa lebih mudah dimiliki dan diaudit. Untuk lalu lintas aplikasi yang cocok dengan metodenya, sshuttle menawarkan jalan tengah yang sah. Ketika kebutuhannya konektivitas IP yang luas, desain VPN adalah jawaban jujur, dan pilihan mengikuti cakupan serta tanggung jawab operasional, bukan peringkat algoritme enkripsi.