DKIM podpisuje pocztę wychodzącą z dowolnej domeny (z Postfix i Ubuntu)

40

Mam konfigurację DKIM na moim serwerze pocztowym (Postfix i Ubuntu), więc podpisuje wychodzące wiadomości e-mail. Skorzystałem z tych instrukcji: https://help.ubuntu.com/community/Postfix/DKIM

Potrzebuję go jednak do podpisywania wiadomości e-mail z dowolnej domeny (w adresie Od), a nie tylko mojej własnej. Buduję usługę biuletynu e-mail, a klienci będą wysyłać swoje wiadomości e-mail przez serwer.

Najpierw ustawiam „Domena *” w /etc/dkim-filter.conf. Dzięki temu nagłówki DKIM były dołączane do wszystkich wychodzących wiadomości e-mail, bez względu na domenę.

Jednak sprawdzenie weryfikacji kończy się niepowodzeniem w Gmailu, ponieważ sprawdza domenę pod adresem od, a nie moją domenę (i rekord dns). Czy ktoś wie jak to zrobić?

Brian Armstrong
źródło

Odpowiedzi:

41

Ok, udało mi się to rozgryźć na własną rękę, ale chciałem opublikować tutaj kroki dla potomności, ponieważ nie było na to żadnej dokumentacji (którą mogłem znaleźć) i było to praktycznie zgadnięcie i sprawdzenie.

Po ustawieniu „Domeny *” zgodnie z powyższym opisem, podpisuje się w następujący sposób:

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=clientdomain.com;
    s=main; t=1250005729;
    bh=twleuNpYDuUTZQ/ur9Y2wxCprI0RpF4+LlFYMG81xwE=;
    h=Date:From:To:Message-Id:Subject:Mime-Version:Content-Type;
    b=kohI7XnLlw/uG4XMJoloc4m9zC13g48+Av5w5z7CVE0u3NxsfEqwfDriapn7s7Upi
     31F3k8PDT+eF57gOu2riXaOi53bH3Fn/+j0xCgJf8QpRVfk397w4nUWP/y8tz4jfRx
     GhH21iYo05umP0XflHNglpyEX02bssscu2VzXwMc=

zwróć uwagę na „d = clientdomain.com”. Generował to na podstawie adresu od w wiadomości e-mail, gdzie adres od był czymś w rodzaju „[email protected]”. Oczywiście, jeśli sprawdził domenę klienta, a nie kopał, nie był tam rekord DNS TXT, a weryfikacja nie powiodła się.

W każdym razie dowiedziałem się w tym dokumencie, że możesz ustawić parametr KeyList. http://manpages.ubuntu.com/manpages/hardy/man5/dkim-filter.conf.5.html

Tak naprawdę nie opisywałem tego, co chciałem zrobić, ale pomyślałem, że się z tym bawię. Skomentowałem KeyFile i ustawiłem KeyList na „/etc/mail/dkim_domains.key”, który jest dowolną nazwą pliku, którą wymyśliłem. Następnie utworzyłem ten plik i umieściłem go w nim „*: feedmailpro.com: /etc/mail/dkim.key”. To mówi o każdej domenie klienta, podpisz ją moją domeną (feedmailpro.com) i użyj pliku dkim.key.

Zrestartowano DKIM i Postfix

sudo /etc/init.d/dkim-filter restart
sudo /etc/init.d/postfix restart

To jest klucz, który wygenerował, gdy wysłałem testowego e-maila.

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=feedmailpro.com;
    s=dkim.key; t=1250005729;
    bh=twleuNpYDuUTZQ/ur9Y2wxCprI0RpF4+LlFYMG81xwE=;
    h=Date:From:To:Message-Id:Subject:Mime-Version:Content-Type;
    b=kohI7XnLlw/uG4XMJoloc4m9zC13g48+Av5w5z7CVE0u3NxsfEqwfDriapn7s7Upi
     31F3k8PDT+eF57gOu2riXaOi53bH3Fn/+j0xCgJf8QpRVfk397w4nUWP/y8tz4jfRx
     GhH21iYo05umP0XflHNglpyEX02bssscu2VzXwMc=

