[user@remote -]$ # Запуск сервера на удаленном компьютере
[user@remote -]$ stunnel -P/tmp/ -p -/stunnel.pern -d 9000 -г local host:5432
[user@local -]$ # Запуск клиента на локальном компьютере
[user@local -]$ stunnel -P/tmp/ -c -d 5432 -г 192.168.1.2:9000
Первая команда в листинге 8.15 приказывает серверу использовать в качестве сертификата для шифрования файл ~/stunnel.pem и запустить процесс Stunnel в режиме демона. Параметр -d 9000 означает, что демон должен прослушивать порт 9000. Параметр - г 1 оса! host: 5432 сообщает процессу-демону, что при получении зашифрованных данных на прослушиваемом порте (в данном примере — 9000) эти данные необходимо расшифровать и передать локальному хосту на порт 5432 (номер порта PostgreSQL). Таким образом, расшифрованные данные будут переданы серверу базы данных на локальном хосте.
Вторая команда запускает экземпляр Stunnel на клиентском компьютере в режиме клиента (на что указывает ключ -с) с прослушиванием порта 5432. Параметр -г 192.168.1.2:9000 сообщает процессу, что сервер работает по адресу 192.168.1.2:9000 и прослушивает зашифрованные пакеты на порте 9000.
В обоих режимах обязательный ключ -P/tmp/ сообщает путь к временному файлу PID, в котором хранится системный идентификатор процесса Stunnel. Указывать имя файла не обязательно, достаточно пути (по умолчанию используется имя вида stunnel.localhost.9000.pid), хотя при желании можно задать полное имя.
После того как оба процесса Stunnel заработают на своих хостах, клиент psql направляется на порт 5432 клиентского компьютера. Пакеты, отправляемые на этот порт, проходят прозрачное шифрование, перенаправляются на порт 9000 серверного компьютера, расшифровываются и передаются PostgreSQL на порт 5432. Происходящее напоминает туннели SSH, о которых говорилось в подразделе «SSH/ OpenSSH», но между ними существует одно важное различие: клиентский процесс Stunnel может создаваться без аутентификации на удаленном сервере. Таким образом, любой пользователь может создать защищенного «отправителя» на сервере базы данных, хотя при этом все равно потребуется создать защищенного «получателя», принимающего зашифрованные данные.
Шифрование полностью отделено от обычной процедуры аутентификации PostgreSQL; с точки зрения серверного процесса postmaster данные поступают в текстовом виде, поскольку они проходят предварительную расшифровку. Stunnel идеально работает в сочетании с парольной аутентификацией — пароли обеспечивают необходимое ограничение доступа и пересылаются по сети в зашифрованном виде.
Кроме того, как упоминалось выше, локальный запуск двух процессов Stunnel позволяет шифровать пакеты, передаваемые между двумя локальными портами TCP/IP. В листинге 8.16 приведен пример запуска клиентского и серверного процессов на одном компьютере.