Wydrukuj dokumentację  Pokaż jako slajdy

Konfiguracja OpenDMARC

DMARC powstał w celu wyeliminowania fałszywych wiadomości (podszywających się pod jakąś domenę). DMARC ma na celu uproszczenie konfiguracji, wykluczenie false-positive, itd. Więcej szczegółów można znaleźć pod adresem https://dmarc.org/overview/.

Instalacja

Tak jak w przypadrku OpenDKIM konieczne jest doinstalowanie libmilter. Niemniej ponieważ DMARC jest kolejnym milterem w stosunku do OpenDKIM, zatem ten krok można pominąć.

Sama instalacja opendmarc przebiega jak inne paczki w systemie:

# z wykorzystaniem portupgrade
#
portupgrade -N mail/opendmarc lang/p5-Switch databases/p5-DBI databases/p5-DBD-mysql www/p5-HTTP-Message

# albo za pomocą repozytorium pkg.bsdserwis.com
#
pkg install mail/opendmarc lang/p5-Switch databases/p5-DBI databases/p5-DBD-mysql www/p5-HTTP-Message

/!\ Pakiety p5-Switch, databases/p5-DBI oraz pozostałe są potrzebne przez narzędzia opendmarc-import, opendmarc-reports oraz opendmarc-expire

Plik konfiguracyjny

Przygotawanie pliku na podstawie pliku instalacyjnego:

cd /usr/local/etc/
cp mail/opendmarc.conf.sample opendmarc.conf

Albo korzystając z repozytorium konfiguracji przegrać przygotowany plik:

# -----------------------------------------------------------------------
#
# Je/zeli nazwa serwera r/o/zni si/e od nazwy podanej w postfix, to lepiej
# wpisa/c nazw/e prezentowan/a przez postfix (np. mx1.bsdserwis.com)
#
# W trakcie instalacji skryptu trzeba poprawi/c to lokalnych ustawie/n
#
# -----------------------------------------------------------------------
#
AuthservID HOSTNAME

# --- pozosta/le ustawienia ---------------------------------------------
#
AuthservIDWithJobID false
AutoRestart true
Background true
DNSTimeout 5
EnableCoreDumps false
FailureReports false
HistoryFile /var/db/opendmarc/opendmarc.dat
IgnoreAuthenticatedClients true
IgnoreHosts /usr/local/etc/opendmarc/ignore.hosts
MilterDebug 0

# lista pobierana z sieci internet, zatem powinna trafi/c do katalogu z
# bazami OpenDMARC
#
PublicSuffixList /var/db/opendmarc/effective_tld_names.dat
RecordAllMessages false
RejectFailures false
ReportCommand /usr/local/sbin/sendmail -t
RequiredHeaders false
SoftwareHeader false
SPFIgnoreResults false
SPFSelfValidate false
Syslog true
SyslogFacility mail
TrustedAuthservIDs HOSTNAME
UMask 027
UserID mailnull:mailnull

Dodanie do rc.conf

opendmarc_enable="YES"     # => DaemonTools nie jest potrzebne
opendmarc_runas="mailnull:mailnull"
opendmarc_pidfile="/var/run/opendmarc/pid"
opendmarc_socketspec="inet:8893@localhost"
opendmarc_cfgfile="/usr/local/etc/mail/opendmarc.conf"

Przygotowanie katalogów oraz plików przed pierwszym uruchomieniem

mkdir -p /var/run/opendmarc /var/db/opendmarc /usr/local/etc/opendmarc
chown mailnull:mailnull /var/run/opendmarc /var/db/opendmarc
touch /usr/local/etc/opendmarc/ignore.hosts
echo 127.0.0.1 >> /usr/local/etc/opendmarc/ignore.hosts

Pobranie Public Suffix List

wget --no-check-certificate -q -N -P /var/db/opendmarc https://publicsuffix.org/list/effective_tld_names.dat

Dodanie skryptu do periodic.conf

### /etc/periodic.conf
###

# --- aktualizacja Public Suffix List dla OpenDMARC --------------
#
weekly_opendmarc_update_public_suffix_list_enable="YES"
weekly_opendmarc_update_public_suffix_list_verbose="NO"

Uruchomienie usługi poprzez deamontools

(!) (To już było na stronie głównej). Chociaż wszystko wskazuje na to, że nie jest to potrzebne: opendmarc działa bardzo dobrze samodzielnie.

Import opendmarc.dat do bazy danych

Aby codzienne zadanie sprawdzania raportów mogło działać, potrzebna jest baza danych mySQL. Po utworzeniu (na lokalnym lub zdalnym serwerze) należy wykonać następujące kroki:

cat /usr/local/share/doc/opendmarc/schema.mysql | mysql -h localhost -u <user> -p opendmarc

Albo dla innej nazwy bazy danych:

cat /usr/local/share/doc/opendmarc/schema.mysql | sed -E '/^(CREATE DATABASE|USE)/d' | mysql -h <db_host> -u <user> -p <db_name>

Skrypt dla periodic

