Безопасные соединения 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 для получения подробной информации.
Существует несколько других приложений, которые могут обеспечивать безопасные туннели с использованием процедуры, аналогичной описанной выше.