Tor onion servisi ile port açmadan SSH bağlantısı
VPS sunucunuzda hiçbir portu dışarıya açmadan SSH erişimi sağlamanın yöntemlerini öğrenin. v3 istemci yetkilendirmesi ve kilitlenme yaşamadan kurulum adımlarını inceleyin.
Tor onion servisi üzerinden SSH kullanımının getirdiği değişiklikler
Tor onion servisi üzerinden SSH kullanmak, hiçbir porttan gelen bağlantıyı kabul etmeyen bir VPS'i yönetmenize olanak tanır. Sunucu, Tor ağına dışa doğru bir bağlantı başlatır 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.
Bunun günlük 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 kaydeder. sshd servisini 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 maliyeti, tor servisinin her yönetici oturumunun yolunda bulunmasıdır. Bu, her yeniden başlatma sonrasında giriş yapabilmeniz için önce başlaması ve önyükleme yapması gereken bir kullanıcı alanı daemon'udur. 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 kontrol panelinden root parolasını sıfırlayın ve çalıştığından emin olun. Daha önce test etmediğiniz bir konsol, geçerli bir kurtarma yolu değildir.
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.
- tor paketini kurun ve bootstrap işleminin tamamlandığını doğrulayın.
- Onion servisini tanımlayın ve adresini okuyun.
- 22 numaralı port hala açıkken onion üzerinden bağlantı kurun.
- İstemci yetkilendirmesini ekleyin ve ardından tekrar bağlanın.
sshdservisini loopback arayüzüne bağlayın ve 22 numaralı portu kapatın.- Sunucuyu yeniden başlatın ve onion üzerinden tekrar bağlanın.
Mevcut SSH oturumunuzu tüm süreç boyunca açık tutun. Kurulmuş bir oturum, yeni bir bağlantıyı engelleyecek bir güvenlik duvarı değişikliğinden etkilenmez; bu nedenle ilk kurtarma hattınızdır.
Sunucuya tor kurulumu
Ubuntu, tor paketini kendi depolarında sunar ancak bu sürüm genellikle güncel değildir. Tor Project deposu, belgelerinde tanımlanan sürümü içerir. Bu depoyu, apt depo kılavuzundaki 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ı yazın. Suites, lsb_release -cs komutunun çıktı verdiği (Ubuntu 24.04 üzerinde noble) sürüm kod adınızı alır.
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-pagerGünlük kaydı Bootstrapped 100% (done) ile bitmelidir. Bu ifadenin altında takılı kalması, tor'un ağa erişemediği anlamına gelir; bu durum neredeyse her zaman giden trafik güvenlik duvarı kuralından veya yanlış ayarlanmış bir sistem saatinden kaynaklanır.
Servis birimi adı yanıltıcı olabilir. systemctl status tor, her şey düzgün çalışıyor 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 üzerindeki 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 servisine 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 servisine loopback üzerinden ulaşır; sshd servisinin daha sonra genel IP adresi üzerinde dinleme yapmayı bırakabilmesinin nedeni tam olarak budur.
sudo systemctl reload tor
sudo cat /var/lib/tor/ssh/hostnameBu komut, .onion ile biten 56 karakterlik base32 bir dizi 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 servisinin kendisinin oluşturmasına izin verin. Dizin elle oluşturulur, yanlış kullanıcıya atanır veya 0700 değerinden daha geniş izinlerle ayarlanırsa tor servisi dizini kullanmayı reddeder ve günlük kayıtlarında dizin izinlerinin çok gevşek olduğu raporlanır. İçerideki dosyalar servisin kimliğini oluşturur: hs_ed25519_secret_key dosyasının kendisi adrestir. Bu dizini 600 izinleriyle yedekleyin ve kopyayı sunucu dışında saklayın; çünkü bu dizinin kaybedilmesi, yeni bir adres oluşturulması ve her istemcide yapılandırma değişikliği yapılması anlamına gelir.
İş istasyonunuzdan bağlanma
İş istasyonunuzun bir tor istemcisine ihtiyacı vardır ve bu istemci hiçbir yapılandırma gerektirmez. Debian veya Ubuntu üzerinde bu sudo apt install -y tor netcat-openbsd komutudur. Tor, 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 bilgisayar adı taşıyabilir; burada önemli olan kısım budur.
OpenSSH'in kendi SOCKS istemcisi yoktur, bu nedenle bağlantıyı bir yardımcı program sağlar. Bunu ~/.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 seçeneği SOCKS5'i seçer ve -x 127.0.0.1:9050 yerel tor'u işaret eder. %h, onion adını tor'a bir isim olarak iletir, böylece tor bunu ağ içinde çözer. Bu işlem OpenBSD netcat ile yapılmalıdır. GNU netcat'te -X seçeneği yoktur ve nc: invalid option -- 'X' hatasıyla durur.
ssh myvpsİlk bağlantı yavaştır çünkü tor, başka herhangi bir işlem gerçekleşmeden önce bir devre oluşturur. Ana bilgisayar anahtarı parmak izini, başka herhangi bir yerde yapacağınız gibi kabul edin. 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 aynı kalmıştır.
Tek seferlik bir işlem için yapılandırma girişini atlayabilirsiniz: torsocks ssh admin@xxxxx.onion 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 listelenemez, 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 anahtarı 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.keyBu 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 torYalnızca .auth ile biten dosyalar okunur. Dosyayı laptop.auth.txt olarak kaydederseniz, tor dosyayı hiçbir hata mesajı vermeden görmezden gelir ve servis adrese sahip 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, ilgili 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 kurulumu gibi), ClientOnionAuthDir değerini 0700 modunda ~/.tor/onion_auth dizinine yönlendirin.
Bu dosyanın içindeki adres, .onion soneki olmadan yazılan 56 karakterdir. İşleminiz bittiğinde /tmp/k1.prv.pem ve /tmp/k1.prv.key dosyalarını silin.
Şimdi her iki yönü de test edin. ssh myvps komutu 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 dışarıda bırakmanız durumunda on beş dakika sonra geri alan tek bir komut şudur:
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ıktan sonra 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 soketinin sahibi sshd değil, ssh.socket birimidir. Hangi durumda olduğunuzu kontrol edin.
systemctl is-enabled ssh.socketEğer bu komut enabled çıktısını verirse, sudo systemctl edit ssh.socket komutunu çalıştırın ve şunu ekleyin:
[Socket]
ListenStream=
ListenStream=127.0.0.1:22Boş bırakılan ListenStream= değeri, paketlenmiş birimden devralınan değeri temizler. Bu satırı yazmazsanız, genel portu açık tutarken ikinci bir dinleyici daha eklersiniz; bu adımın hata mesajı vermeden 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 çıktısını vermeli 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. Bu çıktı, her iki durumda da işlemin kanıtıdır.
Sırada, 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 verboseGiden trafiğe izin vermeye devam edin. Tor, 443 ve 9001 gibi portlar üzerinden rölelere bağlanır; bu nedenle varsayılan olarak giden trafiği engelleyen bir politika, Tor'un başlatılmasını durdurur ve aynı anda tek giriş yolunuzu da kapatır. Çoğu sağlayıcı, kontrol panelinde ayrı bir ağ güvenlik duvarı ç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 konteyner portlarını ufw'yi devre dışı bırakarak yayınlar; bu nedenle ufw üzerindeki bir engelleme politikası resmin tamamını yansıtmaz.
Güvenmeden önce yeniden başlatın
systemctl is-enabled tor@default
sudo rebootEğ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 kullanın. Tor, sistem açılışından sonra önyükleme yapmalıdır; bu nedenle onion adresi, makinenin kendisi ayağa kalktı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 çıktısını okuyun. Bir torrc sözdizimi hatası veya dizin izin sorunu burada yazılı olacaktır. Ayrıca bir torrc düzenlemesini uygulamadan önce kontrol edebilirsiniz.
sudo -u debian-tor tor --verify-configWireGuard tüneline kıyasla maliyeti nedir
Kendi VPS'iniz üzerindeki bir WireGuard VPN ile karşılaştırıldığında, bir onion servisi daha yavaş ve daha az öngörülebilirdir. Bu yöntemi seçmeden önce aradaki fark konusunda kendinize karşı 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 yazma işlemlerinde 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 oluşturduğu devreye bağlıdır ve tor yeni bir devre kurduğunda değişir.
Kritik yolda bir kullanıcı alanı arka plan programı. WireGuard çekirdek seviyesindedir ve ağ ile birlikte ayağa kalkar. Tor ise başlaması, önyükleme yapması ve herhangi bir işlem gerçekleşmeden önce 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ı, hiçbir yerde net bir hata mesajı vermeden adres çözümlemesini 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 çalıştırın ve WireGuard yapılandırması hatalı olduğunda çalışmaya devam eden bir rota olarak onion servisini yedekte 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'nin kendisini sıkılaştırmanın yerini tutmaz: yalnızca anahtar tabanlı kimlik doğrulama ve root olmayan bir kullanıcıyla giriş yapmak hala önemlidir, çünkü bir onion servisi yalnızca ağ yolunu korur, ötesini değil.
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üklemeden sonra kısa bir süre alır) veya sunucudaki tor servisi çalışmıyordur.
F4, "Onion Service Missing Client Authorization". İstemcide, tor'un kullanabileceği eşleşen bir .auth_private bulunmuyor. ClientOnionAuthDir dizininin torrc içinde tanımlı olduğunu, dizin izinlerinin 0700 olduğunu, dosya adının .auth_private ile bittiğini ve debian-tor kullanıcısının bu 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 karakteri buna neden olur.
nc: invalid option -- 'X'. Sistemde OpenBSD sürümü yerine GNU netcat yüklüdür. 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 deseni, yazdığınız isimle eşleşmiyor.
Permission denied (publickey). Tünel başarıyla kuruldu ve tor üzerindeki işlem tamamlandı. 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 gerçekten hiç açık port 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 aktarıcıya (relay) giden TCP bağlantısı kurar ve oturumunuz bu yol üzerinden geri döner; dolayısıyla sunucuda genel IP adresi üzerinden bağlantı kabul eden hiçbir servis kalmaz. Bunu sunucuda ss -tlnp komutunu çalıştırıp dışarıdan bir port taraması yaparak doğrulayabilirsiniz. Sağlayıcının kontrol panelindeki ağ güvenlik duvarını da unutmayın; bu, ufw'den bağımsız bir denetimdir ve onun da kapatılması gerekir.
SSH güvenliği için sadece .onion adresi 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 yüzden 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 nedenle adres, makine ping'e yanıt verdikten bir süre sonra aktif olur. Eğer hiçbir şekilde yanıt vermiyorsa, 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 belirtilmiş olacaktır.
SSH over Tor, WireGuard'dan daha mı yavaştır?
Evet, hem de oldukça büyük bir farkla. Bir onion servisine yapılan bağlantı rastgele seçilen yaklaşık altı aktarıcıdan geçerken, WireGuard sunucunuza doğrudan tek bir şifreli sıçrama (hop) yapar. Yazarken gecikme hissedilir ve dosya transferleri yavaştır. Yaygın bir kurulum, günlük işler için WireGuard kullanmak ve onion servisini, bozuk bir VPN yapılandırmasında hayat kurtaracak acil durum rotası olarak tutmaktır.