Setiap situs web yang pernah Anda bangun bertumpu pada setumpuk izin dari orang lain. Sebuah registry menyewakan Anda nama itu. Sebuah registrar bisa mematikannya kapan saja. Sebuah certificate authority menjamin identitas Anda. Sebuah resolver harus menjawab dengan jujur, dan sebuah port harus tetap terbuka di alamat publik tempat siapa pun bisa menemukannya, mengambil sidik jarinya, dan menyerangnya. Masing-masing adalah pihak yang bisa ditekan, dan permukaan yang bisa diserang.
Layanan onion menghilangkan semuanya itu. Tidak ada registrar, karena alamatnya diturunkan dari kunci yang Anda hasilkan sendiri. Tidak ada DNS, karena tidak ada yang me-resolve nama itu. Tidak ada certificate authority, karena alamatnya adalah kunci publik itu sendiri dan koneksinya mengautentikasi dirinya sendiri terhadap kunci itu. Dan sama sekali tidak ada port masuk — server Anda yang menghubungi keluar untuk menemui pengunjungnya, sehingga ia bisa berada di balik firewall yang menolak semuanya dan tetap bisa dijangkau dari mana pun di bumi.
Penyiapannya cuma butuh sekitar sepuluh menit dan tiga baris konfigurasi. Yang perlu ketelitian adalah sisa mesin itu, karena web server di balik Tor sama sekali tidak tahu bahwa dirinya seharusnya tersembunyi, dan dengan senang hati akan mengumumkan hostname-nya sendiri, IP-nya sendiri, dan kembaran clearweb-nya sendiri kepada siapa pun yang mengajukan pertanyaan yang tepat. Panduan ini mengerjakan yang sepuluh menit itu, lalu mengerjakan bagian yang sebenarnya menentukan apakah semuanya berhasil.
Apa yang dihilangkan layanan onion dari stack
Mulai dari apa yang sebenarnya berbeda, karena ini lebih dari sekadar hostname yang terlihat aneh. Situs biasa bergantung pada serangkaian pihak eksternal, dan sebuah layanan onion sama sekali tidak punya rangkaian itu.
- Tidak ada registrar dan tidak ada registry. Alamat onion v3 adalah hasil encoding base32 dari kunci publik ed25519, ditambah checksum dan satu byte versi — lima puluh enam karakter, dihasilkan di mesin Anda sendiri dalam sepersekian detik. Tidak ada yang menjualnya kepada Anda, jadi tidak ada yang bisa mengambilnya kembali, dan tidak ada tanggal perpanjangan. Itu kebalikan persis dari model risiko dalam panduan kami tentang mendaftarkan domain secara privat.
- Tidak ada DNS. Tidak ada yang me-resolve nama .onion. Klien meminta ke jaringan Tor sebuah descriptor bertanda tangan yang dipublikasikan di bawah kunci itu, jadi tidak ada resolver yang bisa diracuni, tidak ada zone yang bisa bocor, dan tidak ada nameserver yang bisa dijatuhkan.
- Tidak ada certificate authority. Alamatnya adalah kunci publik itu sendiri, jadi klien memverifikasi layanan itu terhadap nama yang ia ketik. Inilah yang dimaksud dengan “self-authenticating” (autentikasi mandiri): tidak ada pihak ketiga yang menjamin identitas, karena identitas dan alamat adalah objek yang sama.
- Tidak ada port masuk. Layanan ini membuka circuit keluar ke segelintir introduction point dan menunggu di sana. Firewall Anda boleh menolak setiap paket masuk dan situsnya tetap berfungsi. Tidak ada apa pun yang listen di alamat publik, jadi tidak ada yang bisa dipindai, tidak ada yang bisa diambil sidik jarinya, dan tidak ada yang bisa langsung di-flood.
Satu catatan historis yang masih sering membingungkan: alamat lama enam belas karakter itu sudah tidak ada lagi. Dukungan untuk layanan onion versi 2 dihapus dari Tor pada Oktober 2021, alamat-alamat itu tidak berfungsi lagi di mana pun, dan apa pun yang Anda temukan yang menjelaskannya sudah usang. Semua yang dibahas di bawah ini adalah v3, satu-satunya jenis yang tersisa.
Dan perlu jelas soal apa yang tidak dihilangkan oleh semua ini. Tetap ada mesin fisik di sebuah datacentre, sebuah host yang tahu mesin itu ada, sebuah tagihan yang dibayar seseorang, dan sebuah aplikasi yang bisa dibobol. Layanan onion memindahkan lapisan alamat itu ke luar jangkauan. Ia tidak memindahkan servernya.
Relay, bridge, exit, layanan onion: empat pekerjaan yang berbeda
Orang-orang datang ke Tor untuk melakukan salah satu dari empat hal yang cukup berbeda, dan profil risikonya sama sekali tidak sebanding. Ada baiknya Anda tahu persis yang mana yang sedang Anda jalani.
- Relay tengah meneruskan traffic terenkripsi antar-relay lain. Ia membawa data milik orang lain, tapi tidak pernah menyentuh internet terbuka atas nama mereka, sehingga tidak memicu komplain apa pun.
- Bridge adalah titik masuk tak terdaftar bagi orang-orang yang akses Tor-nya diblokir. Profil traffic-nya sama seperti relay tengah, hanya saja alamatnya tidak dimasukkan ke direktori publik.
- Exit relay adalah tempat traffic milik orang lain keluar dari Tor dan mencapai internet biasa, di bawah alamat IP Anda. Inilah yang memicu email abuse dan korespondensi hukum, dan ini butuh penanganan yang disengaja — panduan relay Tor kami membahasnya dengan benar.
- Layanan onion mempublikasikan. Ia cuma membawa traffic-nya sendiri, tidak pernah menghubungi clearweb atas nama siapa pun, dan karena itu sama sekali tidak menghasilkan laporan abuse terhadap IP Anda. Tidak ada exit, jadi tidak ada yang keluar.
Poin terakhir itu layak direnungkan, karena ini yang paling sering disalahpahami. Menjalankan layanan onion secara operasional adalah hal paling senyap yang bisa Anda lakukan di jaringan Tor. Server Anda membuat koneksi keluar yang terlihat seperti traffic klien Tor biasa; server itu tidak pernah muncul sebagai sumber koneksi ke server siapa pun; dan hal yang paling dikhawatirkan kebanyakan orang — perilaku orang lain yang mendarat di IP Anda — secara struktural mustahil terjadi.
Anda juga tidak perlu menjalankan relay untuk bisa menjalankan layanan onion, dan sebaiknya keduanya dipisah. Sebuah relay butuh bandwidth, ORPort publik, dan ContactInfo yang dipublikasikan. Sebuah layanan tidak butuh satu pun dari itu. Kalau Anda ingin menjalankan keduanya, jalankan di dua server terpisah.
Tor hampir tidak pernah menjadi sumber kebocoran
Inilah bagian yang jarang dibahas tuntas oleh dokumentasi resmi, dan bagian yang sebenarnya menentukan apakah semua usaha ini sepadan. Tor, yang dikonfigurasi seperti di bawah ini, sangat kecil kemungkinannya menjadi hal yang membongkar server Anda. Perangkat lunak di baliknyalah yang jadi masalah, karena perangkat lunak itu ditulis dengan asumsi bahwa sebuah web server ingin ditemukan.
Berikut kanal-kanalnya, kurang lebih diurutkan sesuai seberapa sering itu menjebak orang:
- Konten yang sama di IP publik. Kalau web server Anda juga listen di
0.0.0.0, siapa pun yang memindai internet akan melihat halaman yang identik baik di alamat IP maupun di alamat onion. Scanner seluruh-internet mengindeks setiap port terbuka secara terus-menerus dan hasilnya bisa dicari berdasarkan body hash maupun favicon hash. Satu query saja menghubungkan keduanya. Ini adalah cara paling umum sebuah layanan onion terbongkar, dan itu cuma kesalahan konfigurasi satu baris. - Banner server dan halaman default. Instalasi
nginxatauapache2standar akan menjawab hostname yang tidak dikenal dengan halaman default, mencetak versinya di headerServer, dan sering kali membocorkan hostname asli mesin itu di output error. Setiap satu dari itu adalah titik korelasi. - URL absolut. Redirect, canonical tag, sitemap, feed RSS, tag Open Graph, dan email reset password semuanya senang menerbitkan URL clearweb yang lengkap. Cukup satu saja muncul di dalam versi onion sebuah halaman.
- Request keluar yang dibuat aplikasinya. Analytics, web font, aset CDN, layanan avatar, map tile, webhook, dan pengecekan update semuanya berasal dari IP asli server, dan beberapa di antaranya memberi tahu pihak ketiga halaman mana yang sedang dirender saat itu. Situs self-hosted dengan font yang dimuat dari domain milik orang lain punya jejak audit yang tidak ia maksudkan.
- Mail. Apa pun yang dikirim oleh mesin itu mencap IP aslinya ke header
Received. Kalau layanan itu perlu mengirim mail, itu adalah masalah desain yang harus dipecahkan secara sengaja — mulai dari panduan mail server kami, dan anggap secara default bahwa layanan itu seharusnya tidak mengirim apa pun sama sekali. - Kunci dan sidik jari yang dipakai ulang. SSH host key yang sama yang menjawab baik di IP publik maupun di alamat onion menghubungkan keduanya secara permanen. Begitu juga sertifikat TLS yang sama, favicon yang sama, identifier analytics yang sama, atau halaman error khas yang sama di dua proyek berbeda.
- Certificate Transparency. Kalau mesin yang sama pernah melayani domain clearweb lewat HTTPS, sertifikat untuk domain itu ditulis ke log publik append-only selamanya. Itu menyebut nama mesinnya, bukan alamat onion-nya, tapi tetap menyebut nama mesinnya.
Bentuk umum dari semua ini sama: Tor menyembunyikan alamatnya, dan sesuatu yang lain di server itu mempublikasikannya. Langkah delapan di bawah ini adalah checklist untuk menemukan semua itu sebelum orang lain menemukannya lebih dulu.
Putuskan dulu: apakah lokasi server itu rahasia?
Sebelum menginstal apa pun, jawab satu pertanyaan, karena semua hal berikutnya bergantung padanya: apakah lokasi fisik server ini adalah rahasia yang ingin Anda jaga?
Ada tiga jawaban jujur dan masing-masing mengarah ke build yang benar-benar berbeda.
- Ya, lokasinya adalah intinya. Maka mesin ini mengerjakan tepat satu pekerjaan. Tidak ada situs clearweb, tidak ada record DNS publik yang menunjuk ke IP-nya, tidak ada mail, tidak ada layanan lain yang listen di mana pun. Bayar dengan cara yang tidak mengaitkan nama Anda — panduan Monero kami membahas mekanismenya dan akun no-KYC berarti tidak ada yang perlu diserahkan selain alamat pengiriman. Pertahankan konfigurasi tiga-hop penuh. Setiap jalan pintas di bawah ini yang menukar anonimitas dengan kecepatan tertutup untuk Anda, dan itu tidak masalah, karena Anda tidak sedang mengoptimalkan kecepatan.
- Tidak, server ini sudah publik. Anda menjalankan situs biasa dan ingin punya alamat onion juga — untuk pembaca di balik sensor, untuk orang yang lebih suka tidak me-resolve domain Anda, atau karena Anda ingin menawarkannya. Tidak ada yang disembunyikan di sini, jadi Anda bisa memakai layanan onion tunggal, memotong circuit dari enam hop menjadi tiga, dan mengumumkan alamatnya dari situs clearweb dengan header
Onion-Location. Ini adalah fitur jangkauan, dan ini alasan yang sepenuhnya sah untuk ada di sini. - Di suatu tempat di antara keduanya. Di sinilah kebanyakan orang sebenarnya berada, dan inilah yang berbahaya, karena “agak tersembunyi” bukan properti yang bisa dimiliki sebuah server. Pilih satu sisi. Kalau lokasinya benar-benar penting, bangunlah seolah itu penting. Kalau tidak, berhenti membayar ongkos latensi untuk properti anonimitas yang tidak sedang Anda jaga.
Tulis jawabannya sebelum Anda melanjutkan. Hampir semua kesalahan dalam topik panduan ini berasal dari membangun untuk kasus pertama tapi mengoperasikannya seolah-olah itu kasus kedua.
Langkah demi langkah
- Pilih server-nya, dan putuskan apa lagi yang hidup di dalamnya
Layanan onion itu murah untuk dijalankan. Tor sendiri memakai CPU yang sangat sedikit saat tidak sedang relaying, dan beban kerjanya cuma sebesar apa pun yang sudah pasti dibutuhkan situs Anda, jadi ukur kapasitasnya untuk aplikasinya, bukan untuk Tor. Situs statis atau aplikasi self-hosted kecil sudah nyaman di 1 vCPU dan 2 GB; beri 2 vCPU dan 4 GB kalau ada database atau language runtime yang terlibat. Di jenjang kami itu adalah Cub (1 vCPU, 2 GB RAM, 40 GB) seharga $5/bln atau Scout (2 vCPU, 4 GB RAM, 70 GB) seharga $9/bln, keduanya all-NVMe dengan traffic tanpa batas di 1 Gbps.
Keputusan yang benar-benar penting bukan soal tingkatannya. Melainkan yang dari bagian sebelumnya: kalau lokasi mesin ini dimaksudkan untuk privat, ia mengerjakan satu pekerjaan dan cuma satu. Tidak ada situs lain di dalamnya, tidak ada record DNS di mana pun yang menunjuk ke alamatnya, tidak ada mail, tidak ada apa pun lain yang listen. Godaan untuk menaruh “satu hal lagi saja” di mesin yang sudah Anda bayar itulah persisnya cara korelasi itu terjadi.
Bayar dengan cara yang sepadan. Akun di sini cuma butuh alamat email untuk pengiriman dan tidak ada yang lain, dan checkout selesai on-chain — panduan Monero dan membeli tanpa kartu membahasnya dari nol. Mulai dari image Debian atau Ubuntu minimal; setiap perintah di bawah ini mengasumsikan Debian 12 atau lebih baru sebagai root.
- Instal Tor dari repository Tor Project
Gunakan repository milik Tor Project sendiri, bukan paket distro. Build dari distro itu tertinggal, dan dua pengaturan dalam panduan ini — rate limiter introduction-point dan pertahanan proof-of-work — cuma ada di rilis-rilis terbaru.
apt update && apt install -y apt-transport-https curl gpg lsb-release curl -s https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc \ | gpg --dearmor | tee /usr/share/keyrings/deb.torproject.org-keyring.gpg >/dev/null echo "deb [signed-by=/usr/share/keyrings/deb.torproject.org-keyring.gpg] \ https://deb.torproject.org/torproject.org $(lsb_release -cs) main" \ > /etc/apt/sources.list.d/tor.list apt update && apt install -y tor deb.torproject.org-keyring tor --versionPaket
deb.torproject.org-keyringmenjaga signing key-nya tetap mutakhir, jadi ini pekerjaan satu kali saja, bukan sesuatu yang rusak setahun kemudian. Semua versi dari 0.4.8 ke atas sudah punya semua opsi yang dipakai di bawah ini.Jangan konfigurasi apa pun dulu. Tor berjalan sebagai klien di titik ini, dan itu sudah cukup untuk langkah verifikasi nanti.
- Taruh web server di loopback dan tidak di tempat lain
Ini adalah langkah yang paling sering dilewati dan paling sering merusak keseluruhan usaha ini. Web server itu harus cuma bisa dijangkau dari mesin itu sendiri dan dari tidak ada tempat lain. Instal nginx, lalu tulis sebuah virtual host yang bind cuma ke loopback:
# /etc/nginx/sites-available/onion server { listen 127.0.0.1:8080; server_name _; server_tokens off; root /var/www/onion; index index.html; access_log off; }server_tokens offmenghapus versinya dari headerServerdan dari halaman error. Mematikan access log adalah pilihan yang disengaja, bukan kemalasan: setiap request lewat Tor datang dari127.0.0.1, jadi lognya tidak mencatat apa pun yang berguna soal pengunjung, dan mencatat banyak hal yang lebih baik tidak disimpan.Lalu tambahkan sebuah catch-all yang menjawab di alamat publik dan menolak untuk mengatakan apa pun sama sekali. Kode
444milik nginx menutup koneksi tanpa respons, yang merupakan jawaban paling senyap yang mungkin diberikan ke sebuah scanner:# /etc/nginx/sites-available/deny-direct server { listen 80 default_server; listen [::]:80 default_server; return 444; }Aktifkan keduanya, hapus situs default bawaan, dan pastikan apa yang sebenarnya sedang listen:
rm -f /etc/nginx/sites-enabled/default ln -s /etc/nginx/sites-available/onion /etc/nginx/sites-enabled/ ln -s /etc/nginx/sites-available/deny-direct /etc/nginx/sites-enabled/ mkdir -p /var/www/onion && echo 'it works' > /var/www/onion/index.html nginx -t && systemctl reload nginx ss -ltnpBaca output
ssitu dengan teliti. Satu-satunya entri yang bind ke0.0.0.0atau::seharusnya cuma yang memang Anda sengaja pertahankan — SSH, dan catch-all444kalau Anda memilih menjalankannya. Semua yang lain seharusnya ada di127.0.0.1. Kalau aplikasi yang Anda host punya listener-nya sendiri, cek juga itu; banyak framework yang secara default memakai semua interface dan tidak bilang apa-apa soal itu. - Deklarasikan layanan onion di torrc
Tiga baris saja membuat layanan ini. Tambahkan ke
/etc/tor/torrc, bersama dua pertahanan yang jauh lebih mudah diaktifkan sekarang daripada saat terjadi insiden:# /etc/tor/torrc HiddenServiceDir /var/lib/tor/onion-site/ HiddenServicePort 80 127.0.0.1:8080 # rate-limit floods at the introduction points HiddenServiceEnableIntroDoSDefense 1 # make each connection attempt cost the client a little work HiddenServicePoWDefensesEnabled 1Baca baris port-nya dengan teliti, karena kedua angka itu mengerjakan tugas yang berbeda. Yang pertama adalah port yang akan dipakai pengunjung dalam URL onion-nya — biarkan di
80supaya tidak ada yang perlu mengetikkan nomor port. Yang kedua adalah ke mana Tor meneruskan request itu secara lokal, yaitu listener loopback dari langkah sebelumnya. Keduanya tidak harus sama, dan justru sering kali lebih jelas kalau tidak sama.Kalau Anda ingin menghilangkan bahkan socket TCP loopback-nya, Tor bisa berbicara ke sebuah unix socket sebagai gantinya, yang berarti sama sekali tidak ada apa pun yang listen di sebuah port. Arahkan layanan itu ke sebuah socket dan konfigurasikan nginx untuk listen di situ:
HiddenServicePort 80 unix:/run/onion-site.sockJangan buat direktorinya sendiri dan jangan buat file-file kuncinya sendiri. Tor menghasilkannya sendiri saat start pertama kali dengan kepemilikan dan permission yang ia harapkan, dan sebuah direktori yang Anda buat sendiri dengan mode yang salah adalah alasan umum kenapa layanan itu gagal muncul secara diam-diam.
- Start Tor dan baca alamat Anda
Restart Tor, perhatikan sampai ia hidup, dan kumpulkan alamat Anda:
systemctl restart tor@default journalctl -u tor@default -n 20 --no-pager cat /var/lib/tor/onion-site/hostnameFile itu berisi lima puluh enam karakter base32 diikuti
.onion, dan itulah alamat Anda — hidup sejak momen Tor mencatat di log bahwa ia sudah mempublikasikan descriptor-nya, biasanya dalam waktu satu menit. Tidak ada yang perlu didaftarkan, tidak ada yang perlu dipropagasi, dan tidak ada yang perlu ditunggu.Lihat apa lagi yang dibuat Tor, karena dua dari file-file ini lebih penting daripada apa pun lainnya di mesin itu:
ls -l /var/lib/tor/onion-site/Anda seharusnya melihat
hostname,hs_ed25519_public_key, danhs_ed25519_secret_key, di dalam sebuah direktori yang dimiliki olehdebian-tordengan mode0700. Secret key itu bukan kredensial untuk alamat itu; ia adalah alamat itu. Salin ke mesin lain dan mesin itu jadi layanan Anda. Hapus tanpa backup dan alamat itu tidak akan pernah bisa dibuat ulang oleh siapa pun, termasuk Anda. Langkah sembilan membahas ini dengan benar — jangan lewati itu.Kalau file hostname-nya tidak muncul, jawabannya hampir selalu ada di log: sebuah direktori yang tidak bisa dimiliki Tor, sebuah permission mode yang ditolaknya, atau salah ketik di baris port-nya.
- Jangkau alamatnya, dan buktikan itu mesin Anda
Tes yang paling jelas adalah membuka alamatnya di Tor Browser, dan Anda sebaiknya melakukan itu. Tes yang lebih berguna adalah dari command line, tempat Anda bisa melihat header-nya:
apt install -y torsocks torsocks curl -sI http://<your-address>.onion/ torsocks curl -s http://<your-address>.onion/ | headBuktikan itu benar-benar server Anda. Alamat yang Anda ketik dengan tangan adalah lima puluh enam karakter base32, dan satu karakter yang tertukar posisinya saja bisa mendarat di layanan milik orang lain. Tulis sebuah token acak di server itu, lalu ambil path yang persis sama itu lewat Tor dan bandingkan:
head -c 16 /dev/urandom | base32 | tr -d '=' > /var/www/onion/token.txt cat /var/www/onion/token.txt torsocks curl -s http://<your-address>.onion/token.txtDua string yang identik berarti Anda menjangkau mesin Anda sendiri. Hapus filenya setelah itu.
Kenali apa yang ditunjukkan tes ini dan apa yang tidak. Menjalankannya dari server itu sendiri membuktikan layanan itu terpublikasi dan bisa dijangkau, yang memang persis apa yang ingin Anda ketahui. Tes ini tidak membuktikan apa pun soal anonimitas, karena kedua ujungnya adalah mesin yang sama. Untuk itu, uji dari jaringan yang sama sekali berbeda — dan kalau Tor sendiri diblokir di tempat Anda, sebuah bridge adalah jawabannya, yang dibahas panduan kami soal melewati blokir DPI.
- Tutup port-port yang tidak dibutuhkan layanan ini
Sekarang petik hasilnya. Sebuah layanan onion butuh nol port masuk, jadi firewall-nya bisa sekasar mungkin: tolak semua yang masuk, izinkan koneksi yang sudah established dan apa pun yang Anda butuhkan untuk mengelola mesin itu. Panduan hardening Debian kami punya satu set aturan nftables yang lengkap; terapkan itu, lalu pastikan satu-satunya pengecualian masuk yang tersisa adalah SSH.
Lalu pertimbangkan untuk menghilangkan pengecualian itu juga. SSH adalah port publik terakhir di sebuah mesin yang kalau tidak begitu sudah sepenuhnya tak terlihat, dan itu tidak harus begitu. Beri SSH itu alamat onion-nya sendiri:
# /etc/tor/torrc HiddenServiceDir /var/lib/tor/onion-ssh/ HiddenServicePort 22 127.0.0.1:22Restart Tor, baca hostname barunya, dan konek lewat port SOCKS Tor lokal Anda. Ini masuk ke
~/.ssh/configdi laptop Anda:Host onionbox HostName <ssh-address>.onion User root ProxyCommand nc -X 5 -x 127.0.0.1:9050 %h %pBegitu itu berhasil, atur
ListenAddress 127.0.0.1disshd_configdan hapus aturan inbound-nya. Mesin itu sekarang sama sekali tidak punya apa pun yang listen di alamat publik.Dua kehati-hatian. Uji jalur onion-nya secara menyeluruh sebelum Anda menutup pintu di belakang Anda sendiri, dan pastikan akses konsol dari provider Anda tetap tersedia supaya kesalahan cuma berujung reboot, bukan kehilangan servernya — punya kami ada di control panel. Dan jangan biarkan SSH host key yang sama menjawab baik di IP publik maupun di alamat onion kapan pun, karena sidik jarinya identik di kedua tempat itu dan itu persis link yang sedang Anda coba hindari.
- Buru kebocorannya sebelum Anda mempublikasikan alamatnya
Kerjakan ini sebelum Anda memberi tahu siapa pun alamatnya. Ini cuma butuh lima menit dan itulah yang membedakan sebuah layanan yang benar-benar tersembunyi dari layanan yang cuma merepotkan untuk ditemukan.
Tidak ada apa pun yang tak terduga sedang listen. Setiap baris seharusnya loopback, atau sebuah port yang memang Anda sengaja putuskan untuk dibiarkan terbuka:
ss -ltnpIP publiknya tidak melayani apa pun. Tanyakan langsung ke situ, dua arah, dari tempat lain. Balasan kosong atau penolakan koneksi adalah yang Anda inginkan; konten Anda adalah yang tidak Anda inginkan:
curl -sI --max-time 5 http://203.0.113.10/ curl -skI --max-time 5 https://203.0.113.10/Tidak ada URL clearweb di dalam apa yang Anda sajikan. Tarik halamannya lewat Tor dan daftar setiap link absolut di dalamnya. Apa pun yang menunjuk ke domain yang Anda kendalikan, sebuah CDN, sebuah font host, atau sebuah endpoint analytics adalah sebuah kebocoran atau titik korelasi:
torsocks curl -s http://<your-address>.onion/ \ | grep -Eo 'https?://[^ "]+' | sort -uHeader dan halaman error tidak mengatakan apa-apa. Cek sebuah halaman asli dan sebuah halaman yang sengaja tidak ada, dan cari string versi, hostname, path file, dan stack trace:
torsocks curl -sI http://<your-address>.onion/ torsocks curl -s http://<your-address>.onion/nothing-here | head -20Aplikasinya tidak menelepon pulang. Yang ini bukan perintah, ini adalah baca-ulang. Nonaktifkan analytics. Self-host font, ikon, dan script. Matikan pengambilan avatar dan preview. Hapus pengecekan update yang memanggil keluar sesuai jadwal. Arahkan setiap pengaturan URL absolut — site URL, canonical host, domain pengirim mail — ke alamat onion, bukan ke alamat clearweb.
Beres-beres. Atur mesin itu ke UTC dengan
timedatectl set-timezone UTCsupaya timestamp tidak membocorkan apa pun soal di mana mesin itu atau Anda mungkin berada. Pastikan/server-status,/.git, file backup, dan file swap editor tidak bisa dijangkau. Dan kalau mesin ini juga melayani sebuah situs clearweb, kembali dan baca lagi bagian ketiga, karena checklist di atas tidak bisa menyelamatkan sebuah build yang posisinya tidak pernah diputuskan. - Backup kuncinya, karena kunci itu adalah alamatnya
Katakan sekali lagi, karena inilah kegagalan yang tidak bisa dipulihkan orang: secret key itu adalah alamatnya. Tidak ada registrar yang bisa dimintai banding, tidak ada email pemulihan, tidak ada tiket support. Kehilangan byte-byte itu berarti nama itu hilang dari internet selamanya.
Hentikan Tor supaya file-filenya konsisten, arsipkan seluruh direktori layanan itu, dan enkripsi sebelum keluar dari mesin itu:
systemctl stop tor@default tar -C /var/lib/tor -czf - onion-site \ | gpg -c --cipher-algo AES256 -o onion-site-$(date +%F).tar.gz.gpg systemctl start tor@defaultPindahkan arsip terenkripsi itu ke suatu tempat yang bukan server ini — intinya memang supaya ia bertahan hidup melewati mesin itu. Panduan backup terenkripsi kami membahas cara melakukan ini terjadwal ke target append-only di negara lain, yang merupakan tempat yang tepat untuknya.
Memulihkannya adalah hal yang sama secara terbalik, dan permission-nya bukan sesuatu yang opsional: Tor menolak untuk start kalau mode-nya salah, yang menjengkelkan pada saat itu tapi persis perilaku yang Anda inginkan.
gpg -d onion-site-2026-09-14.tar.gz.gpg | tar -C /var/lib/tor -xzf - chown -R debian-tor:debian-tor /var/lib/tor/onion-site chmod 700 /var/lib/tor/onion-site chmod 600 /var/lib/tor/onion-site/hs_ed25519_secret_key systemctl restart tor@default cat /var/lib/tor/onion-site/hostnameBaris terakhir itulah tesnya. Alamat yang sama di mesin yang berbeda berarti backup-nya nyata. Latih ini sekali, sekarang, di sebuah server sekali pakai — sebuah backup yang tidak pernah diuji dari sebuah kunci yang tidak tergantikan cuma jadi cerita soal kunci yang dulu pernah Anda punya. Disiplin yang sama berlaku di sini seperti di panduan migrasi kami: restore itulah yang sebenarnya Anda beli.
- Publikasikan alamatnya supaya orang bisa mempercayainya
Sekarang Anda punya lima puluh enam karakter yang tidak bisa dibaca, diingat, atau diverifikasi dengan mata oleh siapa pun. Itu masalah usability yang nyata dan juga masalah keamanan, karena pengunjung tidak bisa membedakan alamat Anda dari sebuah tiruan yang hampir identik. Distribusi adalah bagian dari build-nya, bukan pikiran belakangan.
Publikasikan di tempat pembaca Anda sudah mempercayai Anda. Kalau Anda punya situs clearweb, taruh alamatnya di footer dan sajikan header
Onion-Locationdari bagian di bawah ini. Kalau tidak, pakai kanal apa pun yang sudah diasosiasikan audiens Anda dengan Anda — akun yang sudah ada, pesan yang ditandatangani, kartu cetak. Alamat itu mewarisi kredibilitas persis sebanyak tempat Anda mempublikasikannya.Tanda tangani kalau taruhannya sepadan. Sebuah tanda tangan atas alamat itu, yang bisa diverifikasi terhadap kunci yang sudah dimiliki orang-orang, adalah satu-satunya cara seseorang bisa memastikan mereka punya alamat yang benar tanpa harus mempercayai kanal yang membawanya.
Jangan mengandalkan direktori atau mesin pencari. Indeks onion memang ada, tidak lengkap, dan beberapa punya riwayat mendaftarkan salinan phishing dari alamat-alamat populer berdampingan dengan yang asli. Bisa ditemukan di sana itu bonus; itu bukan rencana distribusi.
Vanity prefix sedikit membantu. Alat
mkp224omelakukan grinding pada kunci sampai salah satu menghasilkan alamat yang dimulai dengan string pilihan Anda, yang membuatnya gampang dikenali sekilas mata:apt install -y gcc libc6-dev libsodium-dev make autoconf git clone https://github.com/cathugger/mkp224o && cd mkp224o ./autogen.sh && ./configure && make ./mkp224o -d ./keys -n 1 wolfBiayanya tumbuh secara eksponensial seiring panjangnya: beberapa karakter cuma butuh beberapa detik, tujuh atau delapan karakter butuh waktu sungguhan di hardware sungguhan, dan lebih dari itu praktis tidak akan pernah selesai. Jujurlah soal apa yang sebenarnya dibeli oleh ini — seorang penyerang bisa melakukan grinding pada prefix yang sama, dan mempercayai beberapa karakter pertama yang cocok itu justru persis kebiasaan yang membuat orang mengeklik link yang salah. Perlakukan ini sebagai branding, bukan autentikasi. Direktori yang dihasilkan langsung bisa dipakai sebagai
HiddenServiceDir: benarkan kepemilikan dan mode-nya seperti di langkah sebelumnya, dan hasilkan itu di tempat yang Anda percaya, karena siapa pun yang menjalankan alat itu memegang kuncinya.
Menjalankan situs yang sama di clearweb dan sebagai onion
Kalau lokasi server itu bukan rahasia, menjalankan keduanya itu mudah dan benar-benar berguna — begitulah cara organisasi berita besar, Debian, dan beberapa mesin pencari menawarkan situs mereka. Ada dua mekanisme dan satu trade-off yang perlu dipahami.
Umumkan dengan Onion-Location. Satu header saja di situs clearweb membuat Tor Browser menampilkan tombol “.onion available” di address bar, dan menawarkan untuk beralih. Header ini cuma dihormati di halaman yang disajikan lewat HTTPS, dan nilainya harus berupa URL onion yang valid:
add_header Onion-Location "http://<your-address>.onion$request_uri" always;Ada padanan HTML-nya untuk host yang tidak bisa mengatur header, dengan syarat HTTPS yang sama:
<meta http-equiv="onion-location" content="http://<your-address>.onion">Taruh juga alamatnya di suatu tempat yang bisa dibaca manusia, di footer atau di halaman about. Header itu cuma menjangkau orang yang sudah memakai Tor Browser; footer menjangkau semua orang lainnya.
Pertimbangkan layanan onion tunggal. Koneksi onion normal itu enam hop — tiga dari klien, tiga dari layanannya — dan tiga hop milik layanan itu semata-mata ada untuk menyembunyikan di mana ia berada. Kalau itu bukan rahasia, Anda bisa menghilangkannya. Peningkatan latensinya besar dan langsung terasa. Konfigurasinya sengaja dibuat blak-blakan:
# /etc/tor/torrc — these are INSTANCE-WIDE, not per service
HiddenServiceNonAnonymousMode 1
HiddenServiceSingleHopMode 1
SOCKSPort 0Kedua opsi itu wajib diaktifkan bersamaan, port SOCKS harus dinonaktifkan, dan keduanya berlaku untuk setiap layanan onion di instance Tor itu — tidak ada opt-out per layanan. Tor akan menolak untuk start kalau Anda mengatur salah satu tanpa yang lain, dan itu adalah perangkat lunak yang sedang membantu Anda. Kalau satu instance meng-host satu layanan yang lokasinya publik dan satu lagi yang lokasinya tidak, jalankan dua instance, atau lebih baik lagi, dua server.
Dan terima trade-off-nya. Mempublikasikan kedua alamat itu menyatakan bahwa operator yang sama menjalankan keduanya, dan menyajikan konten yang identik dari keduanya membuat keduanya jadi sangat mudah dihubungkan, apa pun yang terjadi. Itulah kesepakatannya, dan untuk situs publik itu tidak berbiaya apa pun. Tetap jaga kebersihannya: tidak ada URL clearweb absolut di dalam versi onion-nya, cookie yang di-scope per host supaya sesi tidak berpindah di antara keduanya, dan content security policy yang tidak menarik aset lintas keduanya.
Otorisasi klien: saat alamat itu sendiri adalah kredensial
Secara default, siapa pun yang tahu alamat Anda bisa menjangkau layanan itu. Otorisasi klien mengubah itu di lapisan jaringan, bukan di lapisan aplikasi, dan perbedaannya lebih penting daripada kedengarannya.
Dengan otorisasi diaktifkan, descriptor yang dipublikasikan layanan Anda dienkripsi ke sekumpulan kunci klien. Pengunjung yang tidak punya salah satu kunci itu tidak bisa mendekripsinya, tidak bisa mempelajari introduction point-nya, dan karena itu sama sekali tidak bisa terhubung — mereka tidak sampai ke halaman login, tidak mendapat penolakan, mereka tidak mendapat apa-apa. Layanan itu bukan sekadar tak terdaftar; ia benar-benar tak terlihat.
Hasilkan sepasang keypair x25519 per klien. Semua alat yang dibutuhkan di sini sudah ada di mesin Debian:
openssl genpkey -algorithm x25519 -out alice.prv.pem
# private key — goes to the client, never to the server
grep -v 'PRIVATE KEY' alice.prv.pem | base64 -d | tail -c 32 | base32 | tr -d '='
# public key — goes on the server
openssl pkey -in alice.prv.pem -pubout | grep -v 'PUBLIC KEY' \
| base64 -d | tail -c 32 | base32 | tr -d '='Di server, taruh kunci publiknya ke dalam direktori authorized_clients di dalam direktori layanan itu. Nama filenya bebas asal berakhiran .auth, yang membuat pencabutan akses semudah menghapus satu file:
mkdir -p /var/lib/tor/onion-site/authorized_clients
echo "descriptor:x25519:<ALICE-PUBLIC-KEY>" \
> /var/lib/tor/onion-site/authorized_clients/alice.auth
chown -R debian-tor:debian-tor /var/lib/tor/onion-site
systemctl reload tor@defaultDi klien, kunci privatnya ditaruh di direktori yang ditentukan oleh ClientOnionAuthDir, dalam sebuah file berakhiran .auth_private, dengan alamatnya diulang di dalamnya. Tor Browser punya direktorinya sendiri untuk ini di dalam folder datanya, dan akan meminta sebuah kunci kalau ia menemui layanan yang membutuhkannya:
# /var/lib/tor/onion-auth/mysite.auth_private
<address-without-the-.onion>:descriptor:x25519:<ALICE-PRIVATE-KEY>Ini adalah alat yang tepat untuk situs staging, panel admin, tempat berbagi file privat, atau Nextcloud yang di-hosting sendiri yang cuma dipakai Anda sendiri — apa pun yang jawaban jujurnya atas pertanyaan “siapa yang seharusnya bisa tahu ini ada?” adalah “tidak ada siapa-siapa selain kami”. Biayanya nyata dan bersifat administratif: Anda harus menyampaikan kunci ke orang-orang lewat kanal yang Anda percaya, dan Anda harus ingat untuk mencabutnya kembali setelahnya.
Menjaganya tetap hidup: DoS, jam sistem, dan uptime
Layanan onion gagal dengan caranya sendiri yang khas, dan tidak satu pun dari itu terlihat seperti outage biasa. Ada empat hal yang layak disiapkan sebelum Anda benar-benar membutuhkannya.
Denial of service adalah masalah operasional yang sesungguhnya. Karena tidak ada alamat IP yang bisa difilter, pertahanan biasa tidak berlaku, dan flood permintaan introduction yang gencar itu murah untuk dikirim. Tor punya dua jawaban, keduanya diatur per layanan di torrc: HiddenServiceEnableIntroDoSDefense 1 membatasi laju permintaan di introduction point, dan HiddenServicePoWDefensesEnabled 1 membuat klien harus memecahkan teka-teki proof-of-work kecil yang makin sulit saat beban naik, sehingga pengunjung yang sah cuma menunggu sebentar sementara sebuah flood jadi mahal untuk dilakukan. Aktifkan keduanya sejak awal; biayanya nyaris nol kalau tidak ada yang sedang menyerang Anda.
Jaga jam sistemnya tetap benar. Descriptor dipublikasikan dan dicari berdasarkan periode waktu yang diturunkan dari sebuah nilai jaringan bersama. Server yang jamnya melenceng parah akan mempublikasikan ke tempat yang salah dan jadi tidak bisa dijangkau, padahal terlihat sempurna sehat di lognya sendiri. Pastikan klien NTP berjalan, jaga mesin itu tetap di UTC, dan cek ini kalau sebuah layanan tiba-tiba berhenti ter-resolve tanpa sebab yang jelas.
Monitoring harus lewat Tor. Tidak ada layanan uptime komersial yang bisa mem-probe alamat .onion, yang berarti jawaban biasa tidak tersedia untuk Anda. Jalankan sendiri pengecekannya dari mesin kedua yang bukan mesin yang meng-host layanan itu — sebuah cron job yang menjalankan torsocks curl -s --max-time 60 ke URL yang sudah diketahui, membandingkan outputnya dengan string yang sudah diketahui, itu sudah cukup dan tidak berbiaya apa pun.
Rencanakan lebih dari satu instance kalau uptime itu penting. OnionBalance memungkinkan beberapa server backend berbagi satu alamat onion: sebuah instance front-end memegang kunci yang memiliki alamat itu dan mempublikasikan descriptor yang menunjuk ke introduction point milik server-server backend, sehingga Anda dapat distribusi beban dan failover tanpa alamatnya pernah berubah. Ini lebih banyak bagian bergerak daripada yang dibutuhkan kebanyakan situs, tapi ini jawaban yang didukung secara resmi, dan ada baiknya Anda tahu ini ada sebelum Anda menjebak diri sendiri di satu mesin saja.
Satu kebiasaan operasional terakhir: me-restart Tor membuat layanan itu offline selama beberapa detik selagi ia mempublikasikan ulang, dan sebuah instal ulang yang menghapus /var/lib/tor membuatnya offline selamanya. Perlakukan direktori itu seperti Anda memperlakukan sebuah private key, karena memang itulah dia.
Batasan yang jujur
Alamat onion menghilangkan registrar, resolver, certificate authority, dan port terbuka. Ia tidak menghilangkan apa pun yang lain, dan bersikap presisi soal sisanya itulah yang membedakan alat yang berguna dari rasa aman yang palsu.
Ia tidak memperbaiki aplikasinya. Aplikasi web yang rentan di balik sebuah layanan onion tetaplah aplikasi web yang rentan; hal pertama yang dilakukan banyak penyerang setelah mendapatkan eksekusi kode adalah membuat request keluar yang membongkar alamat asli server itu. Beri mesin itu pemeriksaan sepuluh menit di panduan hardening Debian kami, jaga agar selalu ter-patch, dan perlakukan mesin itu sebagai terekspos meski tidak ada apa pun yang listen.
Ia tidak menyembunyikan server itu dari orang-orang yang menjalankannya. Kami tahu sebuah server itu ada, kapan server itu di-deploy, dan berapa alamat IP-nya, karena kamilah yang mengalokasikannya. Itu berlaku untuk setiap host, di mana pun, dan siapa pun yang bilang sebaliknya kepada Anda sedang menjual sesuatu. Yang bisa kami katakan secara presisi adalah apa yang kami lakukan dengan itu, yang dijelaskan di penjelasan jujur kami soal apa yang disembunyikan VPS yang dibayar dengan crypto.
Ia tidak mengalahkan musuh yang sabar dan berdaya besar dengan sendirinya. Volume dan waktu traffic terlihat di tepi jaringan, dan sebuah layanan yang tiba-tiba sepi setiap kali orang tertentu sedang tidur sudah memberi tahu Anda sesuatu. Ini juga tidak membantu kalau konten-nya sendiri yang mengidentifikasi Anda: gaya tulisan yang sama, PGP key yang sama, avatar yang sama, atau handle forum yang sama dengan identitas publik Anda menutup lingkaran itu, seberapa pun bagusnya transportnya.
Dari sisi kami sendiri, supaya Anda bisa mengalibrasi ekspektasi: layanan onion diterima di semua tingkatan dan tidak butuh apa pun yang khusus dari kami, karena layanan itu tidak membuka port dan tidak menghasilkan traffic abuse. Kami menjalankan akun no-KYC yang cuma butuh sebuah alamat untuk mengirim kredensial. Kami memperlakukan korespondensi hak cipta rutin sebagai urusan operasional, bukan takedown otomatis, kami bertindak berdasarkan perintah pengadilan yang sah di yurisdiksi tempat server itu berada, dan batas bawahnya mutlak serta berlaku di sini persis seperti di tempat lain: tidak ada CSAM, tidak ada konten terorisme, tidak ada pengecualian. Baca acceptable-use policy kami dan cara kami menangani laporan abuse sebelum Anda membangun sesuatu yang akan membuat Anda tidak nyaman untuk memindahkannya. Halaman VPS ramah-Tor kami punya panduan tingkatannya.
Pertanyaan yang sering diajukan
Apakah saya perlu nama domain untuk menjalankan situs .onion?
Tidak, dan itulah inti dari keseluruhannya. Alamatnya dihasilkan dari sebuah kunci di server Anda sendiri dalam sepersekian detik, jadi tidak ada registrar tempat membelinya, tidak ada perpanjangan yang bisa terlewat, tidak ada record WHOIS, dan tidak ada siapa pun yang punya kuasa untuk menangguhkannya. Yang Anda korbankan adalah keterbacaan: alamat .onion adalah lima puluh enam karakter yang tidak bisa dihafal atau diketik siapa pun, cuma terbuka di Tor Browser atau klien yang mendukung Tor, dan mesin pencari sebagian besar tidak akan mengindeksnya. Banyak orang menjalankan keduanya karena alasan itu — domain untuk jangkauan dan alamat onion untuk kontinuitas. Panduan kami untuk mendaftarkan domain secara privat membahas separuh lainnya dari pasangan itu.
Apakah saya harus membuka port atau mengonfigurasi port forwarding?
Tidak dua-duanya. Inilah perbedaan struktural antara sebuah layanan onion dan hosting biasa: layanan itu membuat koneksi keluar ke introduction point di dalam jaringan Tor dan menunggu klien di sana, jadi tidak pernah ada koneksi masuk yang tiba di server Anda. Firewall yang menolak setiap paket masuk tidak berpengaruh apa pun terhadapnya. Dalam praktiknya, itu berarti Anda bisa berakhir dengan sebuah mesin yang sama sekali tidak punya apa pun yang listen di alamat publik — termasuk SSH, kalau Anda memberinya alamat onion sendiri seperti di langkah tujuh — yang merupakan attack surface yang jauh lebih kecil daripada yang bisa dicapai situs mana pun yang di-hosting secara konvensional.
Apakah saya perlu sertifikat HTTPS untuk alamat .onion?
Hampir pasti tidak. Alamat onion itu sendiri adalah kunci publik dari layanannya, jadi koneksinya sudah terenkripsi dan terautentikasi end-to-end terhadap nama yang diketik pengunjung — tidak ada apa pun yang bisa ditambahkan sebuah certificate authority ke situ, dan Tor Browser memperlakukan origin .onion sebagai secure context, sehingga fitur yang membutuhkan HTTPS tetap berfungsi tanpa sertifikat. Sejumlah kecil CA akan menerbitkan sertifikat untuk sebuah nama .onion, yang kadang berguna kalau Anda butuh nama organisasi ditampilkan di address bar atau Anda mencampur aset onion dan clearweb. Untuk situs biasa, HTTP polos di sebuah loopback listener adalah konfigurasi yang benar dan normal.
Kenapa layanan onion saya lambat, dan bisakah saya mempercepatnya?
Koneksi onion standar berjalan lewat enam relay, tiga dipilih oleh klien dan tiga oleh layanan Anda, dan round trip itulah sebagian besar yang Anda rasakan. Tiga hal yang membantu. Kalau lokasi server Anda bukan rahasia, sebuah layanan onion tunggal memangkas tiga hop milik Anda menjadi nol dan kira-kira memangkas setengah latensinya — lihat bagian soal menjalankan keduanya di atas, dan perhatikan bahwa pengaturan ini berlaku se-instance dan secara eksplisit melepaskan privasi lokasi server. Kedua, buat situsnya sendiri ringan: tidak ada aset eksternal, tidak ada font atau script yang diambil dari host lain, caching yang agresif, karena setiap request tambahan membayar lagi biaya penuh circuit-nya. Ketiga, cek bahwa Anda tidak sedang di-flood; mengaktifkan HiddenServicePoWDefensesEnabled menjaga sebuah layanan tetap bisa dipakai di bawah penyalahgunaan introduction-point yang kalau tidak begitu akan terlihat persis seperti performa yang buruk.
Bisakah saya menjalankan situs yang sama di clearweb dan sebagai layanan onion?
Ya, dan untuk proyek publik itu ide yang bagus — itu memberi pembaca di balik sensor sebuah jalan masuk dan tidak mengharuskan mereka me-resolve domain Anda. Tapi perlu jelas soal apa sebenarnya ini: menyajikan konten yang identik dari keduanya membuat keduanya sangat mudah dihubungkan, jadi ini adalah fitur jangkauan, bukan fitur penyembunyian. Umumkan alamatnya dengan header Onion-Location di situs HTTPS-nya dan taruh di footer untuk semua orang lainnya. Kalau lokasi server itu memang benar-benar dimaksudkan untuk privat, jangan lakukan ini sama sekali; jalankan layanan onion itu di sebuah mesin yang tidak mengerjakan apa pun yang lain, tidak punya record DNS yang menunjuk ke situ, dan tidak mengirim mail.
Apa yang terjadi kalau saya kehilangan kunci onion-nya?
Alamatnya hilang, permanen, untuk semua orang. Tidak ada proses pemulihan karena tidak ada otoritas — nama itu diturunkan secara matematis dari kunci di /var/lib/tor/<service>/hs_ed25519_secret_key, dan tanpa byte-byte itu tidak ada seorang pun yang bisa mempublikasikan ulang atas nama itu. Inilah konsekuensi dari tidak adanya registrar yang bisa mengambilnya dari Anda. Backup direktorinya secara terenkripsi dan simpan di luar server, pulihkan sekali di sebuah mesin sekali pakai untuk memastikan alamatnya kembali, dan ingat bahwa siapa pun yang mendapatkan file itu menjadi layanan Anda, jadi file itu pantas mendapat penanganan yang sama seperti private key lainnya.
Bisakah saya meng-host layanan onion di VPSCrypto?
Ya, di semua tingkatan, dan itu tidak butuh apa pun yang khusus dari kami: sebuah layanan onion tidak membuka port masuk dan tidak menghasilkan traffic abuse terhadap IP Anda, yang membuatnya salah satu hal paling senyap yang bisa Anda jalankan. Akunnya no-KYC dan cuma butuh sebuah alamat untuk mengirim kredensial, checkout selesai on-chain dengan Monero sebagai pilihan utama, dan server sudah live dalam waktu sekitar satu menit. Batas bawah soal abuse berlaku persis seperti di tempat lain — tidak ada CSAM, tidak ada konten terorisme, tidak ada pengecualian — dan kami bertindak berdasarkan perintah pengadilan yang sah di yurisdiksi tempat server itu berada. Lihat halaman VPS ramah-Tor kami untuk panduan tingkatannya dan acceptable-use policy untuk selebihnya.

