qmail mit chkusr-patch mit TLS+SSL Patch & SMTP AUTH

Postfix, QMail, Sendmail, Dovecot, Cyrus, Courier, Anti-Spam
redhat99
Posts: 112
Joined: 2003-02-17 12:58
Location: Meckenheim

qmail mit chkusr-patch mit TLS+SSL Patch & SMTP AUTH

Post by redhat99 » 2004-05-27 18:05

Hallo,

nochmal zum chkusr patch.

Ich habe diesen nach der Anleitung von Funnydingo installiert (http://www.funnydingo.de/projects/qmail-install/). Das kompilieren klappte, auch die Installation.

Nur leider überprüft Qmail die Mails erst nach dem annehmen, und nicht vorher.

Da ich noch andere Patches verwende sieht die Zeile wo die Funktion zum testen aufgerufen wird etwas anders aus:

void smtp_rcpt(arg) char *arg; {
if (!seenmail) { err_wantmail(); return; }
if (!addrparse(arg)) { err_syntax(); return; }
if (flagbarf) { err_bmf(); return; }
if (relayclient) {
--addr.len;
if (!stralloc_cats(&addr,relayclient)) die_nomem();
if (!stralloc_0(&addr)) die_nomem();
}
else
#ifndef TLS
if (!addrallowed()) { err_nogateway(); return; }
if (!realrcpt_check()) { err_realrcpt(); return; }
#else
if (!addrallowed())
{
if (ssl)
{ STACK_OF(X509_NAME) *sk;
X509 *peercert;
stralloc tlsclients = {0};
struct constmap maptlsclients;
int r;

SSL_set_verify(ssl,
SSL_VERIFY_PEER|SSL_VERIFY_CLIENT_ONCE,
verify_cb);
if ((sk = SSL_load_client_CA_file("control/clientca.pem")) == NULL)
{ err_nogateway(); return; }
SSL_set_client_CA_list(ssl, sk);
if((control_readfile(&tlsclients,"control/tlsclients",0) != 1) ||
!constmap_init(&maptlsclients,tlsclients.s,tlsclients.len,0))
{ err_nogateway(); return; }

SSL_renegotiate(ssl);
SSL_do_handshake(ssl);
ssl->state = SSL_ST_ACCEPT;
SSL_do_handshake(ssl);
if ((r = SSL_get_verify_result(ssl)) != X509_V_OK)
{out("553 no valid cert for gatewaying: ");
out(X509_verify_cert_error_string(r));
out(" (#5.7.1)rn");
return;
}

if (peercert = SSL_get_peer_certificate(ssl))
{char emailAddress[256];

X509_NAME_get_text_by_NID(X509_get_subject_name(
SSL_get_peer_certificate(ssl)),
NID_pkcs9_emailAddress, emailAddress, 256);
if (!stralloc_copys(&clientcert, emailAddress)) die_nomem();
if (!constmap(&maptlsclients,clientcert.s,clientcert.len))
{ err_nogwcert(); return; }
relayclient = "";
}
else { err_nogwcert(); return; }
}
else { err_nogateway(); return; }
}
#endif
if (!realrcpt_check()) { err_realrcpt(); return; }
if (!stralloc_cats(&rcptto,"T")) die_nomem();
if (!stralloc_cats(&rcptto,addr.s)) die_nomem();
if (!stralloc_0(&rcptto)) die_nomem();
out("250 okrn");
}
an den roten stellen habe ich jeweils den aufruf eingefügt. Aber es geht nicht.

Hat das jemand schonmal gemacht?

Danke im vorraus

Grüsse Mario

redhat99
Posts: 112
Joined: 2003-02-17 12:58
Location: Meckenheim

Re: qmail mit chkusr-patch mit TLS+SSL Patch & SMTP AUTH

Post by redhat99 » 2004-05-28 11:39

So,

ich habe jetzt einen anderen Patch eingespielt, der meine benötigten sachen mitbringt:

Falls es jemanden interessiert: http://www.tnpi.biz/internet/mail/toast ... ndex.shtml

ich habe die Version 2.4 genommen.

Jetzt geht es soweit prima, wenn ich in .qmail-default eintrage:

/var/vpopmail/bin/vdelivermail '' bounce-no-mailbox

nehme ich aber | maildrop mailfilter um meine Spamregeln abzuarbeiten gehts nach wie vor nicht.

Jemad einen Tipp?

redhat99
Posts: 112
Joined: 2003-02-17 12:58
Location: Meckenheim

Fertig :-)

Post by redhat99 » 2004-05-28 22:38

So habs geschafft, für alle die es interessiert, hier die "Lösung".

Grundlage ist der Qmailtoaster, nach der Anleitung hier im Forum zu finden unter:

http://www.rootforum.org/forum/viewtopic.php?t=3783
http://www.rootforum.org/forum/viewtopic.php?t=3820

Dieser Funktioniert bei mir gut, hat nur einen kleinen Nachteil.

Qmail nimmt erstmal alle Mails für lokale Domainen an, und prüft dann ob es das Konto gibt. Dadurch werden die Mails bei mir erst auf Viren gescannt und dann festgestellt, das es das Konto nicht gibt.

Und da ich viel Mailaufkommen habe, muss ich ja nicht erwähnen das es Ressourcen kostet.

Also kann es ja nur die Lösung sein, gleich zu schauen ob es das Konto gibt. Wenn nicht geht nur eine Fehlermeldung zurück, was auch noch Traffic spart.


Ich habs so gemacht, das ich mir die Qmailsourcen noch mal gezogen habe, und dazu noch den Patch:

http://www.tnpi.biz/internet/mail/toast ... -2.4.patch

Dieser muss noch kurz per Replace angepasst werden.

Dazu

qnofiles in nofiles ändern (1mal vorhanden)

und

den Pfad zu vpomail anpassen (/var/local/vpopmail in /var/vpopmail).

Jetzt können wir qmail patchen mit
patch <../tarballs/qmail-1.03-toaster-2.4.patch (Pfad zum Patch anpassen)
so nach dem Patchen muss noch was geändert werden. Ã?ffnet in den Sourcen die Datei: qmail-smtpd.c

dort ändern:
/* Now Let's start the test suite */

switch (0) {

case 0:
/* Check if domain has bouncing enabled */

/* Allocate room for bounce_path */
if (!stralloc_ready (&bounce_path, 200)) die_nomem();
if (!stralloc_copy (&bounce_path, &domain_path)) die_nomem();
if (!stralloc_cats (&bounce_path, "/.qmail-default")) die_nomem();
if (!stralloc_0 (&bounce_path)) die_nomem();

read_char = 0;
fd_file = open_read (bounce_path.s);
if (fd_file != -1) {
read_char = read (fd_file, read_buf, sizeof(read_buf) - 1);
close (fd_file);
if (read_char < 0) read_char = 0;
}
read_buf[read_char] = 0;

if ( strstr(read_buf, "bounce-no-mailbox") == NULL ) {
retstat = 1;
break;
}

case 1:

in

/* Now Let's start the test suite */

switch (0) {

case 0:
/* Check if domain has bouncing enabled */

/* Allocate room for bounce_path
if (!stralloc_ready (&bounce_path, 200)) die_nomem();
if (!stralloc_copy (&bounce_path, &domain_path)) die_nomem();
if (!stralloc_cats (&bounce_path, "/.qmail-default")) die_nomem();
if (!stralloc_0 (&bounce_path)) die_nomem();

read_char = 0;
fd_file = open_read (bounce_path.s);
if (fd_file != -1) {
read_char = read (fd_file, read_buf, sizeof(read_buf) - 1);
close (fd_file);
if (read_char < 0) read_char = 0;
}
read_buf[read_char] = 0;

if ( strstr(read_buf, "bounce-no-mailbox") == NULL ) {
retstat = 1;
break;
} */

case 1:

Also so das der ganze Inhalt von Case0: auskommentiert ist.
Damit schaltet man ab das er in der .qmail-default datei nach bounce-no-mailbox sucht. Sonst funktioniert unsere | maildrop mailfiter Einstellung nicht.

Achtung: Es gehen aber keine Catchall-Konten mehr!

Wenn jemand dafür ne Lösung hat, immer her. Ich nehme aber an das man dazu Case0 umschreiben muss (vieleicht hab ich mal Lust, aber in Zeiten von Spam braucht eh keiner ein Catchall :lol: ).

So nun noch das übliche wie bei der Toasterinstallation:
cat > make-load.sh << "EOF"
echo 'main="$1"; shift'
echo exec "$LD" '-o "$main" "$main".o ${1+"$@"} -lsyncdir'
EOF
und kompilieren mit:

make

(danach qmail stoppen und bin-Ordner sichern/umbenennen)

make setup check

noch das qmail-toaster.pl file in den neuen /var/qmail/bin Ordner kopieren und starten. Fertig!

Jetzt sollten die Mails gleich abgewiesen werden. Sieht man gut im Logfile des smtp, oder lässt sich gut per Telnet testen.

Grüsse Mario