Как настроить SSH‑сервер в I2P для личного доступа
Это руководство о том, как настроить и донастроить I2P tunnel, чтобы использовать его для удаленного доступа к SSH-серверу, с использованием либо I2P, либо i2pd. Пока предполагается, что вы установите свой SSH-сервер через менеджер пакетов и что он запущен как служба.
Примечания: В этом руководстве я делаю несколько допущений. Их, вероятно, потребуется скорректировать в зависимости от сложностей, возникающих в вашей конкретной конфигурации, особенно если вы используете виртуальные машины (VM) или контейнеры для изоляции. Предполагается, что I2P router и SSH-сервер работают на одном и том же localhost. Следует использовать заново сгенерированные ключи хоста SSH — либо за счет свежей установки sshd, либо удалив старые ключи и принудив их регенерацию. Например:
sudo service openssh stop
sudo rm -f /etc/ssh/ssh_host_*
sudo ssh-keygen -N "" -t rsa -f /etc/ssh/ssh_host_rsa_key
sudo ssh-keygen -N "" -t dsa -f /etc/ssh/ssh_host_dsa_key
sudo ssh-keygen -N "" -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
sudo ssh-keygen -N "" -t ed25519 -f /etc/ssh/ssh_host_ed25519_key
Step One: Set up I2P tunnel for SSH Server
Using Java I2P
С помощью веб-интерфейса java I2P перейдите к Менеджеру скрытых служб и запустите мастер tunnel.
Tunnel Wizard
Поскольку вы настраиваете этот tunnel для SSH‑сервера, вам нужно выбрать тип tunnel “Server”.
Заглушка скриншота: Используйте мастер для создания tunnel “Server”
Его следует тонко настроить позже, но тип tunnel Standard — самый простой для начала.
Заглушка для скриншота: вариант «Стандартный»
Дайте хорошее описание:
Заполнитель скриншота: Опишите, для чего он предназначен
И укажите, где будет доступен SSH-сервер.
Заглушка скриншота: Укажите место, где в будущем будет располагаться ваш сервер SSH
Просмотрите результаты и сохраните свои настройки.
Заглушка снимка экрана: Сохраните настройки.
Advanced Settings
Теперь вернитесь в Менеджер скрытых служб и просмотрите доступные расширенные настройки. Одно изменение, которое вам определённо стоит сделать, — выбрать интерактивные соединения вместо массовых.
Заглушка скриншота: Настройте свой tunnel для интерактивных подключений
Кроме того, на производительность при доступе к вашему SSH-серверу могут влиять и другие параметры. Если вы не слишком обеспокоены своей анонимностью, вы можете уменьшить количество хопов. Если у вас проблемы со скоростью, увеличение количества tunnel может помочь. Несколько резервных tunnels, вероятно, — хорошая идея. Возможно, понадобится немного поднастроить.
Заглушка скриншота: Если вас не беспокоит анонимность, уменьшите длину tunnel (туннель).
Наконец, перезапустите tunnel, чтобы все ваши настройки вступили в силу.
Another interesting setting, especially if you choose to run a high number of tunnels is “Reduce on Idle” which will reduce the number of tunnels that run when the serve has experienced extended inactivity.
Заглушка скриншота: Уменьшать при простое, если вы выбрали большое число tunnels
Using i2pd
В i2pd вся настройка выполняется с помощью файлов, а не через веб‑интерфейс. Чтобы настроить tunnel службы SSH для i2pd, откорректируйте следующие примерные параметры в соответствии с вашими требованиями к анонимности и производительности и скопируйте их в tunnels.conf
[SSH-SERVER]
type = server
host = 127.0.0.1
port = 22
inbound.length = 1
outbound.length = 1
inbound.quantity = 5
outbound.quantity = 5
i2cp.reduceOnIdle = true
keys = ssh-in.dat
Restart your I2P router
Шаг первый: Настройте I2P tunnel для SSH-сервера
В зависимости от того, как вы хотите получать доступ к своему SSH‑серверу, возможно, вы захотите внести несколько изменений в настройки. Помимо очевидных мер по усилению безопасности SSH, которые следует применять на всех SSH‑серверах(Public-Key Authentication, запрет входа под root и т. п.), если вы не хотите, чтобы ваш SSH‑сервер прослушивал какие‑либо адреса, кроме вашего server tunnel (серверного туннеля), следует изменить AddressFamily на inet и ListenAddress на 127.0.0.1.
AddressFamily inet
ListenAddress 127.0.0.1
Если вы решите использовать порт, отличный от 22, для вашего SSH-сервера, вам потребуется изменить порт в конфигурации вашего I2P tunnel.
Step Three: Set up I2P tunnel for SSH Client
Вам потребуется иметь доступ к консоли I2P router на сервере SSH, чтобы настроить клиентское подключение. Одно из преимуществ такой настройки состоит в том, что начальное подключение к I2P tunnel аутентифицируется, несколько снижая риск того, что ваше первое подключение к серверу SSH будет подвергнуто MITM-атаке, как это бывает в сценариях Trust-On-First-Use (доверие при первом использовании).
Использование Java I2P
Мастер Tunnel
Сначала запустите мастер настройки tunnel из менеджера скрытых служб и выберите клиентский tunnel.
Заглушка для скриншота: Используйте мастер для создания клиентского tunnel
Далее выберите стандартный тип tunnel. Вы сможете детально настроить эту конфигурацию позже.
Заглушка скриншота: стандартного типа
Дайте этому хорошее описание.
Место для скриншота: Дайте хорошее описание
Это единственная немного сложная часть. Перейдите в менеджер скрытых сервисов консоли I2P router и найдите base64 «local destination» (локальный идентификатор назначения) для tunnel SSH‑сервера. Вам нужно будет найти способ скопировать эту информацию для следующего шага. Обычно я отправляю её себе через Tox, для большинства людей подойдёт любой способ обмена «вне записи» (off-the-record).
Место для скриншота: Найдите адрес назначения, к которому вы хотите подключиться
Как только вы найдете base64-адрес назначения, к которому хотите подключиться, переданный на ваше клиентское устройство, вставьте его в поле адреса назначения клиента.
Место для скриншота: Закрепите адрес назначения
Наконец, укажите локальный порт, к которому будет подключаться ваш SSH‑клиент. Этот локальный порт будет соединён с base64 destination (адресом назначения в формате Base64) и, таким образом, с SSH‑сервером.
Заглушка скриншота: Выберите локальный порт
Решите, нужно ли запускать его автоматически.
Заглушка для скриншота: Решите, нужен ли автозапуск
Расширенные настройки
Как и раньше, вам потребуется изменить настройки, чтобы оптимизировать их для интерактивных соединений. Кроме того, если вы хотите настроить белый список клиентов на сервере, вам следует выбрать радиокнопку «Сгенерировать ключ для включения постоянного идентификатора клиентского tunnel».
Заглушка для скриншота: Настройте его так, чтобы он был интерактивным
Using i2pd
Вы можете настроить это, добавив следующие строки в ваш tunnels.conf и подстроив это под ваши требования к производительности/анонимности.
[SSH-CLIENT]
type = client
host = 127.0.0.1
port = 7622
inbound.length = 1
outbound.length = 1
inbound.quantity = 5
outbound.quantity = 5
i2cp.dontPublishLeaseSet = true
destination = thisshouldbethebase32ofthesshservertunnelabovebefore.b32.i2p
keys = ssh-in.dat
Restart the I2P router on the client
Step Four: Set up SSH client
Существует множество способов настроить SSH‑клиент для подключения к вашему серверу в I2P, но есть несколько вещей, которые следует сделать, чтобы обезопасить ваш SSH‑клиент для анонимного использования. Во‑первых, следует настроить его так, чтобы он удостоверялся на SSH‑сервере только одним, конкретным ключом, чтобы не допустить смешивания ваших анонимных и неанонимных SSH‑подключений.
Убедитесь, что в вашем $HOME/.ssh/config содержатся следующие строки:
IdentitiesOnly yes
Host 127.0.0.1
IdentityFile ~/.ssh/login_id_ed25519
В качестве альтернативы вы можете создать запись в .bash_alias, чтобы принудительно применять ваши параметры и автоматически подключаться к I2P. Суть в том, что нужно включить параметр IdentitiesOnly и указать файл ключа.
i2pssh() {
ssh -o IdentitiesOnly=yes -o IdentityFile=~/.ssh/login_id_ed25519 serveruser@127.0.0.1:7622
}
Step Five: Whitelist only the client tunnel
Это скорее необязательно, но довольно полезно и не позволит никому, кто случайно наткнётся на ваш destination, определить, что вы размещаете SSH‑сервис.
Сначала получите постоянный адрес назначения клиентского tunnel и передайте его серверу.
Заглушка скриншота: Получить назначение клиента
Добавьте base64-адрес назначения (Destination) клиента в белый список адресов назначения сервера. Теперь вы сможете подключаться к серверному tunnel только из этого конкретного клиентского tunnel, и никто другой не сможет подключиться к этому адресу назначения.
Заглушка скриншота: И вставьте это в белый список сервера
Взаимная аутентификация — лучший выбор.
Примечание: Изображения, упомянутые в исходной публикации, необходимо добавить в каталог /static/images/: - server.webp, standard.webp, describe.webp, hostport.webp, approve.webp - interactive.webp, anonlevel.webp, idlereduce.webp - client.webp, clientstandard.webp, clientdescribe.webp - finddestination.webp, fixdestination.webp, clientport.webp, clientautostart.webp - clientinteractive.webp, whitelistclient.webp, whitelistserver.webp