DMARC: Installieren und Konfigurieren von parsedmarc

Für was wird ein DMARC Record benötigt?

Um eine Übersicht darüber zu bekommen, wer E-Mails mit der eigenen Domain verschickt, benötigen wir einen DMARC Record. Wie Ihr einen DMARC Record erstellt erfaht ihr in folgendem Artikel Erstellen eines DMARC Records. Damit wir nicht auf teure Cloud Lösungen oder auf unsichere Hosting-Provider angewiesen sind, gibt es einen open-source DMARC Analyzer von parsedmarc.

Was kann parsedmarc?

parsedmarc stellt uns eine Übersicht darüber, ob der SPF Record und der DKIM Record beim Versenden von E-Mails angewendet wird. Darüber hinaus wird angezeigt, wer der Reporter dieser Information ist.

Vorrausetzungen

Folgende Vorraussetzungen werden benötigt, um parsedmarc zu verwenden

  • Ein DMARC Record (Erstellen eines DMARC Records)
  • Ubuntun 20.04 mit mindestens 4 CPU-Cores und 3GB RAM
  • Ein E-Mail Postfach unter der eigenen Domain
  • Funktionierender SPF oder DKIM Record

Installieren von parsedmarc auf einem Ubuntu 20.04 Server

parsedmarc basiert auf einer Python Bibliothek. Als erstes müssen wir Python auf unserem Server installieren.

sudo apt install python3-pip geoipupdate

Um die letzte Version von parsedmarc zu installieren, wird folgender Befehl benötigt.

sudo -H pip3 install -U parsedmarc

Um zu überprüfen, ob parsedmarc erfolgreich installiert wurde, wird folgender Befehl benötigt.

pip3 show -f parsedmarc

Um zu sehen, welche Optionen parsedmarc bietet, kann folgender Befehl genutzt werden.

parsedmarc --help

Installieren von Elasticsearch und Kibana auf dem Ubuntu 20.04 Server

parsedmarc ist ein reines Commandline Tool, um nun eine visualisierte Ansicht der Ergebnisse zu bekommen verwenden wir Elasticseach und Kibana. Elasticsearch ist die Such- und Analysier Engine und Kibana bereitet uns die Daten in einem visuellen Dashboard auf. Wir installieren den Elasticsearch Stack von dem offiziellen Repository.

sudo apt-get install -y apt-transport-https

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list

sudo apt-get update

sudo apt-get install -y default-jre-headless elasticsearch kibana

Um den Service zu starten müssen folgende Befehle verwendet werden

sudo systemctl start elasticsearch
sudo systemctl enable elasticsearch

sudo systemctl start kibana
sudo systemctl enable kibana

Um den Status der Services nun zu überprüfen, sollten folgende Befehle verwendet werden.

systemctl status elasticsearch
systemctl status kibana

Installieren von Nginx als Reverse Proxy für Elasticsearch

Der Elatsicsearch Webserver rennt nur auf 127.0.0.1:5601 oder localhost:5601 und ist somit nicht von extern erreichbar. Um den Webserver von extern erreichbar zu machen, benötigen wir Nginx als Reverseproxy

sudo apt install nginx

Als nächstes müssen wir eine „vHost“ Datei anlegen, wo wir unsere Konfiguration speichern.

sudo nano /etc/nginx/conf.d/elasticsearch.conf

In die soeben erstellte Datei sollte folgendes eingefügt werden.

server {
      listen 80;
      listen [::]:80; 
      server_name dmarc.domain.com;

      access_log /var/log/nginx/dmarc.access;
      error_log /var/log/nginx/dmarc.error;

      add_header X-Frame-Options SAMEORIGIN; 
      add_header X-Content-Type-Options nosniff;

      location / {
         proxy_pass http://127.0.0.1:5601;
         proxy_set_header Host $host;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      }
}

Wenn man für das interne Netzwerke keinen Domainnamen zur Verfügung hat, kann man statt dem server_name auf folgendes angeben (In diesem Beispiel nutze ich meine interne IP der VM)

server {
      listen 80;
      listen [::]:80; 
      server_name 10.8.1.5;

      access_log /var/log/nginx/dmarc.access;
      error_log /var/log/nginx/dmarc.error;

      add_header X-Frame-Options SAMEORIGIN; 
      add_header X-Content-Type-Options nosniff;

      location / {
         proxy_pass http://127.0.0.1:5601;
         proxy_set_header Host $host;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      }
}

Als nächstes muss die Konfiguration getestet werden

sudo nginx -t

Wenn hier keine Fehler auftreten, können wir die Konfigurationsdateien von nginx neu laden. Dazu muss folgender Befehl angewendet werden.

sudo systemctl reload nginx

Sobald dies gemacht wurde, kann man die URL aufrufen (sofern die DNS Einstellungen stimmen) und man sollte dort eine ElasticSearch Webseite sehen.

Die Webseite ist nun über http erreichbar. Da dies unsicher ist, muss https aktiviert bzw eingerichtet werden.

sudo apt install certbot

Als nächstes muss das nginx Plugin heruntergeladen und installiert werden.

sudo apt install python3-certbot-nginx

Um ein SSL Zertifikat zu installieren muss folgender Befehl ausgeführt werden.

sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email you@domain.com -d dmarc.domain.com

Dies sollte nun folgendermaßen aussehen.

Wenn die Webseite nun geöffnet wird, wird die Verbindung als sicher angezeigt, da nun ein SSL Zertifikat genutzt wird.

Zugriff auf das Elasticsearch Interface beschränken

Mit den Standardeinstellung, kann nun jede beliebige Person auf unseren DMARC Analyzer zugreifen. Dies sollte ja vermieden werden. Elatsicsearch bringt mit den Standardeinstellungen, keine User-Authentifizierung mit sich. Um das Webinterface trotzdem auf uns zu beschränken, kann die HTTP Basic Authentification genutzt werden. Ein weiterer Weg für die Cloudflare User unter euch, wäre das Cloudflare Zero Trust Portal. Hier kann man ebenfalls, verschiedene Authentifizierungsmethoden vor die Webseite schalten. Dies zeige ich euch, aber in einem anderen Artikel.

Als erstes muss das apache2-utils Paket installiert werden.

sudo apt install apache2-utils

Nun muss folgender Befehl ausgeführt werden um einen User zu erstellen. Erstellt wird nun der User michael mit einem selbst gewählten Passwort.

sudo htpasswd -c /etc/nginx/htpasswd michael

Im nächsten Schritt muss die vHost Datei, welche zuvor erstellt worden ist, editiert werden.

sudo nano /etc/nginx/conf.d/elasticsearch.conf

Dort muss folgendes im listen 443 ssl Block ergänzt werden.

auth_basic "Login required";
auth_basic_user_file /etc/nginx/htpasswd;

Die Datei speichern, und danach folgenden Befehl ausführen, um die Konfigurationsdatei zu überprüfen.

sudo nginx -t

Danach muss der nginx Service neugestartet bzw. neugeladen werden.

sudo systemctl reload nginx

Wenn nun die Webseite aufgerufen wird, wird folgendes angezeigt.

Hier muss man den soeben erstellt Benutzer und das Passwort zum authentifieren verwenden.

Dies sollte dann wieder so aussehen.

Parsedmarc konfigurieren

Um die Daten, welche parsedmarc aus unser Mailbox erhaltet, an ElasticSearch weiterzugeben, muss ein Konfigurationsfile erstellt werden.

sudo nano /etc/parsedmarc.ini

Folgendes muss in dieser Datei enthalten sein.

[general]
# Save aggregate and forensic reports to Elasticsearch
save_aggregate = True
save_forensic = True

[imap]
# Log into the DMARC report email address and download data.
host = mail.domain.com
port = 993
ssl = True
user = dmarc_reports@domain.com
password = Dein_Passwort_von_der_Mailbox
watch = True

[elasticsearch]
# Send data to Elastichsearch, which listens on port 9200.
hosts = 127.0.0.1:9200
ssl = False

[smtp]
# For sending email
host = mail.domain.com
port = 465
ssl = True
user = dmarc_reports@domain.com
password = Dein_Passwort_von_der_Mailbox
from = dmarc_reports@domain.com

# send results to this address
to = dmarc_auswertung_copy@domain.com

Einen Systemd Service für parsedmarc anlegen

Um immer auf den aktuellsten Stand zu sein, benötigt parsedmarc einen Systemd-Service. Diesen kann man mit folgenden Befehlen erstellen.

sudo nano /etc/systemd/system/parsedmarc.service

Die parsedmarc.service Datei benötigt folgenden Inhalt.

[Unit]
Description=parsedmarc mailbox watcher
Documentation=https://domainaware.github.io/parsedmarc/
Wants=network-online.target
After=network.target network-online.target elasticsearch.service

[Service]
ExecStart=/usr/local/bin/parsedmarc -c /etc/parsedmarc.ini
User=parsedmarc
Group=parsedmarc
Restart=always
RestartSec=5m

[Install]
WantedBy=multi-user.target

Als nächstes muss die Datei abgespeichert werden. Wir benötigen nun einen Benutzer mit welchem wir das Service starten.

sudo adduser --system --no-create-home --group parsedmarc

Damit es zu keinen Komplikationen bei Starten des Service kommt, muss die Datei, die richtigen Berechtigungen erhalten.

sudo chown parsedmarc /etc/parsedmarc.ini

sudo chmod 600 /etc/parsedmarc.ini

parsedmarc wird die MaxMind GeoIP Datenbank heruntenladen, dafür muss folgende Berechtigung erteilt werden.

sudo apt install acl

sudo setfacl -R -m "u:parsedmarc:rwx" /usr/share/elasticsearch/modules/ingest-geoip/

Nun sind alle Vorbereitungen getroffen und wir können parsedmarc starten.

sudo systemctl start parsedmarc

sudo systemctl enable parsedmarc

Wir sehen nun den Status von parsedmarc.

Importieren der Kibana Objekte in Parsedmarc

Um nun eine Übersicht zu bekommen, müssen folgende Objekte in Kibana importiert werden.

wget https://raw.githubusercontent.com/domainaware/parsedmarc/master/kibana/export.ndjson

Diese können einfahc heruntergeladen und im Browser dann importiert werden.

Dazu öffnen wir unsere URL, und navigieren zu Stackmanagement.

Hier navigiert man dann zu Saved Objects und klickt auf Import.

Sobald man die Datei importiert hat, sollte es folgendermaßen aussehn.

Hier klickt man dann auf DMARC Summery und kommt dann zum Dashboard.

Man sieht hier dann eine ganze Menge Information, die man zum Auswerten des E-Mail-Verkehrs benutzern kann.

Conclusion

parsedmarc ist ein open-source, self hosted Tool welches beim Auswerten des E-Mail Verkehrs große Hilfe leistet. Um nicht ständig auf Cloud-Provider, wie Cloudflare angewißen zu sein, ist dieses Tool, sehr hilfreich, man behaltet, selbst die Oberhand über die Daten, und kann auch für Forensische Analysen, dieses Tool heranziehen. Ich hoffe Ihr konntet dieses Tutorial als hilfreich empfinden und würde mich über positive Kommentare freuen. Sollten noch Fragen offen sein, stehe ich euch gerne in den Kommentaren zur Verfügung.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert