SSD Nodes Learn Hosting plans →
Rehberler Matt ConnorYazan Matt Connor · Güncellendi 2026-08-27

Port açmadan Tor üzerinden SSH bağlantısı kurma

VPS sunucunuzda port açmadan Tor onion servisi ile SSH erişimi sağlayın. v3 istemci yetkilendirmesi, servis kurulumu ve sunucuya kilitlenmemek için izlenmesi gereken adımlar.

Tor onion servisi üzerinden SSH kullanmanın getirdiği değişiklikler

Tor onion servisi üzerinden SSH kullanmak, hiçbir portunda gelen bağlantı kabul etmeyen bir VPS'i yönetmenize olanak tanır. Sunucu, Tor ağına dışa doğru bir bağlantı kurar ve bu bağlantıyı açık tutar. SSH oturumunuz bu bağlantı üzerinden geri geldiği için, genel IP adresi üzerinde herhangi bir portun dinleme yapmasına gerek kalmaz.

Log kayıtları üzerindeki etkisi anlıktır. Genel bir SSH portuna sahip bir sunucu, tarayıcılardan gelen günde binlerce başarısız parola denemesini toplar. sshd'yi bir onion servisinin arkasına taşıyıp gelen trafiği güvenlik duvarında engellediğinizde, /var/log/auth.log yalnızca sizin başlattığınız oturumları kaydeder.

Bunun bedeli, tor'un her yönetici oturumunun yolunda bulunmasıdır. Bu, her yeniden başlatma işleminden sonra siz giriş yapabilmeden önce başlaması ve önyükleme yapması gereken bir kullanıcı alanı daemon'ıdır. Portu kapatmadan önce bunu planlayın; çünkü buradaki hata modu, fiziksel olarak erişemediğiniz bir makineye olan erişiminizi kaybetmenizdir.

Herhangi bir işlem yapmadan önce geri dönüş yolunu güvenceye alın

SSH kullanmayan bir kurtarma yolunuz hazır olmadan işleme başlamayın.

Sunucu sağlayıcınızın kontrol panelindeki VNC veya seri konsolu açın ve bu konsol üzerinden giriş yapın. root parolası bilinmiyorsa, önce panel üzerinden root parolasını sıfırlayın ve çalıştığından emin olun. Daha önce test etmediğiniz bir konsol, kurtarma yolu sayılmaz.

Aşağıdaki sıra önemlidir. Her adım bir sonrakine geçilmeden önce doğrulanır ve 22 numaralı port, onion rotası çalışana kadar açık tutulur.

  1. tor paketini kurun ve bootstrap işleminin tamamlandığını doğrulayın.
  2. Onion servisini tanımlayın ve adresini okuyun.
  3. 22 numaralı port hala açıkken onion üzerinden bağlantı kurun.
  4. İstemci yetkilendirmesini ekleyin ve ardından tekrar bağlanın.
  5. sshd değerini loopback arayüzüne bağlayın ve 22 numaralı portu kapatın.
  6. Yeniden başlatın ve ardından onion üzerinden tekrar bağlanın.

Mevcut SSH oturumunuzu tüm süreç boyunca açık tutun. Kurulmuş bir oturum, yeni bağlantıları engelleyecek bir güvenlik duvarı değişikliğinden etkilenmez; bu nedenle ilk kurtarma hattınız budur.

Sunucuya tor kurulumu

Ubuntu, tor paketini kendi depolarında sunar ancak bu sürüm genellikle güncel değildir. The Tor Project deposu, belgelerinde tanımlanan sürümü içerir. Bu depoyu apt repository guide içerisindeki komutları kullanarak ekleyin.

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/null

/etc/apt/sources.list.d/tor.sources dosyasını oluşturun. Suites, sürüm kod adınızı alır; lsb_release -cs bu değeri yazdırır (Ubuntu 24.04 üzerinde noble).