Korzystając z repozytorium konfiguracji należy przegrać skrypt 920.dmarc-reports, który będzie rozsyłał raporty dla innych domen (obcych). W celu uruchomienia skryptu należy ustawić następujące zmienne w /etc/periodic.conf:

# --- codzienne wysy/lanie raport/ow OpenDMARC -------------------
#
daily_dmarc_reports_enable="YES"
daily_dmarc_reports_verbose="NO"
daily_dmarc_reports_dbhost="localhost"
daily_dmarc_reports_dbname="opendmarc"
daily_dmarc_reports_smtp_server="localhost.bsdserwis.com"
daily_dmarc_reports_report_email="dmarc@wtp3.org"
daily_dmarc_reports_report_org="wtp3.org"

oraz dane "sensytywne" w /etc/periodic.conf.local:

daily_dmarc_reports_dbuser="<user>"
daily_dmarc_reports_dbpass="<password>"

Przed uruchomieniem warto "dostroić" zawartość pliku /usr/local/etc/opendmarc/ignore.hosts, aby nie wysyłać raportów dla np. loopback, czy też domen "niepożądanych".

Konfiguracja w DNS

Konfiguracja DNS nie jest trudna (wręcz trywialna). Najlepiej skorzystać z pomocy Google'a, gdzie wszystko podane jest w formie skrótowej.

Dodanie wpisów dot. przekierowania raportów

Zgodnie z dokumentacją DMARC należy wykonać wpisy w DNS, aby móc przyjmować (czy bardziej wysyłać raporty) do innej domeny, aniżeli domena kontrolowana przez DMARC. Postać powienien mieć wpis:

codenix.pro._report._dmarc.bsdserwis.com  IN TXT "v1=DMARC"

Na powyższym przykładzie w domenie codenix.pro można wpisać rua=mailto:dmarc@bsdserwis (dot) com.

Konfiguracja postfixa

main.cf

## main.cf
##
## Dopisanie nowego "socketu" do listy wszystkich smtpd_milters
##
smtpd_milters = {milteropendkim.sock}, inet:127.0.0.1:8893

sender-access.px

Aktualny szablon konfiguracji serwera postfix powoduje, że raporty nie są wysyłane via localhost. Dlatego też w bazie /usr/local/etc/mail/local/sender-access.px konieczne jest dodanie wpisów:

# należy dostosować w lokalnej konfiguracji
#
dmarc@bsdserwis.com          OK

Źródła w sieci internet

Parsowanie raportów

Raporty DMARC są w postaci XML. Zatem trudno czytelne. Można jednak za pomocą dodania nieskomplikowanego pliku xslt parsować raporty do postaci bardziej czytelnej.

Zawartość parsera

(!) Patrz załączony plik.

Dodanie pliku xslt do raportu

Po rozpakowaniu raportu do katalogu widzianego przez serwer www najlepiej wykonać polecenie:

find ./ -mindepth 1 -type f -mtime -+5h | xargs -n1 perl -pi -e 'next unless /^<feed/; print "<?xml-stylesheet type=\"text/xsl\" href=\"dmarc.xslt\"?>\n";'

Poprawa daty raportów na czytelną

Daty (timestamps) są zapisane w postaci "epoch seconds". Nie jest to do końca czytelne. Zatem raporty można zmodyfikować poprzez następującego jednolinijkowca2:

find ./ -mindepth 1 -type f -mtime -+5h | xargs -n1 perl -pi -e  'next unless /(begin|end)/; s/([0-9]+)/localtime($1)/eo;'

Analiza raportu zbiorczego

Raport zbiorczy pozwala na dokładną analizę, czy wszystkie warunki są spełnione odnośnie do poprawności danego nadawcy. Wszelkie wątpliwości może rozwiać odpowiedni rozdział RFC opisującego protokół DMARC.

Niby dobrze, ale nie do końca

Na podstawie poniższego przykładu:

Relying IP message count reason and disposition From header (opt. envelope) SPF DKIM
209.85.215.69 1 bsdserwis.com netlog.com

Polityka nie została spełniona, ponieważ:

  1. Nadawca nie jest wpisany do SPF
  2. Brak jest DKIM
  3. MAIL FROM: jest z @netlog.com (zatem SPF w takim raporcie świeci na zielono), ale From: było już @bsdserwis.com. Czyli brak spójności


{i}  (c) 2004 - 2026 BSD Serwis Krzysztof Stryjek. W przypadku błędów, poprawek proszę kontaktować się z administratorem wiki.


  1. Otwiera się w nowym oknie/nowej karcie przeglądarki. (1 2 3 4)

  2. Chociaż dokładna analiza pliku xsl wskazuje, że data powinna być poprawiona na czytelną. Tak samo jako powinno być możliwość sortowania po kolumnach. Szablon XSLT odwołuje się do wersji XSLT 1.0, w której była odpowiednia "biblioteka" odpowiedzialna za zamianę daty na formę czytelną. W XSLT 2.0 jest wsparcie "natywne". Reasumując: trzeba napisać własnego XSLa, który ładnie zaprezentuje raporty. (5)

MilterOpenDmarc (ostatnio edytowane 2016-03-29 10:37:19 przez wtps0n)