Mailserver.

Doorsturen van mails via eigen domein op Fedora 34

Bij alle codeblokken op deze pagina wordt uitgegaan van uitvoering als root/superuser.
Voor het bewerken van tekst wordt nano gebruikt, maar je kunt natuurlijk een andere editor gebruiken.

Nadat je op Hetzner een nieuwe VPS hebt aangemaakt, moeten eerst alle dependencies op orde zijn:

dnf update
dnf install httpd postfix

# Extra dependencies voor het gemak:
dnf install nano telnet

Zorg dat na het opnieuw opstarten van de server voortaan de services die nodig zijn standaard mee opstarten:

systemctl enable httpd
systemctl enable postfix

Om te weten of de server werkt, kan je wat tekst invoeren in /var/www/html/index.html en nadat de server opnieuw is opgestart, de website bezoeken.

De volgende stap is om /etc/postfix/main.cf te bewerken. Voeg deze regels toe:

inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost

# Custom config
virtual_alias_domains = test.allersma.be
virtual_alias_maps = hash:/etc/postfix/virtual

En haal inet_interfaces = localhost weg.

In dit voorbeeld wordt test.allersma.be als domein gebruikt waar mail voortaan heen gestuurd wordt, d.w.z. je eigen domein.

Vervolgens kan in /etc/postfix/virtual deze tekst worden toegevoegd:

test@test.allersma.be jouw-eigen-mail@gmail.com

Waarbij test@test.allersma.be het mailadres is waar mails op ontvangen moeten worden en jouw-eigen-mail@gmail.com het mailadres is waar de mails naartoe gestuurd moeten worden.

postmap /etc/postfix/virtual

Moet uitgevoerd worden zodat er een database aangemaakt/geupdate wordt die door postfix wordt ingelezen.

Ten slotte kan de server opnieuw opgestart worden met het commando init 6 om de wijzigingen van kracht te laten zijn.

Elke keer dat je het bestand wijzigt moet je dus postmap /etc/postfix/virtual en init 6 of eventueel service postfix reload uitvoeren.

Bij een wijziging voor /etc/postfix/main.cf hoef je geen postmap te gebruiken. Ik ben een beetje lui en heb het niet getest, maar ik denk dat je wel even de service moet reloaden.

DNS instellen

Wat betreft DNS instellingen hoeft alleen een A-record aangemaakt te worden:

Naam   Type   Content   TTL
test   A      IP-adres   8h

Een mailadres/domein blokkeren

Dit is alleen een blokkade op MAIL FROM wat binnenkomt en kan dus niet als beveiligingsmaatregel beschouwd worden.

Het doorsturen van mails is nu mogelijk. De volgende stap is om bepaalde mailadressen of domeinen te blokkeren. Dit kan gedaan worden door allereerst in /etc/postfix/main.cf deze regels toe te voegen:

smtpd_recipient_restrictions =
   check_sender_access hash:/etc/postfix/access
   permit

Daarna kan in /etc/postfix/access regels toegevoegd worden om bepaalde adressen/domeinen te blokkeren:

# Hierbij krijgt de zender een 550 terug met het bericht 'Blacklisted'
test@example.com 550 Blacklisted

# Het is ook mogelijk om REJECT te gebruiken, waardoor de zender een 554 terug krijgt met het bericht
# 'Access denied'
test@example.com REJECT

# Alle mails van het domein 'example.com' kunnen ook geblokkeerd worden:
example.com REJECT

# Of alle gebruikers die beginnen met 'test' worden tegengehouden:
test@ REJECT

Ten slotte moet elke keer als het blacklisted bestand gewijzigd wordt deze commando's in Bash uitgevoerd worden:

postmap /etc/postfix/access
service postfix reload

En hoe kan ik testen?

Je kunt natuurlijk een mailtje sturen via een mailclient zoals Thunderbird. Maar als je wat meer controle wilt, bijvoorbeeld omdat je in de sectie hierboven niet smtpd_recipient_restrictions maar smtpd_sender_restrictions hebt gebruikt, en het dus gaat om wie de mail heeft verstuurd, kan je ook via telnet mailen:

$ telnet test.allersma.be
ehlo test.allersma.be
mail from: zender@example.com
rcpt to: ontvanger@example.com
data
Subject: Dit is een onderwerp.
Zet hier neer wat je kwijt wilt
.
quit

Op deze manier stuur je onversleuteld mails naar het adres. Als je SSL wilt testen, vervang het telnet commando voor

$ openssl s_client -starttls smtp -connect test.allersma.be:587

Als je dan een vage foutmelding hebt, ondersteunt je Postfix geen SSL. En dat is niet fijn, want dan worden de mails die je ontvangt onversleuteld uitgewisseld. Met de kans dat iemand met jouw mailtjes mee zit te kijken.

Trouwens, als je een reactie krijgt zoals dit:

250 2.0.0 Ok: queued as XXXXXXX

En je vraagt je af of het daadwerkelijk wel in de queue staat, dan kan je postqueue -p aanroepen.

Hoe zet ik TLS/SSL aan?

Ik zal daar nog zelf wat over schrijven. Maar in essentie moet je Certbot gebruiken om een certificaat aan te maken. Althans, dat raad ik aan. Een alternatief zou zijn om naar een 'gewone' CA te gaan (wat geld kost) of een self-signed certificaat te maken. Goed, zodra je een certificaat en sleutel hebt, kan je kijken naar dit forumbericht.