DMARC

DMARC baut auf den bekannten Techniken SPF (Sender Policy Framework) und DKIM (DomainKeys Identified Mail) auf, indem es festlegt, wie der Empfänger von E-Mails die Authentifizierung durchführt. Während die vorgenannten Techniken beschreiben, wer eine Mail versenden darf (SPF) bzw. dass diese Mail in bestimmter Weise unverändert vom Absender stammt (DKIM), kann der Absender nach der DMARC-Spezifikation zusätzlich festlegen, auf welche Art der Empfänger mit einer Mail umgeht, die in einem oder beiden Fällen nicht den Anforderungen entspricht. Sofern der Empfänger einer E-Mail die DMARC-Spezifikation anwendet, ist dadurch eine konsistente Überprüfung der Authentizität dieser E-Mail gesichert.
Quelle:Wikipedia

Als Domaininhaber bekommt man mit einer passenden Verarbeitung ein Feedback, wie stark die Domäne von unberechtigten Personen genutzt wird. DMARC macht also den Missbrauch bekannt. Laut DMARC selbst, sind das zumindest in den USA schon einige Postfächer:

As of early 2013 DMARC had been deployed to protect roughly 2 billion email accounts – over 60% of consumer mailboxes globally, and over 80% of consumer mailboxes in the united States.
During the first 45 days of initial monitoring, Twitter saw nearly 2.5 billion messages spoofing its domains.
Twitter reports ~110 million messages/day were spoofing its domains prior to deploying DMARC, redUCEd to only 1,000/day after publishing a “reject” policy.
Quelle: http://www.dmarc.org/

DMARC ist nur die Einstellung, dass die Empfänger mit DMARC-Support die Zahlen an die Domaininhaber melden.

Der Eintrag

_dmarc.tj-braun.de TXT ="
v=DMARC1;
p=none;
pct=100;
rua=mailto:EMPFAENGERADRESSE;
ruf=mailto:EMPFAENGERADRESSE;
adkim=s;
aspf=r
"

v=DMARC1 Version
p=
sp=
Policy oder “Subdomain Policy”
Wie soll der Empfänger mit Mails umgehen, die nicht korrekt mit SPF oder DKIM überprüft werden konnten?

  • none
    Der Empfänger soll die Mail trotzdem weiter senden
  • quarantine
    Der Empfänger soll die Mail annehmen aber in Quarantäne legen
  • reject
    Der Empfänger soll die Mail einfach auf SMTP-Level ablehnen
pct= Prozentsatz der Mails, die entsprechend von “p” gefiltert werden sollen.
rua Receive or aggregated Report
Der Empfänger sendet an diese Adresse einen “Summenbericht”
ruf receiver of forensic report
An diese Mailadresse sendet der Empfänger einen forensischen Report über die fehlerhafte Mail
adkim Abgleicheinstellung für DKIM
Wie streng soll die Prüfung bezüglich DKIM sein?

  • s=Strict
    Die Domänen müssen exakt übereinstimmen
  • r=Relaxed
    Die Kopfzeile im SMTP-Header darf auch eine Subdomain sein, z.B. “newsletter@msxfaq.de”
aspf Analog zu DKIM die SPF-Auswertung

  • s=Strict
    Die Domänen müssen exakt übereinstimmen
  • r=Relaxed
    Die Kopfzeile im SMTP-Header darf auch eine Subdomain sein

Beispiel

nslookup -q=TXT _dmarc.tj-braun.de

Nicht autorisierende Antwort:
_dmarc.tj-braun.de text = “v=DMARC1;p=none;pct=100;rua=mailto:XY;ruf=mailto:XY;adkim=s;aspf=r”

Advertisements

Installation und Konfiguration von DKIM mit Postfix unter Ubuntu

Einleitung

Die Einstufung von E-Mails als Spam kann diverse Gründe haben, wird aber meistens durch einen der folgenden Punkte verursacht:

  • Der Server ist ein Open Relay
  • Der Absender oder die Server IP steht auf einer Blacklist
  • Der Server hat keinen FQDN und/oder PTR Eintrag
  • Der Sender Policy Framework (SPF) DNS Eintrag fehlt oder ist fehlerhaft konfiguriert
  • Die Implementierung von DomainKeys Identified Mail (DKIM) fehlt oder ist nicht korrekt aufgesetzt

