Cara akses SSH melalui Tor onion tanpa buka port VPS
Ketahui cara menyembunyikan SSH di sebalik perkhidmatan onion Tor untuk menutup semua port masuk. Panduan ini merangkumi konfigurasi v3, kebenaran klien dan langkah elak lockout.
Perubahan SSH melalui perkhidmatan onion Tor
SSH melalui perkhidmatan onion Tor membolehkan anda mentadbir VPS yang tidak menerima sebarang sambungan masuk pada mana-mana port. Pelayan membuat sambungan keluar ke rangkaian Tor dan memastikan sambungan tersebut kekal terbuka. Sesi SSH anda sampai melalui laluan tersebut, jadi tiada apa-apa yang perlu mendengar pada alamat IP awam.
Kesan pada log adalah serta-merta. Sebuah mesin dengan port SSH awam mengumpul beribu-ribu percubaan kata laluan yang gagal setiap hari daripada pengimbas. Alihkan sshd ke belakang perkhidmatan onion dan sekat trafik masuk pada firewall, dan /var/log/auth.log kemudiannya hanya merekodkan sesi yang anda mulakan.
Kosnya ialah tor berada dalam laluan setiap sesi pentadbir. Ia merupakan daemon ruang pengguna yang perlu bermula dan melakukan bootstrap selepas setiap but semula sebelum anda boleh log masuk. Rancang perkara itu sebelum anda menutup port, kerana mod kegagalan di sini ialah kehilangan akses kepada mesin yang tidak boleh anda capai secara fizikal.
Dapatkan akses masuk semula sebelum anda mengubah apa-apa
Jangan bermula sehingga anda mempunyai laluan pemulihan yang tidak menggunakan SSH.
Buka konsol pembekal anda sekarang, sama ada VNC atau konsol bersiri dalam panel kawalan, dan log masuk melaluinya. Jika kata laluan root tidak diketahui, tetapkan semula kata laluan root daripada panel terlebih dahulu dan pastikan ia berfungsi. Konsol yang tidak pernah anda uji bukanlah laluan pemulihan.
Urutan di bawah adalah penting. Setiap langkah dibuktikan sebelum langkah seterusnya dijalankan, dan port 22 dibiarkan terbuka sehingga laluan onion berfungsi.
- Pasang tor dan pastikan ia melakukan bootstrap.
- Tentukan servis onion dan baca alamatnya.
- Sambung melalui onion semasa port 22 masih terbuka.
- Tambah kebenaran klien (client authorisation), kemudian sambung semula.
- Ikat
sshdkepada loopback dan tutup port 22. - But semula, kemudian sambung melalui onion sekali lagi.
Pastikan sesi SSH semasa anda sentiasa terbuka sepanjang proses ini. Sesi yang telah diwujudkan akan bertahan walaupun terdapat perubahan firewall yang mungkin menyekat sesi baharu, jadi ia adalah talian penyelamat utama anda.
Memasang tor pada pelayan
Ubuntu menyertakan tor dalam repositori sendiri namun binaan tersebut sering ketinggalan. Repositori The Tor Project mengandungi versi yang diterangkan dalam dokumentasi mereka. Tambah repositori tersebut menggunakan arahan daripada panduan repositori apt mereka.
sudo apt update
sudo apt install -y apt-transport-https wget gpg
wget -qO- https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc | gpg --dearmor | sudo tee /usr/share/keyrings/deb.torproject.org-keyring.gpg >/dev/nullTulis /etc/apt/sources.list.d/tor.sources. Suites mengambil nama kod keluaran anda, yang dicetak oleh lsb_release -cs (noble pada Ubuntu 24.04).
Types: deb deb-src
URIs: https://deb.torproject.org/torproject.org/
Suites: noble
Components: main
Signed-By: /usr/share/keyrings/deb.torproject.org-keyring.gpgsudo apt update
sudo apt install -y tor deb.torproject.org-keyring
sudo journalctl -u tor@default -n 20 --no-pagerLog sepatutnya berakhir dengan Bootstrapped 100% (done). Jika tersekat di bawah baris tersebut, ini bermakna tor tidak dapat mencapai rangkaian, yang hampir selalu disebabkan oleh peraturan firewall keluar atau jam sistem yang tidak tepat.
Nama unit ini mengelirukan. systemctl status tor melaporkan Active: active (exited) walaupun sistem dalam keadaan sihat, kerana pakej tor dalam Debian dan Ubuntu adalah unit induk berbilang instans yang tugasnya hanya untuk memanggil instans sebenar. Daemon itu sendiri berjalan sebagai tor@default.service. Gunakan nama tersebut untuk status dan untuk journalctl. Arahan start, stop dan reload pada tor masih mencapai instans tersebut, jadi sudo systemctl reload tor berfungsi seperti yang anda jangkakan.
Tentukan onion service untuk port 22
Tambahkan dua baris ke dalam /etc/tor/torrc.
HiddenServiceDir /var/lib/tor/ssh/
HiddenServicePort 22 127.0.0.1:22Baris kedua memberitahu tor untuk menerima port maya 22 pada alamat onion dan menyambung ke 127.0.0.1:22 pada pelayan. Tor mencapai sshd melalui loopback, itulah sebabnya sshd boleh berhenti mendengar pada alamat awam selepas ini. Halakan baris kedua itu ke pelayan web pada 127.0.0.1:80 sebaliknya, dan dua arahan yang sama akan menerbitkan tapak pada alamat onion, yang merupakan servis kedua yang berguna untuk dijalankan setelah tor dipasang.
sudo systemctl reload tor
sudo cat /var/lib/tor/ssh/hostnamePerintah itu mencetak 56 aksara base32 diikuti oleh .onion. Aksara-aksara tersebut ialah kunci awam servis dalam bentuk berkod. Tiada pihak berkuasa sijil dan tiada pendaftaran nama dalam proses ini.
Biarkan tor mencipta /var/lib/tor/ssh/ sendiri. Jika anda menciptanya secara manual dengan pemilik yang salah atau mod yang lebih longgar daripada 0700, tor akan enggan menggunakannya, dan jurnal akan melaporkan direktori tersebut sebagai terlalu permisif. Fail-fail di dalamnya adalah identiti servis: hs_ed25519_secret_key ialah alamat tersebut. Buat sandaran direktori itu dengan mod 600 dan simpan salinannya di luar pelayan, kerana kehilangannya bermakna alamat baharu dan penyuntingan konfigurasi pada setiap klien.
Menyambung dari stesen kerja anda
Stesen kerja anda memerlukan klien tor, yang tidak memerlukan sebarang konfigurasi. Pada Debian atau Ubuntu, ia adalah sudo apt install -y tor netcat-openbsd. Tor kemudian mendengar pada 127.0.0.1:9050 sebagai proksi SOCKS5. SOCKS ialah protokol proksi generik, dan versi 5 boleh membawa nama hos dan bukannya alamat IP, yang merupakan bahagian penting di sini.
OpenSSH tidak mempunyai klien SOCKS sendiri, jadi program pembantu digunakan untuk membuat sambungan. Tambahkan ini ke dalam ~/.ssh/config.
Host myvps
HostName xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.onion
User admin
ProxyCommand /usr/bin/nc -X 5 -x 127.0.0.1:9050 %h %p
ServerAliveInterval 30-X 5 memilih SOCKS5 dan -x 127.0.0.1:9050 menghala ke tor tempatan. %h menyerahkan nama onion kepada tor sebagai satu nama, supaya tor menyelesaikannya di dalam rangkaian. Ini mestilah netcat OpenBSD. GNU netcat tidak mempunyai pilihan -X dan akan berhenti dengan nc: invalid option -- 'X'.
ssh myvpsSambungan pertama adalah perlahan, kerana tor membina litar sebelum perkara lain berlaku. Terima cap jari kunci hos seperti yang anda lakukan di mana-mana tempat lain. Dari sini, pengendalian kunci SSH seperti biasa terpakai tanpa perubahan. Pengangkutan telah berpindah. Pengesahan tidak.
Untuk penggunaan sekali sahaja, anda boleh melangkau entri konfigurasi: torsocks ssh admin@xxxxx.onion melakukan tugas yang sama.
Tambah kebenaran pelanggan v3
Pada masa ini, sesiapa sahaja yang mengetahui alamat tersebut boleh mencapai banner SSH anda dan mula meneka. Alamat Onion tidak boleh disenaraikan daripada sistem direktori, jadi alamat tersebut bertindak seperti rahsia, namun ia boleh bocor melalui cara biasa: sejarah shell dan fail konfigurasi yang dimasukkan ke dalam repositori git. Kebenaran pelanggan menutup jurang tersebut. Servis menerbitkan deskriptornya dalam bentuk yang disulitkan kepada kunci pelanggan, jadi seseorang yang memegang alamat tersebut tanpa kunci tidak dapat mencari servis itu langsung.
Jana pasangan kunci x25519 pada pelanggan. Ini adalah saluran paip daripada panduan kebenaran pelanggan Tor Project, dengan satu perubahan.
openssl genpkey -algorithm x25519 -out /tmp/k1.prv.pem
grep -v " PRIVATE KEY" /tmp/k1.prv.pem | base64 -d | tail --bytes=32 | base32 | sed 's/=//g' > /tmp/k1.prv.key
openssl pkey -in /tmp/k1.prv.pem -pubout | grep -v " PUBLIC KEY" | base64 -d | tail --bytes=32 | base32 | sed 's/=//g' > /tmp/k1.pub.keyVersi yang diterbitkan bagi baris tersebut menggunakan base64pem -d, yang tidak disertakan dalam pemasangan standard Ubuntu. Perintah tersebut kemudian terhenti dengan base64pem: command not found. GNU base64 -d menyahkod badan PEM yang sama, jadi gunakan ia sebagai ganti.
Pada pelayan, pasang kunci awam.
sudo install -d -m 700 -o debian-tor -g debian-tor /var/lib/tor/ssh/authorized_clients
echo "descriptor:x25519:PASTE_PUBLIC_KEY_HERE" | sudo tee /var/lib/tor/ssh/authorized_clients/laptop.auth >/dev/null
sudo chown debian-tor:debian-tor /var/lib/tor/ssh/authorized_clients/laptop.auth
sudo systemctl reload torHanya fail yang berakhir dengan .auth akan dibaca. Simpan ia sebagai laptop.auth.txt dan tor akan mengabaikan fail tersebut tanpa mencetak sebarang ralat, dan servis akan kekal terbuka secara senyap kepada sesiapa sahaja yang mempunyai alamat tersebut.
Pada pelanggan, pasang kunci peribadi. Pada Ubuntu, daemon tor berjalan sebagai pengguna debian-tor dan tidak boleh membaca fail dalam direktori rumah anda, jadi simpan direktori tersebut di tempat yang boleh dicapai oleh pengguna itu.
sudo install -d -m 700 -o debian-tor -g debian-tor /var/lib/tor/onion_auth
echo "ADDRESS_WITHOUT_DOT_ONION:descriptor:x25519:PASTE_PRIVATE_KEY_HERE" | sudo tee /var/lib/tor/onion_auth/myvps.auth_private >/dev/null
sudo chown debian-tor:debian-tor /var/lib/tor/onion_auth/myvps.auth_private
sudo chmod 600 /var/lib/tor/onion_auth/myvps.auth_privateTambah ClientOnionAuthDir /var/lib/tor/onion_auth ke dalam /etc/tor/torrc pelanggan dan muat semula tor. Jika anda menjalankan tor sebagai pengguna anda sendiri, contohnya binaan Homebrew pada macOS, halakan ClientOnionAuthDir ke ~/.tor/onion_auth dengan mod 0700.
Alamat di dalam fail tersebut ialah 56 aksara tanpa akhiran .onion. Padam /tmp/k1.prv.pem dan /tmp/k1.prv.key apabila anda selesai.
Sekarang uji kedua-dua arah. ssh myvps sepatutnya masih boleh bersambung. Dari mesin yang tidak memegang kunci, alamat yang sama sepatutnya gagal. Kegagalan itu adalah bukti anda bahawa kebenaran tersebut aktif.
Tutup port 22, mengikut urutan ini
Tetapkan jaring keselamatan terlebih dahulu. Satu arahan ini akan membatalkan kedua-dua perubahan di bawah selepas lima belas minit jika anda terkunci keluar.
sudo systemd-run --on-active=15m --unit=ssh-rescue \
/bin/sh -c 'ufw allow 22/tcp; rm -f /etc/systemd/system/ssh.socket.d/override.conf; systemctl daemon-reload; systemctl restart ssh.socket'Batalkannya dengan sudo systemctl stop ssh-rescue.timer sebaik sahaja anda mengesahkan laluan onion masih berfungsi.
Seterusnya, hentikan sshd daripada mendengar pada alamat awam. Ubuntu 24.04 mengaktifkan ssh melalui unit soket, jadi ListenAddress dalam sshd_config diabaikan: ssh.socket yang memiliki soket pendengar, bukan sshd. Semak keadaan yang anda hadapi.
systemctl is-enabled ssh.socketJika ia mencetak enabled, jalankan sudo systemctl edit ssh.socket dan tambah baris ini.
[Socket]
ListenStream=
ListenStream=127.0.0.1:22ListenStream= yang kosong akan mengosongkan nilai yang diwarisi daripada unit pakej. Jangan tinggalkan baris itu kerana anda akan menambah pendengar kedua sambil mengekalkan pendengar awam, yang merupakan cara paling biasa langkah ini gagal tanpa disedari.
sudo systemctl daemon-reload
sudo systemctl restart ssh.socket
ss -tlnp | grep ':22'ss sepatutnya menunjukkan 127.0.0.1:22 dan tiada apa-apa pada 0.0.0.0:22. Jika ssh.socket telah dinyahdayakan, letakkan ListenAddress 127.0.0.1 dalam /etc/ssh/sshd_config.d/10-onion.conf, jalankan sudo systemctl restart ssh, kemudian semak dengan baris ss yang sama. Output tersebut adalah bukti dalam kedua-dua keadaan.
Kemudian firewall, yang merupakan pengurusan peraturan ufw pada VPS biasa. Jalankan sudo ufw status numbered dahulu dan padamkan mana-mana peraturan SSH yang disenaraikan.
sudo ufw status numbered
sudo ufw delete allow OpenSSH
sudo ufw default allow outgoing
sudo ufw default deny incoming
sudo ufw status verboseBiarkan trafik keluar dibenarkan. Tor bersambung keluar ke relay pada port seperti 443 dan 9001, jadi polisi default-deny untuk trafik keluar akan menghentikan proses bootstrapping tor dan menghapuskan satu-satunya cara anda untuk masuk pada masa yang sama. Kebanyakan penyedia juga menjalankan firewall rangkaian berasingan dalam panel kawalan. Tutup port 22 di sana juga, atau port tersebut akan kekal boleh dicapai walau apa pun yang dilaporkan oleh ufw.
Jika Docker berjalan pada kotak ini, semak port yang diterbitkan sebelum anda menganggap tugas selesai. Docker menulis peraturannya sendiri ke dalam jadual yang sama dan menerbitkan port kontena terus melepasi ufw, jadi polisi deny ufw bukanlah gambaran keseluruhan yang sebenar.
But semula sebelum anda mempercayainya
systemctl is-enabled tor@default
sudo rebootJika arahan pertama tidak melaporkan servis sebagai diaktifkan, jalankan sudo systemctl enable tor@default sebelum anda melakukan but semula. Tunggu selama dua minit, kemudian jalankan ssh myvps. Tor perlu melakukan bootstrap selepas but, jadi alamat onion hanya akan mula menjawab beberapa ketika selepas mesin itu sendiri aktif.
Jika ia tidak kembali aktif, buka konsol dan baca sudo journalctl -u tor@default -b. Ralat sintaks torrc atau masalah kebenaran direktori akan dipaparkan di sana. Anda juga boleh menyemak suntingan torrc sebelum mengaplikasikannya.
sudo -u debian-tor tor --verify-configKos perbandingan dengan terowong WireGuard
Berbanding dengan VPN WireGuard pada VPS anda sendiri, onion service adalah lebih perlahan dan kurang boleh dijangka. Bersikap jujurlah dengan diri sendiri mengenai pertukaran ini sebelum anda membuat komitmen.
Latensi. Litar klien terdiri daripada tiga relay dan bahagian servis menambah tiga lagi, jadi ketukan papan kekunci anda merentasi kira-kira enam mesin yang dipilih secara rawak di seluruh dunia. Menaip secara interaktif mempunyai sela masa yang ketara, dan penyalinan fail adalah perlahan. WireGuard hanya menambah satu hop. Ukur kes anda sendiri dengan time ssh myvps 'echo ok', kerana angka tersebut bergantung pada litar yang dibina oleh tor dan ia berubah apabila tor membina litar yang lain.
Daemon ruang pengguna dalam laluan kritikal. WireGuard berada dalam kernel dan bermula bersama rangkaian. Tor ialah proses yang mesti bermula, melakukan bootstrap, dan mencapai relay guard sebelum sebarang fungsi berfungsi. Apabila ia gagal, anda perlu menggunakan konsol pembekal.
Ketepatan jam. Deskriptor onion service diterbitkan mengikut tempoh masa, jadi jam yang tidak tepat akan menyebabkan carian alamat gagal tanpa sebarang mesej yang jelas. timedatectl sepatutnya melaporkan System clock synchronized: yes.
Apa yang anda peroleh ialah pendedahan yang tidak lagi bergantung pada peraturan firewall yang betul. Tiada port untuk diimbas dan tiada banner untuk diambil, dan alamat itu sendiri merupakan kunci awam, jadi titik akhir membuktikan identitinya sebelum SSH bermula.
Jawapan praktikal biasanya adalah kedua-duanya. Jalankan WireGuard sebagai laluan harian, dan kekalkan onion service sebagai laluan yang masih berfungsi apabila konfigurasi WireGuard salah. Ini meninggalkan satu port UDP terbuka dan bukannya port SSH awam. Tiada satu pun daripada ini menggantikan pengukuhan sshd itu sendiri: pengesahan berasaskan kunci sahaja dan log masuk bukan root masih penting, kerana onion service melindungi laluan rangkaian dan tiada apa-apa selain itu.
Mod kegagalan dan ralat yang akan anda lihat
Tor tidak pernah melepasi Bootstrapped 0%. Trafik keluar disekat, atau jam sistem jauh tersasar. Semak polisi keluar dengan sudo ufw status verbose, kemudian jalankan timedatectl.
systemctl status tor menyatakan active (exited). Ini adalah perkara biasa pada Debian dan Ubuntu. Baca tor@default sebagai gantinya.
Deskriptor tidak dapat ditemui. Tor mengembalikan ralat lanjutan SOCKS F0, "Onion Service Descriptor Can Not be Found". Sama ada deskriptor belum diterbitkan, yang mengambil sedikit masa selepas muat semula, atau tor pada pelayan tidak berjalan.
F4, "Onion Service Missing Client Authorization". Pelanggan tidak mempunyai .auth_private sepadan yang boleh digunakan oleh tor. Pastikan ClientOnionAuthDir ada dalam torrc, direktori tersebut mempunyai mod 0700, nama fail berakhir dengan .auth_private, dan debian-tor boleh membacanya.
F5, "Onion Service Wrong Client Authorization". Kunci peribadi tidak sepadan dengan fail .auth pada pelayan. = yang tertinggal atau baris baharu yang tidak sepatutnya di dalam rentetan base32 menyebabkan perkara ini.
nc: invalid option -- 'X'. GNU netcat dipasang dan bukannya versi OpenBSD. Jalankan sudo apt install -y netcat-openbsd.
Could not resolve hostname. ssh mencuba DNS biasa, yang tidak mempunyai jawapan untuk .onion, jadi ProxyCommand tidak pernah dijalankan. Corak Host dalam ~/.ssh/config tidak sepadan dengan nama yang anda taip.
Permission denied (publickey). Terowong berfungsi dan tor telah selesai. Anggap ini sebagai masalah publickey permission denied biasa dan jangan libatkan tor dalam hal ini.
FAQ
Adakah onion service benar-benar bermaksud tiada port terbuka pada VPS saya?
Ya, sebaik sahaja sshd diikat pada 127.0.0.1 dan firewall menolak trafik masuk. Tor membuat sambungan TCP keluar ke relay dan sesi anda bergerak kembali melaluinya, jadi tiada apa-apa pada pelayan yang menerima sambungan pada alamat awam. Buktikan dengan ss -tlnp pada pelayan dan imbasan port dari tempat lain. Jangan lupa firewall rangkaian penyedia dalam panel kawalan, yang merupakan kawalan berasingan daripada ufw dan perlu ditutup juga.
Adakah alamat .onion sudah cukup selamat untuk SSH?
Tidak. Alamat tersebut mempunyai 56 aksara dan tidak boleh diteka atau disenaraikan daripada sistem direktori, jadi ia bertindak seperti rahsia, tetapi ia boleh bocor melalui sejarah shell dan fail konfigurasi. Tambahkan kebenaran klien v3. Dengan itu, deskriptor servis disulitkan kepada kunci klien anda, jadi seseorang yang hanya memegang alamat tersebut akan mendapat ralat lanjutan F4 dan tidak akan sampai ke sshd sama sekali.
Apa yang berlaku jika tor gagal bermula selepas but semula?
Anda kehilangan akses SSH sepenuhnya, kerana alamat onion adalah satu-satunya jalan masuk. Itulah sebabnya konsol penyedia perlu diuji sebelum anda menutup port 22. Tor juga memerlukan masa untuk melakukan bootstrap selepas but, jadi alamat tersebut menjawab lebih lewat daripada mesin bertindak balas terhadap ping. Jika ia tidak menjawab, log masuk pada konsol dan baca sudo journalctl -u tor@default -b, di mana ralat sintaks torrc atau masalah kebenaran pada /var/lib/tor/ssh akan dipaparkan.
Adakah SSH melalui Tor lebih perlahan daripada WireGuard?
Ya, dengan perbezaan yang ketara. Sambungan ke onion service melintasi kira-kira enam relay yang dipilih secara rawak, manakala WireGuard adalah satu hop tersulit terus ke pelayan anda. Menaip terasa lambat dan pemindahan data adalah perlahan. Persediaan biasa ialah menggunakan WireGuard untuk kerja harian dengan onion service disimpan sebagai laluan kecemasan yang berfungsi sekiranya konfigurasi VPN rosak.