Postfix/dovecot Probleme beim Senden

martin

Well-Known Member
Hi

ich versuche mich gerade an einer postfix Jail, die alle Mailaufgaben erledigen soll. Um die Sache etwas zu vereinfachen, habe ich das Ganze vorerst ohne Spamfilter konfiguriert (bzw. es versucht).

Also folgende Sachen funktionieren:

- Neue Mail Adressen und Domains anlegen per postfixmailadmin (Daten werden in MySQL abgelegt)
- Die Anmeldung an das Postfach (z.B. per imap) funktioniert und dabei wird auch ordnungsgemäß ein Mailverzeichnis im maildir Format erstellt unter /data/mail/%d/%n

Probleme habe ich beim Versenden von Mails, auch an mich selbst (test@test.de).

Hier mal die configs und die Ausgabe der maillog
main.cf
myhostname = mail.test.de
myorigin = $myhostname
mydestination = $myhostname
mynetworks = 127.0.0.0/8 192.168.0.0/28

inet_protocols = ipv4
biff = no
append_dot_mydomain = no

message_size_limit = 10485760

alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases

relay_domains = mysql:/usr/local/etc/postfix/mysql_relay_domains_maps.cf

############################################
######### Mail Versand ueber SMTP ##########

smtpd_banner = $myhostname ESMTP Mailserver
smtpd_helo_required = yes
smtpd_recipient_restrictions =
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unknown_sender_domain,
reject_unknown_recipient_domain,
permit_sasl_authenticated,
permit_mynetworks,
reject_unverified_recipient,
reject_unauth_destination,
permit

smtpd_sender_restrictions = permit_sasl_authenticated, permit_mynetworks
#strict_rfc821_envelopes = yes

############################################
######### Mail Versand ueber SASL ##########

smtp_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_security_options = noanonymous

################# TSL ######################
smtp_use_tls = yes
smtpd_use_tls = yes
smtp_tls_note_starttls_offer = yes
smtpd_tls_key_file = /etc/ssl/postfix/smtpd.pem
smtpd_tls_cert_file = /etc/ssl/postfix/smtpd.pem
smtpd_tls_CAfile = /etc/ssl/postfix/smtpd.pem
smtpd_tls_loglevel = 0
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom

############################################
######### Mailboxen und User Mysql #########

virutal_create_maildirsize = yes
virtual_mailbox_extended = yes
virtual_mailbox_base = /data/mails/
virtual_mailbox_maps = mysql:/usr/local/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_mailbox_limit_maps = mysql:/usr/local/etc/postfix/mysql_virtual_mailbox_limit_maps.cf
virtual_mailbox_domains = mysql:/usr/local/etc/postfix/mysql_virtual_domains_maps.cf
virtual_alias_maps = mysql:/usr/local/etc/postfix/mysql_virtual_alias_maps.cf
virtual_uid_maps = static:125
virtual_gid_maps = static:125

#transport_maps = mysql:/usr/local/etc/postfix/mysql_transport_maps.cf

dovecot_destination_recipient_limit = 1
virtual_transport = dovecot

master.cf
#
# Postfix master process configuration file. For details on the format
# of the file, see the master(5) manual page (command: "man 5 master").
#
# Do not forget to execute "postfix reload" after editing this file.
#
# ==========================================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (100)
# ==========================================================================
smtp inet n - n - - smtpd
#submission inet n - n - - smtpd
# -o smtpd_tls_security_level=encrypt
# -o smtpd_sasl_auth_enable=yes
# -o smtpd_client_restrictions=permit_sasl_authenticated,reject
# -o milter_macro_daemon_name=ORIGINATING
smtps inet n - n - - smtpd
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o message_size_limit=26214400
# -o milter_macro_daemon_name=ORIGINATING
#628 inet n - n - - qmqpd
pickup fifo n - n 60 1 pickup
cleanup unix n - n - 0 cleanup
qmgr fifo n - n 300 1 qmgr
#qmgr fifo n - n 300 1 oqmgr
tlsmgr unix - - n 1000? 1 tlsmgr
rewrite unix - - n - - trivial-rewrite
bounce unix - - n - 0 bounce
defer unix - - n - 0 bounce
trace unix - - n - 0 bounce
verify unix - - n - 1 verify
flush unix n - n 1000? 0 flush
proxymap unix - - n - - proxymap
proxywrite unix - - n - 1 proxymap
smtp unix - - n - - smtp
# When relaying mail as backup MX, disable fallback_relay to avoid MX loops
relay unix - - n - - smtp
-o smtp_fallback_relay=
# -o smtp_helo_timeout=5 -o smtp_connect_timeout=5
showq unix n - n - - showq
error unix - - n - - error
retry unix - - n - - error
discard unix - - n - - discard
local unix - n n - - local
virtual unix - n n - - virtual
lmtp unix - - n - - lmtp
anvil unix - - n - 1 anvil
scache unix - - n - 1 scache

