1. GET dir: linux
2. GET dir: linux
3. GET dir: linux

In composeIncludeFileName
Filename: /home/web/public/linux/postfix
langcode:
bestaat niet.
Test op /home/web/public/linux/postfix.inc
/home/web/public/linux/postfix.inc bestaat.
1. includeFile: /home/web/public/linux/postfix.inc
3. includeFile: /home/web/public/linux/postfix.inc
4. GET dir: linux

In composeIncludeFileName
Filename: /home/web/public/linux/keywords
langcode:
bestaat niet.
Test op /home/web/public/linux/keywords.inc

In composeIncludeFileName
Filename: /home/web/public/keywords
langcode:
bestaat niet.
Test op /home/web/public/keywords.inc
/home/web/public/keywords.inc bestaat.
linux (postfix)
cybertux-logo

GNU/Linux

Inleiding Instappen in Linux

Bewerkingen

Tips & trucs Foto's bewerken Video bewerken

Linux installatie

Algemeen Packages Apache Samba NFS CUPS ALSA Postfix etc. OpenSuse 10.2 Agfa SnapScan 310 USB-schijven SSD-schijven

Linux algemeen

Toegangsrestricties Permissies

Bronnen

Debian website Links

Postfix + Courier = Mail

In februari 2006 heb ik besloten een eigen mailserver te draaien. Directe aanleiding daarvoor was de overname van HCCnet door XS4ALL. Aangezien dat een nogal dure leverancier is, wilde ik graag overstappen naar Tele2. Daar kon ik echter maar één email-adres krijgen.




Ik heb me bij de installatie van de mailserver laten leiden door dit boek:

Linux Cookbook
Practical Advice for Linux Users & System Administrators
door Carla Schroder, uitgegeven bij O'Reilly
ISBN 0-596-00640-3

In dit boek worden allerlei werkzaamheden stapsgewijs uitgelegd. Niet alleen wat je moet doen, maar vooral ook waarom.
In de volgende tekst verwijst de nummering naar de hoofdstukken in het boek.

1. Postfix installeren (20.3)

Eerst gaan we de installatiesources updaten:

# apt-get update

Daarna installeren we de vereiste onderdelen, waarbij we de geadviseerde famd hebben weggelaten, omdat die tegenwoordig niet meer nodig is:

# apt-get install openssl postfix postfix-doc postfix-tls

Als EXIM is geinstalleerd, zoals bij de meeste systemen, dan wordt dat door de installatie van Postfix automatisch verwijderd.

Als "General type of configuration" kiezen we Internet Site.

Op de vraag: "Where should mail for root go" antwoord je met de username die je gebruikt als normale user, bijvoorbeeld Joop, als Joop je normale username is.
Mail voor root wordt uit veiligheidsoverwegingen namelijk nooit rechtstreeks aan root afgeleverd.

De "Mail name" waar om wordt gevraagd is de zogenaamde FQDN, of Fully Qualified Domain Name. Deze bestaat uit de hostname van de betreffende computer, aangevuld met de naam van de internetsite. In ons geval zou dat kunnen zijn: limnos@cybertux.nl.

Bij "Other destinations to accept mail for" geven we na een komma ook nog het top-level domain aan. In ons geval: cybertux.nl.

Bij "Force synchronous updates on mail queue" antwoorden we <No>.

Na het doorlopen van bovenstaande vragen wordt Postfix geinstalleerd met standaard instellingen. Om die te wijzigen moet het bestand /etc/postfix/main.cf worden aangepast. Dat gaan we hieronder doen. We beginnen daarbij met het veiligstellen van het originele configuratiebestand:

# cp /etc/postfix/main.cf /etc/postfix/main.cf-old

De inhoud van /etc/postfix/main.cf vervangen we volledig door de volgende tekst. Daarbij gebruik je uiteraard je eigen specifieke gegevens. Een aantal daarvan is door de beantwoording van bovenstaande vragen al correct ingevuld.

command_directory = /usr/sbin
mail_owner = postfix
default_privs = nobody