Ulepszenie, widzisz, że d = teraz jest ustawiony na moją domenę (nawet jeśli adres z adresu e-mail nie był moją domeną). Jednak zmieniono s = na „dkim.key” zamiast selektora, który wybrałem w dkim-filter.conf. W oryginalnej instrukcji konfiguracji ustawiłem selektor na „mail”. To było dziwne, ale zauważyłem, że zmieniło to nazwę pliku mojego klucza, dkim.key.

Więc poszedłem i przemianowałem „/etc/mail/dkim.key” na „/ etc / mail / mail”. Zaktualizowałem także odwołanie do niego w „/etc/mail/dkim_domains.key”.

Uruchom ponownie dkim-filter i postfix ponownie tak samo jak powyżej, a teraz zaczął działać. Oto ostatni nagłówek, który poprawnie podpisuje się za pomocą prawego selektora (najwyraźniej na podstawie nazwy pliku klucza).

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=feedmailpro.com;
    s=mail; t=1250006218;
    bh=tBguOuDhBDlhv0m4KF66LG10V/8ijLcAKZ4JbjpLXFM=;
    h=Date:From:To:Message-Id:Subject:Mime-Version:Content-Type;
    b=c9eqvd+CY86BJDUItWVVRvI3nibfEDORZbye+sD1PVltrcSBOiLZAxF3Y/4mP6vRX
     MUUNCC004oIH1u7FYafgF32lpuioMP1cd7bi6x3AZ5zH4BYETNBnnz4AhAPBtqlIh/
     FFMz8jkhhLhcM2hDpwJkuKjAe3LzfNVDP8kD11ZI=

Teraz s = mail ma rację, a d = feedmailpro.com ma rację. To działa!

Ogólnie rzecz biorąc, było to o wiele trudniejsze niż się spodziewałem i wydawało się, że nie ma żadnej dokumentacji, jak to zrobić (podpisywanie dla wszystkich domen wychodzących), ale myślę, że jest to oprogramowanie open source, więc nie mogę narzekać.

Jeszcze jedna uwaga, aby sprawdzić, czy rekord DNS TXT został poprawnie skonfigurowany, możesz wykonać polecenie takie jak dla swojej domeny

dig mail._domainkey.feedmailpro.com TXT

Może być konieczne zainstalowanie dig (sudo apt-get install dig). Jeśli używasz menedżera Slicehost, aby dodać wpis DNS, wpisz rekord TXT w ten sposób.

Type: TXT
Name: mail._domainkey
Data: k=rsa; t=s; p=M5GfMA0...YOUR LONG KEY...fIDAQAB
TTL seconds: 86400

Naprawdę nie rozumiem, dlaczego nazwa jest ustawiona na „mail._domainkey” bez kropki na końcu lub bez mojej domeny, na przykład „mail._domainkey.feedmailpro.com”. Ale cokolwiek, wydaje się, że działa, więc jestem szczęśliwy.

Jeśli próbujesz to powielić, oto instrukcje, które zacząłem: https://help.ubuntu.com/community/Postfix/DKIM

Brian Armstrong
źródło
2
Dzięki za umieszczenie tego tutaj, pomaga innym (takim jak ja) wyjść :)
thomasrutter
Witaj Thomas!
Brian Armstrong
Wow, to bardzo pomogło. Waliłem głową z powodu „s = dkim.key”, dopóki nie natknąłem się na twój post!
3molo
Jedną rzeczą, o której nie wspomina przewodnik na ubuntu.com, jest to, że gdy już działa, zmień t = y na t = n w rekordzie TXT, aby stwierdzić, że nie jest to test.
3molo
Istnieje kilka dobrych zasobów do korzystania z SigningTable itp. Na przykład blog.tjitjing.com/index.php/2012/03/... (znakomity), a nawet readme opendkim
rfay
15

Zainspirowany odpowiedzią Briana Armstronga na dkim-filter, oto jak to zrobiłem dla OpenDKIM .

