E-mail mit DKIM einrichten mit Postfix, OpenDKIM und PowerDNS

Mailserver gelten (zu Recht) mittlerweile als mit die komplexesten und am schwierigsten zu wartenden Systeme. Das liegt unter anderem daran, dass es sich beim „S“ in SMTP leider nicht um „secure“ sondern um „simple“ handelt. SMTP ist das Simple Mail Transfer Protocol, das ist die Sprache nach welcher sich Mailserver untereinander verständigen und e-mails weiter reichen. Als es definiert wurde, war die Welt des Internet noch sehr klein und auch wesentlich friedfertiger. Heute muss man aufpassen wie ein Schießhund, schneller als einem lieb ist hat man mit einem Mailserver sonst Ärger. Free-Relays gibt es mittlerweile dankenswerter Weiser fast gar keine mehr – diese waren ein erster Angriffspunkt für unerwünschte Werbung (SPAM).

Die eigentliche Installation eines Mailservers ist meist gar nicht das Problem, es sind die vielfachen Absicherungen die es benötigt um ihn auch „sicher“ zu betreiben und nicht als SPAM-Schleuder missbraucht zu werden und natürlich auch sich der diversen SPAM-Quellen zu erwehren. Noch dazu kommt, dass man ggf. auch weitere Server-Prozesse benötigt die der Abholung von Mails durch den Benutzer dienen – heute in der Regel per IMAP (Internet Message Access Protocol), eher historisch zu sehen ist POP(3). Hier muss man dann auch noch dafür sorgen, dass die Authentifizierung für die ganzen Server-Prozesse auch noch schön synchron bleibt. Kurzum: Es ist ein System das man häufig unter dem Motto: Never touch a running system betreibt sobald die Konfiguration einmal den Vorstellungen und Bedürfnissen entspricht (von den üblichen Sicherheitsupdates einmal abgesehen).

Es gibt aber auch Weiterentwicklungen, insbesondere im Kampf gegen SPAM, eines der Verfahren dazu nennt sich DKIM (DomainKeys Identified Mail). Das System macht sich DNS (Domain Name System) und asymmetrische Kryptographie zu nutze: Jede e-mail die durch den Server verschickt wird, wird in den Kopfzeilen um eine digitale Signatur ergänzt. Anhand des im DNS hinterlegten öffentlichen Schlüssels kann dann jeder empfangende Mailserver prüfen ob die Mail vom sendenden Server stammt (korrekt signiert wurde). Das Verfahren ist mittlerweile den Kinderschuhen entwachsen und in den letzten Wochen und Monaten bin ich immer wieder einmal auf kleinere Probleme beim Mailversand gestoßen. Allerhöchste Zeit sich einmal den Thema zu widmen. Continue reading

PowerDNS mit Pi-Hole auf RasPi

Eines der etwas länger schon mal angedachten Projekte, welches ich dann aufgrund Zeitmangels und auch etwas Frustration in die Ecke gelegt hatte ist ein eigener, lokaler DNS-Server den man auch schnell aktualisieren kann – wer häufiger in verschiedenen Projekten arbeitet weiß es zu schätzen wenn man den Stall der Entwicklungs-Container nicht per IP-Adresse auswendig lernen muss, sondern ihn per sprechenden Namen ansprechen kann. In diesem Post geht es erst einmal darum die Grundlagen zu schaffen, auch das ist bereits etwas mehr Arbeit als ich gedacht hätte.Wichtige Eckpunkte / Material zum Nachbauen:

  • Raspberry Pi (inklusive Netzteil)
  • als DNS-Server kommt PowerDNS zum Einsatz
  • MySQL/MariaDB als Datenbank für die DNS-Einträge
  • DNS-Dist als Loadbalancer für DNS-Queries
  • PiHole als Resolver mit Blacklist
  • Docker als Virtualisierung für alle Services
  • IPv6 als primäres Netzwerkprotokoll, IPv4 nur als Fallback

