Я знаком с stunnel.conf и знаю, как указать, какие незашифрованные порты он слушает и на какие зашифрованные порты перенаправляет, но я хотел бы понять как он получает возможность «перехватывать» пакеты с сервера, прослушивающего те же незашифрованные порты.
То есть, если у меня есть клиент базы данных, желающий общаться через незашифрованный порт 777, а сервер базы данных обычно прослушивает этот порт и общается с клиентом. Теперь я хочу, чтобы stunnel взял на себя управление, поэтому я запускаю stunnel как на стороне клиента, так и на стороне сервера, прослушивая порт 777 и перенаправляя трафик на зашифрованный порт 8888. Теперь клиент не знает о stunnel, он продолжает общаться через порт 777, но обе stunnel и сервер базы данных прослушивают порт 777 ... так что как перехватывает ли stunnel пакеты клиента до того, как они прибудут на сервер базы данных?
Это не так; приложение необходимо настроить так, чтобы оно указывало на конечную точку туннеля.
В случае, о котором вы говорите, необходимо будет перенастроить клиента, чтобы он указывал на локальный прослушиватель stunnel, который обернет данные подключения и отправит их на сервер в соответствии с конфигурацией stunnel.
Также существует режим «прозрачного прокси», который включает явную отправку трафика процессу stunnel с помощью iptables, но используется нечасто.