# enter your domain name here
mydomain = cybertux.nl

# enter your own fully qualified domain name here
myhostname = limnos.cybertux.nl
myorigin = $mydomain

alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain $mydomain
mynetworks_style = subnet

# very important! Courier must have maildirs, not mbox
home_mailbox = Maildir/
mail_spool_directory = /var/mail
mtpd_banner = $myhostname ESMTP $mail_name
mailbox_size_limit = 0
recipient_delimiter = +

relay_host = smtp.hccnet.nl

1.1 Aliases maken

Een mail alias voor root opgeven in /etc/aliases:

root: <jenaam>@cybertux.nl
postmaster: root

Uiteraard kunnen meerdere aliases worden ingesteld. Je kan hier ook tijdelijke adressen maken, die je bij hardnekkige spam-problemen gewoon weer verwijdert. Heel makkelijk als je op allerlei vage websites een email-adres moet achterlaten voor meer info.

Van de opgegeven aliases moet nu een database worden gecreëerd:

# newaliases

Als daarbij een foutmelding wordt gegeven over een dubbel alias voor root, verwijder dan de verwijzing:
root: <de opgegeven username>

1.2 Configuratie controleren

Voordat we wijzigingen in de configuratie van Postfix activeren, controleren we de syntax van de configuratiebestanden:

# postfix check

Dat heeft ooit de volgende foutmelding opgeleverd:

warning: /var/spool/postfix/etc/services and /etc/services differ

Dit is opgelost door één van de bestanden een andere naam te geven:

# mv /var/spool/postfix/etc/services /var/spool/postfix/etc/services-OLD

Kennelijk maakt het niet uit dat het bestand er niet is, maar als het bestand er is, moeten ze wel identiek zijn.

1.3 Postfix opnieuw starten

Na bovenstaande procedure afgehandeld te hebben, starten we Postfix opnieuw:

# postfix reload

Soms wordt verwezen naar /etc/init.d/postfix reload

2. Courier installeren

Volgens het eerder genoemde boek is dit nog steeds hoofdstuk 20.3, maar er wordt later wel terug verwezen naar 20.2 om een TLS/SSL-certificaat te genereren.
Installeer Courier met:

# apt-get install courier-authdaemon courier-base courier-doc courier-pop courier-pop-ssl courier-ssl

Bij "Create directories for web-based administration?" antwoorden we <No>.
Verderop gaan we het certificaat genereren, maar voorlopig houden we het hier even bij.

3. De SMTP-server testen

De SMTP-server testen we door met telnet een bericht te sturen naar een gebruiker op de machine. Op de vetgedrukte regels staat onze eigen invoer. Al het overige is de reactie van de telnet-verbinding.

We gebruiken als servername "lesbos" (zoals al onze hosts de naam van een Grieks eiland).
Als afzender gebruiken we de niet bestaande user "ikke".
De geadresseerde "abc" moet op het systeem bekend zijn.
$ telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
220 lesbos.cybertux.nl ESMTP Postfix
ehlo lesbos
250-lesbos.cybertux.nl
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250 8BITMIME
mail from: ikke@cybertux.nl
250 Ok
rcpt to: abc@cybertux.nl
250 Ok
data
354 End data with <CR> <LF> . <CR> <LF>
Date: Mai 13, 2006
From: ikke
Reply-to: ikke@cybertux.nl
Message-ID: seven
Subject: Effe testen
Ha Gozer,
Ontvang je dit?
.
250 Ok: queued as 021CE26ED5
quit
221 Bye
Connection closed by foreign host.
Als alles goed is verlopen, kan in /home/abc/Maildir/new het bericht worden teruggevonden, waarbij op de plaats van "abc" uiteraard de gebruikte username hoort te staan.

4. Niet-versleutelde POP3 testen

Aangezien we pas verderop een TLS/SSL-certificaat gaan genereren, testen we hier eerst het niet-versleuteld ophalen van mail met POP3. Later testen we de versleutelde versie.
Op de vetgedrukte regels staat weer onze eigen invoer. Al het overige is de reactie van de telnet-verbinding.

Als servername gebruiken we uiteraard weer "lesbos" (zoals al onze hosts de naam van een Grieks eiland).
We loggen in als de gebruiker die het verstuurde bericht moet hebben ontvangen. In ons geval dus gebruiker "abc".
$ telnet localhost 110
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
+OK Hello there.
user abc
+OK Password required.
pass het-wachtwoord-van-abc
+OK logged in.
list
+OK POP3 clients that break here, they violate STD53.
1 473
.
retr 1
+OK 473 octets follow.
Return-Path: <ikke@cybertux.nl>>
X-Original-To: abc@cybertux.nl
Delivered-To: abc@cybertux.nl
Received: from lesbos (localhost.localdomain [127.0.0.1])
        by lesbos.cybertux.nl (Postfix) with ESMTP id 021CE26ED5
        for <@cybertux.nl> Mon, 12 Jun 2006 21:30:00 +0200 (CEST)
Date: Mai 13, 2006
From: ikke@cybertux.nl
Reply-To: ikke@cybertux.nl
Message-ID: seven
Subject: Effe testen
To: undisclosed-recipients:;

Ha Gozer,
Ontvang je dit?
.
quit
+OK Bye-bye.
Connection closed by foreign host.
Als alles werkt zoals het hoort zie je dus het bericht dat je eerder hebt verstuurd.
Je hebt ingelogd als gebruiker "abc" en het bijbehorende wachtwoord opgegeven met "pass enz..".
Daarna heb je met "list" opgevraagd hoeveel berichten er zijn.
Vervolgens heb je bericht nr. 1 opgehaald met "retr 1".
De telnet-sessie is beëindigd met "quit"

5. TLS/SSL certificaat genereren

Debian genereert bij de installatie van Courier (wat we een stukje hierboven al hebben gedaan), automatisch de keys voor TLS/SSL-beveiliging.
We moeten echter een TLS/SSL-certificaat genereren, gebaseerd op onze eigen gegevens.
Om dat te doen, openen we (bijvoorbeeld met mcedit) het volgende bestand:

# mcedit /etc/courier/pop3d.cnf

In dat bestand plaatsen we vervolgens de volgende tekst:

RANDFILE = /usr/lib/courier/pop3d.rand

[ req ]
default_bits = 1024
encrypt_key = yes
distinguished_name = req_dn
x509_extensions = cert_type
prompt = no

[ req_dn ]
C=NL
ST=U
L=Netherlands
O=Courier Mail Server
OU=Automatically-generated POP3 SSL key
CN=limnos
emailAddress=postmaster bij cybertux puntje nl (invullen in correct formaat)

[ cert_type ]
nsCertType = server


Nu kunnen we het certificaat genereren met:

# mkpop3dcert


Als je daarbij de melding krijgt dat het bestand al bestaat:

/usr/lib/courier/pop3d.pem already exists.

dan verwijder je dat gewoon met:

# rm /usr/lib/courier/pop3d.pem

Vervolgens probeer je het opnieuw.

Als het goed gaat, volgt een melding als:

Generating a 1024 bit RSA private key...

gevolgd door een hoop extra informatie die ik hier uit veiligheidsoverwegingen niet plaats.

6. Versleutelde POP3 testen

Nu we een TLS/SSL-certificaat hebben gegenereerd, kunnen we ook het versleuteld ophalen van mail via POP3 testen.
Dat doen we niet met telnet, maar met openssl. Ter geruststelling: De term "open" in "openssl" staat niet voor het wagenwijd open staan van de verbinding, maar voor het volledig Open Source zijn van deze implementatie van het Secure Sockets Layer protocol.

Ook hier staat op de vetgedrukte regels weer onze eigen invoer. Al het overige is de reactie van de openssl-verbinding.