/etc/opendkim.conf

Syslog          yes
UMask           002
KeyTable        /etc/mail/dkim_key_table
SigningTable    refile:/etc/mail/dkim_signing_table

Zauważ, że SigningTable ma refile : w definicji określa, że ​​plik zawiera wyrażenia regularne; w naszym przypadku * symbol wieloznaczny.

/ etc / mail / dkim_key_table

keyname  example.com:selector:/etc/mail/selector.key

W tym przypadku nazwa klucza służy do dopasowania klucza między tym plikiem a plikiem dkim_signing_table. W moim prawdziwym pliku nazwałem to tak samo jak mój selektor.

example.com i selektor należy wymienić których domena i selektor, że chcesz być wykorzystywane w podpisie za d = a = s odpowiednio.

/ etc / mail / dkim_signing_table

*   keyname

Ten plik mapuje prosty adres znaleziony w nagłówku From: na klucz w tabeli dkim_key_table. W tym przypadku chcemy, aby wszystkie wiadomości e-mail wysyłane za pośrednictwem tego serwera były podpisywane tym samym kluczem, dlatego używana jest * symbol wieloznaczny.

Adam J. Forster
źródło
dla tych, którzy dostaną „brak dopasowania tabeli podpisów w OpenDKIM” serverfault.com/q/569823/115907
kommradHomer
Jeśli ktoś dotrze do tej odpowiedzi (świetna odpowiedź, btw! Nauczył mnie tego, czego potrzebuję) i chce wysłać z dwóch różnych domen z różnymi kluczami, można to zrobić w następujący sposób: plik KeyTable: "tagone._domainkey.firstdomain.com firstdomain .com: tagone: /etc/opendkim/keys/firstdomain.com/tagone tagtwo._domainkey.seconddomain.com seconddomain.com:tagtwo:/etc/opendkim/keys/seconddomain.com/tagtwo "SigningTable:" * @ firstdomain. com tagone._domainkey.firstdomain.com *@seconddomain.com tagtwo._domainkey.seconddomain.com "Każdy plik ma 2 linie (tutaj komentarze nie zapisują podziałów linii)
Sean Colombo
lub: SigningTable csl: * = keyname KeyTable csl: keyname = przyklad.com: selektor: /etc/mail/selector.key
danblack
3

Stary wątek, ale może ktoś, kto to znajdzie, może wiedzieć, że wersja 2.x opendkim działa z KeyTable zamiast KeyList.

Możesz przekonwertować plik KeyList za pomocą narzędzia opendkim-convert-keylist ( http://manpages.ubuntu.com/manpages/lucid/man8/opendkim-convert-keylist.8.html )

Możesz przeczytać więcej o implementacji KeyTable na stronie man opendkim: ( http://www.opendkim.org/opendkim.conf.5.html )

użytkownik203421
źródło
Podsumuj połączony artykuł, podając odpowiednie segmenty kodu lub bloki konfiguracji. Witryny mogą się zmieniać w przyszłości lub nie ładować się z wielu powodów.
89c3b1b8-b1ae-11e6-b842-48d705
2

Naprawdę nie rozumiem, dlaczego nazwa jest ustawiona na „mail._domainkey” bez kropki

Dokumentacja dla filtru DKIM jest zwykle instalowana w trzech uniksowych formatach. Tylko Google to wie :-) Miałem też problem.

man dkim-filter.conf
man dkim-filter
man dkim-genkey

man dkim-stats
man dkim-testkey
man dkim-testssp

Próbowałem na Debianie. Jeśli tak naprawdę nie ma go w dystrybucji, możesz pobrać plik źródłowy i łatwo przeczytać dokument.

man dkim-milter-2.8.3/dkim-filter/dkim-filter.conf.5

itp.

-

Naprawdę nie rozumiem, dlaczego nazwa jest ustawiona na „mail._domainkey” bez kropki

Abyś mógł używać dokładnie tego samego w obu rekordach DNS różnych domen.

hynekcer
źródło