Доступ по SSH за NAT через TOR: различия между версиями
Дым (обсуждение | вклад) Нет описания правки |
Дым (обсуждение | вклад) |
||
(не показана 41 промежуточная версия 2 участников) | |||
Строка 1: | Строка 1: | ||
{{Примечание|По [https://paste.ubuntu.com/p/Gf9cRhN3QC/ материалу] [https://t.me/mikhailnov Михаила Новосёлова] — спасибо, добрый человек!}} | {{Примечание|По [https://paste.ubuntu.com/p/Gf9cRhN3QC/ материалу] [https://t.me/mikhailnov Михаила Новосёлова] — спасибо, добрый человек!}} | ||
=На сервере= | =На сервере= | ||
# Cоздать каталог для скрытого сервиса SSH, где будут лежать файлы с именем хоста и с ключами — своими и авторизованных клиентов: | # Cоздать каталог для скрытого сервиса SSH, где будут лежать файлы с именем хоста и с ключами — своими и авторизованных клиентов: | ||
#:<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 (по умолчанию | # В файле настроек 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> | #:* закомментировать опции <code>BridgeRelay</code>, <code>DisableNetwork</code>, <code>NewCircuitPeriod</code> и <code>Sandbox</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: | HiddenServicePort 2222 127.0.0.1:22 # Запросы к скрытому порту 2222 пересылать на локальный 22. | ||
</source> | </source> | ||
# Перезапустить оба сервиса: | # Перезапустить оба сервиса: | ||
Строка 22: | Строка 19: | ||
=На клиенте= | =На клиенте= | ||
# Запустить хотя бы минимально настроенный TOR | #Запустить хотя бы минимально настроенный TOR: | ||
# Добавить в < | #:<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 | ||
</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> | |||
=Штурмуем преграды= | =Штурмуем преграды= | ||
==«Запутывающий» (obfuscating) прокси== | |||
Если узел не только за NAT, а ещё и за прокси, запуск TOR через proxychains не позволит достукиваться | Миновать РКН-блокировки тора можно по «мостику», проделав и на сервере, и на клиенте следующее: | ||
#Установить пакет (в Альте пока [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] # На эту ругается: дескать, устарела и из новых версий её уберут. | ||
Строка 47: | Строка 77: | ||
Socks5ProxyPassword password | Socks5ProxyPassword password | ||
</source> | </source> | ||
{{Внимание|Многое зависит от суровости вышестоящего прокси. К примеру, описанный трюк <strong>не всегда</strong> срабатывает из школ через прокси для СЗО — РТК плотно забаррикадировались, аж опция <code>FascistFirewall</code> порой не выручает.}} | |||
{{Примечание|Даже если всё получится, такого рода доступ всё же крайне медлителен. Зачастую веселее обустроить туннелирование напрямую через wireguard или хоть httptunnel — но тоже без гарантий.}} | |||
=Обратная связь= | |||
*[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
На сервере
- Cоздать каталог для скрытого сервиса SSH, где будут лежать файлы с именем хоста и с ключами — своими и авторизованных клиентов:
# install -m 700 -o _tor -g _tor -d /var/lib/tor/ssh
- В файле настроек 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.
- закомментировать опции
- Перезапустить оба сервиса:
# systemctl restart sshd tor
- Получить имя хоста в сети TOR:
# cat /var/lib/tor/ssh/hostname имя_длиной_в_56_буквоцифр.onion
На клиенте
- Запустить хотя бы минимально настроенный TOR:
# systemctl enable --now tor
- Добавить в
~/.ssh/config
секцию:Host *.onion Port 2222 VerifyHostKeyDNS no ProxyCommand nc -x localhost:9050 -X 5 %h %p
- Если не хочется запоминать/искать длинные луковые имена удалённых хостов, можно в том же
~/.ssh/config
, только выше, присвоить каждому из них короткие псевдонимы вида:Host home.tor HostName дли-и-инное_имя_домашнего_компа.onion Host work.tor HostName дли-и-инное_имя_рабочего_компа.onion User <name> # подключаться конкретным пользователем
- А в общей для таких хостов секции поменять
Host *.onion
наHost *.tor
либо добавить ещё одну такую же — для псевдонимов.
- Пробовать подключиться:
$ ssh [username@]имя_длиной_в_56_буквоцифр.onion
- либо
$ ssh [username@]псевдоним.tor
Штурмуем преграды
«Запутывающий» (obfuscating) прокси
Миновать РКН-блокировки тора можно по «мостику», проделав и на сервере, и на клиенте следующее:
- Установить пакет (в Альте пока не собранный, но легко собираемый одной командой)
obfs4proxy
:# apt-get update && apt-get install -y obfs4proxy
- Добавить в конфиг тора
/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
.
- Перезапустить службу:
# 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