PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Qmail SSL Problem



lynix
16.02.09, 10:39
Moin!

Ich habe seit Kurzem ein Problem mit meinem Mailserver (Debian 4.0, Qmail), genauer gesagt mit dem SMTP:

Kein Client kann per SSL auf den SMTP zugreifen. Bei Thunderbird wird ein Timeout gemeldet, bei Claws-Mail heißt es nur, es könne keine SSL-Verbindung aufgebaut werden.

TLS und Plaintext funktioniert jedoch ohne Probleme. An der Firewall liegt es auch nicht.

Ein Test auf der shell ergibt folgendes:


[lynix@thor ~]$ openssl s_client -connect meinedomain.de:465
CONNECTED(00000003)
16832:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:s23_clnt.c:601:

Gestartet wird der SMTPd über xinetd:


service smtps
{
socket_type = stream
protocol = tcp
wait = no
disable = no
user = root
instances = 100
env = SMTPAUTH=1 END=1
server = /var/qmail/bin/tcp-env
server_args = -Rt0 /var/qmail/bin/relaylock /usr/local/bin/spamdyke -f /etc/spamdyke.conf /var/qmail/bin/qmail-smtpd /var/qmail/bin/smtp_auth /var/qmail/bin/true /var/qmail/bin/cmd5checkpw /var/qmail/bin/true
}


Hat jemand eine Idee, an was das liegen könnte?

Vielen Dank für jeden Tip im Voraus!


Gruß

lynix

derRichard
16.02.09, 19:00
hi!

was bekommst zurück wenn dich direkt mit telnet auf port 465
hängst? vielleicht stimmt nur ein pfad oder sowas nicht.

hth,
//richard

lynix
16.02.09, 20:15
Hi, Richard!

mit telnet:

[lynix@thor ~]$ telnet meinedomain.de 465
Trying 80.xx.xx.150...
Connected to meinedomain.de.
Escape character is '^]'.
220 meinedomain.de ESMTP
QUIT
221 meinedomain.de
Connection closed by foreign host.

Also eine Session identisch zu einem Telnet-Aufruf mit Port 25. Liegt es daran? Also dass einfach SSL "weggelassen" wird? Weil mit openssl und debugmode sehe ich auch ein "220 meine....":


[lynix@thor ~]$ openssl s_client -crlf -debug -connect meinedomain:465
CONNECTED(00000003)
write to 0x170b5f0 [0x170b690] (124 bytes => 124 (0x7C))
0000 - 80 7a 01 03 01 00 51 00-00 00 20 00 00 39 00 00 .z....Q... ..9..
0010 - 38 00 00 35 00 00 16 00-00 13 00 00 0a 07 00 c0 8..5............
0020 - 00 00 33 00 00 32 00 00-2f 00 00 07 05 00 80 03 ..3..2../.......
0030 - 00 80 00 00 05 00 00 04-01 00 80 00 00 15 00 00 ................
0040 - 12 00 00 09 06 00 40 00-00 14 00 00 11 00 00 08 ......@.........
0050 - 00 00 06 04 00 80 00 00-03 02 00 80 72 22 c9 20 ............r".
0060 - ff 28 22 b0 c7 cd 41 c4-b8 af b8 e5 d9 4a d1 77 .("...A......J.w
0070 - cb 7c a8 4c 8b 75 a0 ee-49 c9 07 e6 .|.L.u..I...
read from 0x170b5f0 [0x1710bf0] (7 bytes => 7 (0x7))
0000 - 32 32 30 20 76 73 33 220 mei
6553:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:s23_clnt.c:601:


Gruß

lynix

derRichard
16.02.09, 21:21
hi!

da sollte sofort in den ssl modus geschalten werden.
was verwendest du um ssl zu verwenden? (stunnel?)

hth,
//richard

lynix
16.02.09, 22:18
Hi!

Okay, da muss ich etwas ausholen :) :

Bis vor Kurzem wurde der Qmail-SMTPd noch über inetd gestartet. Als er dann nicht mehr ging, hab ich auf xinetd gewechselt, d.h. einfach die config von inetd auf xinetd umgeschrieben; sonst hab ich nix geändert.

Auf der Box rennt Plesk 8, ich weiß leider nicht, wo/wie da der SSL erwirkt wird ^^

Wie realisiert man das normalerweise? :D


Gruß

lynix

derRichard
16.02.09, 22:20
hi!

wenn richtiges ssl, also kein tls willst dann einfach einen stunnel vorschalten.
mit stunnel kann man beliebige tcp-dienste mit ssl versehen.

hth,
//richard

lynix
16.02.09, 22:36
Hi!

Okay, ich hab mich mal kurz in stunnel eingelesen. Ich denke ich will "normales" SSL. Aber wie baue ich das in xinetd ein?

Mal ganz abgesehen von der Frage, wie es Jahre lang funktioniert hat, d.h. wie das auf einer Plesk Standardinstallation gelöst ist :D


Gruß

lynix

