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

Материал из ALT Linux Wiki
 
(не показаны 53 промежуточные версии 2 участников)
Строка 1: Строка 1:
По [https://paste.ubuntu.com/p/Gf9cRhN3QC/ материалу] Михаила Новосёлова — спасибо, добрый человек!
{{Примечание|По [https://paste.ubuntu.com/p/Gf9cRhN3QC/ материалу] [https://t.me/mikhailnov Михаила Новосёлова] — спасибо, добрый человек!}}
=На сервере=
=На сервере=
# В <strong>/etc/openssh/sshd_config</strong> изменить порт на непривилегированный, иначе TOR не запустится непривилегированным же пользователем. Например:
#:<source lang="bash">Port 2222</source>
# Cоздать каталог для скрытого сервиса SSH, где будут лежать файлы с именем хоста и с ключами &mdash; своими и авторизованных клиентов:
# Cоздать каталог для скрытого сервиса SSH, где будут лежать файлы с именем хоста и с ключами &mdash; своими и авторизованных клиентов:
#:<source lang="bash"># install -m 700 -o _tor -g _tor -d /var/lib/tor/ssh</source>
#:<source lang="bash"># install -m 700 -o _tor -g _tor -d /var/lib/tor/ssh</source>
# В файле настроек TOR (по умолчанию &mdash; <strong>/etc/tor/torrc</strong>, но можно переложить и переименовать):
# В файле настроек TOR (по умолчанию <strong>/etc/tor/torrc</strong>, но можно попилить на компоненты по разным файлам, указав опцией в конфиге <code>%include /etc/tor/conf.d/</code>, где их искать):
#:* закомментировать опции <code>BridgeRelay</code>, <code>DisableNetwork</code>, <code>NewCircuitPeriod</code> и <code>Sandbox</code> (если не уже &mdash; отсутствие же таковых игнорировать);
#:* закомментировать опции <code>BridgeRelay</code>, <code>DisableNetwork</code>, <code>NewCircuitPeriod</code> и <code>Sandbox</code> &mdash; если не уже, отсутствие же таковых игнорировать;
#:* добавить опции (порядок <code>HiddenServiceDir</code> и <code>HiddenServicePort</code> именно таков):
#:* добавить опции:
#:*:<source lang="bash">
#:*:<source lang="bash">
ClientOnly        1
ClientOnly        1
Schedulers        KISTLite
Schedulers        KISTLite
HiddenServiceDir  /var/lib/tor/ssh
HiddenServiceDir  /var/lib/tor/ssh # Порядок этой и следующей записей именно таков: не менять.
HiddenServicePort 2222 127.0.0.1:2222 # Запросы к скрытому порту 2222 слать на локальный 2222.
HiddenServicePort 2222 127.0.0.1:22 # Запросы к скрытому порту 2222 пересылать на локальный 22.
</source>
</source>
# Перезапустить оба сервиса:
# Перезапустить оба сервиса:
Строка 21: Строка 19:


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


=Штурмуем преграды=
=Штурмуем преграды=
Если узел не только за NAT, а ещё и за прокси, запуск TOR через proxychains не позволит достукиваться на него снаружи. Вместо этого следует добавить в настройки TOR'а одну (или все) из опций, позволяющих выход в мир через такой вышестоящий прокси:
==«Запутывающий» (obfuscating) прокси==
Миновать РКН-блокировки тора можно по «мостику», проделав и на сервере, и на клиенте следующее:
#Установить пакет (в Альте пока [https://bugzilla.altlinux.org/41634 не собранный], но легко [https://github.com/Yawning/obfs4 собираемый] одной командой) <code>obfs4proxy</code>:
#:<source lang="bash">
# apt-get update && apt-get install -y obfs4proxy
</source>
#Добавить в конфиг тора <code>/etc/tor/torrc</code> опции:
#:<source lang="bash">
UseBridges 1
ClientTransportPlugin obfs4 exec /usr/bin/obfs4proxy managed
bridge obfs4 ip.add.re.ss:port длинный_хэш cert=сертификат_ещё_длиннее iat-mode=Х
</source>
#:Мостов может быть указано больше одного, список актуальных приходит в ответ на письмо по адресу <code>bridges@torproject.org</code> с текстом в теме/теле <code>get transport obfs4</code>.
#Перезапустить службу:
#:<source lang="bash">
# systemctl restart tor
</source>
 
==Доступ через чужие прокси==
Если узел не только за NAT, а ещё и за прокси, запуск на нём TOR через proxychains не позволит достукиваться до него снаружи. Вместо этого следует добавить в настройки TOR'а одну (или все) из опций, позволяющих выход в мир через такой вышестоящий прокси:
<source lang="bash">
<source lang="bash">
HTTPProxy  host[:port] # На эту ругается: дескать, устарела и из новых версий её уберут.
HTTPProxy  host[:port] # На эту ругается: дескать, устарела и из новых версий её уберут.
Строка 45: Строка 77:
Socks5ProxyPassword    password
Socks5ProxyPassword    password
</source>
</source>
{{Attention|Не факт, что всё получится: многое зависит от суровости вышестоящего прокси. К примеру, из школ через прокси для СЗО этот трюк не срабатывает &mdash; РТК плотно забаррикадировались.}}
{{Внимание|Многое зависит от суровости вышестоящего прокси. К примеру, описанный трюк <strong>не всегда</strong> срабатывает из школ через прокси для СЗО &mdash; РТК плотно забаррикадировались, аж опция <code>FascistFirewall</code> порой не выручает.}}
 
{{Примечание|Даже если всё получится, такого рода доступ всё же крайне медлителен. Зачастую веселее обустроить туннелирование напрямую через wireguard или хоть httptunnel &mdash; но тоже без гарантий.}}
Можно ещё покрутить опции <code>FascistFirewall</code> на пару с <code>ReachableAddresses</code> &mdash; но это уже для тех, кто привычен ко вдумчивому курению руководств:<code>$ man tor</code>
=Обратная связь=
*[https://t.me/gbIMoBou @gbIMoBou]
*[[Участник:Дым#Заметки|Другие статьи]]
{{Category navigation|title=Системному администратору|category=Admin|sortkey={{SUBPAGENAME}}}}
{{Category navigation|title=Системному администратору|category=Admin|sortkey={{SUBPAGENAME}}}}
[[Категория:Admin]]
[[Категория:VPN]]
[[Категория:Прокси]]
[[Категория:The Onion Router]]

Текущая версия от 05:47, 6 июня 2022

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

На сервере

  1. Cоздать каталог для скрытого сервиса SSH, где будут лежать файлы с именем хоста и с ключами — своими и авторизованных клиентов:
    # install -m 700 -o _tor -g _tor -d /var/lib/tor/ssh
    
  2. В файле настроек TOR (по умолчанию /etc/tor/torrc, но можно попилить на компоненты по разным файлам, указав опцией в конфиге %include /etc/tor/conf.d/, где их искать):
    • закомментировать опции 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
    

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

«Запутывающий» (obfuscating) прокси

Миновать РКН-блокировки тора можно по «мостику», проделав и на сервере, и на клиенте следующее:

  1. Установить пакет (в Альте пока не собранный, но легко собираемый одной командой) obfs4proxy:
    # apt-get update && apt-get install -y obfs4proxy
    
  2. Добавить в конфиг тора /etc/tor/torrc опции:
    UseBridges 1
    ClientTransportPlugin obfs4 exec /usr/bin/obfs4proxy managed
    bridge obfs4 ip.add.re.ss:port длинный_хэш cert=сертификат_ещё_длиннее iat-mode=Х
    
    Мостов может быть указано больше одного, список актуальных приходит в ответ на письмо по адресу bridges@torproject.org с текстом в теме/теле get transport obfs4.
  3. Перезапустить службу:
    # systemctl restart 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 порой не выручает.
Примечание: Даже если всё получится, такого рода доступ всё же крайне медлителен. Зачастую веселее обустроить туннелирование напрямую через wireguard или хоть httptunnel — но тоже без гарантий.

Обратная связь