Linux Server setup

Mailserver für E-Mail Weiterleitung einrichten

In diesem Kapitel werden wir einen Mailserver installieren und soweit einrichten, dass wir E-Mails empfangen und weiterleiten können.

Jetzt kommt auch der DNS Einträge aus dem ersten Kapitel zu tragen. Dort hatten wir unter MX Records die Subdomain mail gesetzt. Ebenso ein Reverse DNS über die Adresse srv1.linuxserversetup.com.

Andere Mailserver können aufgrund des Reverse DNS lookups unsere Server IP zu einem Domainnamen auflösen. Anhand der IP, dem Domainnamen und der in einer E-Mail Header hinterlegten Absenderadresse, kann die Vertrauenswürdigkeit geprüft werden.


Postfix installieren

Als Mailserversoftware kommt Postfix zum Einsatz. Dieser Mail Transfer Agent wurde schon in den späten Neunzigern entwickelt und gehört immer noch mit zu den meist eingesetzten Mailservern. Postfix zählt zu den "leicht" administrierbaren Mailservern.

Installation

Installieren wir die Postfix Software wie gewohnt mit apt:


__$ sudo apt install -y postfix
 

Es startet eine grafische Installationsroutine, wo wir schon gleich die beiden wichtigsten Einstellungen vornehmen:

  • General type of mail configuration: Internet Site
  • System mail name: srv1.linuxserversetup.com
Grafische Installationsroutine von Postfix
Postfix Setup
Generelle Verwendungseinstellung
System mail name

Postfix Konfigurationsdateien

Nach der Installation liegen alle Konfigurationsdateien von Postfix unter /etc/postfix:


__$ sudo ls -l /etc/postfix
 

Ausgabe:


total 120
-rw-r--r-- 1 root root    60 Jan  4 16:43 dynamicmaps.cf
drwxr-xr-x 2 root root  4096 Jan  3 06:58 dynamicmaps.cf.d
-rw-r--r-- 1 root root  1433 Jan  4 16:43 main.cf
-rw-r--r-- 1 root root 27120 Jan  4 16:43 main.cf.proto
lrwxrwxrwx 1 root root    31 Jan  4 16:43 makedefs.out -> /usr/share/postfix/makedefs.out
-rw-r--r-- 1 root root  6208 Jan  4 16:43 master.cf
-rw-r--r-- 1 root root  6208 Jan  4 16:43 master.cf.proto
-rw-r--r-- 1 root root 10268 Jan  3 06:58 postfix-files
drwxr-xr-x 2 root root  4096 Jan  3 06:58 postfix-files.d
-rwxr-xr-x 1 root root 11532 Jan  3 06:58 postfix-script
-rwxr-xr-x 1 root root 29872 Jan  3 06:58 post-install
drwxr-xr-x 2 root root  4096 Jan  3 06:58 sasl

Die beiden wichtigen sind vor allem master.cf und main.cf. Unsere manuellen Änderungen werden wir lediglich in main.cf vornehmen. Vorher schauen wir noch nach, ob Postfix korrekt läuft und unser MX Record aus der DNS-Datei abrufbar ist.

Postfix Status

Überprüfen wir, ob die Installation erfolgreich war und der Postfix Dienst ordnungsgemäß läuft:


__$ sudo service postfix status
 

Wenn es keine Probleme gibt solltest Du den Eintrag Active: active sehen.

DNS MX (Mail Exchange) Resource Record

Mit dem dig Befehl, rufen wir unseren eigenen DNS-Eintrag ab und prüfen, ob ein Eintrag für einen Mail Exchange hinterlegt ist:


__$ dig linuxserversetup.com mx
 

Ausgabe:


; <<>> DiG 9.16.1-Ubuntu <<>> linuxserversetup.com mx
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23128
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;linuxserversetup.com.          IN      MX

;; ANSWER SECTION:
linuxserversetup.com.   70966   IN      MX      10 mail.linuxserversetup.com.