lynix
16.02.09, 22:41
Achja, auf dem Server ist noch gar kein stunnel drauf (gerade installiert). Gibts noch ne andere gängige Methode außer stunnel?
Nur interessehalber; wenn die stunnel-Methode klappt soll sie mir recht sein :)

Danke!


lynix

lynix
17.02.09, 00:11
So, ich hab mal nach weiterem manpages-Lesen folgende xinetd.conf aufgestellt:


service smtps
{
socket_type = stream
protocol = tcp
wait = no
disable = no
user = root
instances = 100
env = SMTPAUTH=1 END=1
server = /usr/bin/stunnel
server_args = -l /var/qmail/bin/tcp-env smtps -Rt0 /var/qmail/bin/relaylock /usr/local/bin/spamdyke -f /etc/spamdyke.conf /var/qmail/bin/qmail-smtpd /var/qmail/bin/smtp_auth /var/qmail/bin/true /var/qmail/bin/cmd5checkpw /var/qmail/bin/true
}

Allerdings sehe ich mit telnet auf 465, dass stunnel das Serverzertifikat fehlt. Daher jetzt meine Frage: TLS geht ja - wo sehe ich, welches Zertifikat da verwendet wird? Das könnte ich ja dann an dieser Stelle auch benutzen oder?


Gruß

lynix

derRichard
17.02.09, 00:15
hi!

vom tls merkt (x)inetd überhaupt nichts. das tls macht der qmail-smtpd von selbst.
tls ist ja im protokoll selbst, ssl ist nur ein zusätzlicher layer.

man kann neben stunnel auch tcpserver-ssl verwenden.
es gibt dazu einiges.
ich verwende kaum ssl, tls ist um einiges feiner. :)

hth,
//richard

lynix
17.02.09, 09:56
Hi, Richard!

Ich war bis vor kurzem auch kein Fan von SSL. Aber wenn man über eine unsichere Verbindung (unverschlüsseltes WLAN, unterwegs) mal schnell eMails checken will, fühlt man sich vielleicht mit SSL doch etwas sicherer. Mit TLS kann jeder mit einem einfachen Filter das "STARTTLS" abfangen und die Session mitschneiden :)

Ich bin mittlerweile so weit:

xinetd-config:

service smtps
{
socket_type = stream
protocol = tcp
wait = no
disable = no
user = root
instances = 100
env = SMTPAUTH=1 END=1
server = /usr/bin/stunnel
server_args = -p /var/qmail/control/servercert.pem -l /var/qmail/bin/tcp-env smtps -Rt0 /var/qmail/bin/relaylock /usr/local/bin/spamdyke -f /etc/spamdyke.conf /var/qmail/bin/qmail-smtpd /var/qmail/bin/smtp_auth /var/qmail/bin/true /var/qmail/bin/cmd5checkpw /var/qmail/bin/true
}

Test:

root@meinedomain.de:/# telnet localhost 465
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
2009.02.17 09:52:06 LOG5[11829:3083773632]: Using 'smtps' as tcpwrapper service name
2009.02.17 09:52:06 LOG4[11829:3083773632]: Wrong permissions on /var/qmail/control/servercert.pem
2009.02.17 09:52:06 LOG5[11829:3083773632]: stunnel 3.26 on i486-pc-linux-gnu PTHREAD+LIBWRAP with OpenSSL 0.9.8c 05 Sep 2006
2009.02.17 09:52:06 LOG5[11829:3083773632]: smtps connected from 127.0.0.1:39661

Allerdings funktioniert ein Verbinden per Mailclient oder openssl immer noch nicht:


root@meinedomain.de:/# openssl s_client -crlf -debug -connect localhost:465
CONNECTED(00000003)
write to 0x80bef58 [0x80bfe90] (118 bytes => 118 (0x76))
0000 - 80 74 01 03 01 00 4b 00-00 00 20 00 00 39 00 00 .t....K... ..9..
0010 - 38 00 00 35 00 00 16 00-00 13 00 00 0a 07 00 c0 8..5............
0020 - 00 00 33 00 00 32 00 00-2f 03 00 80 00 00 05 00 ..3..2../.......
0030 - 00 04 01 00 80 00 00 15-00 00 12 00 00 09 06 00 ................
0040 - 40 00 00 14 00 00 11 00-00 08 00 00 06 04 00 80 @...............
0050 - 00 00 03 02 00 80 b9 6c-a6 1e 25 c1 c2 06 a6 bc .......l..%.....
0060 - 55 65 34 07 af 95 e7 ee-58 c5 54 1d d7 ed 27 94 Ue4.....X.T...'.
0070 - b6 01 df af 8f ff ......
read from 0x80bef58 [0x80c53f0] (7 bytes => 7 (0x7))
0000 - 32 30 30 39 2e 30 32 2009.02
13452:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:s23_clnt.c:567:

Hast Du noch nen Tip? :)


Gruß

lynix

lynix
17.02.09, 10:36
Update:

Okay, ich glaube ich bin einen Schritt weiter :) SSL scheint nun zu funktionieren, aber der SMTPd wird dahinter anscheinend nicht richtig gestartet:

/etc/xinet.d/smtps

