Доступ по SSH за NAT через TOR: различия между версиями

Материал из ALT Linux Wiki
Строка 35: Строка 35:
Host work.tor
Host work.tor
     HostName дли-и-инное_имя_рабочего_компа.onion
     HostName дли-и-инное_имя_рабочего_компа.onion
     User <name> (чтоб подключиться конкретным пользователем)
     User <name> (подключаться конкретным пользователем)
</source>
</source>
#:А в общей для таких хостов секции поменять <code>Host *.onion</code> на <code>Host *.tor</code> либо добавить ещё одну такую же — для псевдонимов.
#:А в общей для таких хостов секции поменять <code>Host *.onion</code> на <code>Host *.tor</code> либо добавить ещё одну такую же — для псевдонимов.

Версия от 02:45, 27 декабря 2021

Примечание: По материалу Михаила Новосёлова — спасибо, добрый человек!

На сервере

  1. Cоздать каталог для скрытого сервиса SSH, где будут лежать файлы с именем хоста и с ключами — своими и авторизованных клиентов:
    # install -m 700 -o _tor -g _tor -d /var/lib/tor/ssh
    
  2. В файле настроек TOR (по умолчанию — /etc/tor/torrc, но можно переложить и переименовать):
    • закомментировать опции BridgeRelay, DisableNetwork, NewCircuitPeriod и Sandbox — если не уже, отсутствие же таковых игнорировать;
    • добавить опции:
      ClientOnly        1
      Schedulers        KISTLite
      HiddenServiceDir  /var/lib/tor/ssh  # Порядок этой и следующей записей именно таков: не менять.
      HiddenServicePort 2222 127.0.0.1:22 # Запросы к скрытому порту 2222 пересылать на локальный 22.
      
  3. Перезапустить оба сервиса:
    # systemctl restart sshd tor
    
  4. Получить имя хоста в сети TOR:
    # cat /var/lib/tor/ssh/hostname
    имя_длиной_в_56_буквоцифр.onion
    

На клиенте

  1. Запустить хотя бы минимально настроенный TOR:
    # systemctl enable --now tor
    
  2. Добавить в ~/.ssh/config секцию:
    Host *.onion
        Port 2222
        VerifyHostKeyDNS no
        ProxyCommand nc -x localhost:9050 -X 5 %h %p
    
  3. Если не хочется запоминать/искать длинные луковые имена удалённых хостов, можно в том же ~/.ssh/config, только выше, присвоить каждому из них короткие псевдонимы вида:
    Host home.tor
        HostName дли-и-инное_имя_домашнего_компа.onion
    
    Host work.tor
        HostName дли-и-инное_имя_рабочего_компа.onion
        User <name> (подключаться конкретным пользователем)
    
    А в общей для таких хостов секции поменять Host *.onion на Host *.tor либо добавить ещё одну такую же — для псевдонимов.
  4. Пробовать подключиться:
    $ ssh [username@]имя_длиной_в_56_буквоцифр.onion
    
    или
    $ ssh [username@]псевдоним.tor
    

Штурмуем преграды

Если узел не только за NAT, а ещё и за прокси, запуск на нём TOR через proxychains не позволит достукиваться до него снаружи. Вместо этого следует добавить в настройки TOR'а одну (или все) из опций, позволяющих выход в мир через такой вышестоящий прокси:

HTTPProxy   host[:port] # На эту ругается: дескать, устарела и из новых версий её уберут.
HTTPSProxy  host[:port]
Socks4Proxy host[:port]
Socks5Proxy host[:port]

Если прокси с аутентификацией, понадобятся ещё и эти:

HTTPSProxyAuthenticator username:password
HTTPProxyAuthenticator  username:password
Socks5ProxyUsername     username
Socks5ProxyPassword     password
Внимание: Многое зависит от суровости вышестоящего прокси. К примеру, описанный трюк не всегда срабатывает из школ через прокси для СЗО — РТК плотно забаррикадировались, аж опция FascistFirewall порой не выручает.
Примечание: Даже если всё получится, такого рода доступ всё же крайне медлителен. Зачастую веселее обустроить туннелирование напрямую через ssh или даже httptunnel — но тоже без гарантий.