# Courier-imap vs. mysql? (Virtual/Mailhost Postfix Howto)

## MrTom

Habe Postfix, Courier-imap etc laut der Anleitung Virtual/Mailhost Postfix Howto installiert.

Nun habe ich ein Problem, bei dem ich nicht mehr weiterkomme. Im Forum gibt es sehr viele Posts mit Problemen zu dieser Installation, aber entweder sind die nicht gelöst oder die Lösung hat bei mir nichts gebracht.

Mein Problem:

```
Apr  2 11:15:18 [imapd] Connection, ip=[127.0.0.1]

Apr  2 11:15:26 [imapd] LOGIN FAILED, ip=[127.0.0.1]

Apr  2 11:15:28 [imapd] DISCONNECTED, ip=[127.0.0.1], headers=0, body=0
```

Bei Pop3 die gleiche Meldung. 

Ich kann mich also nicht anmelden. Aber im Gegensatz zu den Problemen anderer, läuft SMTP scheinbar ohne Probleme. Ich kann von extern Mail reinschicken und vom lokalen Server (mutt) rausschicken. Bei den eingehenden Mails sieht man auch schon, das Postfix in der mysql-Datenbank rumsucht, dann meine virtuele Email findet. Die Mail ist dann auch sauber in /home/vmail/meinedomain/meinuser/.maildir drin.

Nur die Authentisierung will nicht. Von extern, wie auch lokal kommt immer obige Fehlermeldung.

Scheinbar greift Postfix dabei nicht auf mysql zu ?!? 

Sollte mutt -f imap://localhost nicht sofort eine Meldung wegen dem Zertifikat bringen? Macht es nicht. Habe zum Test mal die *.pem-Dateien von einer funktionierenden Installation verwendet. Hat nix gebracht.

Laut Telnet auf 25 ist alles OK!

```
250-AUTH LOGIN PLAIN
```

Hab überlegt, ob ich die Configs wirklich alle ins Forum stellen soll. Aber sicher ist sicher...

Meine Config:

main.cf

```
alias_database = hash:/etc/mail/aliases

alias_maps = mysql:/etc/postfix/mysql-aliases.cf

broken_sasl_auth_clients = yes

command_directory = /usr/sbin

config_directory = /etc/postfix

daemon_directory = /usr/lib/postfix

debug_peer_level = 2

default_destination_concurrency_limit = 10

home_mailbox = .maildir/

inet_interfaces = all

local_destination_concurrency_limit = 2

local_recipient_maps = $alias_maps $virtual_mailbox_maps unix:passwd.byname

local_transport = local

mail_owner = postfix

mailq_path = /usr/bin/mailq

manpage_directory = /usr/share/man

mydestination = $myhostname, localhost.$mydomain $mydomain

mydomain = ***zur sicherheit gelöscht***

myhostname = ***zur sicherheit gelöscht***

mynetworks = 127.0.0.0/8

myorigin = $myhostname

newaliases_path = /usr/bin/newaliases

queue_directory = /var/spool/postfix

readme_directory = /usr/share/doc/postfix-2.0.19-r2/readme

relocated_maps = mysql:/etc/postfix/mysql-relocated.cf

sample_directory = /usr/share/doc/postfix-2.0.19-r2/sample

sendmail_path = /usr/sbin/sendmail

setgid_group = postdrop

smtp_sasl_password_maps = mysql

smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination

smtpd_sasl_auth_enable = yes

smtpd_sasl_local_domain =

smtpd_sasl_security_options = noanonymous

smtpd_tls_CAfile = /etc/postfix/cacert.pem

smtpd_tls_cert_file = /etc/postfix/newcert.pem

smtpd_tls_key_file = /etc/postfix/newreq.pem

smtpd_tls_loglevel = 3

smtpd_tls_received_header = yes

smtpd_tls_session_cache_timeout = 3600s

smtpd_use_tls = yes

tls_random_source = dev:/dev/urandom

unknown_local_recipient_reject_code = 450

virtual_alias_maps = mysql:/etc/postfix/mysql-virtual.cf

virtual_gid_maps = mysql:/etc/postfix/mysql-virtual-gid.cf

virtual_mailbox_base = /

virtual_mailbox_domains = schimana.net

virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-maps.cf

virtual_minimum_uid = 1000

virtual_transport = virtual

virtual_uid_maps = mysql:/etc/postfix/mysql-virtual-uid.cf
```

```
# nano -w pop3d.cnf

# nano -w imapd.cnf
```

Hab ich natürlich auch laut Anleitung gemacht. und dann mkpop3dcert und mkimapdcert gestartet.

/usr/lib/sasl2/smtpd.conf ist auch laut Anleitung

```
# $Header: /home/cvsroot/gentoo-x86/net-mail/postfix/files/smtp.sasl,v 1.1 2003/09/24 05:08:51 max Exp $

#pwcheck_method:pam

pwcheck_method: saslauthd

mech_list: LOGIN PLAIN
```

Zusätzlich gibt es noch die Datei /etc/sasl2/smtpd.conf und /etc/sasl2/smtpd-2.0.conf. Aber wenn hier der Fehler ist, dann würde Telnet ja nicht die richtige Ausgabe anzeigen.

Zertifikate hab ich auch erstellt und wie schon geschrieben auch mal alte verwendet, die auf der anderen Installation funktioniert haben. 

Mysql funktioniert ja auch, sonst würden die Mail die empfangen werden, nicht richtig zugestellt werden. Also PW etc (jaja $PASSWORD ist natürlich nicht drin, sondern ein eigenes) passt somit auch. 

```
email          clear      name  uid    gid    homedir        maildir        

mein@email.de meinpw  foo     1001  1001 /home/vmail   home/vmail/schimana.net/tom/.maildir/
```