Die Spamfilter testen auf einige Basis Eigenschaften. Das Erfüllen dieser Eigenschaften ist sehr wichtig für gut konfigurierte Mailserver.
Im Folgenden wird die Einrichtung von DKIM beschrieben. Genutzt wird dazu “OpenDKIM”, eine OpenSource Implementierung des “DKIM sender authentication system”.

DKIM

DKIM ist ein Internet Standard, der es ermöglicht, Personen oder Unternehmen und deren Domainnamen einer E-Mail Nachricht zu verknüpfen. DKIM funktioniert über eine asymmetrische Verschlüsselung. Der MTA signiert jede ausgehende Mail mit seinem privaten Schlüssel. Der Empfänger erhält den öffentlichen Schlüssel vom DNS des Absenders. Er verifiziert anschließend, ob es keine Veränderungen im Mail Body und einigen der Header Feldern seit der Signierung gibt.

Installation von OpenDKIM

Vor der Installation sollte ein Systemupdate erfolgen und das Paket anschließend installiert werden.
apt-get update && apt-get upgrade
apt-get install opendkim opendkim-tools

Konfiguration von OpenDKIM

Zur Konfiguration müssen einige Dateien angepasst oder erstellt werden.
Angefangen mit der Hauptkonfigurationsdatei:

nano /etc/opendkim.conf

Hier sollten folgende Dinge an die Konfiguration angehängt werden:

AutoRestart Yes
AutoRestartRate 10/1h
UMask 002
Syslog yes
SyslogSuccess Yes
LogWhy Yes
Canonicalization relaxed/simple
ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
InternalHosts refile:/etc/opendkim/TrustedHosts
KeyTable refile:/etc/opendkim/KeyTable
SigningTable refile:/etc/opendkim/SigningTable
Mode sv
PidFile /var/run/opendkim/opendkim.pid
SignatureAlgorithm rsa-sha256
UserID opendkim:opendkim
Socket inet:12301@localhost

Erklärung

  • AutoRestart: Startet den Filter bei Fehlern automatisch neu
  • AutoRestartRate: Gibt an, wie oft der Filter maximal neugestartet werden darf. Sollte ein Neustart öfter erfolgen, so wird der Filter beendet; 10/1h – 10 maximal 10 Neustarts pro Stunde sind erlaubt.
  • UMask: Erteilt vollständige Zugriffsrechte für die Gruppe, welche durch die UserID definiert ist. Andere Benutzer dürfen die Dateien ausführen und lesen. In diesem Fall wird das Erstellen und Bearbeiten der Pidfile erlaubt.
  • Syslog, SyslogSuccess, *LogWhy: Erlauben detailliertes Logging via Syslog.
  • Canonicalization: Legt die Methode der Kanonisierung beim Signieren fest. Die “simple” MEthode erlaubt fast keine Modifikationen, wohingegen die “relaxed” Methode kleinere Änderungen erlaubt wie das Entfernen von Leerzeichen; relaxed/simple – Header: relaxed, Body: simple
  • ExternalIgnoreList: Legt Hosts fest, die Mails mit der Domain durch diesen Server versenden dürfen, ohne, dass Anmeldedaten mitgegeben werden müssen.
  • InternalHosts: Legt eine Liste von Hosts fest, dessen Mail nicht verifiziert aber signiert werden soll.
  • KeyTable: Ordnet maps key names den signing keys zu
  • SigningTable: Liste der Signaturen, die auf die Mail angewendet werden soll, basierend auf dem Header Feld “From”
  • Mode: Legt den Modus der Ausführung fest. In diesem Fall arbeitet der milter als Signierer (s) und Verifizierer (v)
  • PidFile: Pfad zur Pidfile, welche die Nummer des Prozesses beinhaltet
  • SignatureAlgorithm: Algorithmus, der beim Erstellen der Signaturen verwendet wird.
  • UserID: ID (Benutzer und Gruppe) unter welcher der Prozess läuft
  • Socket: Der Milter hört auf diesen Port, Postfix sendet Mails an opendkim zur Signierung und Verifikation an diesen Socket. 12301@localhost TCP Socket, der auf Localhost, Port 12301 hört.

Mehr Infos zu den Einstellungen und Möglichkeiten gibt es hier.

Verbinden des Milters zu Postfix:

nano /etc/default/opendkim

Die folgende Zeile muss eingefügt und evtl. angepasst werden, sollte ein anderer Port genutzt worden sein:

SOCKET="inet:12301@localhost"

Postfix mitteilen, dass er den Milter nutzen soll:

nano /etc/postfix/main.cf

milter_protocol = 2
milter_default_action = accept
smtpd_milters = inet:localhost:12301
non_smtpd_milters = inet:localhost:12301

Oder so, falls schon andere Filter vorhanden sind (SpamAssasin etc.)

smtpd_milters = unix:/spamass/spamass.sock, inet:localhost:12301
non_smtpd_milters = unix:/spamass/spamass.sock, inet:localhost:12301

Nun müssen die Ordner erstellt werden, die die oben definierten Hosts, Tabellen und Schlüssel beinhalten:

mkdir /etc/opendkim
mkdir /etc/opendkim/keys

Hosts defninieren:

nano /etc/opendkim/TrustedHosts

Diese Datei gilt für die Richlinie ExternalIgnoreList und InternalHosts. Mails dieser Hosts, Domänen und IP Adressen wird vertraut und werden signiert.

127.0.0.1
localhost
192.168.0.1/24

*.tj-braun.de

Keytable anlegen:

nano /etc/opendkim/KeyTable

Diese Tabelle enthät das “Selector/Domain” Paar und den Pfad zum privaten Schlüssel. Jeder String kann als Selector genutzt werden. Hier ist es “mail”

mail._domainkey.tj-braun.de tj-braun.de:mail:/etc/opendkim/keys/tj-braun.de/mail.private

SigningTable anlegen:

nano /etc/opendkim/SigningTable

Diese Datei wird für die Definition der Domains/E-Mails und deren Selektoren verwendet.

*@tj-braun.de mail._domainkey.tj-braun.de

Privaten und öffentlichen Schlüssel generieren

Wechsel ins Schlüsselverzeichnis:

cd /etc/opendkim/keys

Ordner für die Domain erstellen.

mkdir tj-braun.de
cd tj-braun.de/

Schlüssel generieren

opendkim-genkey -s mail -d tj-braun.de

-s definiert der Selektor und -d die Domain. Es werden 2 Dateien erstellt. mail.private enthält den privaten Schlüssel und mail.txt den öffentlich Schlüssel.

Öffentlichen Schlüssel zum DNS hinzufügen

Inhalt der mail.txt

