12.19
In /dev/random , Arty , Internet , Linux | Tags: /dev/random, DKIM, Postfix
Niedawno w sprezentuj.pl kombinowaliśmy jak tu zrobić żeby nasze maile nie były uznawane jako spam przez jak najwięcej serwerów pocztowych i z grzebania w informacjach w helpach Yahoo wynika że warto mieć system który “autentykuje” ze mail jest wysyłany rzeczywiście z podanej domeny. Enter DKIM.
Co to jest DKIM ?
Szczegóły ofc w wikipedii ;] ale system polega na tym że nadawca (niekoniecznie ale zwykle) podpisuje maila swoim kluczem prywatnym a odbiorca pobiera klucz publiczny z DNS (rekord TXT prefix._domainkey), rozkodowuje i sprawdza czy wszystko jest ok. Ponieważ z założenia ktoś kto próbuje się podszyć musiałby mieć odpowiedni klucz prywatny do klucza publicznego, to można uznać że prawidłowy podpis oznacza że to rzeczywiście właściciel domeny wysłał tego maila(w wielkim skrócie). A teraz implementacja ;]
Generowanie kluczy i dkim-filter
Zakładam tutaj że to będzie “typowy”" config tylko do wysyłania maili (serwer aplikacji + postfix jako mailer maili generowanych przez aplikację i serwer), zaczynamy od instalacji czego potrzeba:
aptitude install dkim-filter
Teraz trzeba wygenerować public i private key. Przyjmę że prefix(tzw. selektor) to 2010, długośc klucza to 2048 a domena to devrandom.pl
devrandom:~/dkim# openssl genrsa -out 2010.devrandom.prv 2048
Generating RSA private key, 2048 bit long modulus
.......................+++
.............+++
e is 65537 (0x10001)
devrandom:~/dkim# openssl rsa -in 2010.devrandom.prv -pubout -out 2010.devrandom.pub -outform PEM > /dev/null
writing RSA key
Mamy już nasze klucze, teraz pora na konfigurację DKIM, edytujemy /etc/dkim-filter.conf i ustawiamy:
Domain devrandom.pl
KeyFile /etc/postfix/dkim/2010.devrandom.prv
Selector 2010
kopiujemy klucz do wskazanego katalogu. Ew. błędy polecą do sysloga.
Połączenie z postfixem
Żeby teraz Postfix “widział” naszego demonka należy mu dodać linijkę w /etc/postfix/main.cf:
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891
i dodać (ew. zakomentowac inne) w /etc/default/dkim-mfilter
SOCKET="inet:8891@localhost"
Why ? postfix się defaultowo chrootuje i przez tcp/ip najłatwiej ustawić (w ubu jest tak domyślnie).
Robimy restart postfixa i dkim-filter i ślemy testowego maila z taką samą domeną jak w configu dkim-filter (ważne! podpisuje tylko z tej domeny!), następnie patrzymy w treść maila i jeżeli zobaczymy “DKIM-Signature: v=1; a=rsa-sha256;…” oznacza to że podpisywanie działa poprawnie, teraz…
DNS
Tu uprzedzenie z góry, Twój dostawca DNS musi umożliwać dodawanie rekordów TXT z “_” w nazwie, a nie wszyscy (np. home.pl, wstyd i żenada -_-) to umożliwiają. Rekord DNS (BIND-style) powinien wyglądać tak:
2010._domainkey IN TXT "v=DKIM1; g=*; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0GOwR4ZBu9VkuYRHF6MgZm34NZEKrbPjkirIA992mXIs75YwlKBNn59goUlY7eVRXBH23FhrwPqVv8tte7N/pSsGUlj7F+RY/FW91/iYICLdYKW8H2lBydrKkZhOnDtQaKO2cAiaSvbkcYDDKOBd3AHSorRTAFEHc2N3IChSsSjat8PuNOXJ1XhUkzeMaUdwjM9Ti8fcxDjTqilhigOiL1KKcLS7uLGU24ov6av3iMtXSp0PtH2S/pFG/NNRgM7GTCduC9M45EevYNIQrE8UDX0aJmXpmotnirGVHxj7qkaUHgTwhTkVqhcXcU7GpJS5WVVDGNQ4lpBXPrhXQ4vrfQIDAQAB"
gdzie 2010 to wybrany prefix(nie musi być rok!) a p= to klucz publiczny pisany w jednej linijce
Finish
Rezultat (gdy mail przechodził przez google):
Authentication-Results: mx.google.com; spf=pass (google.com: best guess
record for domain of test@devrandom.pl designates 109.74.192.97 as
permitted sender) smtp.mail=test@devrandom.pl; dkim=pass
header.i=@devrandom.pl
czasami trzeba będzie trochę poczekać na DNS (chociaż negatywne odpowiedzi nie powinny być cachowane… ale różnie się zdarza). I to tyle, enjoy ;]
Edit: maly fix, dodano “non_smtpd_milters” dla maili wysylanych lokalnie


2 ResponsesLeave a comment ?
Usługi DNS-owe w Home.pl są generalnie żenujące. Przećwicz taki scenariusz:
a) strefa w Home.pl
b) przenieś strefę na inne NS-y :)
Efekt:
a) skrócić TTL-i się nie da,
b) zmiana NS-ów chwilę się będzie propagować,
c) w tym czasie Home.pl podmieni Twoją strefę na strefę domyślną, która np. ruch www kieruje na ich domyślny webserwer (i masz info, że strona będzie na serwerach Home.pl ;))
d) zanim prawidłowe wpisy się rozpropagują, ludzie będą dostawać głupawe info, że strony nie ma, ale kiedyś może będzie,
e) co więcej, taka domyślna strefa zostaje na DNS-ach Home.pl na dłużej.
I nie da się tego obejść, a przynajmniej rok temu tak twierdził helpdesk Home.pl.
Tzn. wypieprzy wszystkie rekordy zamieniając je na domyślne od razu po wskazaniu “własnych” NSów ? Omg ;]. Gorzej chyba widziałem tylko w nazwa.pl, tam jak ma się tylko DNSy to jedyne co można ustawić to “przekieruj wszytko na jeden serwer” i zewnętrze DNSy