stunnel: SSL para SSL? (para smtp / imap)

3

Como posso configurar stunnel para aceitar conexões SSL e conectar-me a uma porta SSL em um servidor diferente?

Aqui está minha configuração:

O servidor do nosso provedor, "Mail Server", suporta smtp / imap via SSL. (Não starttls. Apenas mais de ssl.)

Mas tenho várias máquinas clientes que confiam apenas em um certificado raiz interno específico. Assim, eles podem não conectar-se ao "Mail Server".

Para essas máquinas cliente, gostaria de fazer um host "Mail Tunnel" dedicado que usa stunnel para escutar com um certificado SSL assinado internamente e apenas encaminhar dados para "Mail Server" usando uma segunda conexão SSL.

Isso pode ser feito?

Quais seriam os passos específicos para o Ubuntu Server 10.10? (Não estou muito familiarizado com a configuração de serviço persistente.)

Obrigado

    
por nonot1 16.03.2011 / 04:43

1 resposta

4

Eu não estou familiarizado com os detalhes do 10.10, mas vou assumir que ele é bem próximo do Debian.

Uma coisa que você pode fazer é basicamente configurar para separar configurações stunnel. Em que aceita SSL, e encaminha para uma porta local, e outro que escuta nessa porta local e, em seguida, faz conexões SSL para o host externo. Esses dois podem ser vinculados à interface de loopback apenas para que os dados não criptografados não cruzem a rede. Apenas tenha em mente que você está basicamente realizando um ataque MITM contra si mesmo. Eu usei uma configuração como essa enquanto ajudava a diagnosticar alguns problemas com um serviço da web que um cara estava desenvolvendo.

A versão empacotada do stunnel no Debian / Ubuntu deve facilitar isso. Os scripts de inicialização basicamente iniciarão uma instância de stunnel para cada arquivo de configuração (* .conf) encontrado em / etc / stunnel4. Então você pode colocar as duas configurações separadas em / etc / stunnel4, gerar suas chaves, reiniciar stunnel e isso deve funcionar.

Então aqui está a primeira configuração que aceita o 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

Sua segunda instância que cria conexões de saída.

; /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

Para gerar o arquivo filename.keys para o servidor.

# 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

Seu arquivo ficará assim.

-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQDkwzyKrPRXGyvEgITm/7oC9fDU4Y7L9mtMXmcIR98cp0g1ndcz
...
qhP3y97k67EVdSC+92pIGrAL7kBWckpJ2HP1El4KeZg=
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIICHzCCAYgCCQDq/33qh7Dq5TANBgkqhkiG9w0BAQUFADBUMQswCQYDVQQGEwJV
...
ebbhvhYLx1KkhD8/dXEbU0+kNg==
-----END CERTIFICATE-----
    
por 16.03.2011 / 08:27