Als User zur Anmeldung nimm ich das, was unter email drinsteht. Hier natürlich abgeändert auf meine@email.de

Die Dateien /etc/pam.d/imap und co...

```
auth    optional        pam_mysql.so host=localhost db=mailsql user=mailsql passwd=**zur sicherheit gelöscht*** table=users usercolumn=email passwdcolumn=clear crypt=0

account required        pam_mysql.so host=localhost db=mailsql user=mailsql passwd=**zur sicherheit gelöscht*** table=users usercolumn=email passwdcolumn=clear crypt=0
```

Habe den Linebreak raus und alles in eine Zeile, hat aber auch nix gebracht. Alle anderen Dateien in /etc/pam.d sind 100% identisch. Denke ist OK so? Denn in der Anleitung steht: 

```
// Führen Sie die obigen Änderungen auch an den pop3 und smtp Dateien durch.
```

authdaemond.conf

```
AUTHDAEMOND="authdaemond.mysql"
```

authdaemonrc

```
authmodulelist="authmysql authpam"

authmodulelistorig="authcustom authcram authuserdb authmysql authpam"

daemons=5

version=""

authdaemonvar=/var/lib/courier-imap/authdaemon
```

authmysqlrc

```
MYSQL_SERVER    127.0.0.1

MYSQL_USERNAME  mailsql

MYSQL_PASSWORD  ***zur sicherheit gelöscht***

MYSQL_SOCKET    /var/run/mysql/mysqld.sock

#MYSQL_CRYPT_PWFIELD    crypt (Stellen Sie sicher dass der Wert auskommentiert ist. Wir verwenden keine Verschlüsselung.)

MYSQL_PORT      0

MYSQL_OPT       0

MYSQL_DATABASE  mailsql

MYSQL_USER_TABLE        users

MYSQL_UID_FIELD uid

MYSQL_GID_FIELD gid

MYSQL_LOGIN_FIELD       email

MYSQL_HOME_FIELD        homedir

MYSQL_NAME_FIELD        name

MYSQL_MAILDIR_FIELD     maildir
```

Diese Datei hab ich leicht abgeändert (Tipps aus dem Forum). Hat aber mir orig. Version auch nicht funktioniert. Die .sock passt auf jeden Fall. Das war bei einigen das Problem.

/etc/postfix/mysql-aliases.cf und co sind wohl alle OK. Sind alle Cut&Paste vom Howto. $password wurde dann natürlich durch das richtige ersetzt.

Zur Sicherheit mein Runlevel:

```
# ls /etc/runlevels/default/

apache2      courier-imapd      courier-pop3d      domainname  hdparm  metalog  net.eth0  ntp-client  saslauthd

authdaemond  courier-imapd-ssl  courier-pop3d-ssl  fcron       local   mysql    netmount  postfix     sshd
```

Vom Grundaufbau geht es scheinbar ja. Postfix kann mit mysql zusammenarbeiten, ansonsten würden keine Mails ankommen.

Denke der Fehler liegt an der Kommunikation von Courier-imap mit mysql oder vielleicht doch was mit den Zertifikaten.

```
#smtpd_tls_auth_only = yes
```

Somit sollte es ja auch funktionieren, wenn die Zertifikate nicht OK sind?!?! Bleibt also doch nur Courier-imap vs. mysql?

Habe natürlich alles nochmals emerged etc. Aber ich kommt nicht auf den Fehler... Und das schon seit drei Tagen  :Sad: 

Noch mehr Info fallen mir nun nicht mehr ein....

----------

## dakjo

Wenn du schreibst in der authmysqlrc schreibst

```
MYSQL_SERVER    127.0.0.1

MYSQL_USERNAME  mailsql

MYSQL_PASSWORD  ***zur sicherheit gelöscht***

MYSQL_SOCKET    /var/run/mysql/mysqld.sock

......
```

Wird versucht über TCP IP zu öffnen (soviel ich weiss). Versuchs doch einfach mal auszukommentieren, oder 

```
MYSQL_SERVER            localhost
```

zu setzen. 

Mysql wird standartmassig nur noch für UNIX_SOCKET gestartet. (Soviel ich weiss !).

----------

## MrTom

Danke für den Tipp. localhost war zuvor drin und habe im Forum gelesen, dass jemand 127... genommen hat und danach ging es. 

Hab mal zum Test localhost drin, 127 drin und ohne MYSQL_SERVER probiert. Hat leider nichts gebracht.

So sieht das Original aus. Das ist derzeit auch wieder aktiv.

```
MYSQL_SERVER localhost

MYSQL_USERNAME mailsql

MYSQL_PASSWORD **gelöscht***

MYSQL_DATABASE mailsql

MYSQL_USER_TABLE users

#MYSQL_CRYPT_PWFIELD crypt (Stellen Sie sicher dass der Wert auskommentiert ist. Wir verwenden keine Verschlüsselung.)

MYSQL_CLEAR_PWFIELD clear

MYSQL_UID_FIELD uid

MYSQL_GID_FIELD gid

MYSQL_LOGIN_FIELD email

MYSQL_HOME_FIELD homedir

MYSQL_NAME_FIELD name

MYSQL_MAILDIR_FIELD maildir

```

----------

## MrTom

Hab keine Lösung für mein Problem gefunden.

Nah ja, eigentlich schon.  :Wink: 

Hab den Mysql-Mist wieder umgestellt auf die gute alte Lösung über Shadow.

Kaum hab ich 5 Minuten in den Configs meine Änderungen reingetippt und die Dienste neu gestartet, schon ging ALLES.

Im Rückblick, finde ich diese Lösung sogar besser. Kann nun wieder alles mit meinem geliebten VIM editiren  :Wink: 

----------

