E-Mailweiterleitung bei mehreren Empfängern funktioniert nicht

Maggus

New Member
Hallo Forum,

folgende Konfiguration:

Debian Sarge
Postfix, ClamAV (via clamsmtp), Spamassassin (via spamc), Maildrop, Courier-IMAP
Konfiguration über MySQL Datenbank (User Accounts, Domains, Forwardings)

Die Konfiguration lief bislang einwandfrei. Nachdem ich ein paar Probleme mit ClamAV hatte (Freshclam hat sich nach Updates verabschiedet), habe ich ein Upgrade gemacht. War wohl ein Fehler...

Seitdem funktionieren Weiterleitungen nicht mehr, wenn mehr als ein Empfänger angegeben ist (Komma-separierte Liste). Sobald nur ein einzelner Empfänger angegeben ist, funktioniert das Ganze einwandfrei.

Hier ist der Output in der mail.log bei einem Empfänger (funktioniert):

Code:
    Mar  6 09:47:20 xxx postfix/smtpd[25178]: connect from xxx[xx.xx.xx.xx]
    Mar  6 09:47:20 xxx postfix/smtpd[25178]: 2088DD842D0: client=xx[xx.xx.xx.xx]
    Mar  6 09:47:20 xxx postfix/cleanup[25182]: 2088DD842D0: message-id=<E1JXBl0-0008Dg-P6@10-10-10-182.xx>
    Mar  6 09:47:20 xxx postfix/qmgr[27823]: 2088DD842D0: from=<xx@xx.com>, size=780, nrcpt=1 (queue active)
    Mar  6 09:47:20 xxx postfix/smtpd[25178]: disconnect from xx[xx.xx.xx.xx]
    Mar  6 09:47:20 xxx clamsmtpd: 100CAA: accepted connection from: 127.0.0.1
    Mar  6 09:47:20 xxx postfix/smtpd[25231]: connect from localhost[127.0.0.1]
    Mar  6 09:47:20 xxx postfix/smtpd[25231]: 2F6C4D843DA: client=localhost[127.0.0.1]
    Mar  6 09:47:20 xxx postfix/cleanup[25228]: 2F6C4D843DA: message-id=<E1JXBl0-0008Dg-P6@10-10-10-182.xx>
    Mar  6 09:47:20 xxx postfix/qmgr[27823]: 2F6C4D843DA: from=<xx@xx>, size=1015, nrcpt=1 (queue active)
    Mar  6 09:47:20 xxx postfix/smtp[25229]: 2088DD842D0: to=<xx@xx.com>, orig_to=<xx@xx.com>, relay=127.0.0.1[127.0.0.1]:10026, delay=0.11, delays=0.02/0/0.04/0.05, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 2F6C4D843DA)
    Mar  6 09:47:20 xxx postfix/qmgr[27823]: 2088DD842D0: removed
    Mar  6 09:47:20 xxx clamsmtpd: 100CAA: from=xx@xx.com, to=xx@xx.com, status=CLEAN
    Mar  6 09:47:20 xxx postfix/smtpd[25231]: disconnect from localhost[127.0.0.1]
    Mar  6 09:47:20 xxx spamd[18939]: spamd: connection from localhost [127.0.0.1] at port 55586
    Mar  6 09:47:20 xxx spamd[18939]: spamd: processing message <E1JXBl0-0008Dg-P6@10-10-10-182.xx> for xx@xx.com:0
    Mar  6 09:47:24 xxx spamd[18939]: spamd: clean message (-2.5/5.0) for xx@xx.com:0 in 4.4 seconds, 994 bytes.
    Mar  6 09:47:24 xxx spamd[18939]: spamd: result: . -2 - AWL,BAYES_00 scantime=4.4,size=994,user=xx@xx.com,uid=0,required_score=5.0,rhost=localhost,raddr=127.0.0.1,rport=55586,mid=<E1JXBl0-0008Dg-P6@10-10-10-182.xx>,bayes=5.27355936696949e-15,autolearn=ham
    Mar  6 09:47:24 xxx spamd[2290]: prefork: child states: II
    Mar  6 09:47:24 xxx postfix/pickup[25470]: 9F578D843DC: uid=5000 from=<xx@xx.com>
    Mar  6 09:47:24 xxx postfix/cleanup[25182]: 9F578D843DC: message-id=<E1JXBl0-0008Dg-P6@10-10-10-182.xx>
    Mar  6 09:47:24 xxx postfix/pipe[25234]: 2F6C4D843DA: to=<xx@xx.com>, relay=spamc, delay=4.5, delays=0.05/0/0/4.4, dsn=2.0.0, status=sent (delivered via spamc service)
    Mar  6 09:47:24 xxx postfix/qmgr[27823]: 2F6C4D843DA: removed
    Mar  6 09:47:24 xxx postfix/qmgr[27823]: 9F578D843DC: from=<xx@xx.com>, size=1338, nrcpt=1 (queue active)
    Mar  6 09:47:24 xxx postfix/pipe[25556]: 9F578D843DC: to=<xx@xx.com>, relay=maildrop, delay=0.04, delays=0.02/0/0/0.02, dsn=2.0.0, status=sent (delivered via maildrop service)
    Mar  6 09:47:24 xxx postfix/qmgr[27823]: 9F578D843DC: removed


