E-Mail-Server · 7 min read · Oct 23, 2025

Einrichten eines Spam-sicheren Heim-E-Mail-Servers (Der etwas alternative Weg) (Debian Squeeze)

Einrichten eines Spam-sicheren Heim-E-Mail-Servers (Der etwas alternative Weg) (Debian Squeeze)

Einführung

E-Mail-Spam ist ein großes Problem. Ich habe für mich selbst eine ziemlich einfache Lösung gefunden, aber es wird einige Zeit dauern, um vollständig darauf umzusteigen.

Die Lösung besteht darin, jedes Mal eine einzigartige E-Mail-Adresse zu erstellen, wenn ich jemandem oder einer Website eine E-Mail-Adresse geben muss, um mich anzumelden. Wenn ich ein Konto bei Twitter möchte, würde ich “[email protected]” verwenden. Für webbasierte Dienste verwende ich den vollständigen Domainnamen inkl. Subdomain (www) links von der @ (einige schlecht gestaltete Websites erkennen das www. nicht als gültige E-Mail-Adresse an, für diese lasse ich es einfach weg).

Für Personen verwende ich ein Format wie dieses: “[email protected]”. Du könntest auch “[email protected]” verwenden. Das Gute daran ist, dass die linke Seite der @ für E-Mail-Adressen fast “unbegrenzt” ist.

Da ich für jeden Kontakt einzigartige E-Mail-Adressen generiere, kann ich leicht herausfinden, wo meine E-Mail-Adresse geleakt wurde, und sie dann einfach entfernen.

Dieses Howto wird einen voll funktionsfähigen E-Mail-Server mit entsprechenden Skripten einrichten, um die E-Mail-Verwaltung zu erleichtern. Es umfasst auch den DNS-Setup-Teil - selbst wenn du eine dynamische Adresse hast - z.B. wenn du deinen eigenen kleinen Mailserver von zu Hause aus betreiben möchtest.

Zusammenfassung

In diesem Howto verwende ich Debian Squeeze als Server. Für andere Linux-Distributionen musst du die entsprechenden Änderungen selbst vornehmen.

Eine kurze Zusammenfassung dessen, was in diesem Howto gemacht wird, sieht folgendermaßen aus:

  • Erwerb eines Domainnamens
  • Umgang mit einer dynamischen IP - falls erforderlich
  • Umgang mit dem DNS und Routing
  • Einrichten von Postfix
  • Einrichten von Procmail
  • Einrichten von Dovecot
  • Einrichten eines Webservers zur Verwaltung von E-Mail-Adressen
  • Einrichten von Thunderbird mit Addon

Danksagungen

In diesem Howto stütze ich mich auch auf einige andere Howtos hier - insbesondere bezüglich der Einrichtung des Bind- und E-Mail-Servers. Für diese habe ich mehr oder weniger von Falkos Perfect Debian Server Howtos kopiert. Auch der Abschnitt über den E-Mail-Relay wurde von einem Howto hier von sjau entlehnt. Ohne diese hätte ich wahrscheinlich nicht in der Lage gewesen, dies einzurichten.

Erwerb eines Domainnamens

Bevor du deinen eigenen Mailserver betreiben kannst, benötigst du einen Domainnamen, für den du auch MX-Einträge setzen kannst. Ich möchte keine Vorschläge machen, da es unzählige Domain-Registrare gibt. Einer der günstigsten, die ich kenne, ist GoDaddy.

Ich benutze GoDaddy selbst nicht, aber soweit ich gehört habe, bieten sie einen soliden Service.

Umgang mit dynamischen IPs

Eine weitere Herausforderung besteht darin, wie man mit einer dynamischen IP-Adresse umgeht. Wenn du keinen dedizierten Server irgendwo gemietet hast, sondern deine Internetverbindung zu Hause nutzt, hast du sehr wahrscheinlich keine statische IP.

Im Internet ist es wichtig, eine statische IP zu haben, damit andere immer wissen, wo sie dich erreichen können. Es gibt jedoch Dienste, die dir dabei helfen.

Einer der Dienste, die ich benutze, ist EveryDNS. Sie ermöglichen es mir, das DNS für den Domainnamen zu hosten.

Bis jetzt bieten sie den Service noch kostenlos an. Obwohl sie 2010 aufgekauft wurden, war das Versprechen, dass damalige Kunden, die Geld gespendet haben, auch in Zukunft das System kostenlos nutzen können. Auf ihrer Webseite erwähnen sie noch nichts, dass neue Kunden bezahlen müssen - aber ich weiß es nicht genau.