dovecot unix - n n - - pipe
flags=DRhu user=postfix:postfix argv=/usr/local/libexec/dovecot/deliver -f ${sender} -d ${user}@${nexthop} -n -m ${extension}

maillog gibt nicht viel her:
Jan 27 09:53:23 mail postfix/master[60040]: daemon started -- version 2.7.2, configuration /usr/local/etc/postfix
Jan 27 08:53:34 mail dovecot: imap-login: Login: user=<test@test.de>, method=PLAIN, rip=192.168.0.2, lip=192.168.0.3
Jan 27 09:53:34 mail postfix/smtpd[60044]: connect from www[192.168.0.2]
Jan 27 09:53:34 mail postfix/smtpd[60044]: disconnect from www[192.168.0.2]
Jan 27 08:53:34 mail dovecot: IMAP(test@test.it): Disconnected: Logged out bytes=12/342

Wie gesagt, ich kann keine Mails versenden (probiere per roundcube) und irgendwie finde ich nicht raus woran es liegen könnte, da die Log nicht viel hergibt. Vielleicht hat ja jemand eine Idee?
 
hallo

ok die subnetzmaske war nicht optimal, jetzt hab ich /24 drin, leider hat sich aber an der Situation nichts geändert. Immer noch alles beim Alten bzgl. log.
 
Hallo nochmal

jetzt habe ich das Ganze über thunderbird probiert und da bekomme ich beim Versuch ein E-Mail zu versenden folgende Fehlermeldung:
Der Mail-Server antwortete: 5.7.0 Must issue a STARTTLS command first. Bitte überprüfen Sie, ob Ihre E-Mail-Adresse in den Konten-Einstellungen stimmt und wiederholen Sie den Vorgang.
So das hab ich dann mal gemacht und mich mit TSLSTART verbunden....
Dann meckert der postfix folgendermaßen:
warning: TLS library problem: 10646:error:14094418:SSL routines:SSL3_READ_BYTES:tlsv1 alert unknown ca:/usr/src/secure/lib/libssl/../../../crypto/openssl/ssl/s3_pkt.c:1102:SSL alert number 48:
Jan 27 17:36:46 mail postfix/smtpd[10646]: lost connection after STARTTLS from unknown[192.168.1.222]
 
Sorry für die Doppel und Dreifachposts, aber ich taste mich so langsam ran.

Mittlerweile erhalte ich folgende Meldung beim Versuch mir selbst eine mail zu schreiben an test@test.de

Jan 27 09:14:51 mail postfix/cleanup[3233]: B4987139989: message-id=<4D427B05.1050208@test.de>
Jan 27 09:14:51 mail postfix/qmgr[3180]: B4987139989: from=<test@test.de>, size=684, nrcpt=1 (queue active)
Jan 27 09:14:51 mail postfix/smtpd[3228]: disconnect from unknown[192.168.1.222]
Jan 27 09:14:51 mail postfix/pipe[3235]: fatal: user= command-line attribute specifies mail system owner postfix
Jan 27 09:14:52 mail postfix/qmgr[3180]: warning: private/dovecot socket: malformed response
Jan 27 09:14:52 mail postfix/qmgr[3180]: warning: transport dovecot failure -- see a previous warning/fatal/panic logfile record for the problem description
Jan 27 09:14:52 mail postfix/master[3178]: warning: process /usr/local/libexec/postfix/pipe pid 3235 exit status 1
Jan 27 09:14:52 mail postfix/master[3178]: warning: /usr/local/libexec/postfix/pipe: bad command startup -- throttling
Jan 27 09:14:52 mail postfix/error[3240]: B4987139989: to=<test@test.de>, relay=none, delay=1.2, delays=0.14/1.1/0/0.01, dsn=4.3.0, status=deferred (unknown mail transport error)