;; Query time: 3 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: Wed Jan  4 16:55:14 UTC 2022
;; MSG SIZE  rcvd: 70
 

In der "Answer Section" sollte die URL mail.linuxserversetup.com stehen. So hatten wir das in dem Kapitel DNS Einträge konfiguriert.

Wenn Postifx aktiv ist und der MX Record korrekt gesetzt, können wir unsere E-Mail Weiterleitung vornehmen.

DNS Reverse Hostname

Die reinkommenden E-Mails, die wir durch die Weiterleitung wieder raus senden, sollten den richtigen Hostnamen für den Reverse Lookup mit sich führen. Schauen wir nach, ob der korrekt hinterlegt ist, ansonsten ändern wir das in der Datei /etc/postfix/main.cf:


__$ sudo nano /etc/postfix/main.cf
 

Die Option myhostname sollte den Wert srv1.linuxserversetup.com haben. Die vollständige Datei sieht dann so aus:

/etc/postfix/main.cf


# See /usr/share/postfix/main.cf.dist for a commented, more complete version

# Debian specific:  Specifying a file name will cause the first
# line of that file to be used as the name.  The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname

smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no

# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h

readme_directory = no

# See http://www.postfix.org/COMPATIBILITY_README.html -- default to 2 on
# fresh installs.
compatibility_level = 2

# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_security_level=may

smtp_tls_CApath=/etc/ssl/certs
smtp_tls_security_level=may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = srv1.linuxservrsetup.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = $myhostname, srv1.linuxservrsetup.com, localhost.com, localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all

Virtuelle E-Mail Aliase konfigurieren

Da wir keine Postfächer anlegen, sondern lediglich E-Mails empfangen und weiterleiten, brauchen wir eine Datei, die diese Zuordnungen auflistet. In den Ordner /etc/postfix legen wir eine Datei mit dem Namen virtual ab:


__$ sudo nano /etc/postfix/virtual
 

Als Bespiel schreibe ich folgendes in die Datei und speicher sie ab. Wie immer: Deine Daten bei mail@example.com eintragen.

/etc/postfix/virtual


# Forwarding Addresses (from -> to)
tom@linuxservrsetup.com mail@example.com
jerry@linuxservrsetup.com mail@example.com
 