Der Grund für EveryDNS ist, dass sie auch ein kleines Perl-Skript anbieten, das verwendet werden kann, um das DNS zu aktualisieren. Dies ist wichtig, da sich deine IP im Laufe der Zeit ändert, wenn du keine statische IP-Adresse hast. Du kannst das Perl-Skript hier herunterladen.

Wenn du einen Domainnamen hast, gehe zuerst zu What Is My IP. Es zeigt dir deine aktuelle öffentliche IP-Adresse an. Erstelle dann ein Konto bei EveryDNS und mache mindestens die folgenden Einträge, wobei MYDOMAIN.COM dein Domainname wäre:

(1) Erstelle einen “A”-Datensatztyp, setze ihn als vollqualifizierten Domainnamen “MYDOMAIN.COM” und setze als Wert deine öffentliche IP-Adresse

(2) Erstelle einen “CNAME”-Datensatztyp, setze ihn als vollqualifizierten Domainnamen “*.MYDOMAIN.COM” und setze als “MYDOMAIN.COM”

(3) Erstelle einen “MX”-Datensatztyp, setze ihn als vollqualifizierten Domainnamen “MYDOMAIN.COM”, setze als Wert “MYDOMAIN.COM” und setze als “MX-Wert” “10”

Was wir gerade gemacht haben, ist die Einrichtung des DNS für die Domain. Die Hauptdomain wird unter deiner IP-Adresse gefunden (A-Datensatz), alle anderen Domains sind ebenfalls dort zu finden (das * im CNAME-Datensatz verweist auf die Hauptdomain) und wir betreiben dort auch einen Mailserver (MX-Datensatz).

root-Benutzer

Die folgenden Dinge werden als root-Benutzer durchgeführt - es sei denn, es wird etwas anderes angegeben.

Dyn. IP-Update

Wie bereits erwähnt, wenn du keine statische IP-Adresse hast, musst du die DNS-Informationen regelmäßig aktualisieren.

(1) Hol dir das Perl-Skript und mache es ausführbar

cd /root  
wget http://www.everydns.net/eDNS.pl  
chmod 0755 eDNS.pl

(2) Erstelle ein Bash-Skript, das das Perl-Skript aufruft (es gibt auch andere Möglichkeiten, aber ich fand das am einfachsten):

touch eDNS.sh  
echo "#!/bin/bash" > eDNS.sh  
echo "perl /root/eDNS.pl -u USERNAME -p PASSWORD -d MYDOMAIN.COM" >> eDNS.sh

Ersetze USERNAME und PASSWORD durch deine EveryDNS-Anmeldedaten.

(3) Richte einen Cron ein, um es regelmäßig auszuführen

Ich arbeite gerne mit einer cron.txt-Datei, die alle Cronjobs enthält. Ich finde, es ist viel einfacher, es so zu verwalten.

Zuerst musst du überprüfen, ob bereits ein Cron-Eintrag vorhanden ist:

crontab -l

Wenn noch kein Cron-Eintrag vorhanden ist, führe einfach die folgenden Befehle aus:

touch cron.txt  
chmod 0700 cron.txt  
echo "*/5 * * * * /root/eDNS.sh >/dev/null 2>&1" > cron.txt

Wenn bereits Cron-Einträge vorhanden sind, kopiere sie, erstelle eine cron.txt-Datei und füge sie ein und füge auch den folgenden Befehl hinzu:

*/5 * * * * /root/eDNS.sh >/dev/null 2>&1 

Jetzt laden wir die cron.txt als Cron:

crontab cron.txt

Und wir überprüfen, ob es richtig hinzugefügt wurde:

crontab -l

LAN/Routing/Bind

Das nächste Problem, dem wir uns stellen müssen, ist, wie man die Domain in deinem LAN auflöst. Wenn dein Mailserver hinter einem Router steht, hat er wahrscheinlich eine lokale IP wie 192.168.0.x oder 10.0.0.x.

Wenn du hinter einem Router bist, musst du die folgenden Ports an deinen Server weiterleiten: 25, 80, 143, 443, 991. Es könnten noch weitere Ports erforderlich sein, wie 587.

Außerdem stehen wir vor dem Problem, wie man den Domainnamen von innerhalb des LAN auflöst. Von außerhalb des LAN hast du den DNS-Eintrag, der auf deine aktuelle IP-Adresse zeigen sollte. Wenn du jedoch innerhalb des LAN bist und eine DNS-Abfrage machst, wird nur deine öffentliche IP zurückgegeben und normalerweise schlägt es dann fehl.

Es gibt mehrere Lösungen für dieses Problem - falls das Problem überhaupt existiert.

