Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
centos:mail_c7:spam_12 [17.12.2014 21:02. ] – [opendmarc-reports] django | centos:mail_c7:spam_12 [18.11.2024 19:13. ] (aktuell) – Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | <WRAP center round info 60%> | + | <WRAP center round info 60%> |
Artikel befindet sich gerade in der Bearbeitung! | Artikel befindet sich gerade in der Bearbeitung! | ||
</ | </ | ||
Zeile 21: | Zeile 21: | ||
Das nachfolgende Schaubild zeigt den Bearbeitungsverlauf einer eMail mit Berücksichtigung auf DMARC auf. | Das nachfolgende Schaubild zeigt den Bearbeitungsverlauf einer eMail mit Berücksichtigung auf DMARC auf. | ||
- | < | + | <uml> |
skinparam defaultFontName Courier | skinparam defaultFontName Courier | ||
state " | state " | ||
Zeile 54: | Zeile 54: | ||
smtpd_b : Bewertung der eMail | smtpd_b : Bewertung der eMail | ||
smtpd_b : mit Hilfe von Blacklists | smtpd_b : mit Hilfe von Blacklists | ||
- | smtpd_b : und greylisting | + | smtpd_b : und postscreen |
state "SPAM- und Virenüberprüfung" | state "SPAM- und Virenüberprüfung" | ||
Zeile 174: | Zeile 174: | ||
regelmäßiger forensischer | regelmäßiger forensischer | ||
Bericht an den im DMARC-Record | Bericht an den im DMARC-Record | ||
- | hinterlegten "ruaf=mailto" | + | hinterlegten "rua=mailto" |
Adresse des Mailserver- | Adresse des Mailserver- | ||
betreibers des Absender- | betreibers des Absender- | ||
Zeile 289: | Zeile 289: | ||
===== Installation ===== | ===== Installation ===== | ||
- | Die einfachste und schnellste Variante bei der Installation ist die aus dem Repository **[[centos:mailserver.guru|mailserver.guru]]**. Hier reicht ein einfacher Aufruf von **yum** und alles wird automatisch installiert inkl. der Paketabhängigkeiten. | + | Die einfachste und schnellste Variante bei der Installation ist die aus dem Repository **[[centos:nausch.org|nausch.org]]**. Hier reicht ein einfacher Aufruf von **yum** und alles wird automatisch installiert inkl. der Paketabhängigkeiten. |
# yum install opendmarc | # yum install opendmarc | ||
- | Will oder kann man nicht auf das Repository **[[centos:mailserver.guru|mailserver.guru]]** zurückgreifen, | + | Will oder kann man nicht auf das Repository **[[centos:nausch.org|nausch.org]]** zurückgreifen, |
- | # yum localinstall http:// | + | # yum localinstall http:// |
- | http:// | + | http:// |
Was das RPM alle mitbrachte zeigt ein Blick in die RPM-Datenbank. | Was das RPM alle mitbrachte zeigt ein Blick in die RPM-Datenbank. | ||
Zeile 1415: | Zeile 1415: | ||
===== Konfiguration ===== | ===== Konfiguration ===== | ||
- | ==== opendmarc | + | ==== opendmarc ==== |
- | Die Konfiguration von OpenDMARC erfolgt über die Konfigurationsdatei **opendmarc.conf** im Verzeichnis // | + | |
=== opendmarc.conf === | === opendmarc.conf === | ||
+ | Die Konfiguration von OpenDMARC erfolgt über die Konfigurationsdatei **opendmarc.conf** im Verzeichnis // | ||
# vim / | # vim / | ||
Zeile 1808: | Zeile 1807: | ||
</ | </ | ||
- | === ignore.hosts === | + | === ignore.hosts |
# vim / | # vim / | ||
<file bash / | <file bash / | ||
Zeile 1817: | Zeile 1816: | ||
</ | </ | ||
+ | === Public Suffix List ==== | ||
+ | Im [[https:// | ||
+ | |||
+ | Zuvor holen wir uns aber erst einmal diese Liste von der Webseite **[[https:// | ||
+ | # wget --no-check-certificate -q -N https:// | ||
+ | |||
+ | In unregelmäßigen Abständen, meist mehrmals pro Monat, wird diese Liste aktualisiert. Damit wir nun nicht händisch für die Aktualität dieser Liste sorgen müssen, legen wir uns einen kleinen cronjob an, der 1x pro Woche ausgeführt werden soll. | ||
+ | # vim / | ||
+ | |||
+ | <file bash / | ||
+ | # Script zum Aktualisieren der Public Suffix List für opendmarc | ||
+ | # Django < | ||
+ | # | ||
+ | / | ||
+ | |||
+ | Was nun noch fehlt, ist die Aktivierung dieser Option in der Konfigurationsdatei von **opendmarc**. | ||
+ | # vim / | ||
+ | <code bash / | ||
+ | |||
+ | ## PublicSuffixList path | ||
+ | ## default (none) | ||
+ | ## | ||
+ | ## Specifies the path to a file that contains top-level domains (TLDs) that | ||
+ | ## will be used to compute the Organizational Domain for a given domain name, | ||
+ | ## as described in the DMARC specification. | ||
+ | ## not be able to determine the Organizational Domain and only the presented | ||
+ | ## domain will be evaluated. | ||
+ | # | ||
+ | # Django : 2015-12-10 | ||
+ | # default: unset | ||
+ | PublicSuffixList / | ||
+ | |||
+ | ... | ||
+ | </ | ||
+ | |||
+ | Zum Aktivieren der **Public Suffix List** brauchen wir dann nur noch den Daemon 1x durchstarten. | ||
+ | # systemctl restart opendmarc.service | ||
+ | |||
+ | ==== mysql Konfiguration ==== | ||
+ | Eigentlich könnten wir nun schon unseren DMARC-Daemon starten. Jedoch wollen wir noch kurz die nötige mySQL-Datenbank anlegen, damit der Daemon die gewünschten aufbereiteten Statiskdaten und forensischen Berichte generieren und dann per eMail verschicken kann. | ||
+ | |||
+ | Wir melden uns also als berechtigter Datenbankuser an der mySQL-Datenbank an. | ||
+ | # mysql -h localhost -u root -p | ||
+ | |||
+ | < | ||
+ | Welcome to the MySQL monitor. | ||
+ | Your MySQL connection id is 1942 | ||
+ | Server version: 5.1.67 Source distribution | ||
+ | |||
+ | Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. | ||
+ | |||
+ | Oracle is a registered trademark of Oracle Corporation and/or its | ||
+ | affiliates. Other names may be trademarks of their respective | ||
+ | owners. | ||
+ | |||
+ | Type ' | ||
+ | |||
+ | mysql> | ||
+ | </ | ||
+ | Dort legen wir als aller erst einmal eine Datenbank mit dem Namen **opendmarc** an. | ||
+ | | ||
+ | |||
+ | Anschließend legen wir uns dann einen Datenbankuser an, dem wir entsprechende Rechte an der Datenbank **opendmarc** einräumen. | ||
+ | | ||
+ | |||
+ | Query OK, 0 rows affected (0.00 sec) | ||
+ | |||
+ | | ||
+ | |||
+ | Query OK, 0 rows affected (0.00 sec) | ||
+ | |||
+ | Anschließend setzen wir noch die Nutzerberechtigungen unseres Datenbanknutzers **opendmarc_user** für die Datenbank **opendmarc** | ||
+ | | ||
+ | |||
+ | Query OK, 0 rows affected (0.00 sec) | ||
+ | |||
+ | mysql> GRANT ALL PRIVILEGES ON opendmarc.* TO ' | ||
+ | |||
+ | Query OK, 0 rows affected (0.00 sec) | ||
+ | |||
+ | Zur Aktivierung weisen wir nun noch die Berechtigungen zu: | ||
+ | mysql> FLUSH PRIVILEGES; | ||
+ | |||
+ | Query OK, 0 rows affected (0.00 sec) | ||
+ | |||
+ | Abschließend melden wir uns wieder von unserem Datenbankhost ab. | ||
+ | mysql> quit | ||
+ | |||
+ | Bye | ||
+ | |||
+ | Bevor wir die benötigten Tabellen anlegen, testen wir noch, ob der Zugriff von unserem Mail- bzw. Datenimportserver funktioniert. | ||
+ | # mysql -h mysql.dmz.nausch.org -D opendmarc -u opendmarc_user -p | ||
+ | |||
+ | < | ||
+ | Welcome to the MySQL monitor. | ||
+ | Your MySQL connection id is 2889 | ||
+ | Server version: 5.1.73 Source distribution | ||
+ | |||
+ | Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. | ||
+ | |||
+ | Oracle is a registered trademark of Oracle Corporation and/or its | ||
+ | affiliates. Other names may be trademarks of their respective | ||
+ | owners. | ||
+ | |||
+ | Type ' | ||
+ | |||
+ | mysql> | ||
+ | </ | ||
+ | | ||
+ | < | ||
+ | | Database | ||
+ | +--------------------+ | ||
+ | | information_schema | | ||
+ | | opendmarc | ||
+ | +--------------------+ | ||
+ | 2 rows in set (0.00 sec) | ||
+ | </ | ||
+ | | ||
+ | |||
+ | Bye | ||
+ | |||
+ | Mit Hilfe der Datei // | ||
+ | # mysql -h mysql.dmz.nausch.org -D opendmarc -u opendmarc_user -p < / | ||
+ | |||
+ | Auch hier können wir uns bei Bedarf noch überprüfen, | ||
+ | # mysql -h mysql.dmz.nausch.org -D opendmarc -u opendmarc_user -p | ||
+ | |||
+ | < | ||
+ | Reading table information for completion of table and column names | ||
+ | You can turn off this feature to get a quicker startup with -A | ||
+ | |||
+ | Welcome to the MySQL monitor. | ||
+ | Your MySQL connection id is 2933 | ||
+ | Server version: 5.1.73 Source distribution | ||
+ | |||
+ | Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. | ||
+ | |||
+ | Oracle is a registered trademark of Oracle Corporation and/or its | ||
+ | affiliates. Other names may be trademarks of their respective | ||
+ | owners. | ||
+ | |||
+ | Type ' | ||
+ | |||
+ | mysql> | ||
+ | </ | ||
+ | | ||
+ | |||
+ | < | ||
+ | | Database | ||
+ | +--------------------+ | ||
+ | | information_schema | | ||
+ | | opendmarc | ||
+ | +--------------------+ | ||
+ | 2 rows in set (0.00 sec) | ||
+ | |||
+ | mysql> | ||
+ | </ | ||
+ | | ||
+ | |||
+ | Database changed | ||
+ | mysql> | ||
+ | |||
+ | | ||
+ | < | ||
+ | | Tables_in_opendmarc | | ||
+ | +---------------------+ | ||
+ | | domains | ||
+ | | ipaddr | ||
+ | | messages | ||
+ | | reporters | ||
+ | | requests | ||
+ | | signatures | ||
+ | +---------------------+ | ||
+ | 6 rows in set (0.00 sec) | ||
+ | |||
+ | mysql> | ||
+ | </ | ||
+ | | ||
+ | |||
+ | Bye | ||
+ | |||
+ | |||
+ | ==== dbCollecting User einrichten ==== | ||
+ | Nicht immer möchte oder kann man von seinem oder seinen Mailservern eine Verbindung zum Datenbankhost ermöglichen. Um jetzt nicht von jedem einzelnen MX-Server einzurichten, | ||
+ | |||
+ | Wir legen uns nun unseren Nutzer an. Als UID und GID verwenden wir eine entsprechend freie Nummer, die wir entsprechend vorher abprüfen. | ||
+ | # grep 989 /etc/group | ||
+ | |||
+ | # grep 989 /etc/passwd | ||
+ | |||
+ | Anschließend legen wir uns unseren User an. | ||
+ | # groupadd -g 989 dmarc && useradd dmarc -c " | ||
+ | |||
+ | Anschließend erzeugen wir uns noch einen entsprechenden SSH-Key und verteilen diesen auf unseren Mailservern. Entsprechende Schritte sind im Wiki [[https:// | ||
+ | |||
+ | ==== dbCollecting Script anlegen ==== | ||
+ | Zum Einsammeln der Statistikdaten legen wir uns nun ein einfaches Shellscript an. | ||
+ | # vim / | ||
+ | <file bash / | ||
+ | # Script zum Importieren der DMARC-Daten aus dem lokalen cache-Datei in die mySQL Datenbank | ||
+ | # und Generieren der DMARC-reports | ||
+ | # Das Script wird um 03:33 Uhr via cronjob aufgerufen. | ||
+ | # | ||
+ | # crontab | ||
+ | # einmal in der Nacht die DMARC-Statistikdaten abholen und die mySQL-Datenbank damit befüllen. | ||
+ | # 33 3 * * * / | ||
+ | # | ||
+ | # Django : 2014-03-20 | ||
+ | |||
+ | WORKDIR="/ | ||
+ | WORKFILE=" | ||
+ | SSHKEYFILE=" | ||
+ | MXHOSTS=" | ||
+ | DBFILE=" | ||
+ | DBHOST=" | ||
+ | DBPORT=" | ||
+ | DBUSER=" | ||
+ | DBPASSWD=" | ||
+ | DBNAME=" | ||
+ | |||
+ | # DMARC Datenfile von den Mailservern abholen | ||
+ | cd $WORKDIR | ||
+ | for HOST in $MXHOSTS; do | ||
+ | scp -i $WORKDIR$SSHKEYFILE dmarc@${HOST}:/ | ||
+ | ssh -i $WORKDIR$SSHKEYFILE dmarc@${HOST} "/ | ||
+ | cat ${HOST}.dat >> $WORKFILE | ||
+ | done | ||
+ | |||
+ | # DMARC Daten in die mySQL-Datenbank opendmarc schreiben | ||
+ | / | ||
+ | --dbpasswd=$DBPASSWD < $WORKDIR$WORKFILE | ||
+ | |||
+ | # DMARC Statistik-Report erstellen | ||
+ | / | ||
+ | --dbpasswd=$DBPASSWD --verbose --interval=86400 --report-email ' | ||
+ | |||
+ | # DMARC Datenbank aufräumen, Datensätze die älter als 90 Tage sind werden gelöscht | ||
+ | / | ||
+ | --dbpasswd=$DBPASSWD --verbose --expire=90 | ||
+ | |||
+ | # Work-Verzeichnis wieder aufräumen | ||
+ | cd $WORKDIR | ||
+ | rm $WORKDIR*.dat -rf | ||
+ | </ | ||
+ | Anschließen setzen wir die Ausführungsrechte unseres neuen Scriptes. | ||
+ | # chmod +x / | ||
+ | |||
+ | Zu guter Letzt aktivieren wir dann noch einen Cronjob für die tägliche Ausführung. | ||
+ | # crontab -e | ||
+ | <code bash>... | ||
+ | |||
+ | # Django : 2014-03-20 | ||
+ | # einmal in der Nacht die DMARC-Statistikdaten abholen und die mySQL-Datenbank damit befüllen. | ||
+ | 33 3 * * * / | ||
+ | |||
+ | ... | ||
+ | </ | ||
+ | |||
+ | ==== Postfix ==== | ||
+ | In der Konfigurationsdatei **main.cf** unseres Postfix-Mailserver definieren wir uns nun eine eigene Variable, die wir dann in der Datei // | ||
+ | # vim / | ||
+ | <file bash / | ||
+ | |||
+ | ################################################################################ | ||
+ | ## MILTER | ||
+ | # Django : 2014-11-18 | ||
+ | # DMARC Test | ||
+ | spf_milter | ||
+ | opendkim_milter | ||
+ | opendmarc_milter = inet: | ||
+ | amavisd_milter | ||
+ | ... | ||
+ | </ | ||
+ | |||
+ | In der Konfigurationsdatei // | ||
+ | # vim / | ||
+ | |||
+ | < | ||
+ | |||
+ | smtp inet n | ||
+ | smtpd | ||
+ | -o smtpd_milters=${spf_milter}, | ||
+ | -o smtpd_sasl_auth_enable=no | ||
+ | dnsblog | ||
+ | tlsproxy | ||
+ | </ | ||
+ | |||
+ | ===== Programmstart ===== | ||
+ | Das Starten des Daemon erfolgt über folgenden Aufruf. | ||
+ | # systemctl start opendmarc | ||
+ | |||
+ | Den erfolgreichen Start bzw. den Status des **smf-spf**-Daemon können wir bei Bedarf mit folgendem Aufruf abfragen. | ||
+ | # systemctl status opendmarc | ||
+ | |||
+ | < | ||
+ | | ||
+ | | ||
+ | Main PID: 2370 (opendmarc) | ||
+ | | ||
+ | | ||
+ | |||
+ | Dec 17 20:58:56 vml000087.dmz.nausch.org systemd[1]: Starting opendmarc - DMARC email policy filter for MTAs.... | ||
+ | Dec 17 20:58:56 vml000087.dmz.nausch.org systemd[1]: Started opendmarc - DMARC email policy filter for MTAs.. | ||
+ | Dec 17 20:58:56 vml000087.dmz.nausch.org opendmarc[2370]: | ||
+ | Dec 17 20:58:56 vml000087.dmz.nausch.org opendmarc[2370]: | ||
+ | Dec 17 20:58:56 vml000087.dmz.nausch.org opendmarc[2370]: | ||
+ | </ | ||
+ | |||
+ | |||
+ | Im Maillog wird der Start des Daemon entsprechend dokumentiert. | ||
+ | # less / | ||
+ | |||
+ | Dec 17 22:45:08 vml000087 opendmarc[2912]: | ||
+ | Dec 17 22:45:08 vml000087 opendmarc[2912]: | ||
+ | Dec 17 22:45:08 vml000087 opendmarc[2912]: | ||
+ | |||
+ | Mit Hilfe von **netstat** können wir überprüfen, | ||
+ | # netstat -tulpen | ||
+ | |||
+ | < | ||
+ | Proto Recv-Q Send-Q Local Address | ||
+ | tcp 0 0 0.0.0.0: | ||
+ | tcp 0 0 127.0.0.1: | ||
+ | tcp 0 0 127.0.0.1: | ||
+ | tcp 0 0 127.0.0.1: | ||
+ | </ | ||
+ | |||
+ | Gleiches können wir natürlich auch mit dem Befehl **lsof** erreichen. | ||
+ | # lsof -i:8893 | ||
+ | |||
+ | | ||
+ | | ||
+ | |||
+ | Damit der Daemon automatisch beim Hochfahren des Servers gestartet wird, nutzen wir folgenden Aufruf. | ||
+ | # systemctl enable opendmarc.service | ||
+ | |||
+ | ln -s '/ | ||
+ | |||
+ | Wollen wir überprüfen ob der Dienst automatisch startet, verwenden wir folgenden Aufruf. | ||
+ | |||
+ | # systemctl is-enabled opendmarc.service | ||
+ | |||
+ | | ||
+ | |||
+ | Die Rückmeldung **enabled** zeigt an, dass der Dienst automatisch startet; ein **disabled** zeigt entsprechend an, dass der Dienst __nicht__ automatisch startet. | ||
+ | |||
+ | ===== Logging / Mailheader ===== | ||
+ | Im Maillog werden entsprechend unserer zuvor festgelegten Konfiguration, | ||
+ | Folgender Logeintrag zeigt einen erfolgreiche DMARC-Überprüfung. | ||
+ | Mar 23 22:46:01 vml000080 opendmarc[25914]: | ||
+ | |||
+ | Im Mailheader der Nachricht, wird dies auch entsprechend vermerkt. | ||
+ | DMARC-Filter: | ||
+ | Authentication-Results: | ||
+ | |||
+ | Hat der Domainbetreiber keinen DMARC-Eintrag im DNS hinterlegt, sieht die betreffende Zeile im Maillog entsprechend so aus. | ||
+ | Mar 19 00:22:36 vml000080 opendmarc[14508]: | ||
+ | |||
+ | Auch dies wird im Mailheader entsprechend vermerkt. | ||
+ | DMARC-Filter: | ||
+ | Authentication-Results: | ||
+ | |||
+ | <WRAP center round alert 35%> \\ | ||
+ | FIXME //... do geds weida!// | ||
+ | </ | ||