Postfix_logo

In dit deel gaan we de Postfix mailserver installeren. Als je geen mailserver nodig hebt, kun je deze stap gewoon overslaan.

Installeren van Postfix gaat als volgt:

$ apt-get install postfix

Selecteer:

  • internet server en
  • daarna de default FQDN, zoals cloud.example.com

Om op de commandline mail te versturen, installeren we:

$ apt-get install mailutils

Nu kunnen we de mailserver op port 25 testen, met:

$ telnet localhost 25

Vul hier in:

mail from:<root@cloud.example.com>
rcpt to:<mijn@mail-adres.nl>
data
To: mijn@mail-adres.nl
From: root@cloud.example.com
Subject: Dit is mijn eerste mail
Als het goed is, kun je deze inhoud lezen.
.<return>

De mail afsluiten met een ‘.’ en een return Afsluiten met ‘quit’

Of testen met:

$ echo Hoi | mail -s Testje mijn@mail-adres.nl

Basis Postfix configuratie

Eerst de originele config file bewaren:

$ cd /etc/postfix
$ cp main.cf main.cf.org

Voeg de mailbox directory toe:

$ postconf -e "home_mailbox = mail/"

Bij aanmaken van een nieuwe gebruiker moet de mail directory aangemaakt worden, voeg deze toe aan skel:

$ mkdir /etc/skel/mail/

Aanmaken van gebruiker(s)

Nieuwe gebruikers aanmaken gaat als volgt