Types: deb deb-src
URIs: https://deb.torproject.org/torproject.org/
Suites: noble
Components: main
Signed-By: /usr/share/keyrings/deb.torproject.org-keyring.gpg
sudo apt update
sudo apt install -y tor deb.torproject.org-keyring
sudo journalctl -u tor@default -n 20 --no-pager

Günlük kaydı Bootstrapped 100% (done) ile bitmelidir. Bu satırın altında takılı kalıyorsa tor ağa erişemiyordur; bu durum neredeyse her zaman bir giden güvenlik duvarı kuralından veya hatalı bir sistem saatinden kaynaklanır.

Servis birimi adı yanıltıcı olabilir. systemctl status tor, her şey yolunda olsa bile Active: active (exited) raporlar; çünkü Debian ve Ubuntu, tor paketini tek görevi gerçek örneği başlatmak olan çoklu örnekli bir ana birim olarak yapılandırır. Daemon'ın kendisi tor@default.service olarak çalışır. status ve journalctl için bu ismi kullanın. tor üzerinde başlatma, durdurma ve yeniden yükleme işlemleri yine de ilgili örneğe ulaşır, bu nedenle sudo systemctl reload tor beklediğiniz gibi çalışır.

Port 22 için onion servisini tanımlayın

/etc/tor/torrc dosyasına iki satır ekleyin.

HiddenServiceDir /var/lib/tor/ssh/
HiddenServicePort 22 127.0.0.1:22

İkinci satır, tor'a onion adresi üzerindeki 22 numaralı sanal portu kabul etmesini ve sunucu üzerindeki 127.0.0.1:22 adresine bağlanmasını söyler. Tor, sshd'ye loopback üzerinden ulaşır; sshd'nin daha sonra genel adres üzerinde dinlemeyi bırakabilmesinin nedeni tam olarak budur. Bu ikinci satırı bunun yerine 127.0.0.1:80 üzerindeki bir web sunucusuna yönlendirirseniz, aynı iki yönerge bir onion adresinde site yayınlamanızı sağlar; bu, tor kurulduktan sonra çalıştırılabilecek yararlı bir ikinci servistir.

sudo systemctl reload tor
sudo cat /var/lib/tor/ssh/hostname

Bu komut, .onion ile biten 56 karakterlik base32 dizisini yazdırır. Bu karakterler, servisin kodlanmış biçimdeki açık anahtarıdır. Bu yapıda herhangi bir sertifika yetkilisi veya isim kaydı bulunmaz.

/var/lib/tor/ssh/ dizinini tor'un kendisinin oluşturmasına izin verin. Dizin elle oluşturulur, yanlış kullanıcıya atanır veya 0700'den daha gevşek bir izin moduna sahip olursa tor dizini kullanmayı reddeder ve günlük kayıtlarında dizinin çok fazla yetkiye sahip olduğu bildirilir. İçerideki dosyalar servisin kimliğidir: hs_ed25519_secret_key dosyasının kendisi adrestir. Bu dizini 600 izin moduyla yedekleyin ve kopyayı sunucu dışında tutun; çünkü bu dosyayı kaybetmek, yeni bir adres ve her istemcide yapılandırma değişikliği yapmanız gerektiği anlamına gelir.

İş istasyonunuzdan bağlanma

İş istasyonunuzun herhangi bir yapılandırma gerektirmeyen bir Tor istemcisine ihtiyacı vardır. Debian veya Ubuntu üzerinde bu sudo apt install -y tor netcat-openbsd paketidir. Tor, bu noktada 127.0.0.1:9050 adresinde bir SOCKS5 proxy olarak dinleme yapar. SOCKS genel bir proxy protokolüdür ve 5. sürümü, IP adresi yerine bir ana makine adı (hostname) taşıyabilir; burada önemli olan kısım da budur.