da nun auch dovecot zu den möglichen Fehlerquellen wird, hier die Konfigs

dovecot.conf
protocols = imap pop3 imaps pop3s
disable_plaintext_auth = no

log_path = /var/log/dovecot.log
info_log_path = /var/log/dovecot-info.log
auth_debug=yes
auth_verbose=yes
verbose_ssl=yes


ssl = yes
ssl_cert_file = /etc/ssl/dovecot/cert.pem
ssl_key_file = /etc/ssl/dovecot/key.pem

mail_location = maildir:/data/mail/%d/%n
#mail_uid = postfix
#mail_gid = postfix
mail_privileged_group = postfix
dotlock_use_excl = yes
verbose_proctitle = yes

first_valid_uid = 125
last_valid_uid = 125

first_valid_gid = 125
last_valid_gid = 125

maildir_copy_with_hardlinks = yes

protocol imap {
mail_plugins = quota imap_quota
imap_client_workarounds = delay-newmail netscape-eoh tb-extra-mailbox-sep
}

protocol pop3 {
pop3_uidl_format = %08Xu%08Xv
mail_plugins = quota
pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
}

protocol managesieve {

}

protocol lda {
sendmail_path = /usr/sbin/sendmail
mail_plugins = quota
}

auth_username_format = %Lu

auth default {
mechanisms = plain login

passdb sql {
args = /usr/local/etc/dovecot-sql.conf
}

userdb sql {
args = /usr/local/etc/dovecot-sql.conf
}

userdb prefetch {
# keep this, otherwise quota won't work
}

user = root

socket listen {
master {
# Master socket provides access to userdb information. It's typically
# used to give Dovecot's local delivery agent access to userdb so it
# can find mailbox locations.
path = /var/run/dovecot/auth-master
mode = 0600
user = postfix
group = postfix
}
client {
# The client socket is generally safe to export to everyone. Typical use
# is to export it to your SMTP server so it can do SMTP AUTH lookups
# using it.
path = /var/run/dovecot/auth-client
mode = 0660
user = postfix
group = postfix
}
}
}

dict {

}

plugin {
quota = maildir:User quota
quota_rule = *:storage=1GB

}
 
Code:
Jan 27 09:14:51 mail postfix/pipe[3235]: fatal: user= command-line attribute specifies mail system owner postfix
Ganz einfach. Du darfst deinen MDA - hier also deliver - nicht mir der gleichen Gruppe und dem gleichen Nutzer wie Postfix aufrufen. Der MTA muss in seinen Rechten komplett von Postfix getrennt sein. Man kann das irgendwie abschalten, ich würde aber aus Sicherheitsgründen sehr dazu raten wirklich einen eigenen Nutzer für deliver und dovecot anzulegen...
 
Hallo Yamagi

also ich habe jetzt in meiner main.cf vom postfix als uid und gid 125 (also user postfix) drin. Postfix sollte also als 'postfix' laufen.
Meine dovecot.conf habe ich so umgestellt, wie ich es in einem Tutorial im FreeBSD-Forum gefunden habe, also mit folgenden Zeilen in dovecot.conf

mail_privileged_group = mail
dotlock_use_excl = yes
mail_location = maildir:/data/mail/%d/%n
verbose_proctitle = yes

first_valid_uid = 26
last_valid_uid = 26
mail_uid = mailnull

first_valid_gid = 6
last_valid_gid = 6
mail_gid = mail

socket listen {
master {
# Master socket provides access to userdb information. It's typically
# used to give Dovecot's local delivery agent access to userdb so it
# can find mailbox locations.
path = /var/run/dovecot/auth-master
mode = 0600
user = mailnull
group = mail
}
client {
# The client socket is generally safe to export to everyone. Typical use
# is to export it to your SMTP server so it can do SMTP AUTH lookups
# using it.
path = /var/run/dovecot/auth-client
mode = 0660
user = postfix
group = mail
}
}

wenn ich das richtig verstanden habe, sollten somit die Benutzer schön getrennt sein, dennoch erhalte ich folgende Fehlermeldung vom dovecot:

Fatal: setgid(125(postfix)) failed with euid=26(mailnull), gid=6(mail), egid=6(mail): Operation not permitted (This binary should probably be called with process group set to 125(postfix) instead of 6(mail)
 
Ich glaube, wir missverstehen uns. Unter welchem Nutzer dovecot läuft, ist Postfix egal. Dovecot muss lediglich Mail-Verzeichnisse und die Mails in ihnen lesen und besser auch schreiben können. Der Knackpunkt ist deliver, was in master.cf definiert wird:
Code:
dovecot unix - n n - - pipe
flags=DRhu user=postfix:postfix argv=/usr/local/libexec/dovecot/deliver -f ${sender} -d ${user}@${nexthop} -n -m ${extension}
Postfix sieht hier "Ich soll einen MDA unter meiner UID starten" und verweigert es. Du musst die Nutzerrechte in dieser Zeile anpassen. Das hat dann ein paar Konsequenzen:
1. Postfix muss ein setuid / setgid in den Nutzer machen dürfen.
2. deliver muss die Maildirs schreiben können, ebenso muss Dovecot sie lesen und schreiben dürfen. Du musst also Dovecots Rechte ebenfalls anpassen.

Anschließend sollte es denn gehen. Ich habe leider kein Dovecot-Postfix Setup, um ein Beispiel geben zu können. Ich könnte nur Courier-IMAP mit Postfix liefern.
 
Danke Yamagi, ich bin wieder einen Schritt weiter! :)

Der Mail-Versand funktioniert jetzt so wie ich das gerne hätte. Ich bekomme lediglich beim Senden an meine private Google Adresse eine Fehlermeldung, dass ich von meiner IP aus beim Senden von Google abgelehnt werde, was ja ok ist, da ich mich auf einem Testsystem befinde und somit nur von meiner dynamischen IP sende, das sollte sich sich mit einem relay host oder fixen IP dann erledigen.

Ein paar Kleinigkeiten möchte ich noch machen, vielleicht kannst du mir ja bei der ein oder anderen einen Tip geben:

Ich habe SpamAssassin installiert und so konfiguriert, dass die E-Mails ordnungsgemäß als "Spam" markiert werden und dann mittels dovecot-sieve plugin in den Ordner "Spam" der jeweiligen Mailbox ausgeliefert werden. Das klappt wunderbar, nur wird zum einen der Ordner Spam nicht automatisch erstellt (so wie die anderen Ordner "Trash","Drafts" und "Sent") und zum anderen frage ich mich, wie ich es schaffe, dass die dort enthaltenen Mails, automatisch nach z.B. 10 Tagen gelöscht werden?

danke nochmal für die Hilfe
 
Ach herje. Im Detail weiß ich das nicht, da ich wie gesagt im Moment kein großes Dovecot-Setup habe. Nicht, weil Dovecot schlecht wäre, sondern da der Umstieg von Courier-IMAP recht aufwändig wäre und sich schlicht nicht lohnt... Aber dennoch:
- Es würde mich wundern, wenn man in Siefe nicht irgendwie ein Script anlegen kann, was auf Vorhandensein des Verzeichnisses prüft und es dann erstellt. In maildrop - was ja eine andere Geschichte ist - nutze ich sowas:
Code:
`test -e $DEFAULT`
if ( $RETURNCODE != 0 )
{
        `/usr/local/bin/maildirmake $DEFAULT`
        `/bin/chmod -R 0700 $DEFAULT`
}

`test -e $DEFAULT/.Junk`
if ( $RETURNCODE != 0 )
{
        `/usr/local/bin/maildirmake -f Junk $DEFAULT`
        `/bin/chmod -R 0700 $DEFAULT/.Junk`
}

`test -e $DEFAULT/.Virus`
if ( $RETURNCODE != 0 )
{
        `/usr/local/bin/maildirmake -f Virus $DEFAULT`
        `/bin/chmod -R 0700  $DEFAULT/.Virus`
}
- Zum automatischen Löschen kann man in den meisten Mailservern "Prunning" einschalten. Also "Lösche in Verzeichnis XY alles, was älter als 10 Tage ist".
 
So jetzt hab ich zunächst mal alles so wie da möchte gecshafft. Auf der dovecot Seite habe ich ein Script zum weiterleiten von Spam Mails in den Spam Ordner gefunden (die Seite ist etwas unübersichtlich, deshalb hab ich das nicht gleich gefunden). Und was das automatische Löschen betrifft war "Prunning" das Stichwort, was ich brauchte.

Danke Yamagi für die Hilfe
 
Back
Top