Und hier mail.log bei mehreren Empfängern (funktioniert nicht). Maildrop kommt am Ende nicht zum Zuge.

Code:
    Mar  6 09:47:03 xxx postfix/smtpd[25395]: connect from xx[xx.xx.xx.xx]
    Mar  6 09:47:03 xxx postfix/smtpd[25395]: 2F70CD842D0: client=xx[xx.xx.xx.xx]
    Mar  6 09:47:03 xxx postfix/cleanup[25182]: 2F70CD842D0: message-id=<E1JXBkj-0008Db-QT@10-10-10-182.xx>
    Mar  6 09:47:03 xxx postfix/qmgr[27823]: 2F70CD842D0: from=<xx@xx.com>, size=792, nrcpt=3 (queue active)
    Mar  6 09:47:03 xxx clamsmtpd: 100CA9: accepted connection from: 127.0.0.1
    Mar  6 09:47:03 xxx postfix/smtpd[25231]: connect from localhost[127.0.0.1]
    Mar  6 09:47:03 xxx postfix/smtpd[25395]: disconnect from xx[xx.xx.xx.xx]
    Mar  6 09:47:03 xxx postfix/smtpd[25231]: 3EC6AD843DA: client=localhost[127.0.0.1]
    Mar  6 09:47:03 xxx postfix/cleanup[25228]: 3EC6AD843DA: message-id=<E1JXBkj-0008Db-QT@10-10-10-182.xx>
    Mar  6 09:47:03 xxx postfix/qmgr[27823]: 3EC6AD843DA: from=<xx@xx.com>, size=1005, nrcpt=3 (queue active)
    Mar  6 09:47:03 xxx spamd[18939]: spamd: connection from localhost [127.0.0.1] at port 40231
    Mar  6 09:47:03 xxx postfix/smtp[25229]: 2F70CD842D0: to=<xx1@xx.com>, orig_to=<xx@xx.com>, relay=127.0.0.1[127.0.0.1]:10026, delay=0.12, delays=0.02/0/0.04/0.05, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 3EC6AD843DA)
    Mar  6 09:47:03 xxx postfix/smtp[25229]: 2F70CD842D0: to=<xx2@xx.com>, orig_to=<xx@xx.com>, relay=127.0.0.1[127.0.0.1]:10026, delay=0.12, delays=0.02/0/0.04/0.05, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 3EC6AD843DA)
    Mar  6 09:47:03 xxx postfix/smtp[25229]: 2F70CD842D0: to=<xx3@xx.com>, orig_to=<xx@xx.com>, relay=127.0.0.1[127.0.0.1]:10026, delay=0.12, delays=0.02/0/0.04/0.05, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 3EC6AD843DA)
    Mar  6 09:47:03 xxx postfix/qmgr[27823]: 2F70CD842D0: removed
    Mar  6 09:47:03 xxx clamsmtpd: 100CA9: from=xx@xx.com, to=xx@xx.com, to=xx2@xx.com, to=xx3@xx.com, status=CLEAN
    Mar  6 09:47:03 xxx postfix/smtpd[25231]: disconnect from localhost[127.0.0.1]
    Mar  6 09:47:03 xxx spamd[18939]: spamd: processing message <E1JXBkj-0008Db-QT@10-10-10-182.xx> for xx@xx.com:0
    Mar  6 09:47:07 xxx spamd[18939]: spamd: clean message (-2.5/5.0) for xx@xx.com:0 in 4.3 seconds, 984 bytes.
    Mar  6 09:47:07 xxx spamd[18939]: spamd: result: . -2 - AWL,BAYES_00 scantime=4.3,size=984,user=xx@xx.com,uid=0,required_score=5.0,rhost=localhost,raddr=127.0.0.1,rport=40231,mid=<E1JXBkj-0008Db-QT@10-10-10-182.xx>,bayes=4.49640324973188e-14,autolearn=ham
    Mar  6 09:47:07 xxx spamd[2290]: prefork: child states: II
    Mar  6 09:47:07 xxx postfix/pipe[25234]: 3EC6AD843DA: to=<xx@xx.com>, relay=spamc, delay=4.4, delays=0.05/0/0/4.3, dsn=2.0.0, status=sent (delivered via spamc service)
    Mar  6 09:47:07 xxx postfix/pipe[25234]: 3EC6AD843DA: to=<xx2@xx.com>, relay=spamc, delay=4.4, delays=0.05/0/0/4.3, dsn=2.0.0, status=sent (delivered via spamc service)
    Mar  6 09:47:07 xxx postfix/pipe[25234]: 3EC6AD843DA: to=<xx3@xx.com>, relay=spamc, delay=4.4, delays=0.05/0/0/4.3, dsn=2.0.0, status=sent (delivered via spamc service)
    Mar  6 09:47:07 xxx postfix/qmgr[27823]: 3EC6AD843DA: removed