OpenSSH'in kendi SOCKS istemcisi yoktur, bu nedenle bağlantıyı bir yardımcı program sağlar. Aşağıdakileri ~/.ssh/config dosyasına ekleyin.

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 bayrağı SOCKS5 protokolünü seçer ve -x 127.0.0.1:9050 yerel Tor servisini işaret eder. %h, onion adresini bir isim olarak Tor'a iletir, böylece Tor bu ismi kendi ağı içerisinde çözer. Bu işlem için OpenBSD netcat kullanılmalıdır. GNU netcat sürümünde -X seçeneği bulunmaz ve işlem nc: invalid option -- 'X' hatasıyla durur.

ssh myvps

Tor, başka herhangi bir işlem gerçekleşmeden önce bir devre (circuit) oluşturduğu için ilk bağlantı yavaştır. Ana makine anahtarı parmak izini (host key fingerprint) her zamanki gibi onaylayın. Bu noktadan itibaren olağan SSH anahtar yönetimi değişmeden geçerlidir. Taşıma katmanı taşınmıştır, ancak kimlik doğrulama yöntemi aynı kalmıştır.

Tek seferlik bir işlem için yapılandırma girişini atlayabilirsiniz: torsocks ssh admin@xxxxx.onion komutu aynı işi görür.

v3 istemci yetkilendirmesi ekleme

Mevcut durumda, adresi öğrenen herkes SSH banner'ınıza ulaşabilir ve tahmin yürütmeye başlayabilir. Onion adresleri dizin sisteminden numaralandırılamaz, bu nedenle adres bir sır gibi davranır; ancak shell geçmişi veya git deposuna işlenmiş yapılandırma dosyaları gibi olağan yollarla sızabilir. İstemci yetkilendirmesi bu açığı kapatır. Servis, tanımlayıcısını bir istemci anahtarıyla şifrelenmiş olarak yayınlar; dolayısıyla adrese sahip olup anahtara sahip olmayan biri servisin yerini bile tespit edemez.

İstemci üzerinde bir x25519 anahtar çifti oluşturun. Bu, Tor Project'in istemci yetkilendirme kılavuzundan alınan ve tek bir değişiklik içeren işlem hattıdır.

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.key

Bu satırların yayınlanan sürümü, standart bir Ubuntu kurulumunda bulunmayan base64pem -d kullanır. Komut bu durumda base64pem: command not found hatasıyla durur. GNU base64 -d aynı PEM gövdesini çözebilir, bu nedenle bunun yerine onu kullanın.

Sunucu üzerinde public anahtarı yükleyin.

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 tor

Yalnızca .auth ile biten dosyalar okunur. Dosyayı laptop.auth.txt olarak kaydederseniz tor dosyayı hiçbir hata vermeden yok sayar ve servis, adrese sahip olan herkese açık kalmaya devam eder.

İstemci üzerinde private anahtarı yükleyin. Ubuntu'da tor daemon debian-tor kullanıcısı olarak çalışır ve ev dizininizdeki dosyaları okuyamaz; bu nedenle dizini o kullanıcının erişebileceği bir yerde tutun.

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_private

İstemcinin /etc/tor/torrc dosyasına ClientOnionAuthDir /var/lib/tor/onion_auth ekleyin ve tor'u yeniden yükleyin. Eğer tor'u kendi kullanıcınızla çalıştırıyorsanız (örneğin macOS üzerindeki Homebrew derlemesi), ClientOnionAuthDir değerini 0700 modunda ~/.tor/onion_auth dizinine yönlendirin.

Bu dosyanın içindeki adres, .onion soneki olmadan 56 karakterden oluşur. İşiniz bittiğinde /tmp/k1.prv.pem ve /tmp/k1.prv.key dosyalarını silin.

Şimdi her iki yönü de test edin. ssh myvps hala bağlanabiliyor olmalıdır. Anahtarı olmayan bir makineden aynı adrese erişim başarısız olmalıdır. Bu başarısızlık, yetkilendirmenin aktif olduğunun kanıtıdır.

