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

Безопасные соединения 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 для получения подробной информации.

Совет

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