#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 только в том случае, если пользователь входит в определенную группу