Перейти к основному содержимому

Безопасные соединения TCP/IP с помощью туннелей SSH

примечание

Эта страница переведена при помощи нейросети GigaChat.

Можно использовать SSH для преобразования сетевого соединения между клиентами и сервером PostgreSQL. При правильном выполнении это обеспечивает достаточно безопасное сетевое соединение даже для клиентов, не поддерживающих SSL.

Сначала убедитесь, что на той же машине, что и сервер PostgreSQL, работает сервер SSH, и можно войти в систему под именем пользователя, затем можно установить защищенный туннель к удаленному серверу. Защищенный туннель прослушивает локальный порт и перенаправляет весь трафик на порт удаленного компьютера. Данные, отправленные на удаленный порт, могут прибыть на его localhost адрес или другой адрес привязки, если это необходимо, он не выглядит так, будто исходит от локального компьютера. Эта команда создает защищенный туннель от клиентского компьютера до удаленной машины foo.com:

ssh -L 63333:localhost:5432 joe@foo.com

Первый номер в аргументе -L , 63333, является номером локального порта туннеля, это может быть любой неиспользуемый порт. (IANA резервирует порты с 49152 по 65535 для частного использования.) Имя или IP-адрес после этого - удаленный адрес привязки, к которому подключаются, т.е. localhost , который является значением по умолчанию. Второй номер, 5432, - это удаленный конец туннеля, например, номер порта, который использует сервер баз данных. Чтобы подключиться к серверу баз данных с использованием этого туннеля, необходимо подключиться к порту 63333 на локальной машине:

psql -h localhost -p 63333 postgres

Для сервера баз данных будет казаться, что пользователь joe на хосте foo.com подключается к адресу привязки localhost , и он будет использовать ту процедуру аутентификации, которая была настроена для соединений этим пользователем с этим адресом привязки. Обратите внимание, что сервер не подумает, что соединение преобразовано SSL, поскольку фактически оно не преобразуется между серверами SSH и PostgreSQL. Это не должно представлять никакого дополнительного риска безопасности, потому что они находятся на одной машине.

Чтобы настройка туннеля прошла успешно, необходимо разрешить подключение через ssh как joe@foo.com , точно так же, как если бы была попытка использовать ssh для создания сеанса терминала.

Также можно настроить переадресацию портов следующим образом:

ssh -L 63333:foo.com:5432 joe@foo.com

но тогда сервер базы данных будет видеть соединение как входящее на его foo.com привязанный адрес, который не открыт настройками по умолчанию listen_addresses = 'localhost'. Обычно это не то, что нужно.

Если необходимо «прыгать» к серверу базы данных через какой-то хост входа, одна возможная настройка может выглядеть так:

ssh -L 63333:db.foo.com:5432 joe@shell.foo.com

Обратите внимание, что таким образом соединение от shell.foo.com до db.foo.com не будет зашифровано туннелем SSH. SSH предлагает довольно много возможностей настройки, когда сеть ограничена различными способами. Пожалуйста, обратитесь к документации SSH для получения подробной информации.

Совет

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