$ adduser arjan
Adding user `arjan' ...
Adding new group `arjan' (1000) ...
Adding new user `arjan' (1000) with group `arjan' ...
Creating home directory `/home/arjan' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for arjan
Enter the new value, or press ENTER for the default
Full Name []: Arjan Wooning
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n]

Postfix SMTP beveiliging met SASL

Installeer sasl2

$ apt-get install libsasl2-modules sasl2-bin

Omdat libsasl2 nog niet eerder geïnstalleerd was, krijg je een waarschuwing dat “START=yes” gezet moet worden:

$ vi /etc/default/saslauthd
START=yes

Maak smtpd.conf aan:

$ vi /etc/postfix/sasl/smtpd.conf
pwcheck_method: saslauthd
mech_list: PLAIN LOGIN

Maak een kopie van saslauthd’s config file:

$ cp /etc/default/saslauthd /etc/default/saslauthd-postfix

En wijzig deze:

$ vi /etc/default/saslauthd-postfix
START=yes
DESC="SASL Auth. Daemon for Postfix"
NAME="saslauthd-postf" # max. 15 char.
# Option -m sets working dir for saslauthd (contains socket)
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd" # postfix/smtp in chroot()

Creëer de vereiste subdirectories in postfix chroot directory:

$ dpkg-statoverride --add root sasl 710 /var/spool/postfix/var/run/saslauthd

Voeg de gebruiker “postfix” aan de groep “sasl”:

$ adduser postfix sasl

Herstart saslauthd:

$ service saslauthd restart
[ ok ] Stopping SASL Auth. Daemon: saslauthd.
[ ok ] Stopping SASL Auth. Daemon for Postfix: saslauthd-postf.
[ ok ] Starting SASL Auth. Daemon: saslauthd.
[ ok ] Starting SASL Auth. Daemon for Postfix: saslauthd-postf.

Let op! Alleen als de herstart van saslauthd foutmeldingen geeft, dan de server even rebooten met:

$ reboot

Wijzig de Postfix configuratie:

$ postconf -e 'smtpd_sasl_local_domain = $myhostname'
$ postconf -e 'smtpd_sasl_auth_enable = yes'
$ postconf -e 'broken_sasl_auth_clients = yes'
$ postconf -e 'smtpd_sasl_security_options = noanonymous'
$ postconf -e 'smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination'

Herstart postfix:

$ service postfix restart

Bron: wiki.debian.org/PostfixAndSASL

Het uittesten SASLauthd

Bepaal de base64 gecodeerde gebruiker:

$ echo -n user | base64
dXNlcg==

Bepaal het base64 gecodeerde wachtwoord:

$ echo -n wachtwoord | base64
d2FjaHR3b29yZA==

En start telnet met poort 25:

$ telnet localhost 25
220 cloud.example.com ESMTP Postfix (Debian/GNU)
ehlo localhost
250-cloud.example.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
AUTH LOGIN dXNlcg== <- vul hier de base64 gecodeerde gebruiker in
334 UGFzc3dvcmQ6
d2FjaHR3b29yZA== <- vul hier het base64 gecodeerde wachtwoord in
235 2.7.0 Authentication successful

Belangrijk is om te weten dat een mailclient dus niet via poort 465 of 587 een verbinding moet opbouwen. Poort 25 wordt dus voor zowel beveiligd als onbeveiligd mailverkeer gebruikt.

TLS poort open? http://en.dnstools.ch/port-scan.html

Uittesten met een SMTP client, zoals Outlook SMTP server: cloud.example.com: port 25 Encryptie: TLS of NONE (beide op poort 25)

Optioneel: Postfix virtual emails

In de virtual file staan alle domeinen en email adressen die geaccepteerd moeten worden door Postfix. Ook de email adressen waarnaar email doorgestuurd (forwarded) moet worden.

De opbouw van de virtual file is als volgt: Een domein zonder @ ervoor geeft aan dat Postfix voor dit domein mail mag ontvange. Hetzelfde als in main.cf bij de parameter “virtual_alias_domains” de domeinen erachter zetten. Maar alles in de virtual file is beter te onderhouden. Als er alleen een @ voor het domein staat en geen gebruiker, dan wordt alle email van dit domein doorgestuurd (catch all). Ook kan een compleet mail adres neergezet worden en deze forwarden naar een het achterstaande email adres. Overigens hoeven al deze gebruikers niet aangemaakt te worden als Linux gebruikers in dit systeem. Alleen de gebruikers die zich aan willen melden met een mailclient aan de SMTP server, moeten aangemaakt worden. Bron: http://www.berkes.ca/guides/postfix_virtual.html

$ postconf -e "virtual_alias_maps = hash:/etc/postfix/virtual"

Door postconf aan te roepen, wordt de file /etc/postfix.main.cf gewijzigd Daarna de file aanmaken met:

$ vi /etc/postfix/virtual
example.com receive email for this domain
arjan@example.com mijn@mail-adres.nl
mijndomein.nl receive email for this domain
@firm-ware.nl mijn@mail-adres.nl

Genereer de virtual.db database met:

$ postmap /etc/postfix/virtual

Reload postfix:

$ service postfix reload

Mail aan gebruikers die geen account op de mailserver hebben

Dit is voor het speciale geval dat je via de SMTP server een email wilt versturen aan anderen binnen het domein, maar geen account hebben. Dit komt voor als je de server puur als SMTP server wilt versturen (voor bulkmail) en de normale email op een andere mailserver binnen komt (zoals Google Apps). Het versturen van meerdere emails is door ISP’s vaak gelimiteerd tot 100 (XS4ALL) en ook bij shared hosting providers. Google Apps for Work heeft een limiet van 2000 emails / dag. In dat geval kan het voorkomen dat je collega’s een email verstuurd, en dat deze Postfix SMTP zegt dat de email rejected is, omdat de gebruiker niet bestaat op deze server. Om dit te voorkomen kun je eenvoudig example.com uit de Postfix mydestination verwijderen:

$ vi /etc/postfix/main.cf
mydestination = example.com cloud.example.com localhost.example.com localhost

Bron: serverfault.com/questions/179419/postfix-recipient-address-rejected-user-unknown-in-local-recipient-table/347658#347658

Een andere mogelijkheid is om alle emails van de gebruikers in de virtual file te zetten. Maar dit is niet handig, omdat je dan 2 administraties van je gebruikers hebt en er altijd wat vergeten wordt.

Email adressen herschrijven met Postfix

Een email dat van root afkomt, ziet er bijvoorbeeld als volgt uit: root@cloud.example.com Als je wilt dat de email als root@example.com wordt verstuurd, doe dan het volgende:

$ postconf -e "sender_canonical_maps = hash:/etc/postfix/canonical"

In de canonical file ziet er als volgt uit:

$ vi /etc/postfix/canonical
root@cloud.example.com root@example.com

Genereer de canonical.db database met:

$ postmap /etc/postfix/canonical

In passwd kun je de naam behorende bij het email adres te wijzigen (in dit geval root):

$ vi /etc/passwd
root: x:0:0:Arjan Wooning:/root:/bin/bash

Herlaad de configuratie van Postfix:

$ service postfix reload

Problemen met IPV6

Soms geeft het versturen van email via IPV6 problemen en wordt dan als spam gezien. Eenvoudige oplossing is om dan alleen via IPV4 te versturen. Dit kun je als volgt doen:

$ vi /etc/postfix/main.cf
inet_protocols = ipv4

Restart postfix:

$ service postfix restart

Bron: clientarea.ramnode.com/knowledgebase.php?action=displayarticle&id=108

De gids “VPS opzetten” bestaat uit de volgende artikelen: