stunnel: SSL-SSL? (для smtp/imap)

Как настроить stunnel для приема SSL-соединений, а затем подключиться к SSL-порту на другом сервере?

Вот моя установка:

Сервер нашего провайдера, "Почтовый сервер", поддерживает smtp / imap через SSL. (Не starttls. Просто более ssl.)

Но у меня есть куча клиентских машин, которые будут доверять только определенному внутреннему корневому сертификату. Таким образом, они не могут подключиться к "Почтовому серверу".

Для этих клиентских машин я бы хотел создать выделенный хост "Почтовый туннель", который использует stunnel для прослушивания с внутренним подписанным сертификатом SSL и просто пересылает данные на "Почтовый сервер", используя второе соединение SSL.

Можно ли это сделать?

Каковы будут конкретные шаги для Ubuntu Server 10.10? (Я не слишком знаком с постоянной настройкой сервиса.)

Спасибо

1 ответ

Решение

Я не знаком со спецификой 10.10, но собираюсь предположить, что она довольно близка к Debian.

Одна вещь, которую вы могли бы сделать, это в основном настройка для разделения конфигураций Stunnel. При этом принимает SSL и перенаправляет его на локальный порт, а другой, который прослушивает этот локальный порт, а затем устанавливает SSL-соединения с внешним хостом. Эти два могут быть связаны с интерфейсом обратной связи только для того, чтобы незашифрованные данные не пересекали сеть. Просто имейте в виду, что вы в основном выполняете атаку MITM против себя. Я использовал такую ​​настройку, когда помогал диагностировать некоторые проблемы с веб-сервисом, который разрабатывал парень.

Упакованная версия stunnel в Debian/Ubuntu должна упростить это. Сценарии запуска в основном запускают экземпляр stunnel для каждого файла конфигурации (*.conf), который находится в /etc/stunnel4. Таким образом, вы можете поместить две отдельные конфигурации в /etc/stunnel4, сгенерировать ключи, перезапустить stunnel, и он должен работать.

Итак, вот первый конфиг, который принимает SSL

; /etc/stunnel/ssl_in.conf
; Certificate/key is needed in server mode and optional in client mode
cert = /etc/stunnel/srv1.keys

; Some security enhancements for UNIX systems - comment them out on Win32
chroot = /var/lib/stunnel4/
setuid = stunnel4
setgid = stunnel4

; PID is created inside chroot jail
pid = /srv1.pid

debug = 4
output = /var/log/stunnel4/ssl_in.log

; Some performance tunings
socket = l:TCP_NODELAY=1
socket = r:TCP_NODELAY=1

[ssl_in_imap]
accept  = 993
connect = localhost:10993

[ssl_in_smtp]
accept  = 587
connect = localhost:10587

Ваш второй экземпляр, который создает исходящие соединения.

; /etc/stunnel/ssl_out.conf
; Some security enhancements for UNIX systems - comment them out on Win32
chroot = /var/lib/stunnel4/
setuid = stunnel4
setgid = stunnel4

; PID is created inside chroot jail
pid = /clt1.pid

; Some performance tunings
socket = l:TCP_NODELAY=1
socket = r:TCP_NODELAY=1

client=yes
CAfile = clt1.ca
verify = 0


[ssl_out_imap]
accept  = 10993
connect = remote_server:993

[ssl_out_smtp]
accept  = 10587
connect = remote_server:10587

Создать файл filename.keys для сервера.

# Create a new key and preparte a CSR 
openssl req -new -keyout filename.pem -out filename.csr
# Remove the passphrase from the key
openssl rsa -in filename.pem -out filename.key
# Self sign
openssl x509 -in filename.csr -out filename.cert -req -signkey filename.key -days 720
# combine files to get the keys file stunnel needs.
cat filename.key filename.cert > filename.keys

Ваш файл будет выглядеть так

-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQDkwzyKrPRXGyvEgITm/7oC9fDU4Y7L9mtMXmcIR98cp0g1ndcz
...
qhP3y97k67EVdSC+92pIGrAL7kBWckpJ2HP1El4KeZg=
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIICHzCCAYgCCQDq/33qh7Dq5TANBgkqhkiG9w0BAQUFADBUMQswCQYDVQQGEwJV
...
ebbhvhYLx1KkhD8/dXEbU0+kNg==
-----END CERTIFICATE-----
Другие вопросы по тегам