Nu ik bijna aan het einde ben gekomen van mijn blogs over een mail systeem, zijn er nog twee blogs die geschreven moeten worden.
De twee onderwerpen zijn Dovecot en webmail. In deze blog wil ik de installatie van een dovecot server bespreken. De dovecot server zal de gebruikers checken tegen een MySQL database. De database is opgezet met de structuur van postfixadmin.

Ook nu ben ik begonnen met het installeren van een minimale Ubuntu 10.04 server inclusief vim en openssh-server. Het ontvangen van de email (MTA) gebeurt via postfix, deze zal het afleveren in een virtual mailbox. Daarna kan de mail via IMAP of POP3 opgehaald worden op de MDA, in dit geval dovecot.

Als eerste heb ik postfix geïnstalleerd.
apt-get install postfix postfix-mysql

Net zoals in de blog over de inkomende mailserver, heb ik de volgende regels toegevoegd aan main.cf.

/etc/postfix/main.cf:
virtual_alias_domains =
virtual_alias_maps = proxy:mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_gid_maps = static:8
virtual_mailbox_base = /srv/vmail
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_minimum_uid = 150
virtual_transport = dovecot
virtual_uid_maps = static:150

In tegenstelling tot de configuratie van de inkomende mailserver, worden alle emails nu door gestuurd naar dovecot. Dit gebeurt door de regel virtual_transport = dovecot.
Als gid gebruik ik 8, dit is van de groep mail. Als uid gebruik ik 150, dit is de gebruiker vmail.

Postfix moet nog wel weten wat het transport dovecot precies is, hiervoor heb ik de volgende regel toegevoegd aan master.cf

/etc/postfix/master.cf:
dovecot unix - n n - - pipe
  flags=DRhu user=vmail:mail argv=/usr/lib/dovecot/deliver -c /etc/dovecot/conf.d/01-dovecot-postfix.conf -d $(recipient)

De configuratie bestanden welke de database aanroepen zijn hetzelfde als bij de inkomende mailserver.

/etc/postfix/mysql_virtual_alias_maps.cf:
user = <database gebruikersnaam>
password = <database wachtwoord>
hosts = <database server>
dbname = <database naam>
table = alias
select_field = goto
where_field = address
additional_conditions = and active = '1'
# query = SELECT goto FROM alias WHERE address='%s' AND active = '1'

/etc/postfix/mysql_virtual_domains_maps.cf:
user = <database gebruikersnaam>
password = <database wachtwoord>
hosts = <database server>
dbname = <database naam>
table = domain
select_field = domain
where_field = domain
additional_conditions = and backupmx = '0' and active = '1'
# query = SELECT domain FROM domain WHERE domain='%s' AND backupmx = '0' \
# AND active = '1'

/etc/postfix/mysql_virtual_mailbox_maps.cf:
user = <database gebruikersnaam>
password = <database wachtwoord>
hosts = <database server>
dbname = <database naam>
table = mailbox
select_field = CONCAT(domain,'/',username) AS maildir
where_field = CONCAT(username,'@',domain)
additional_conditions = and active = '1'
# query = SELECT CONCAT(username,'@',domain) AS maildir FROM mailbox \
# WHERE CONCAT(username,'@',domain)='%s' AND active = '1'

De gebruiker vmail en de directory /srv/vmail wordt als volgt aangemaakt:

useradd -d /srv/vmail -g 8 -u 150 -c "Virtual mailbox" -s /sbin/nologin vmail
mkdir /srv/vmail
chown vmail:mail /srv/vmail

Nu postfix is ingesteld om de email af te leveren bij dovecot, moet dovecot geïnstalleerd worden.

apt-get install dovecot-common dovecot-imapd dovecot-pop3d dovecot-postfix

De volgende instellingen moeten toegevoegd of aangepast worden in het configuratie bestand:

/etc/dovecot/dovecot.conf:
mail_location = maildir:/srv/vmail/%d/%u
first_valid_uid = 150
last_valid_uid = 150

protocol lda {
  postmaster_address = postmaster@>domeinnaam$lt;
  sendmail_path = /usr/lib/sendmail
  auth_socket_path = /var/run/dovecot/auth-master
}

auth default {
  mechanisms = plain
  passdb sql {
    args = /etc/dovecot/dovecot-sql.conf
  }
  userdb sql {
  args = /etc/dovecot/dovecot-sql.conf
  }
  user = root
  }
  !include_try /etc/dovecot/auth.d/*.auth
}

In het bestand /etc/dovecot/dovecot-sql.conf staat de configuratie waarmee de database gecheckt kan worden. Hieronder de wijzigingen die ik gedaan heb.

driver = mysql
connect = host=>database server< dbname=&gr;database naam< user=&gr;database gebruikersnaam< password=&gr;database wachtwoord<
password_query = \
  SELECT username, domain, password \
  FROM mailbox WHERE username = '%n' AND domain = '%d'

user_query = \
  SELECT maildir AS home, 150 AS uid, 8 AS gid \
  FROM mailbox WHERE username = '%n' AND domain = '%d'

Nu kunnen postfix en dovecot herstart worden.

service postfix restart
service dovecot restart

Met mutt (of een ander email programma) kan er nu gecheckt worden of er verbinding gemaakt kan worden met de dovecot server.

mutt -f imaps://<gebruikersnaam>@<servernaam>