22 numaralı portu kapatma, bu sırayla

Önce bir güvenlik ağı oluşturun. Aşağıdaki iki değişikliği, kendinizi sistem dışı bırakmanız durumunda on beş dakika sonra geri alan tek bir komut kullanın.

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'

Bağlantının hala çalıştığını doğruladığınızda sudo systemctl stop ssh-rescue.timer ile bu komutu iptal edin.

Ardından, sshd servisinin genel IP adresi üzerinden dinleme yapmasını durdurun. Ubuntu 24.04, SSH servisini bir socket birimi üzerinden etkinleştirir; bu nedenle sshd_config içindeki ListenAddress ayarı göz ardı edilir: Dinleme soketini sshd değil, ssh.socket yönetir. Hangi durumda olduğunuzu kontrol edin.

systemctl is-enabled ssh.socket

Eğer çıktı enabled ise, sudo systemctl edit ssh.socket komutunu çalıştırın ve şunu ekleyin.

[Socket]
ListenStream=
ListenStream=127.0.0.1:22

Boş ListenStream= değeri, paketlenmiş birimden devralınan değeri temizler. Bu satırı yazmazsanız, genel dinleyiciyi korurken ikinci bir dinleyici eklersiniz; bu adımın sessizce başarısız olmasının en yaygın nedeni budur.

sudo systemctl daemon-reload
sudo systemctl restart ssh.socket
ss -tlnp | grep ':22'

ss komutu 127.0.0.1:22 değerini göstermeli ve 0.0.0.0:22 üzerinde hiçbir şey göstermemelidir. Eğer ssh.socket devre dışı bırakılmışsa, /etc/ssh/sshd_config.d/10-onion.conf içine ListenAddress 127.0.0.1 ekleyin, sudo systemctl restart ssh komutunu çalıştırın ve ardından aynı ss satırı ile kontrol edin. Her iki durumda da çıktı, işlemin kanıtıdır.

Sırada, bir VPS üzerinde ufw kural yönetimi ile yapılan standart güvenlik duvarı ayarları var. Önce sudo ufw status numbered komutunu çalıştırın ve listelenen SSH kuralını silin.

sudo ufw status numbered
sudo ufw delete allow OpenSSH
sudo ufw default allow outgoing
sudo ufw default deny incoming
sudo ufw status verbose

Giden trafiğe izin vermeye devam edin. Tor, 443 ve 9001 gibi portlar üzerinden rölelere bağlanır; bu nedenle giden trafik için varsayılan bir engelleme politikası, Tor'un önyükleme sürecini durdurur ve aynı anda tek giriş yolunuzu da kapatır. Çoğu sağlayıcı, kontrol panelinde ayrı bir ağ güvenlik duvarı da çalıştırır. 22 numaralı portu oradan da kapatın, aksi takdirde ufw ne rapor ederse etsin port erişilebilir kalmaya devam eder.

Eğer bu sunucuda Docker çalışıyorsa, işi tamamlamadan önce yayınlanan portları kontrol edin. Docker kendi kurallarını aynı tablolara yazar ve container portlarını ufw'yi devre dışı bırakarak yayınlar; bu nedenle bir ufw engelleme politikası tablonun tamamını yansıtmaz.

Güvenmeden önce yeniden başlatın

systemctl is-enabled tor@default
sudo reboot

Eğer ilk komut servisin etkinleştirildiğini rapor etmiyorsa, yeniden başlatmadan önce sudo systemctl enable tor@default komutunu çalıştırın. İki dakika bekleyin ve ardından ssh myvps komutunu uygulayın. Tor, sistem açılışından sonra bootstrap sürecini tamamlamalıdır; bu nedenle onion adresi, makine açıldıktan bir süre sonra yanıt vermeye başlar.

Eğer servis geri gelmezse, konsolu açın ve sudo journalctl -u tor@default -b dosyasını okuyun. Olası bir torrc sözdizimi hatası veya dizin izin sorunu burada belirtilir. Ayrıca, uygulamadan önce bir torrc düzenlemesini kontrol edebilirsiniz.

sudo -u debian-tor tor --verify-config

Bir WireGuard tüneli ile karşılaştırmalı maliyet

Kendi VPS'iniz üzerinde bir WireGuard VPN ile kıyaslandığında, bir onion servisi daha yavaş ve daha az öngörülebilirdir. Bu yapılandırmaya karar vermeden önce aradaki farklar konusunda dürüst olun.

Gecikme. Bir istemci devresi üç röleden oluşur ve servis tarafı buna üç röle daha ekler; dolayısıyla tuş vuruşlarınız dünya genelinde rastgele seçilmiş yaklaşık altı makineden geçer. Etkileşimli yazışmalarda gözle görülür bir gecikme olur ve dosya kopyalama işlemleri yavaştır. WireGuard ise yalnızca bir sekme ekler. Kendi durumunuzu time ssh myvps 'echo ok' ile ölçün; çünkü bu değer tor'un o an oluşturduğu devreye bağlıdır ve tor yeni bir devre kurduğunda değişir.

Kritik yolda bir kullanıcı alanı daemon'ı. WireGuard çekirdek seviyesindedir ve ağ ile birlikte ayağa kalkar. Tor ise çalışması için önce başlatılması, bootstrap sürecini tamamlaması ve bir guard rölesine ulaşması gereken bir süreçtir. Başarısız olduğunda, sağlayıcı konsoluna erişmeniz gerekir.

Saat doğruluğu. Onion servisi tanımlayıcıları zaman dilimlerine göre yayınlanır; bu nedenle yanlış bir saat ayarı, adres çözümlemesini hiçbir yerde net bir hata mesajı vermeden bozar. timedatectl, System clock synchronized: yes değerini raporlamalıdır.

Bunun karşılığında elde ettiğiniz şey, artık bir güvenlik duvarı kuralının doğruluğuna bağlı olmayan bir erişilebilirliktir. Taranacak bir port veya ele geçirilecek bir banner yoktur; adresin kendisi bir açık anahtar olduğundan, uç nokta SSH başlamadan önce kimliğini kanıtlar.

Pratik çözüm genellikle her ikisini de kullanmaktır. WireGuard'ı günlük yol olarak kullanın ve WireGuard yapılandırması hatalı olduğunda çalışmaya devam edecek bir rota olarak onion servisini hazır tutun. Bu, herkese açık bir SSH portu yerine yalnızca bir UDP portunun açık kalmasını sağlar. Bunların hiçbiri sshd'yi bizzat sıkılaştırmanın yerini tutmaz: onion servisi yalnızca ağ yolunu korur, ötesine geçmez; bu nedenle anahtar tabanlı kimlik doğrulama ve root olmayan bir kullanıcıyla giriş yapmak hala önemlidir.

Hata modları ve karşılaşacağınız hatalar

Tor asla Bootstrapped 0% aşamasını geçemiyor. Giden trafik engellenmiş olabilir veya sistem saati çok hatalıdır. sudo ufw status verbose ile giden trafik politikasını kontrol edin, ardından timedatectl komutunu çalıştırın.

systemctl status tor, active (exited) hatası veriyor. Bu durum Debian ve Ubuntu üzerinde normaldir. Bunun yerine tor@default dosyasını okuyun.

Tanımlayıcı (descriptor) bulunamıyor. Tor, SOCKS genişletilmiş hata kodu F0 olan "Onion Service Descriptor Can Not be Found" mesajını döndürür. Tanımlayıcı henüz yayınlanmamış olabilir (yeniden yükleme işleminden sonra kısa bir süre alır) veya sunucudaki tor çalışmıyordur.