Continue reading

DNS mit Docker Teil III – dnsdist als Router / Loadbalancer

Wer meine bisherigen Posts zu Docker und DNS verfolgt hat, weiß: Da steht noch was aus (ich komme nur momentan nicht immer ganz zeitnah dazu meine Erfahrungen zusammen zu schreiben.

Was bisher geschah:

Was jetzt noch aussteht ist eine Sache die mit der Microservice-Architektur von PowerDNS im Vergleich zu „klassischen“ Nameservern wie BIND zusammen hängt: BIND ist monolitisch und kümmert sich um jegliche Anfrage die gestellt wird. In PowerDNS hat man diese Dinge wie oben bereits angedeutet aufgetrennt: Einen Spezialisten zum Auflösen von externen Einträgen (Recursor) und einen weiteren Prozess der sich um die Sachen kümmert für die man selbst verantwortlich ist (authorative). Continue reading

Domain Name Server mit PowerDNS – Schritt 1 – Konzept, Netzwerk und Authorative Server

Nachdem ich ja schon einiges in der letzten Zeit über DNS und Co geschrieben habe, geht es diesmal um eine konkrete Umsetzung. Lange Zeit habe ich schon einen eigenen DNS-Server betrieben, damals noch mit BIND. Mit den letzten Serverumzügen habe ich das dann der Einfachheit halber meinem Hosting-Anbieter überlassen (das richte ich ein, wenn der Rest läuft …). Wie das mit aufgeschobenen Aufgaben so ist, irgendwann wird der Status Quo zu einen „Dauerorium“ (die verstetigte Version eines Provisoriums).

Nun wollte ich es endlich angehen, und dabei auch einige zusätzliche Funktionen nachzurüsten. Unter anderem einen eigenen Ipv6 fähigen DynDNS-Service. Nach etwas Recherche stand ein grober Plan:

  • PowerDNS mit MySQL Backend
  • MySQL Server (läuft bereits, bekommt nur ein zusätzliches Schema)
  • Ein (Dyn)DNS-Frontend zur einfacheren Verwaltung und als HTTP(s) Schnittstelle zum Updaten
  • Microservice-Ansatz für die Einzelteile mit Docker als Paravirtualisierung
  • soweit möglich alles nativ in IPv6

Continue reading

Grundlagen zum Domain Name Service

Wie ich beim Schreiben meiner Artikel gemerkt habe, ist es sinnvoll gewisse Grundlagen einmal abzuspalten, um darauf verweisen zu können. Ich werde daher immer einmal wieder den ein oder anderen Grundlagen-Artikel hier zusammenschreiben, der im ersten Moment vielleicht etwas aus dem Zusammenhang gerissen scheint, aber ggf. wertvolle Informationen für alle Einsteiger enthält oder auch dem ein oder anderen Erfahrenen als Auffrischung dienen kann. Ich versuche das möglichst prägnant und wo immer möglich an Beispielen zu beschreiben.

In diesem Artikel geht es im um das Domain Name System – das Konstrukt welches zu Arbeit am Rechner etwas leichter macht, da sich das menschliche Gehirn in der Regel Namen besser merken kann als Zahlenfolgen.

Der langjährige Standard für DNS-Server im Unix und Linux-Umfeld ist der BIND-Daemon und so ziemlich jeder der sich schon einmal mit DNS-Namen hat etwas eingehender beschäftigen dürfen (oder müssen), der weiß, dass die Syntax der Config-Files nicht gerade in die Kategorie „leicht verdaulich“ fällt. Zudem war BIND immer mal wieder ein Sorgenkind wenn es um Sicherheitslücken ging. Sehr verständlich, dass sich viele Website-Betreiber da lieber auf einen Hoster verlassen der das schon für sie regeln wird. Für mich auch lange ein valider Weg, aber eben auch einer mit Einschränkungen.

Continue reading