Eine Möglichkeit wäre die Verwendung von dnsmasq in Routern (z.B. dd-wrt oder tomato-wrt). Da ich jedoch nicht garantieren kann, dass es funktioniert, sehe ich die einzige andere Option darin, einen vollwertigen DNS-Server auf deinem Mailserver einzurichten.

In diesem Tutorial werde ich ein chrooted Bind9 verwenden, da ich damit am vertrautesten bin. Für andere DNS-Server findest du online reichlich Dokumentation.

(1) Installiere die Software und stoppe sie

apt-get install bind9  
/etc/init.d/bind9 stop

(2) Ändere die /etc/default/bind9-Konfiguration, sodass die Optionszeile wie folgt aussieht:

OPTIONS="-u bind  -t /var/lib/named" 

(3) Erstelle die erforderlichen Verzeichnisse unter /var/lib:

mkdir -p /var/lib/named/etc  
mkdir /var/lib/named/dev  
mkdir -p /var/lib/named/var/cache/bind  
mkdir -p /var/lib/named/var/run/bind/run

(4) Verschiebe dann das Konfigurationsverzeichnis von /etc nach /var/lib/named/etc:

mv /etc/bind /var/lib/named/etc

(5) Erstelle einen Symlink zum neuen Konfigurationsverzeichnis von dem alten Standort (um Probleme zu vermeiden, wenn BIND in Zukunft aktualisiert wird):

ln -s /var/lib/named/etc/bind /etc/bind

(6) Erstelle Null- und Zufallsgeräte und behebe die Berechtigungen der Verzeichnisse:

mknod /var/lib/named/dev/null c 1 3  
mknod /var/lib/named/dev/random c 1 8  
chmod 666 /var/lib/named/dev/null /var/lib/named/dev/random  
chown -R bind:bind /var/lib/named/var/*  
chown -R bind:bind /var/lib/named/etc/bind

(7) Bearbeite die /etc/rsyslog.d/bind-chroot.conf-Datei und füge hinzu

$AddUnixListenSocket /var/lib/named/dev/log 

(8) Starte die Dienste neu

/etc/init.d/rsyslog restart  
/etc/init.d/bind9 start

und überprüfe /var/log/syslog auf Fehler.

Jetzt haben wir Bind9 in einer chrooted Umgebung eingerichtet. Das nächste, was zu tun ist, ist, tatsächlich eine Zonendatei für deine Domain hinzuzufügen.

(9) Bearbeite /etc/bind/named.conf.local und füge hinzu

zone "MYDOMAIN.COM" IN {
        type master;
        file "/etc/bind/zones/MYDOMAIN.COM.db";
        allow-update { none; };
};

(10) Erstelle den Zonenordner und die Zonendatei

mkdir /etc/bind/zones  
touch /etc/bind/zones/MYDOMAIN.COM.db  
chown -R bind:bind /etc/bind/zones/MYDOMAIN.COM.db

(11) Füge deine Zonendateiinformationen zu MYDOMAIN.COM.db hinzu

$TTL    86400
@               IN SOA  @ MYDOMAIN.COM. (
                                        1              ; serial
                                        2600              ; refresh
                                        15M             ; retry
                                        3600              ; expiry
                                        360 )            ; minimum
@               IN NS           ns.MYDOMAIN.COM.
ns              IN A            LOCALIP
www             IN A            LOCALIP
MYDOMAIN.COM.             IN A            LOCALIP
MYDOMAIN.COM.     IN MX   10      LOCALIP

Ersetze MYDOMAIN.COM natürlich durch deinen tatsächlichen Domainnamen und LOCALIP durch deine statische LAN-IP-Adresse. Grundsätzlich sagen wir hier, dass der Nameserver für diese Domain auf “ns.MYDOMAIN.COM” gehostet wird und “ns.MYDOMAIN.COM” unter der statischen lokalen IP-Adresse zu finden ist.

(12) Starte Bind9 neu

/etc/init.d/bind9 restart

(13) Ändere die NS-Auflösungsreihenfolge des Routers

Während Bind9 jetzt eingerichtet ist, gibt es noch eine letzte Sache zu tun. Auf deinem Router musst du die Reihenfolge der Nameserverauflösung ändern. Der erste Nameserver muss jetzt dein “Mailserver” mit der entsprechenden statischen lokalen IP sein. Andernfalls war die gesamte Bind9-Einrichtung umsonst. Als zweiten Nameserver gib den Wert ein, der bereits dort war, als erster. Je nach Router kann es etwas kniffliger sein.

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.