$ openssl s_client -connect localhost:995
CONNECTED(00000003)
depth=0 /C=US/ST=NY/L=New York/O=Courier Mail Server/OU=Automatically-generated POP3 SSL
key/CN=localhost/emailAddress=postmaster@example.com
verify error:num=18:self signed certificate
...
-- Hier staat allerlei informatie over het certificaat --
---
+OK Hello there.
user abc
+OK Password required.
pass het-wachtwoord-van-abc
+OK logged in.

De rest is gelijk aan de POP3-test die we hierboven al deden.

7. Bereikbaarheid testen

Als alle instellingen in het netwerk correct zijn, dan is de mailserver op verschillende manieren voor clients bereikbaar. Alle onderstaande vormen zijn correct en zouden moeten werken:

$ telnet lesbos 25
$ telnet 10.0.0.152 110>
$ openssl s_client -connect lesbos:995

Elke sessie die je volgens bovenstaande voorbeelden start, eindig je met "quit".

8. Mail versturen via internet

Als je ISP (Internet Service Provider) geen SMTP-authenticatie verlangt, dan gebruik je de SMTP-server van je ISP. Daartoe open je main.cnf:

# mcedit /etc/postfix/main.cf

en plaatst daarin de volgende regel:

relay_host = smtp.versatel.nl

Uiteraard gebruik je hier de gegevens zoals je ISP die heeft opgegeven.
Als je ISP wel SMTP-authenticatie verlangt, raadpleeg dan het boek dat bovenaan dit artikel is genoemd. Dat kan hoe dan ook geen kwaad...

9. Mail ontvangen via internet

Om mail te kunnen ontvangen, is het noodzakelijk dat je een vast ip-adres hebt, een geregistreerde domeinnaam en DSN-records die de rest van de wereld naar je mailserver verwijzen.
In de DNS-configuratie hoort een A-record met je ip-adres en een MX-record voor de mail-server.
Deze gegevens worden doorgaans beheerd door de domain name registrar, de organisatie waar je de registratie van je domeinnaam hebt geregeld.

10. De mail-server verbinden met de buitenwereld

In de NAT/NAPT-settings van je modem/router moet de interne poort 25 van de server worden verbonden met de externe poort 25. Je krijgt dan ongeveer het volgende:

Inside address: 10.0.0.152:25
Oustide address: unspecified:25
Protocol: tcp
State: None

Opmerking: NAPT staat voor Network Address & Port Translation.

11. Plaats van de bestanden

De email-berichten komen in een sub-directory van de home-directory van elke gebruiker.
Het zijn verborgen bestanden in de directory ~/Maildir, waarbij ~ staat voor de home-directory van de gebruiker: /home/<username>
Om ze te zien moet in Konqueror het tonen van verborgen bestanden worden ingeschakeld. Op de command-line gebruik je:

$ ls -la

12. Instellingen in je email-client (KMail)

Schakel in je email-client, waarschijnlijk gebruik je KMail, het controleren op nieuwe email uit.
Ga daartoe naar Settings | Configure KMail en vervolgens naar het tabblad Accounts. Onder het overzicht met ingestelde accounts staat de optie "Check mail on startup". Haal het vinkje daar weg.

13. Webmail

Voor het raadplegen van je email via internet gebruik je SquirrelMail.
De installatie daarvan gaat op de bekende wijze.
# apt-get update
# apt-get install squirrelmail
# /usr/sbin/squirrelmail-configure  
Zonder specifieke configuratie zal het waarschijnlijk al werken, maar het kan geen kwaad om eens te kijken wat er allemaal kan worden ingesteld.

Er moet nog wel een symbolic link worden gemaakt in de webroot naar de plaats van de squirrelmail-bestanden.
Een symbolic link wordt gemaakt door aan de opdracht ln de schakeloptie -s mee te geven.
# cd /home/web/public
# ln -s /usr/share/squirrelmail webmail
# ls -la
lrwxrwxrwx 1 root  root   23 2009-09-22 01:52 webmail -> /usr/share/squirrelmail
De hier gebruikte naam webmail moet identiek zijn aan datgene waar de link op de webpagina naar verwijst.




Laatst gewijzigd: 6 december 2009