Hier die Konfigurationen:

main.cf:
Code:
    alias_maps = hash:/etc/aliases
    biff = no
    body_checks = pcre:/etc/postfix/body_check.pcre
    broken_sasl_auth_clients = yes
    config_directory = /etc/postfix
    header_checks = pcre:/etc/postfix/header_checks.pcre
    mydestination = localhost
    myhostname = xxx
    mynetworks = 127.0.0.0/8, localhost
    mynetworks_style = host
    smtpd_recipient_restrictions = permit_mynetworks, permit_mx_backup, permit_sasl_authenticated, reject_unauth_destination
    smtpd_sasl_auth_enable = yes
    smtpd_sasl_security_options = noanonymous
    smtpd_tls_cert_file = /etc/postfix/smtpd.cert
    smtpd_tls_key_file = /etc/postfix/smtpd.key
    smtpd_use_tls = yes
    virtual_alias_domains =
    virtual_alias_maps = mysql:/etc/postfix/mysql-virtual_forwardings.cf mysql:/etc/postfix/mysql-virtual_email2email.cf
    virtual_gid_maps = static:5000
    virtual_mailbox_base = /home/mail
    virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual_domains.cf
    virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual_mailboxes.cf
    virtual_transport = maildrop
    virtual_uid_maps = static:5000

master.cf:

Code:
    smtp      inet   n       -       -       -       -       smtpd -o content_filter=smtp:[127.0.0.1]:10026
    pickup    fifo  n       -       -       60      1       pickup
    cleanup   unix  n       -       -       -       0       cleanup
    qmgr      fifo  n       -       n       300     1       qmgr
    tlsmgr    unix  -       -       -       1000?   1       tlsmgr
    rewrite   unix  -       -       -       -       -       trivial-rewrite
    bounce    unix  -       -       -       -       0       bounce
    defer     unix  -       -       -       -       0       bounce
    trace     unix  -       -       -       -       0       bounce
    verify    unix  -       -       -       -       1       verify
    flush     unix  n       -       -       1000?   0       flush
    proxymap  unix  -       -       n       -       -       proxymap
    smtp      unix  -       -       -       -       -       smtp
    relay     unix  -       -       -       -       -       smtp
            -o fallback_relay=
    showq     unix  n       -       -       -       -       showq
    error     unix  -       -       -       -       -       error
    discard   unix  -       -       -       -       -       discard
    local     unix  -       n       n       -       -       local
    virtual   unix  -       n       n       -       -       virtual
    lmtp      unix  -       -       -       -       -       lmtp
    anvil     unix  -       -       -       -       1       anvil
    scache    unix  -       -       -       -       1       scache
    uucp      unix  -       n       n       -       -       pipe
      flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
    ifmail    unix  -       n       n       -       -       pipe
      flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
    bsmtp     unix  -       n       n       -       -       pipe
      flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -t$nexthop -f$sender $recipient
    scalemail-backend unix  -       n       n       -       2       pipe
      flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension}
    mailman   unix  -       n       n       -       -       pipe
      flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py
      ${nexthop} ${user}

    localhost:10025 inet    n       -       n       -       -       smtpd -o content_filter=spamc

    spamc   unix    -       n       n       -       -       pipe
      user=vmail argv=/usr/bin/spamc -u ${recipient} -f
      -e /usr/sbin/sendmail -oi -f  ${sender} ${recipient}

    maildrop  unix  -       n       n       -       -       pipe
      flags=ODRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}

mysql-virtual_domains.cf:

Code:
    user = xxx
    password = xxx
    dbname = provider
    table = domains
    select_field = 'virtual'
    where_field = domain
    hosts = 127.0.0.1

mysql-virtual_mailboxes.cf:

Code:
    user = xxx
    password = xxx
    dbname = provider
    table = users
    select_field = CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/')
    where_field = email
    hosts = 127.0.0.1

mysql-virtual_forwardings.cf:

Code:
    user = xxx
    password = xxx
    dbname = provider
    table = forwardings
    select_field = destination
    where_field = source
    hosts = 127.0.0.1

mysql-virtual_email2email.cf:

Code:
    user = xxx
    password = xxx
    dbname = provider
    table = users
    select_field = email
    where_field = email
    hosts = 127.0.0.1

Die "provider"-Datenbank besteht aus drei Tabellen:

domains:

Code:
    domain varchar(50)

forwardings:

Code:
    source varchar(80)
    destination text

users:

Code:
    email varchar(80)
    password varchar(20)
    name varchar(100)
    uid int(11)
    gid int(11)
    homedir varchar(50)
    maildir varchar(50)
    quota varchar(50)
    access enum('Y','N')
    postfix enum('Y','N')

In "forwardings" steht je Zeile eine E-Mail-Adresse (in source). Die Liste der destinations ist Komma-separiert (was bis vor dem Upgrade auch prima funktionierte).

Ich bin für jede Hilfe dankbar!

Viele Grüße

Markus
 
Hast Du vielleicht ein Ressourcen-Problem (vServer?)? Es sieht so aus, also ob es Probleme gibt, sobald 3 Instanzen von spamc gleichzeitig laufen. Du könntest ja mal in master.cf das entsprechende maxproc-Feld auf 1 setzen, und schauen, ob es dann besser geht.
 
Hi,

auf dem Rechner läuft außer dem Mailserver nicht sehr viel. maxproc=1 leider auch nicht funktioniert.

Viele Grüße

Markus
 
Hi,

ich habe was rausgefunden.

Wenn ich in der master.cf die Zeile

Code:
        spamc   unix    -       n       n       -       -       pipe
          user=vmail argv=/usr/bin/spamc -u ${recipient} -f
          -e /usr/sbin/sendmail -oi -f  ${sender} ${recipient}

durch

Code:
        spamc   unix    -       n       n       -       -       pipe
          user=vmail argv=/usr/bin/spamc -u vmail -f
          -e /usr/sbin/sendmail -oi -f  ${sender} ${recipient}

ersetze (statt -u ${recipient} steht -u vmail), werden die E-Mails wieder zugestellt. Leider ist das keine Lösung des Problems, denn der richtige User wird gerade beim Spam-Filtern benötigt (wegen der User-Regeln). Aber vielleicht hilft das, das Problem zu identifizieren?

Viele Grüße

Markus
 
Diese Zeile ist sowieso relativ ungünstig.

Einen solchen Eintrag kann man sich als Pipe vorstellen:
Vorne geht eine Email rein und hinten kommt ggf. eine (evtl. veränderte) Email wieder raus die dann in die nächste Pipe geschoben wird, solange bis eine Antwort "Zugestellt" kommt.

Aber wenn der spamc nicht arbeiten kann (z.B. weil spamd nicht erreichbar) ist die Pipe unterbrochen, liefert eine Fehlermeldung und die Email läuft ins Nirwana.

So wohl auch hier:
spamc erhält einen falschen (oder keinen?) User-namen und spukt darher eine Fehlermeldung aus, statt die Pipe weiterlaufen zu lassen.

Lösung:
Du bräuchtest an dieser Stelle einen Wrapper, der spamc aufruft, ggf. nach einen Fehler schaut und im Fehlerfall die Email einfach so weiterreicht.
Die ist alles relativ einfach mit einem Shell-Script zu ermöglichen.

Alternativ:
Amavisd-new ist z.B. so ein Wrapper.

huschi.
 
Back
Top