Walka ze spamem cz.3 – Postfix DMARC

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

mkdir /etc/opendmarc/

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:

#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

2 myśli na “Walka ze spamem cz.3 – Postfix DMARC”

  1. Witam,

    dzięki za wyczerpującą konfigurację. Jest jednak jeden problem:

    warning: connect to Milter service inet:localhost:54321: Connection refused

    Jest na to jakieś rozwiązanie ?

    1. z jakiej dystrybucji korzystasz ?
      co mówi o procesie
      `/etc/init.d/opendmarc status`
      dodatkowo upewnij się, że zmodyfikowałeś listę serwerów:
      `TrustedAuthservIDs mail.example.com,mail2.example.com` tu powinien być wpisany twoj serwer poczty

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

*