service smtps
{
socket_type = stream
protocol = tcp
wait = no
disable = no
user = root
instances = 100
env = SMTPAUTH=1 END=1
server = /usr/bin/stunnel
server_args = -D 5 -o /var/log/stunnel.log -T -p /var/qmail/control/servercert.pem -l /var/qmail/bin/tcp-env smtps -Rt0 /var/qmail/bin/relaylock /usr/local/bin/spamdyke -f /etc/spamdyke.conf /var/qmail/bin/qmail-smtpd /var/qmail/bin/smtp_auth /var/qmail/bin/true /var/qmail/bin/cmd5checkpw /var/qmail/bin/true
}

Test

root@meinedomain.de:/var/log# openssl s_client -crlf -connect localhost:465
CONNECTED(00000003)
depth=0 /C=DE/ST=Germany/L=Cologne/O=Intergenia AG/OU=Internet Service Provider/CN=meinedomain.de/emailAddress=root@meinedomain.de
verify error:num=18:self signed certificate
verify return:1
depth=0 /C=DE/ST=Germany/L=Cologne/O=Intergenia AG/OU=Internet Service Provider/CN=meinedomain.de/emailAddress=root@meinedomain.de
verify return:1
---
Certificate chain
0 s:/C=DE/ST=Germany/L=Cologne/O=Intergenia AG/OU=Internet Service Provider/CN=meinedomain.de/emailAddress=root@meinedomain.de
i:/C=DE/ST=Germany/L=Cologne/O=Intergenia AG/OU=Internet Service Provider/CN=meinedomain.de/emailAddress=root@meinedomain.de
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIFCDCCA/CgAwIBAgIESMjU4zANBgkqhkiG9w0BAQQFADCBtjELMAkGA1UE BhMC
(...)
NRENKRNdxEw/SDs8ulUFwOMDlLOxEud7Le66hgX2MdvsdzLhx4caO9O2sY3EIT Ba
DFNGL85mhMx5LdB/chSkNJC4aeOo/wlqfUXYWGRcUA1me+qIez7zjYC1sUb8CdkW
ZnaKXwA025SpCE6UOg+f+huEbOUzhqLThqWkE9Ja5ZTIewp290 XVoih5hRM=
-----END CERTIFICATE-----
subject=/C=DE/ST=Germany/L=Cologne/O=Intergenia AG/OU=Internet Service Provider/CN=meinedomain.de/emailAddress=root@meinedomain.de
issuer=/C=DE/ST=Germany/L=Cologne/O=Intergenia AG/OU=Internet Service Provider/CN=meinedomain.de/emailAddress=root@meinedomain.de
---
No client certificate CA names sent
---
SSL handshake has read 1856 bytes and written 252 bytes
---
New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHA
Server public key is 2048 bit
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1
Cipher : DHE-RSA-AES256-SHA
Session-ID: BFD6DA085B73083855DAEF843101E765265B94A5659860A894 5A43B730347B5F
Session-ID-ctx:
Master-Key: 752B98358151D73C0C4DC9468657DC5BF0B20B518C1097118D 2660EE6AE545F665D7E3CAC334DD25693A23678D6C28EE
Key-Arg : None
Start Time: 1234863186
Timeout : 300 (sec)
Verify return code: 18 (self signed certificate)
---
closed

Das stunnel-log dazu:

2009.02.17 10:33:06 LOG5[13399:3083773632]: Using 'smtps' as tcpwrapper service name
2009.02.17 10:33:06 LOG4[13399:3083773632]: Wrong permissions on /var/qmail/control/servercert.pem
2009.02.17 10:33:06 LOG5[13399:3083773632]: stunnel 3.26 on i486-pc-linux-gnu PTHREAD+LIBWRAP with OpenSSL 0.9.8c 05 Sep 2006
2009.02.17 10:33:06 LOG5[13399:3083773632]: smtps connected from 127.0.0.1:41995
2009.02.17 10:33:06 LOG5[13399:3083773632]: Connection closed: 0 bytes sent to SSL, 0 bytes sent to socket

Der Mailclient will immer noch nicht, endet jedoch mittlerweile mit einem Timeout, ohne sich aufzuhängen ^^


Gruß

lynix

lynix
17.02.09, 20:07
GELÖST! :)

Mit dieser config funktioniert es jetzt:


service smtps
{
socket_type = stream
protocol = tcp
wait = no
disable = no
user = root
instances = 100
env = SMTPAUTH=1 END=1
server = /usr/bin/stunnel
server_args = -D 3 -o /var/log/stunnel.log -T -p /var/qmail/control/servercert.pem -l /var/qmail/bin/tcp-env -- smtps -Rt0 /var/qmail/bin/relaylock /usr/local/bin/spamdyke -f /etc/spamdyke.conf /var/qmail/bin/qmail-smtpd /var/qmail/bin/smtp_auth /var/qmail/bin/true /var/qmail/bin/cmd5checkpw /var/qmail/bin/true

Vielen Dank nochmal für Deine Hilfe, Richard!! :)

Gruß

lynix