Der Mailserver soll E-Mails für tom@linuxservrsetup.com und jerry@linuxservrsetup.com entgegennehmen und sie an mail@example.com weiterleiten. Die erste Zeile beginnt mit einer Raute (#) und ist nur ein Kommentar.

Die Schreibweise für mehrere Empfänger wäre Folgende:

/etc/postfix/virtual


# Forwarding Addresses (from -> to)
tom@linuxservrsetup.com mail-1@example.com, mail-2@example.com
jerry@linuxservrsetup.com mail@example.com
 

Eine E-Mail an tom@linuxservrsetup.com würde so an mail-1@example.com und mail-2@example.com weitergeleitet werden.

Die Domain für die virtuellen Aliase und die obige Datei mit den Zuordnungen müssen wir noch Postfix mitteilen. Öffnen wir dazu die entsprechende Konfigurationsdatei /etc/postfix/main.cf:


__$ sudo nano /etc/postfix/main.cf
 

Und ergänzen am Ende:

Auszug /etc/postfix/main.cf


...
# virtual alias
virtual_alias_domains = linuxservrsetup.com
virtual_alias_maps = hash:/etc/postfix/virtual
 

Die vollständige Datei sieht dann so aus:

/etc/postfix/main.cf


# See /usr/share/postfix/main.cf.dist for a commented, more complete version

# Debian specific:  Specifying a file name will cause the first
# line of that file to be used as the name.  The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname

smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no

# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h

readme_directory = no

# See http://www.postfix.org/COMPATIBILITY_README.html -- default to 2 on
# fresh installs.
compatibility_level = 2

# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_security_level=may

smtp_tls_CApath=/etc/ssl/certs
smtp_tls_security_level=may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = srv1.linuxservrsetup.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = $myhostname, srv1.linuxservrsetup.com, localhost.com, localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all

# virtual alias
virtual_alias_domains = linuxserversetup.com
virtual_alias_maps = hash:/etc/postfix/virtual

Abschließende Einstellungen

Noch ein paar Handgriffe und es ist geschafft. Der aktuelle Postfix Prozess läuft noch mit den alten Einstellungen.

Postfix bezieht sich auf eine interne Adresstabelle, die wir mit postmap aktualisieren:


__$ sudo postmap /etc/postfix/virtual
 

Den Postfix Dienst starten wir neu, damit die neuen Einstellungen übernommen werden:


__$ sudo systemctl restart postfix
 

Der Mailserver soll bei einem Server Neustart automatisch mitstarten:


__$ sudo systemctl enable postfix
 

Und natürlich soll unsere Firewall Postfix erlauben E-Mails anzunehmen und raus zu senden:


__$ sudo ufw allow Postfix
 

Erledigt! Bleibt noch (wie oben) ein letzter Status Check:


__$ sudo service postfix status
 

Wenn die Meldung immer noch Active: active lautet, kannst Du eine Test E-Mail an Deine neue Adresse senden. In meinem Fall an tom@linuxservrsetup.com.


Postfix neu konfigurieren

Falls du Postfix neu einrichten oder durch wiederherstellen eines Snapshots neu konfigurieren möchtest, kannst Du die Installationsroutine erneut aufrufen:


__$ sudo sudo dpkg-reconfigure postfix
 

Mailutils Werkzeug

Mailutils ist eine umfangreiche Werkzeugsammlung zur Verwaltung von E-Mail Diensten und Postfächern. Durch dieses Softwarepaket wird der Befehl mail implementiert, womit sich E-Mails über die Kommandozeile oder von eigenen Skripten versendet werden können.

Mit apt installieren:


__$ sudo apt install -y mailutils
 

Eine Test E-Mail versenden:


__$ echo "Postfix Test E-Mail" | mail -s "Test subject" mail@example.com
 

Optionale Änderung zur "E-Mail Benachrichtigung bei Anmeldung"

In einem vorherigem Kapitel hatten wir die E-Mail Benachrichtigung bei SSH Anmeldung mit Sendmail eingerichtet. Durch Mailutils sind wir jetzt in der Lage, das Versenden dieser E-Mail mit Postfix auszuführen.


__$ sudo nano /etc/ssh/login-mail-notification.sh
							 

Die Datei sieht dann schließlich so aus (hier wieder die Beispieladresse (mail@example.com) mit Deiner E-Mail-Adresse ersetzen):

/etc/ssh/login-mail-notification.sh


#!/bin/sh

if [ "$PAM_TYPE" != "close_session" ]; then

	ADMINMAIL=mail@example.com

	IP="$(echo $SSH_CONNECTION | cut -d " " -f 3)"
	PORT="$(echo $SSH_CONNECTION | cut -d " " -f 4)"
	SUBJECT="SSH on $(hostname) - $PAM_USER@$IP:$PORT - IP: $PAM_RHOST"

	sudo mail -s "$SUBJECT" $ADMINMAIL <<EOF

$(date +"%e %b %Y, %a %r")
------------------------------------

$(env)

EOF

fi
	

Damit ist Sedmail eigentlich unnötig und kann wieder deinstalliert:


__$ sudo apt purge -y sendmail*
	

Postfix Logs

Mit diesem Kommando kann die Protokolldatei syslog nach Postfix Einträgen durchsucht werden (-f zum live mitlesen):


__$ sudo tail -f /var/log/syslog | grep postfix
 

Oder die allgemeinen Mail Fehlerprotokolle:


__$ sudo tail -f /var/log/mail.err
 

Postfix Warteschlange

Postfix Warteschlange auslesen:


__$ sudo mailq
 

Postfix Warteschlange erneut abarbeiten:


__$ sudo postfix flush
 

Postfix Warteschlange leeren:


__$ sudo postsuper -d ALL