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.