Domain-based Message Authentication, Reporting and Conformance (DMARC) is an email validation system designed to detect and prevent email spoofing. It provides a mechanism which allows a receiving organization to check that incoming mail from a domain is authorized by that domain’s administrators and that the email (including attachments) has not been modified during transport – Wikipedia
Wpis ten jest kontynuacją postów dotyczących walki ze spamem, poprzednio skonfigurowaliśmy SPF oraz DKIM, korzystaliśmy z serwera postfix-a, którzy uwcześnie skonfigurowaliśmy.
Zainstalujmy paczkę, która będzie niezbędna:
|
#debian/ubuntu apt-get install opendmarc |
Skonfigurujmy nowo zainstalowany soft:
|
#vim /etc/opendmarc.conf AuthservID mail.example.com PidFile /var/run/opendmarc.pid #Debian default RejectFailures false Syslog true TrustedAuthservIDs mail.example.com,mail2.example.com UMask 0002 UserID opendmarc:opendmarc IgnoreHosts /etc/opendmarc/ignore.hosts HistoryFile /var/run/opendmarc/opendmarc.dat #w celu debugowania można dodać poniższą linię ale wyłączymy ją potem SoftwareHeader true |
To nie wszystko
Dodajmy hosty, których nie skanujemy – nas ?!
|
#vim /etc/opendmarc/ignore.hosts localhost adress_ip_naszego_serwera |
Zakładając, że korzystaliście z poprzednich wpisów na porcie 12301 posiadamyt DKIM, więc śmiało możemy dla DMARC wykorzystać port 54321:
|
#vim /etc/default/opendmarc ... SOCKET="inet:54321@localhost" ... |
Możemy uruchomić opendmarc, przy okazji sprawdzają czy nie mamy typo 🙂 lub czy coś nie siedzi na wybranym przez nas porcie:
|
/etc/init.d/opendmarc start |
Powiadommy postfixa, że chcemy korzystać z kolejnego rozwiązania dla wyłapywania spamu:
|
#vim /etc/postfix/main.cf ... smtpd_milters=inet:localhost:12345,inet:localhost:54321 non_smtpd_milters=inet:localhost:12345,inet:localhost:54321 ... |
Pamiętajmy, że pierwsza pozycja obu wpisów dotyczy DKIM, a druga naszego DMARC-a 🙂
Zrestartujmy postfixa, niech biedak już nie czeka na nowy config 😉
|
/etc/init.d/postfix reload |
Jako, że DMARC korzysta z DKIM i SPF, musimy mieć odpowiedni wpis DNS, w internecie jest pełno „wizardów”, które wygenerują wam wpis ja polecam takowy:
|
_dmarc.example.com. TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc@example.com; ruf=mailto:dmarc@example.com; fo=0; adkim=r; aspf=r; pct=100; rf=afrf; ri=86400" |
Teoretycznie można by tutaj zakończyć, jednak pełna implementacja DMARC wymaga generowania i wysyłania raportów – o czym administratorzy zapominają.
|
#vim /usr/share/doc/opendmarc/schema.mysql ... CREATE USER 'opendmarc'@'localhost' IDENTIFIED BY 'changeme'; GRANT ALL ON opendmarc.* to 'opendmarc'@'localhost'; ... |
Wpis ten widnieje w pliku ale jest zakomentowany, dzięki niemu utworzony zostanie użytkownik opendmarc, jego hasło oraz baza 🙂
Wczytajmy schemat:
|
mysql -u root -p < schema.mysql |
Utwórzmy skrypt do generowania raportów:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
#vim /etc/opendmarc/report_script #!/bin/bash DB_SERVER='database.example.com' DB_USER='opendmarc' DB_PASS='password DB_NAME='opendmarc' WORK_DIR='/var/run/opendmarc' REPORT_EMAIL='dmarc@example.com' REPORT_ORG=example.com' mv ${WORK_DIR}/opendmarc.dat ${WORK_DIR}/opendmarc_import.dat -f cat /dev/null > ${WORK_DIR}/opendmarc.dat /usr/sbin/opendmarc-import --dbhost=${DB_SERVER} --dbuser=${DB_USER} --dbpasswd=${DB_PASS} --dbname=${DB_NAME} --verbose < ${WORK_DIR}/opendmarc_import.dat /usr/sbin/opendmarc-reports --dbhost=${DB_SERVER} --dbuser=${DB_USER} --dbpasswd=${DB_PASS} --dbname=${DB_NAME} --verbose --interval=86400 --report-email $REPORT_EMAIL --report-org $REPORT_ORG /usr/sbin/opendmarc-expire --dbhost=${DB_SERVER} --dbuser=${DB_USER} --dbpasswd=${DB_PASS} --dbname=${DB_NAME} --verbose |
Sam skrypt na niewiele się zda jeżeli nie bedzie wykonywał się w harmonogramie:
|
chmod +x /etc/opendmarc/report_script #przetestujmy skrypt zanim dodamy go do crona su -c "/etc/opendmarc/report_script" -s /bin/bash opendmarc #vim /etc/crontab 1 0 * * * opendmarc /etc/opendmarc/report_script |
Warto było by przeglądać maile z raportami jakie wysyłamy do innych administratorów korzystających z DMARC-a, zrobimy to poprzez mały wpis do postfixa:
|
#vim /etc/postfix/main.cf ... sender_bcc_maps = hash:/etc/postfix/bcc_map ... #vim /etc/postfix/bcc_map dmarc@example.com mailboxforbcc@example.com postmap /etc/postfix/bcc_map |
Jeszcze tylko restart postfix-a, w celu wczytania nowego configa:
|
/etc/init.d/postfix restart |
W celu przetestowania naszego nowego narzędzia możemy wysłać na inną skrzynkę maila testowego (mail musi być na zewnątrz naszego serwera, ale także musi obsługiwać DMARC np. gmail).
W nagłówku powinniśmy widzieć wpis od DMARCu. Jeżeli już skończymy testy pamiętajmy o usunięciu wpisu z config-a, który był dodany w celu testu:
|
#vim /etc/opendmarc.conf #SoftwareHeader true |
Szybki restart:
|
/etc/init.d/opendmarc restart |
W ten sposób ludzie otrzymujący maile z domeny, która obsługujesz powinni mieć pewność, że maile są legalne 🙂
Pozostałe wpisy dotyczące tego cyklu:
Posftix i Dovecot – Idealny duet tworzący serwer poczty
Walka ze spamem cz.1 – Postfix SPF
Walka ze spamem cz.2 – Postfix DKIM
Walka ze spamem cz.4 – Postfix SpamAssassin
Walka ze spamem cz.5 – Dovecot Sieve

