Lees eerst het vorige artikel
Dit is het zevende artikel in de serie "Een Mailserver Opzetten op Linux".
In het vorige artikel hebben we behandeld hoe je Dovecot en PostgreSQL kunt integreren voor gebruikersauthenticatie.
Als je dit nog niet hebt bekeken, raden we aan om dat eerst te lezen.
👉 Vorige aflevering: Dovecot's auth-sql.conf.ext-instellingen en wachtwoord-hashing


Structuur van de Postfix Configuratiebestanden

Postfix is een SMTP-server die verantwoordelijk is voor het versturen van e-mails en maakt gebruik van verschillende configuratiebestanden om zijn werking aan te passen.
In dit artikel leggen we de structuur en belangrijkste functies van de Postfix-configuratiebestanden uit.

Postfix Configuratie Diagram

Hoofdconfiguratiebestanden van Postfix

Bestandsnaam Rol
/etc/postfix/main.cf Hoofdconfiguratiebestand van Postfix (e-mailverzending, netwerkinstellingen, enz.)
/etc/postfix/master.cf Beheer van Postfix-diensten (SMTP, LMTP, SASL-authenticatie, enz.)
/etc/postfix/virtual Mapping van virtuele gebruikers (domeinen)
/etc/postfix/aliases Beheer van e-mailaliassen van systeembenutzer
/etc/postfix/transport Specificeert het pad voor e-mailverzending naar specifieke domeinen/adressen
/etc/postfix/relay_domains Instellingen voor toegestane relay-domeinen
/etc/postfix/sasl_passwd Opslag van authenticatie-informatie voor SMTP-relayservers
/etc/postfix/sql/*.cf Configuratiebestanden voor database-integratie (PostgreSQL)

Belangrijke Configuratie-items van Postfix (main.cf)

Laten we de belangrijkste configuratie-instellingen bekijken die de werking van Postfix definiëren. Het bestand bevindt zich op /etc/postfix/main.cf.

1️⃣ Basisinstellingen voor de mailserver

myhostname = mail.example.com
mydomain = example.com
myorigin = $mydomain
inet_interfaces = all
inet_protocols = ipv4
  • myhostname → Hostnaam van de mailserver
  • mydomain → Instelling van het standaarddomein
  • inet_interfaces → Instellen om e-mails te ontvangen op alle netwerkinterfaces
  • inet_protocols → Alleen IPv4 gebruiken (IPv6 kan worden uitgeschakeld)

2️⃣ Beperkingen op mailrelay

smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
  • permit_mynetworks → Relay toegestaan vanaf vertrouwde netwerken
  • permit_sasl_authenticated → Alleen SASL-geauthenticeerde gebruikers kunnen e-mails relayen
  • defer_unauth_destination → Blokkeer niet-geauthenticeerde externe relay

3️⃣ Virtuele gebruikers en database-integratie

Om Postfix PostgreSQL te laten gebruiken voor het beheer van virtuele domeinen en mailboxes, moeten de volgende instellingen worden toegevoegd.

virtual_mailbox_domains = pgsql:/etc/postfix/sql/virtual_domains.cf
virtual_mailbox_maps = pgsql:/etc/postfix/sql/virtual_mailboxes.cf
virtual_alias_maps = pgsql:/etc/postfix/sql/virtual_aliases.cf

🔹 Uitleg
- virtual_mailbox_domains → Opzoeken van ontvangbare virtuele domeinen in de database
- virtual_mailbox_maps → Opzoeken van gebruikersmailboxinformatie in de database
- virtual_alias_maps → Opzoeken van e-mailaliassen in de database

💡 Als je MySQL gebruikt
Gebruik mysql: in plaats van pgsql:.

💡 In omgevingen met veel verkeer kan het voordelig zijn om proxy:pgsql: te gebruiken voor prestaties. Maar in een normale omgeving werkt het ook goed zonder proxy:.


Postfix instellen om de database te gebruiken

Je moet de relevante pakketten installeren om Postfix PostgreSQL te laten gebruiken.

sudo apt update
sudo apt install postfix postfix-pgsql
  • postfix → Basis Postfix SMTP-server
  • postfix-pgsql → Pakket dat Postfix in staat stelt te integreren met PostgreSQL

Na de installatie moet je een configuratiebestand maken zodat Postfix gebruik kan maken van de gebruikersinformatie van PostgreSQL.


Instellingen voor database-integratie van Postfix (virtual_*.cf bestand maken)

Postfix gebruikt de bestanden virtual_domains.cf, virtual_mailboxes.cf, en virtual_aliases.cf om informatie uit de database op te zoeken.
Je moet deze bestanden zelf aanmaken; je kunt de onderstaande inhoud gebruiken als referentie voor het maken ervan.

1️⃣ /etc/postfix/sql/virtual_domains.cf (domein opzoekinstellingen)

user = mailadmin
password = yourpassword
dbname = mail
hosts = 127.0.0.1
query = SELECT domain_name FROM mail_domain WHERE domain_name='%s' AND active=true

Uitleg

user → PostgreSQL gebruikersaccount (maak de gebruiker vooraf aan zodat Postfix toegang heeft tot de DB.) password → Wachtwoord van het PostgreSQL-account (wachtwoord van de DB-gebruiker mailadmin die je eerder hebt aangemaakt) dbname → Naam van de database hosts → Adres van de databaseserver (gebruik de localhost) query → Opzoeken van ontvangbare domeinen in de mail_domain tabel

2️⃣ /etc/postfix/sql/virtual_mailboxes.cf (mailbox opzoekinstellingen)

user = mailadmin
password = yourpassword
dbname = mail
hosts = 127.0.0.1
query = SELECT home_directory FROM mail_users WHERE email='%s'

Uitleg

query → Het pad waar de e-mail van de gebruiker wordt opgeslagen (home_directory veld geretourneerd uit de mail_users tabel) Postfix retourneert het pad zodat de e-mail van de gebruiker op de juiste locatie wordt opgeslagen.

3️⃣ /etc/postfix/sql/virtual_aliases.cf (e-mail alias opzoekinstellingen)

user = mailadmin
password = yourpassword
dbname = mail
hosts = 127.0.0.1
query = SELECT destination_email FROM mail_alias WHERE source_email='%s'

Uitleg

query → Als er aliassen zijn, zoekt het de e-mail op waar de mail daadwerkelijk naartoe gestuurd zal worden. Look up e-mail met geregistreerde aliassen in de mail_alias tabel


Beveiligingsinstellingen

Deze configuratiebestanden moeten beperkingen hebben omdat ze wachtwoorden bevatten.

sudo chmod 640 /etc/postfix/sql/virtual_*.cf
sudo chown root:postfix /etc/postfix/sql/virtual_*.cf

🔒 Beveiligingswaarschuwing:

Aangezien de configuratiebestanden wachtwoorden bevatten, moet je de toegang beperken zodat andere gebruikers ze niet kunnen lezen. Pas chmod 640 toe om alleen de Postfix-procedure (groep postfix) toegang te geven.


Herlaad de Postfix-configuratie

Nadat de configuratie is voltooid, moet je Postfix opnieuw laden om de wijzigingen door te voeren.

sudo systemctl restart postfix

Samenvatting en volgende stappen

Toelichting op de structuur en rol van het configuratiebestand van Postfix
Belangrijke instellingen toegevoegd aan main.cf van Postfix
Instelling van virtual_*.cf bestanden voor integratie met PostgreSQL

In de volgende aflevering zullen we de integratie van Postfix en Dovecot voor SMTP-authenticatie behandelen.
Doel is dat de mailserver volledig in staat is om e-mails te verzenden en ontvangen.

👉 Volgende aflevering: Integratie van Postfix en Dovecot en SMTP-authenticatie (Binnenkort!)