mail._domainkey IN TXT ( "v=DKIM1; k=rsa; "
"p=MIGfMA0GCSqGSIb3DQEBAQU...KPofdPZnZjpk5kQ5+PdomLzxesY2NYOG---- DKIM key mail for tj-braun.de

Mit diesem Schlüssel erstellt man nun einen TXT Record  im DNS.

Name: mail._domainkey
Text: "v=DKIM1; k=rsa; " "p=MIGfMA0GCSqGSIb3DQEBAQU...KPofdPZnZjpk5kQ5+PdomLzxesY2NYOG"

Nameserver

Neustart von Postfix und OpenDKIM

service postfix restart
service opendkim restart

Testen

1. Leere Mail an check-auth@verifier.port25.com, dort sollte “DKIM check: pass” stehen, wenn alles funktioniert.

==========================================================
Summary of Results
==========================================================
SPF check: pass
DomainKeys check: neutral
DKIM check: pass
Sender-ID check: pass
SpamAssassin check: ham

2. Mail an eine GMail Adresse schicken. Dort kann man sich den Header anschauen, der so aussehen sollte:

Received-SPF: pass (google.com: domain of tj-braun.de designates 81.169.183.170 as permitted sender) client-ip=81.169.183.170;
Authentication-Results: mx.google.com;
dkim=pass header.i=@tj-braun.de;
spf=pass (google.com: domain of tj-braun.de designates 81.169.183.170 as permitted sender) smtp.mailfrom=tj-braun.de

3. Syslog

opendkim[fusion_builder_container hundred_percent=”yes” overflow=”visible”][fusion_builder_row][fusion_builder_column type=”1_1″ background_position=”left top” background_color=”” border_size=”” border_color=”” border_style=”solid” spacing=”yes” background_image=”” background_repeat=”no-repeat” padding=”” margin_top=”0px” margin_bottom=”0px” class=”” id=”” animation_type=”” animation_speed=”0.3″ animation_direction=”left” hide_on_mobile=”no” center_content=”no” min_height=”none”][12772]: 2F49015260E04: DKIM-Signature field added (s=mail, d=tj-braun.de)[/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]

Google Drive Proxy Authentification Bypass Squid

Google Drive kann zwar mit Proxys umgehen, jedoch nicht mit einer Authentifizierung durch den Proxy.
Dementsprechend müssen diverse URLs durchgelassen werden, ohne, dass eine Authentifizierung erfolgt.
Die einzelnen URLs findet man direkt bei Google.

Die Squid Konfiguration muss folgendermaßen angepasst werden:

# Seiten, die keine Authentifizierung benötigen
acl whitelist dstdomain .google.com .googleusercontent.com .googleapis.com
acl http proto http
acl port_80 port 80
acl port_443 port 443

# Whitelist Seiten ohne Authentifizierung freigeben
http_access allow http port_80 whitelist
http_access allow CONNECT port_443 whitelist

Sendmail – Mailversand via Relayhost

Um mit sendmail über einen Relayhost zu versenden, muss die Datei /etc/mail/sendmail.cf angepasst werden.

Dort nach

...
# "Smart" relay host (may be null)
DS
...

suchen und wie folgt abändern:

# "Smart" relay host (may be null)
DSIP-oder-FQDN

Danach den Dienst neustarten

service sendmail restart

Mail versenden:

sendmail xy@example.de  < /tmp/email.txt

Und im Log nachschauen, ob alles seine Richtigkeit hat:

tail /var/log/mail.log

Active Directory Object Restore via Powershell

Neben der Wiederherstellung von versehentlich gelöschten Objekten im AD durch ldp.exe, kann sie auch via Powershell erfolgen.

Notwendig ist dafür das ActiveDirectory Modul, welches in den RSAT Paketen enthalten ist und über die Windows Funktionen aktiviert werden kann.

Durch

Get-ADObject -SearchBase "CN=Deleted Objects,DC=example,DC=local" -filter * -IncludeDeletedObjects -Properties lastKnownParent

lassen sich alle gelöschten Objekte anzeigen. Das Property lastKnownParent gibt dabei zusätzlich die letzte bekannte OU aus, in der sich die jeweiligen Objekte befanden. Diese muss vor der Wiederherstellung des Objektes vorhanden sein und ggf. ebenfalls wiederhergestellt werden.

Über die Anpassung des Filters kann man sich nur das gewünschte Objekt anzeigen lassen:

Get-ADObject -Filter 'sAMAccountName -eq "username"' -SearchBase "CN=Deleted Objects,DC=eutech,DC=local"  -IncludeDeletedObjects -Properties *

Dadurch wird nach einem einzelnen Benutzer gesucht und alle Eigenschaften angezeigt.

Mit dem Pipen in das “Restore-ADObject” CMDlet kann das Objekt wiederhergestellt werden:

Get-ADObject -Filter 'sAMAccountName -eq "username"' -SearchBase "CN=Deleted Objects,DC=example,DC=local"  -IncludeDeletedObjects -Properties * | Restore-AdObject

Sollte eine OU wiederhergestellt werden, so muss man bedenken, dass der Wiederherstellungsbefehl nur die OU, nicht aber die darin enthaltenen Objekte wiederherstellt. Dies muss manuell oder z.B. durch eine foreach-Schleife erfolgen:

Get-ADObject -Filter * -IncludeDeletedObjects -Properties lastknownparent | ?{$_.lastknownparent -eq "OU=XY
ADEL:a7417fbf-3627-48f6-b48d-224cd642fcb1,CN=Deleted Objects,DC=example,DC=local"} | restore-adobject

-> Raussuchen aller gelöschten Objekte, filtern nach lastknownparent, wiederherstellen

Über den zusätzlichen Parameter “whatif” kann man den Wiederherstellungsprozess erst einmal testen.

ad-restore-ps

Windows Server Backup – Systemstatebackup

Die Backuplösung vom Windows Server 2008 R2 ist ja durchaus alltagstauglich. Zur Sicherung spezieller Komponenten bietet sich das Systemstatebackup an, um bspw. das Active Directory wiederherstellen zu können.

Diese Backupmethode umfasst folgende Komponenten:

  • System Registry
  • COM + Database
  • Certificate Services
  • Active Directory (NTDS.DIT auf Domain Controllern)
  • SysVol (Group Policies and Logon Scripts)
  • IIS Metabase
  • Boot-Files (Boot.ini, NDTLDR, NTDetect.com)

Einige davon sind natürlich nur inkludiert, falls das jeweilige Feature aktiviert ist.

Will man einen Server wiederherstellen, so braucht man diesen Status, um bspw. die Registry oder die Domäne retten zu können.

Der Restore klappt auf dem selben Server oder einem Server mit identischer Hardware. Microsoft unterstützt hierbei jedoch offiziell nicht die Wiederherstellung auf anderer Hardware (KB Artikel).

Sicherung via Kommandozeile

Auf ein Share:

wbadmin start systemstatebackup -backuptarget:"172.30.0.1DC-Sicherung" -quiet

Auf eine (externe) Festplatte:

wbadmin start systemstatebackup -backuptarget:X: -quiet

Diese Sicherung lässt sich aber auch über die GUI der integrierten Server-Sicherung realisieren und planen. Für die Planung via cmd ist eine geplante Aufgabe anzulegen.

Bei der Speicherung auf ein Share muss beachtet werden, dass immer nur eine Sicherung vorgehalten wird. Die letzte Sicherung wird jedes mal überschrieben. Bei lokalen oder externen Festplatten ist dies nicht der Fall.

Sicherung via GUI

Programm “Windows Server-Sicherung” starten. Über den Task “Einmalsicherung” oder “Sicherungszeitplan” kann zwischen einer einmaligen oder mehrfachen Sicherung gewählt werden.

Bei der Sicherung über die GUI sollte folgendes ausgewählt werden:

ad-12

Was passiert aber wenn die Festplatte voll läuft?

 

Die Windows Server Sicherung löscht nicht automatisch die letzten Backups – zumindest dann nicht, wenn sie nicht-exklusiv auf ein Volume sichert.

Da es für diese Aufgabe keine GUI gibt, muss man sich mit der Kommandozeile helfen.

wbadmin delete systemstatebackup -backuptarget:X: -keepversions:10

Mit diesem Befehl werden nur die letzten 10 Backups behalten. Alle anderen werden gelöscht. Wer erst einmal nur das älteste Backup entfernen will, kann dies mit folgendem Befehl:

wbadmin delete systemstatebackup –backupTarget:X: –deleteOldest

SquidAnalyzer – Log Analyse für Squid3

Nutzt man Squid als Proxy, möchte man eventuell eine Auswertung der Internetnutzung starten.

Dazu eignet sich Squidanalyzer, welcher die erzeugten Logfiles des Proxys visuell aufbereitet.

Installation

Download des Pakets:
wget http://downloads.sourceforge.net/project/squid-report/squid-report/6.5/squidanalyzer-6.5.tar.gz?r=https%3A%2F%2Fsourceforge.net%2Fprojects%2Fsquid-report%2F&ts=1466775184&use_mirror=freefr
mv squidanalyzer-6.5.tar.gz?r=https%3A%2F%2Fsourceforge.net%2Fprojects%2Fsquid-report%2F squidanalyzer-6.5.tar.gz

Entpacken:
tar xfvz squidanalyzer-6.5.tar.gz
Kompilieren
perl Makefile.PL
make && make install

Anpassen der jeweiligen Apache Konfiguration (/etc/apache2/sites-enabled/squidanalyzer.conf)

ServerAdmin braun@xxx.de
DocumentRoot "/var/www"
Alias /squidreport /var/www/squidanalyzer
<Directory "/var/www/squidanalyzer">
Options +FollowSymLinks +FollowSymLinks +MultiViews
AllowOverride All

ServerSignature Off
LogLevel info
ErrorLog /var/log/apache2/squidanalyzer-error.log
CustomLog /var/log/apache2/squidanalyzer-access.log combined

Anpassen der Squid Reports
nano /etc/squidanalyzer/squidanalyzer.conf
Einmaliges Ausführen der Loganalyse:
/usr/bin/squid-analyzer > /dev/null 2>&1
Analyse als Cronjob hinterlegen
crontab -e
0 2 * * * /usr/local/bin/squid-analyzer > /dev/null 2>&1

SquidAnalyzer 6.5 Report