Verschiedene Ansätze zur Sicherung eures Servers werde ich hier aufzeigen und erklären.
DKIM mit Kopano und Postfix
Um DKIM mit Kopano einzurichten müssen wir zuerst OpenDKIM installieren und einrichten. DKIM fügt ein Schlüssel zu jeder E-Mail Nachricht hinzu welche dann mit dem Schlüssel auf dem DNS Server abgeglichen wird. So sind die E-Mails glaubwürdiger und werden nicht als SPAM gekennzeichnet. DKIM hat natürlich auch schwächen aber wird trotzdem heutzutage vorausgesetzt um als Vertrauenswürdig zu gelten.
Die Installation starten wir mit folgenden Befehl:
sudo apt-get install opendkim opendkim-tools
Als nächstes erstellen wir die Verzeichnisse für die DKIM-Schlüssel ein.
mkdir /etc/opendkim
mkdir /etc/opendkim/keys
chown -R opendkim:opendkim /etc/opendkim
chmod go-rw /etc/opendkim/keys
OpenDKIM hat wie jede angere Linux Software eine Konfigurationsdatei. Diese bearbeiten wir damit OpenDKIM anschliessend mit Postfix kommunizieren kann. Wir bearbeiten aber zuerst die Datei /etc/default/opendkim denn auf Debian wird diese zuerst abgearbeitet.
sudo nano /etc/default/opendkim.conf
Es wird alles auskommentiert ausser “RUNDIR”.
# NOTE: This is a legacy configuration file. It is not used by the opendkim
# systemd service. Please use the corresponding configuration parameters in
# /etc/opendkim.conf instead.
#
# Previously, one would edit the default settings here, and then execute
# /lib/opendkim/opendkim.service.generate to generate systemd override files at
# /etc/systemd/system/opendkim.service.d/override.conf and
# /etc/tmpfiles.d/opendkim.conf. While this is still possible, it is now
# recommended to adjust the settings directly in /etc/opendkim.conf.
#
#DAEMON_OPTS=""
# Change to /var/spool/postfix/run/opendkim to use a Unix socket with
# postfix in a chroot:
#RUNDIR=/var/spool/postfix/run/opendkim
RUNDIR=/run/opendkim
#
# Uncomment to specify an alternate socket
# Note that setting this will override any Socket value in opendkim.conf
# default:
# SOCKET=local:$RUNDIR/opendkim.sock
# listen on all interfaces on port 54321:
#SOCKET=inet:54321
# listen on loopback on port 12345:
#SOCKET=inet:12345@localhost
# listen on 192.0.2.1 on port 12345:
#SOCKET=inet:12345@192.0.2.1
# USER=opendkim
# GROUP=opendkim
# PIDFILE=$RUNDIR/$NAME.pid
# EXTRAAFTER=
Als nächstes öffnen wir die Konfigurationsdatei unter /etc/opendkim.conf
sudo nano /etc/opendkim.conf
# Socket-Datei zur Kommunikation (alternativ: lokaler Port)
Mode sv
# Socket local:/var/run/opendkim/opendkim.sock
Socket inet:12345@localhost
# OpenDKIM verwendet diesen Benutzer bzw.
# diese Gruppe
UserID opendkim:opendkim
UMask 002
PidFile /var/run/opendkim/opendkim.pid
# OpenDKIM bei Problemen neustarten,
# aber max. 10 mal pro Stunde
AutoRestart yes
AutoRestartRate 10/1h
# This is a basic configuration for signing and verifying. It can easily be
# adapted to suit a basic installation. See opendkim.conf(5) and
# /usr/share/doc/opendkim/examples/opendkim.conf.sample for complete
# documentation of available configuration parameters.
Syslog yes
SyslogSuccess yes
LogWhy yes
# Common signing and verification parameters. In Debian, the "From" header is
# oversigned, because it is often the identity key used by reputation systems
# and thus somewhat security sensitive.
Canonicalization relaxed/simple
#Mode sv
#SubDomains no
OversignHeaders From
# interne Mails (signieren, nicht verifizieren)
InternalHosts refile:/etc/opendkim/trusted
# Hosts, denen vertraut wird (vermeidet Warnungen beim Logging)
ExternalIgnoreList refile:/etc/opendkim/trusted
# welche Verschlüsselungs-Keys sollen für welche
# Domains verwendet werden
# (refile: für Dateien mit regulären Ausdrücke)
SigningTable refile:/etc/opendkim/signing.table
KeyTable /etc/opendkim/key.table
# diesen Signatur-Algorithmus verwenden
SignatureAlgorithm rsa-sha256
# Signing domain, selector, and key (required). For example, perform signing
# for domain "example.com" with selector "2020" (2020._domainkey.example.com),
# using the private key stored in /etc/dkimkeys/example.private. More granular
# setup options can be found in /usr/share/doc/opendkim/README.opendkim.
#Domain example.com
#Selector 2020
#KeyFile /etc/dkimkeys/example.private
# In Debian, opendkim runs as user "opendkim". A umask of 007 is required when
# using a local socket with MTAs that access the socket as a non-privileged
# user (for example, Postfix). You may need to add user "postfix" to group
# "opendkim" in that case.
# UserID opendkim
# UMask 007
# Socket for the MTA connection (required). If the MTA is inside a chroot jail,
# it must be ensured that the socket is accessible. In Debian, Postfix runs in
# a chroot in /var/spool/postfix, therefore a Unix socket would have to be
# configured as shown on the last line below.
# Socket local:/run/opendkim/opendkim.sock
#Socket inet:8891@localhost
#Socket inet:8891
#Socket local:/var/spool/postfix/opendkim/opendkim.sock
# PidFile /run/opendkim/opendkim.pid
# Hosts for which to sign rather than verify, default is 127.0.0.1. See the
# OPERATION section of opendkim(8) for more information.
#InternalHosts 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12
# The trust anchor enables DNSSEC. In Debian, the trust anchor file is provided
# by the package dns-root-data.
# TrustAnchorFile /usr/share/dns/root.key
#Nameservers 127.0.0.1
Vertrauenswürdige Domains
sudo nao /etc/opendkim/trusted
127.0.0.1
::1
localhost
meinedomain.ch
server1.meinedomain.ch
Die Zuordnung der Schlüssel zum Hostnamen erfolgt als nächstes.
sudo nano /etc/opendkim/signing.table
Der Inhalt sieht wie folgt aus.
# E-Mails von xxx@meinedomaein.ch den Schlüssel 'meinedomainname'
# zum Signieren verwenden
*@meinedomain.ch meinedomainname
Die nächste Datei gibt dann den Ort des Schlüssels bekannt.
sudo nano /etc/opendkim/key.table
# Datei /etc/opendkim/key.table
# der Schlüssel 'meindomainname' befindet sich in
# des Datei /etc/opendkim/keys/meindomainname.private
meindomainname meinedomain.ch:201611:/etc/opendkim/keys/meindomainname.private
Schlüssel generieren
cd /etc/opendkim
opendkim-genkey -d meinedomain -b 2048 -r -s 201611
Die nun erzeugten Dateien werden an den korrekten Ort verschoben.
cd /etc/opendkim
mv 201611.private keys/meindomainname.private
mv 201611.txt keys/meindomainname.txt
chown -R opendkim:opendkim /etc/opendkim
chmod -R go-rwx /etc/opendkim/keys
Nun wird der TXT Record auf dem DNS Server gesetzt.
201611._domainkey IN TXT ( "v=DKIM1; h=sha256; k=rsa; s=email; "
"p=MIIBIjANBgkqhkiSD3gsdQEFAAOCAQ8AMIIBCgKCAQEAqTO04CpcVyQwkAHiiI0MhdjvhuqROaFcoeIP6PTNnMXa0Qdjih9Mfld35bF37V6j73k6ov9y8EVASG3tasFASfk6uN+LmlacGyh9cS583wbDanBLmOKM4KJGkUoRwJj08PEeRKu3OEgdkUOabKl/CzIpoASf3twqasfrg2rD+eKgEbz8MLIb4VASGFa3tasdwKvA1aicqYC"
"SjQOcNZhn0QuhIASfat3twafasfSZT8+ES6uwIRWa7ASGat3tafasfketMNB17Sen7kP2ASGasg3tasKWz1rTCH7PYfIOhKT337CASgfat3tafsasfu7ppQSWFAWfwr3w"
Nun starten wir einmal DKIM neu und schauen ob alles noch funktioniert.
service opendkim restart
Kurz überprüfen ob der Service läuft.
● opendkim.service - OpenDKIM Milter
Loaded: loaded (/lib/systemd/system/opendkim.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2023-02-12 20:38:09 CET; 5s ago
Docs: man:opendkim(8)
man:opendkim.conf(5)
man:opendkim-lua(3)
man:opendkim-genkey(8)
man:opendkim-genzone(8)
man:opendkim-testkey(8)
http://www.opendkim.org/docs.html
Process: 2652 ExecStart=/usr/sbin/opendkim (code=exited, status=0/SUCCESS)
Main PID: 2653 (opendkim)
Tasks: 7 (limit: 4700)
Memory: 2.1M
CPU: 5ms
CGroup: /system.slice/opendkim.service
├─2653 /usr/sbin/opendkim
└─2654 /usr/sbin/opendkim
SPF mit Kopano
Das Sender-Policy-Framework ist wie DKIM dafür da die E-Mails vertrauenswürdiger zu machen. SPF wird nur auf dem DNS Server hinterlegt und benötigt keine weitere Konfiguration. Auf dem DNS Server wird ein TXT Eintrag gemacht und danach muss man die IP-Adresse vom Mailserver hinterlegen.
"v=spf1 mx a ip4:IPADRESSE ?all"
DMARC mit Kopano