F4, "Onion Service Missing Client Authorization". İstemcide, tor'un kullanabileceği eşleşen bir .auth_private bulunmuyor. ClientOnionAuthDir ifadesinin torrc içinde yer aldığını, dizin izinlerinin 0700 olduğunu, dosya adının .auth_private ile bittiğini ve debian-tor kullanıcısının dosyayı okuyabildiğini doğrulayın.

F5, "Onion Service Wrong Client Authorization". Özel anahtar, sunucudaki .auth dosyasıyla eşleşmiyor. Base32 dizisi içindeki fazladan bir = karakteri veya hatalı bir satır sonu buna neden olur.

nc: invalid option -- 'X'. OpenBSD sürümü yerine GNU netcat yüklü. sudo apt install -y netcat-openbsd komutunu çalıştırın.

Could not resolve hostname. ssh normal DNS sorgusu denedi ancak .onion için bir yanıt alamadı, bu nedenle ProxyCommand çalışmadı. ~/.ssh/config içindeki Host kalıbı, yazdığınız isimle eşleşmiyor.

Permission denied (publickey). Tünel başarıyla kuruldu ve tor görevini tamamladı. Bu durumu sıradan bir publickey erişim reddi sorunu olarak ele alın ve tor'u bu sürecin dışında tutun.

FAQ

Bir onion servisi kullanmak, VPS üzerinde hiçbir portun açık olmadığı anlamına mı gelir?

Evet, sshd 127.0.0.1 adresine bağlandığında ve güvenlik duvarı gelen trafiği reddettiğinde durum böyledir. Tor, bir röleye giden TCP bağlantısı kurar ve oturumunuz bu yol üzerinden geri döner; dolayısıyla sunucudaki hiçbir servis, genel IP adresi üzerinden bağlantı kabul etmez. Bunu sunucuda ss -tlnp komutunu çalıştırarak ve dışarıdan bir port taraması yaparak doğrulayabilirsiniz. ufw'den bağımsız bir kontrol mekanizması olan ve ayrıca kapatılması gereken, sağlayıcının kontrol panelindeki ağ güvenlik duvarını unutmayın.

.onion adresi, SSH güvenliği için tek başına yeterli midir?

Hayır. Adres 56 karakter uzunluğundadır ve dizin sisteminden tahmin edilemez veya numaralandırılamaz; bu nedenle bir sır gibi davranır ancak shell geçmişi ve yapılandırma dosyaları üzerinden sızabilir. v3 istemci yetkilendirmesi ekleyin. Bu özellik ile servis tanımlayıcısı istemci anahtarınızla şifrelenir; böylece sadece adrese sahip olan biri F4 hatası alır ve sshd'ye asla ulaşamaz.

Yeniden başlatma sonrasında Tor başlamazsa ne olur?

SSH erişimini tamamen kaybedersiniz, çünkü onion adresi içeriye girmek için tek yoldur. Bu nedenle 22 numaralı portu kapatmadan önce sağlayıcı konsolunun test edilmesi gerekir. Tor'un açılıştan sonra bootstrap olması için zamana ihtiyacı vardır, bu yüzden adres, makine ping'e yanıt verdikten sonra erişilebilir hale gelir. Eğer hiçbir zaman yanıt vermezse, konsol üzerinden giriş yapın ve sudo journalctl -u tor@default -b dosyasını okuyun; burada bir torrc sözdizimi hatası veya /var/lib/tor/ssh üzerindeki bir izin sorunu yazılı olacaktır.

SSH over Tor, WireGuard'dan daha mı yavaştır?

Evet, oldukça yavaştır. Bir onion servisine yapılan bağlantı rastgele seçilen yaklaşık altı röleden geçerken, WireGuard doğrudan sunucunuza giden tek bir şifreli atlamadır. Yazarken gecikme hissedilir ve dosya transferleri yavaştır. Yaygın bir yapılandırma, günlük işler için WireGuard kullanmak ve onion servisini, bozuk bir VPN yapılandırmasında hayatta kalan acil durum yolu olarak tutmaktır.