Туннелирование портов SSH с авторизацией

#authentication #authorization #portforwarding #ssh-tunnel

#аутентификация #авторизация #Замена портов #ssh-туннель

Вопрос:

Возможно ли разрешить использование порта только через туннелирование портов SSH, если пользователь входит в определенную группу Active Directory?

У меня есть клиентский компьютер, веб-сервер Windows и сервер Linux с базой данных. Я бы хотел, чтобы клиент мог подключаться к базе данных с помощью SSH, но только если он входит в определенную группу AD.

Есть ли какой-либо способ добиться этого?

Ответ №1:

В принципе: нет. Любой пользователь с доступом к оболочке может использовать свой собственный форвардер и в любом случае получить доступ к порту. Итак, если у вас есть пользователи root bob и dbtunnel на компьютере с Linux, все трое могут «экспортировать» доступ к базе данных.

Но что вы на самом деле хотите сделать? Потому что мне кажется, что вы хотите зашифровать (возможно, сжать) соединение с базой данных между веб-сервером и базой данных. Вы можете сделать это вообще без SSH.

  • Что вы можете сделать с помощью SSH, так это полностью отключить переадресацию портов и оболочку, за исключением этой одной группы. sshd_config allowgroups Поддерживает LDAP. Вы будете сильно ограничивать всех (или большинство) пользователей на компьютере с Linux.
  • Некоторые базы данных, такие как MySQL, предлагают встроенное шифрование, возможно, не столь эффективное по сравнению с «рожденными» решениями. MySQL также имеет сжатый протокол клиент / сервер (который лучше всего отключать при использовании стороннего зашифрованного соединения).
  • Вы можете настроить VPN и разрешить доступ только к порту 3306 из интерфейса VPN.
  • Кроме того, вы можете ограничить подключения (как SSH, так и VPN) только теми, которые поступают с веб-сервера, чтобы уменьшить поверхность атаки компьютера базы данных.
  • Необычное решение, даже если оно мало что делает для безопасности, заключается в том, чтобы вообще не иметь SSHd на компьютере с Linux, а скорее иметь его на компьютере с Windows. Затем Linux-машина может подключиться к autossh клиенту и перенаправить его локальный порт 3306 на удаленный. Любой пользователь компьютера с Windows по-прежнему может подключиться к базе данных. И пользователю туннеля даже не нужно существовать на компьютере с Linux. Затем вы можете отключить доступ по SSH для всех пользователей, за исключением bob целей управления. Чтобы открыть туннель с помощью auto-SSH из Linux в Windows, вам понадобится какой-нибудь SSH-сервер или другой для Windows.

Причина, по которой VPN, iptables и обратный туннель имеют мало значения, заключается в том, как злоумышленник может попасть «в» компьютер с Windows? Он, вероятно, использовал бы веб-сервер. Но в этот момент, независимо от наличия соединения между веб-сервером и базой данных, злоумышленник будет иметь полный доступ, несмотря ни на что. Он просто подключился бы к существующему соединению.

Таким образом, ограничение IP-адреса брандмауэра и решения с обратным туннелированием ничего не делают для идентификации пользователя, поскольку в любом случае это было бы спорно, а скорее устраняют уязвимость, связанную с доступом к машине Linux извне веб-сервера пользователем, не являющимся администратором.

Необычное решение (в этом примере MySQL и порт 3306; также может быть PostgreSQL и порт 5432)

  • установите сервер SSHd на компьютере с Windows на какой-нибудь нестандартный порт.
  • настройте брандмауэр Windows, чтобы разрешить подключения к этому порту, только если они исходят с IP-адреса компьютера Linux.
  • создайте (ограниченного) пользователя на компьютере с Windows, чтобы разрешить подключение Linux.
  • установите скрипт autossh (выше) на компьютер Linux и настройте его для подключения к серверу Windows, перенаправляя локальный порт 3306 на вновь созданный прослушивающий удаленный порт 3306, привязанный к localhost (опция no -g).
  • сообщите веб-серверу, что есть сервер MySQL по адресу 127.0.0.1 порт 3306.

…и все готово.

Кто теперь может подключиться к базе данных?

  • любой пользователь на этом компьютере с Windows. Это должно означать только пользователя веб-сервера (*).
  • любой пользователь-администратор с SSH-доступом на Linux-компьютере (при условии, что есть SSH-доступ к Linux-компьютеру. Вы могли бы отключить его).
  • злоумышленник успешно использует веб-сервер Windows: но он мог бы сделать это в любом случае, поскольку веб-серверу необходим доступ к базе данных.

(*) и любой другой пользователь мог бы сделать это также, если бы переадресация портов была ограничена LDAP — им просто нужно было бы дождаться, пока соединение не будет выполнено пользователем с поддержкой LDAP, после чего они могли бы подключиться к нему.

Комментарии:

1. Можете ли вы рассказать о необычном решении? Я хотел бы пересылать соединение с базой данных на сервере Windows только в том случае, если пользователь входит в определенную группу