Доступ по SSH за NAT через TOR
На сервере
- 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