Tag Archives: postfix

Virtual hosting met Postfix en Dovecot

Mijn mailserver is nodig aan vervanging toe en zoals ook voor mijn andere machines geldt, wordt ook deze voorzien van Centos in verband mijn aanloop naar het RHCA zijn.

In de nieuwe setup wilde ik geen gebruik meer maken van LDAP, dat heb ik jaren gedaan, maar gewoon simpel van configuratie bestanden, daar heb ik met mijn paar domeintjes ruim voldoende aan. De uiteindelijke aflevering van de email in de juiste box, laat ik over aan het ‘deliver’ programma van Dovecot, zodat ik in de toekomst ook de filtering daarvan kan gaan gebruiken.

Postfix

De wijzigingen (toevoegingen in dit geval) aan /etc/postfix/main.cf zijn minimaal:

1 virtual_minimum_uid = 500
2 virtual_uid_maps = static:500
3 virtual_gid_maps = static:500
4 virtual_mailbox_domains = hash:/etc/postfix/vdomains
5 virtual_transport = dovecot:
6 transport_maps = hash:/etc/postfix/transport
7 virtual_mailbox_maps = hash:/etc/postfix/vmailbox
8 virtual_alias_maps = hash:/etc/postfix/virtual

Op regel 1 zie je virtual_minimum_uid staan. Dit is fallback methode van Postfix, mocht er ergens een fout gemaakt zijn, dan zal er nooit een lager UID dan 500 gebruikt worden.

Regel 2 en 3 (virtual_uid_maps, virtual_gid_maps) geven aan hoe de mapping van de UID en GID informatie moet geschieden. Omdat ik gebruik maak van virtual hosting en dus de gebruikers geen entry in /etc/passwd hebben, dienen we postfix te vertellen welk UID en GID we willen gebruiken. Ik maak gebruik van UID en GID 500, welke ik koppel aan de gebruiker vmail. Deze gebruiker dient ook aangemaakt te worden:

groupadd -g 500 vmail
adduser -c 'Virtual Mail User' -d /var/vmail -M -g 500 -u 500 -s /sbin/nologin vmail

Met regel 4 (virtual_mailbox_domains) geef ik aan welke domeinen ik als virtueel beschouw. Ik neem hier alle domeinen in op, ook degene waarvoor ik alleen maar backup MX ben en via virtual_transport (regel 5) vertel ik Postfix welke manier van aflevering (transport) ik voor deze domeinen wil. Met transport_maps (regel 6) kan in de default waarde die gezet is met virtual_transport overrulen, dat gebruik ik voor de domeinen waarvoor ik MX backup ben.

De optie virtual_mailbox_maps op regel 7 koppelt een email adres aan een mailbox (directory of bestand) op het systeem. Normaal gesproken vertel je Postfix hiermee in welke directory er geschreven dient te worden, maar aangezien ik het programma deliver van Dovecot gebruik, hoef ik hierin alleen maar de email adressen te specificeren. Het tweede veld verwacht Postfix wel, dus daar kunnen we dummy info plaatsen.

Met virtual_alias_maps ( regel 8 ) koppel je een email adres aan een andere. Postfix geeft aan dat je hier nooit een wildcard domein in op moet nemen, uiteraard vanwege spam redenen, ik gebruik dat voor 1 van mijn domeinen wel, maar daar heb ik dan ook goede redenen voor.

De hash tables die aangemaakt dienen te worden, zie je hieronder staan. Waar ‘dummy’ staat, verwacht Postfix informatie die in deze situatie niet nodig is. Vergeet niet om na iedere wijziging een ‘postmap $bestandsnaam’ te doen.

/etc/postfix/vdomains
domain1 dummy
domain2 dummy

/etc/postfix/transport
friends_domain.nl relay
.friends_domain.nl relay

/etc/postfix/vmailbox
user1@domain1.nl dummy
user2@domain1.nl dummy

/etc/postfix/virtual
alias1@domain1.nl address1@domain1.nl
alias2@domain1.nl address1@domain1.nl, address2@domain1.nl
@domain2.nl address1@domain1.nl

Verschillende keren heb ik in bovenstaande tekst het programma deliver genoemd van Dovecot. Postfix kent deze standaard niet als LDA (local delivery agent), daarvoor moet aan /etc/postfix/master.cf het volgende worden toegevoegd:

dovecot unix – n n – – pipe
flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${recipient}

Dovecot

De Dovecot configuratie zoals ik hem op dit moment gebruik is alleen voor het afleveren van de email in de juiste mailbox, vandaar dat /etc/dovecot/dovecot.conf er nog minimaal uitziet. In een later stadium ga ik hier onder andere nog SSL aan toevoegen, zoals gezegd, dat heb ik nu nog niet nodig.

ssl = no
protocols = imap
mail_location = maildir:/var/vmail/domains/%d/%n
service auth {
unix_listener auth-userdb {
mode = 0600
user = vmail
group = vmail
}
}
passdb {
driver = passwd-file
args = /etc/dovecot/imapusers
}
userdb {
driver = static
args = uid=vmail gid=vmail home=/var/vmail/domains/%d/%n
}

In het bestand /etc/dovecot/imapusers staan de gebruikers met hun wachtwoord. Het is mogelijk om daarin mee informatie zoals GECOS en dergelijk op te nemen, maar ook hier geldt weer dat ik dat in mijn situatie niet nodig heb.

/etc/dovecot/imapusers
user1@domain1.nl:{DIGEST-MD5}0000aa0000aa0a000aa0a000aa00aa0a
user2@domain1.nl:{DIGEST-MD5}1111bb1111bb1b111bb1b111bb11bb1b

Selinux

Om Dovecot’s deliver te mogen laten schrijven in /var/vmail/, moet de Selinux verteld worden wat de juiste context is voor /var/vmail.

/usr/sbin/semanage fcontext -a -t mail_spool_t '/var/vmail(/.*)?'

Hierna is een restorecon -R /var/vmail nodig om een en ander juist te zetten. Mocht je ooit zelf in deze directory iets aanpassen, herhaal dan het restorecon commando.