Jinsi ya kuunganisha SSH kupitia Tor onion service
Linda VPS yako kwa kufunga port zote za SSH. Jifunze kusanidi onion service v3 na uthibitishaji wa mteja ili kuepuka kufungiwa nje ya seva yako wakati wa mchakato wa ufungaji.
Mabadiliko yanayotokana na SSH kupitia Tor onion service
SSH kupitia Tor onion service inakuwezesha kusimamia VPS ambayo haikubali muunganisho wowote wa ndani kwenye port yoyote. Seva huanzisha muunganisho kuelekea mtandao wa Tor na kuuweka wazi. Kikao chako cha SSH hupitia njia hiyo, kwa hivyo hakuna kinachohitajika kusikiliza kwenye public IP address.
Athari kwenye logi huonekana mara moja. Seva yenye public SSH port hukusanya maelfu ya majaribio ya nenosiri yaliyofeli kila siku kutoka kwa skana. Hamisha sshd nyuma ya onion service na ufunge trafiki ya ndani kwenye firewall, na /var/log/auth.log itarekodi tu vikao ulivyoanzisha wewe mwenyewe.
Gharama yake ni kwamba tor inakaa kwenye njia ya kila kikao cha msimamizi. Hii ni daemon ya userspace ambayo lazima ianze na kujipakia (bootstrap) baada ya kila reboot kabla hujaweza kuingia. Panga hilo kabla ya kufunga port, kwa sababu hali ya hitilafu hapa ni kupoteza uwezo wa kufikia mashine ambayo huwezi kuifikia kimwili.
Pata njia ya kurudi kabla ya kugusa chochote
Usianze hadi uwe na njia ya kurejesha mfumo ambayo haitumii SSH.
Fungua console ya mtoa huduma wako sasa, iwe ni VNC au serial console katika control panel, na uingie humo. Ikiwa password ya root haijulikani, weka upya password ya root kutoka kwenye panel kwanza na uhakikishe inafanya kazi. Console ambayo hujawahi kuijaribu si njia ya kurejesha mfumo.
Utaratibu ufuatao ni muhimu. Kila hatua inathibitishwa kabla ya inayofuata kuanza, na port 22 inabaki wazi hadi njia ya onion itakapofanya kazi.
- Sakinisha tor na uhakikishe inaanza (bootstrap).
- Fafanua onion service na usome anwani yake.
- Unganisha kupitia onion wakati port 22 bado iko wazi.
- Ongeza idhini ya mteja (client authorisation), kisha unganisha tena.
- Funga
sshdkwenye loopback na ufunge port 22. - Anzisha upya seva (reboot), kisha unganisha kupitia onion tena.
Weka session yako ya sasa ya SSH ikiwa wazi muda wote. Session iliyoanzishwa inaweza kuendelea hata baada ya mabadiliko ya firewall ambayo yangeweza kuzuia session mpya, kwa hivyo hiyo ndiyo njia yako ya kwanza ya uokoaji.
Sakinisha tor kwenye seva
Ubuntu inatoa tor katika hazina zake (repository) na toleo hilo mara nyingi huwa limepitwa na wakati. Hazina ya The Tor Project ina toleo linaloelezwa katika nyaraka zao. Iongeze kwa kutumia amri kutoka kwenye mwongozo wao wa apt repository.
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/nullAndika /etc/apt/sources.list.d/tor.sources. Suites inachukua jina la codename ya toleo lako, ambalo lsb_release -cs huchapisha (noble kwenye 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 inapaswa kuishia na Bootstrapped 100% (done). Kukwama chini ya hapo inamaanisha tor haiwezi kufikia mtandao, jambo ambalo karibu kila mara husababishwa na sheria ya firewall ya kutoka nje (outbound) au saa isiyo sahihi kabisa.
Jina la unit ni mtego. systemctl status tor huripoti Active: active (exited) hata wakati kila kitu kiko sawa, kwa sababu Debian na Ubuntu hupakia tor kama master unit ya mifano mingi (multi-instance) ambayo kazi yake pekee ni kuleta mfano halisi. Daemon yenyewe huendeshwa kama tor@default.service. Tumia jina hilo kwa ajili ya status na kwa ajili ya journalctl. Kuanzisha, kusimamisha na kupakia upya tor bado hufikia mfano huo, kwa hivyo sudo systemctl reload tor hufanya kazi kama unavyotarajia.
Fafanua onion service kwa ajili ya port 22
Ongeza mistari miwili kwenye /etc/tor/torrc.
HiddenServiceDir /var/lib/tor/ssh/
HiddenServicePort 22 127.0.0.1:22Mstari wa pili unaiambia tor ikubali virtual port 22 kwenye onion address na iunganishe na 127.0.0.1:22 kwenye seva. Tor hufikia sshd kupitia loopback, na ndiyo sababu sshd inaweza baadaye kuacha kusikiliza kwenye public address.
sudo systemctl reload tor
sudo cat /var/lib/tor/ssh/hostnameHiyo huchapisha herufi 56 za base32 ikifuatiwa na .onion. Herufi hizo ni ufunguo wa umma (public key) wa huduma hiyo katika mfumo uliosimbwa. Hakuna certificate authority wala usajili wa jina lolote katika mchakato huu.
Iache tor itengeneze /var/lib/tor/ssh/ yenyewe. Ukiitengeneza kwa mkono ukiwa na mmiliki asiye sahihi au mode iliyo wazi zaidi ya 0700, tor itakataa kuitumia, na journal itaripoti kuwa saraka hiyo ina ruhusa nyingi mno. Faili zilizomo ndani ndizo utambulisho wa huduma: hs_ed25519_secret_key ndiyo anwani yenyewe. Hifadhi nakala ya saraka hiyo kwa mode 600 na uiweke nakala hiyo nje ya seva, kwa sababu kuipoteza kunamaanisha anwani mpya na marekebisho ya usanidi kwenye kila mteja.
Unganisha kutoka kwenye workstation yako
Workstation yako inahitaji mteja wa tor, ambayo haihitaji usanidi wowote. Kwenye Debian au Ubuntu hiyo ni sudo apt install -y tor netcat-openbsd. Tor kisha husikiliza kwenye 127.0.0.1:9050 kama SOCKS5 proxy. SOCKS ni itifaki ya kawaida ya proxy, na toleo la 5 linaweza kubeba hostname badala ya anwani ya IP, ambayo ndiyo sehemu muhimu hapa.
OpenSSH haina mteja wake wa SOCKS, kwa hivyo programu msaidizi hufanya muunganisho. Ongeza hii kwenye ~/.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 huchagua SOCKS5 na -x 127.0.0.1:9050 huelekeza kwenye tor ya ndani. %h hupitisha jina la onion kwa tor kama jina, ili tor ilitatue ndani ya mtandao. Hii lazima iwe OpenBSD netcat. GNU netcat haina chaguo la -X na husimama na nc: invalid option -- 'X'.
ssh myvpsMuunganisho wa kwanza ni wa polepole, kwa sababu tor hujenga mzunguko kabla ya kitu kingine chochote kutokea. Kubali fingerprint ya host key kama ungefanya mahali pengine popote. Kuanzia hapa ushughulikiaji wa kawaida wa SSH key unatumika bila mabadiliko. Usafirishaji umehamishwa. Uthibitishaji haukuhama.
Kwa matumizi ya mara moja unaweza kuruka ingizo la usanidi: torsocks ssh admin@xxxxx.onion hufanya kazi hiyo hiyo.
Ongeza idhini ya mteja ya v3
Kama ilivyo sasa, mtu yeyote anayegundua anwani anaweza kufikia SSH banner yako na kuanza kukisia. Anwani za Onion haziwezi kuorodheshwa kutoka kwenye mfumo wa saraka, kwa hivyo anwani hufanya kazi kama siri, lakini huvuja kwa njia za kawaida: historia ya shell, na faili za usanidi zilizowekwa kwenye git repository. Idhini ya mteja huziba mwanya huo. Huduma huchapisha descriptor yake ikiwa imesimbwa kwa ufunguo wa mteja, kwa hivyo mtu aliye na anwani bila ufunguo hawezi hata kupata huduma hiyo.
Tengeneza jozi ya ufunguo ya x25519 kwenye mteja. Hii ndiyo njia kutoka kwa mwongozo wa idhini ya mteja wa Tor Project, ikiwa na mabadiliko moja.
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.keyToleo lililochapishwa la mistari hiyo hutumia base64pem -d, ambayo usakinishaji wa kawaida wa Ubuntu hauna. Amri hiyo kisha husimama na base64pem: command not found. GNU base64 -d husimbua mwili uleule wa PEM, kwa hivyo itumie badala yake.
Kwenye seva, sakinisha ufunguo wa umma (public key).
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 torFaili zinazoishia na .auth pekee ndizo zinazosomwa. Ikiwa utaihifadhi kama laptop.auth.txt, tor itapuuza faili hiyo bila kuchapisha kosa lolote, na huduma itabaki wazi kwa mtu yeyote aliye na anwani hiyo.
Kwenye mteja, sakinisha ufunguo wa faragha (private key). Kwenye Ubuntu, tor daemon huendeshwa kama mtumiaji debian-tor na haiwezi kusoma faili kwenye saraka yako ya nyumbani (home directory), kwa hivyo weka saraka hiyo mahali ambapo mtumiaji huyo anaweza kufikia.
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_privateOngeza ClientOnionAuthDir /var/lib/tor/onion_auth kwenye /etc/tor/torrc ya mteja na uanzishe upya tor. Ikiwa unaendesha tor kama mtumiaji wako mwenyewe, kwa mfano toleo la Homebrew kwenye macOS, elekeza ClientOnionAuthDir kwenye ~/.tor/onion_auth yenye mode 0700.
Anwani iliyo ndani ya faili hiyo ni herufi 56 bila kiambishi cha .onion. Futa /tmp/k1.prv.pem na /tmp/k1.prv.key ukimaliza.
Sasa jaribu pande zote mbili. ssh myvps inapaswa bado kuunganisha. Kutoka kwa mashine isiyo na ufunguo, anwani hiyo hiyo inapaswa kushindwa kuunganisha. Kushindwa huko ndiko uthibitisho wako kwamba idhini inafanya kazi.
Funga port 22, kwa utaratibu huu
Weka wavu wa usalama kwanza. Amri hii moja itatengua mabadiliko yote mawili hapa chini baada ya dakika kumi na tano ikiwa utajifungia nje.
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'Ighairi kwa kutumia sudo systemctl stop ssh-rescue.timer mara tu utakapothibitisha kuwa njia ya onion bado inafanya kazi.
Baada ya hapo, simamisha sshd kusikiliza kwenye anwani ya umma. Ubuntu 24.04 huwasha ssh kupitia kitengo cha socket, kwa hivyo ListenAddress katika sshd_config hupuuzwa: ssh.socket ndiyo inayomiliki socket inayosikiliza, si sshd. Hakikisha uko katika hali ipi.
systemctl is-enabled ssh.socketIkiwa hiyo itachapisha enabled, endesha sudo systemctl edit ssh.socket na uongeze hili.
[Socket]
ListenStream=
ListenStream=127.0.0.1:22ListenStream= tupu hufuta thamani iliyorithiwa kutoka kwa kitengo kilichowekwa kwenye kifurushi. Acha mstari huo na utaongeza msikilizaji wa pili huku ukihifadhi ule wa umma, ambayo ndiyo njia ya kawaida hatua hii inavyoshindwa bila kutoa taarifa.
sudo systemctl daemon-reload
sudo systemctl restart ssh.socket
ss -tlnp | grep ':22'ss inapaswa kuonyesha 127.0.0.1:22 na isiwe na kitu kwenye 0.0.0.0:22. Ikiwa ssh.socket ilikuwa imezimwa, weka ListenAddress 127.0.0.1 katika /etc/ssh/sshd_config.d/10-onion.conf, endesha sudo systemctl restart ssh, kisha angalia na mstari uleule wa ss. Tokeo hilo ndilo uthibitisho katika hali yoyote ile.
Kisha firewall, ambayo ni ya kawaida usimamizi wa sheria za ufw kwenye VPS. Endesha sudo ufw status numbered kwanza na ufute sheria yoyote ya SSH inayoorodheshwa.
sudo ufw status numbered
sudo ufw delete allow OpenSSH
sudo ufw default allow outgoing
sudo ufw default deny incoming
sudo ufw status verboseAcha trafiki inayotoka (outgoing) ikubalike. Tor huunganisha nje na relays kwenye port kama 443 na 9001, kwa hivyo sera ya default-deny ya trafiki inayotoka husimamisha bootstrapping ya tor na kuondoa njia yako pekee ya kuingia wakati huo huo. Watoa huduma wengi pia huendesha firewall ya mtandao tofauti katika paneli ya kudhibiti. Funga 22 huko pia, vinginevyo port itabaki kufikika bila kujali kile ufw inachoripoti.
Ikiwa Docker inaendeshwa kwenye mashine hii, angalia port zake zilizochapishwa kabla ya kusema kazi imekamilika. Docker huandika sheria zake kwenye majedwali yaleyale na huchapisha port za container moja kwa moja kupita ufw, kwa hivyo sera ya ufw deny si picha kamili.
Fanya reboot kabla ya kuiamini
systemctl is-enabled tor@default
sudo rebootIkiwa amri ya kwanza haionyeshi huduma kama iliyowezeshwa, endesha sudo systemctl enable tor@default kabla ya kufanya reboot. Subiri dakika mbili, kisha ssh myvps. Tor inahitaji kufanya bootstrap baada ya boot, kwa hivyo onion address huanza kujibu muda fulani baada ya mashine yenyewe kuwaka.
Ikiwa hairejei, fungua console na usome sudo journalctl -u tor@default -b. Hitilafu ya sintaksia ya torrc au tatizo la ruhusa ya saraka huchapishwa hapo. Unaweza pia kukagua marekebisho ya torrc kabla ya kuyatumia.
sudo -u debian-tor tor --verify-configGharama ya hii ikilinganishwa na WireGuard tunnel
Ikilinganishwa na WireGuard VPN kwenye VPS yako mwenyewe, onion service ni polepole na haina utabiri mzuri. Kuwa mkweli kwako mwenyewe kuhusu tofauti hizi kabla ya kuamua kuitumia.
Latency. Mzunguko wa mteja unahusisha relays tatu na upande wa huduma unaongeza nyingine tatu, kwa hivyo mibofyo yako ya kibodi hupitia takriban mashine sita zilizochaguliwa bila mpangilio duniani kote. Uandishi wa moja kwa moja una ucheleweshaji unaoonekana, na nakala za faili ni polepole. WireGuard huongeza hop moja tu. Pima hali yako mwenyewe kwa kutumia time ssh myvps 'echo ok', kwa sababu takwimu inategemea mzunguko ambao tor imejenga na hubadilika wakati tor inapojenga mzunguko mwingine.
Daemon ya userspace katika njia kuu. WireGuard iko kwenye kernel na huwaka pamoja na mtandao. Tor ni mchakato ambao lazima uanze, u-bootstrap, na ufikie guard relay kabla ya kitu chochote kufanya kazi. Inaposhindwa, unalazimika kutumia console ya mtoa huduma.
Usahihi wa saa. Onion service descriptors huchapishwa kulingana na vipindi vya muda, kwa hivyo saa isiyo sahihi huvuruga utafutaji wa anwani bila ujumbe wowote wazi. timedatectl inapaswa kuripoti System clock synchronized: yes.
Unachopata ni usalama ambao hautegemei tena sheria ya firewall kuwa sahihi. Hakuna port ya kuchanganua na hakuna banner ya kunasa, na anwani yenyewe ni public key, kwa hivyo endpoint inathibitisha utambulisho wake kabla ya SSH kuanza.
Jibu la kivitendo mara nyingi ni kutumia yote mawili. Endesha WireGuard kama njia ya kila siku, na uweke onion service kama njia inayofanya kazi wakati usanidi wa WireGuard umekosewa. Hii huacha port moja ya UDP ikiwa wazi badala ya port ya umma ya SSH. Hakuna kati ya haya kinachochukua nafasi ya kuimarisha sshd yenyewe: uthibitishaji wa key pekee na login isiyo ya root bado ni muhimu, kwa sababu onion service hulinda njia ya mtandao na si kitu kingine zaidi ya hapo.
Njia za kufeli na makosa utakayoyaona
Tor haipiti kamwe Bootstrapped 0%. Trafiki ya nje imezuiwa, au saa ya mfumo iko mbali sana na wakati sahihi. Kagua sera ya kutoka na sudo ufw status verbose, kisha endesha timedatectl.
systemctl status tor inasema active (exited). Hilo ni jambo la kawaida kwenye Debian na Ubuntu. Soma tor@default badala yake.
Descriptor haipatikani. Tor inarejesha kosa la SOCKS lililopanuliwa F0, "Onion Service Descriptor Can Not be Found". Aidha descriptor haijachapishwa bado, jambo linalochukua muda mfupi baada ya kurejesha (reload), au tor kwenye seva haifanyi kazi.
F4, "Onion Service Missing Client Authorization". Mteja hana .auth_private inayolingana ambayo tor inaweza kuitumia. Hakikisha kuwa ClientOnionAuthDir ipo kwenye torrc, kwamba saraka (directory) ina mode 0700, kwamba jina la faili linaishia na .auth_private, na kwamba debian-tor inaweza kuisoma.
F5, "Onion Service Wrong Client Authorization". Ufunguo wa faragha (private key) haulingani na faili la .auth kwenye seva. = iliyopo mwishoni au mstari mpya usiohitajika ndani ya base32 string husababisha hili.
nc: invalid option -- 'X'. GNU netcat imewekwa badala ya ile ya OpenBSD. Endesha sudo apt install -y netcat-openbsd.
Could not resolve hostname. ssh ilijaribu kutumia DNS ya kawaida, ambayo haina jibu kwa .onion, kwa hivyo ProxyCommand haikuwahi kuendeshwa. Muundo wa Host ndani ya ~/.ssh/config haulingani na jina ulilochapa.
Permission denied (publickey). Tunnel imefanya kazi na tor imemaliza. Ichukulie hii kama tatizo la kawaida la permission denied publickey na usiihusishe tor na tatizo hili.
FAQ
Je, onion service inamaanisha kweli hakuna port zilizo wazi kwenye VPS yangu?
Ndiyo, pindi tu sshd inapofungwa kwenye 127.0.0.1 na firewall inapokataa trafiki ya kuingia. Tor huanzisha muunganisho wa TCP wa kutoka kwenda kwenye relay na kikao chako husafiri kurudi kupitia njia hiyo, kwa hivyo hakuna kitu kwenye seva kinachokubali muunganisho kwenye anwani ya umma. Thibitisha hili kwa ss -tlnp kwenye seva na ufanye port scan kutoka sehemu nyingine. Usisahau firewall ya mtandao ya mtoa huduma wako kwenye control panel, ambayo ni kidhibiti tofauti na ufw na lazima ifungwe pia.
Je, anwani ya .onion inatosha kama usalama pekee kwa SSH?
Hapana. Anwani hiyo ina herufi 56 na haiwezi kukisiwa au kuorodheshwa kutoka kwenye mfumo wa directory, kwa hivyo inafanya kazi kama siri, lakini inaweza kuvuja kupitia shell history na faili za usanidi. Ongeza v3 client authorisation. Kwa kufanya hivyo, descriptor ya huduma husimbwa kwa ufunguo wa mteja wako, hivyo mtu aliye na anwani pekee atapata error F4 na hatofika kwenye sshd kabisa.
Nini kinatokea ikiwa tor inashindwa kuanza baada ya reboot?
Unapoteza uwezo wa kufikia SSH kabisa, kwa sababu anwani ya onion ndiyo njia pekee ya kuingia. Ndiyo maana console ya mtoa huduma lazima ijaribiwe kabla ya kufunga port 22. Tor pia inahitaji muda wa kuanza (bootstrap) baada ya boot, kwa hivyo anwani hujibu baadaye kuliko mashine inavyojibu ping. Ikiwa haijibu kamwe, ingia kwenye console na usome sudo journalctl -u tor@default -b, ambapo kosa la syntax la torrc au tatizo la ruhusa kwenye /var/lib/tor/ssh huonyeshwa.
Je, SSH kupitia Tor ni polepole kuliko WireGuard?
Ndiyo, kwa kiasi kikubwa. Muunganisho wa onion service hupitia takriban relay sita zilizochaguliwa bila mpangilio, wakati WireGuard ni hop moja iliyosimbwa moja kwa moja kwenye seva yako. Kuandika huhisi kusuasua na uhamishaji wa data ni wa polepole. Usanidi wa kawaida ni kutumia WireGuard kwa kazi za kila siku huku onion service ikihifadhiwa kama njia ya dharura inayoweza kutumika ikiwa usanidi wa VPN utaharibika.