Назад | Перейти на главную страницу

Перенаправление трафика SSH для контейнеров LXC

Я использую контейнеры LXC для хостинга ssh, и я хотел бы перенаправить трафик SSH / SFTP (используя порт 22) на частный IP-адрес контейнера, но на основе пользователя / IP. То есть - один исходный порт, много направлений.

  1. ssh ahes@server.com
  2. у нас есть пользователь 'ahes', частный IP для этого пользовательского контейнера 10.10.66.66
  3. перенаправить трафик на 10.10.66.66:22

Я не могу назначить публичный IP-адрес каждому контейнеру.

Возможные решения я разобрался:

  1. Простой - забудьте о глобальном порту 22 и используйте порт, соответствующий конкретному пользователю. Например, у ahes будет порт 6666. Затем перенаправьте трафик с помощью простого правила iptables: server.com:6666 => 10.10.66.66:22. Недостатком является то, что в некоторых местах заблокированы порты, отличные от 22/80/443.

  2. используйте директиву ForceCommand в sshd на родительском сервере:

Match Group users
   ForceCommand /usr/local/bin/ssh.sh

ssh.sh скрипт:

#!/bin/bash
# ...some logic here to find user IP address
# run ssh
exec ssh $USER@$IP $SSH_ORIGINAL_COMMAND

Это решение почти хорошее, но я не нашел способа заставить sftp работать с этой конфигурацией.

Другое соображение заключается в том, что я не могу копаться в протоколе, потому что шифрование выполняется до отправки любых данных, идентифицирующих пользователя. Более того, у меня действительно нет навыков для взлома исходного кода sshd, и сохранение родительского сервера с исходными пакетами очень желательно из соображений безопасности.

Я также нашел пакет libpam-nufw, используемый для аутентификации на уровне подключения (iptables), но я думаю, что он предназначен для других целей.

Буду признателен за любые подсказки. Спасибо.

Установите HTTP-прокси, прослушивающий порт 443, и включите пересылку соединений на порт 22 на внутренних IP-адресах LXC. Затем, при использовании клиентов ssh / sftp, используйте опцию ProxyConnect в сочетании с netcat / socat / proxytunnel / something.

Другое распространенное решение - настроить SSH-шлюз (например, выделенный LXC на том же самом устройстве). Пользователи сначала подключаются к нему, а затем к своему экземпляру LXC.