openDKIM i Postfix na Ubuntu Server 12.04LTS
Spróbuję wrócić i sformatować to lepiej. Ale ponieważ pojawiła się prośba o opublikowanie mojej odpowiedzi, chciałem ją teraz opublikować, zamiast czekać, aż będę miał czas na jej prawidłowe sformatowanie. Z powodu braku czasu całą swoją odpowiedź zawarłem w cytat blokowy. Mam nadzieję, że to rozwiązanie będzie pomocne.
Oto moje referencje:
a Wikipedia ma dobry wpis na ten temat
Co najmniej będziesz potrzebować:
- Zrootuj dostęp do swojego serwera pocztowego
- Dostęp do aktualizacji rekordów dns dla Twojej domeny
Zainstaluj opendkim z repozytoriów:
# sudo apt-get install opendkim opendkim-tools
Musisz zdecydować, jakiego „selektora” chcesz użyć. Selektor to w zasadzie słowo opisujące klawisz, którego chcesz użyć. Tutaj użyję selektora 201205, ponieważ klucz stał się ważny w maju 2012 r. (Spryt, co?). Podaję dwa przykłady różnorodności, które, mam nadzieję, dodadzą przejrzystości. Musisz tylko wygenerować JEDEN klucz. Podaję jednak oba przykłady, abyś mógł je porównać.
- 201205 (1. klucz)
- my_selector (drugi klawisz)
Moja domena będzie example.com
, ale w drugim przykładzie użyję poddomeny:
- przyklad.com (1. klucz)
- mail.example.com (drugi klucz)
Postanowiłem pracować w następującym katalogu:
# mkdir /etc/opendkim/
# cd /etc/opendkim
Wygeneruj klucze w bieżącym katalogu, używając wybranego selektora i domeny.
# opendkim-genkey -s 201205 -d example.com
Być może musisz zmienić właściciela. Zobacz szczegóły w moim przykładzie dla drugiego klucza poniżej, aby dowiedzieć się, jaka powinna być własność i uprawnienia.
Najpierw sprawdź, czy istnieje opendkim
użytkownik (identyfikatory użytkownika / grupy mogą być inne):
# grep opendkim /etc/passwd
opendkim:x:108:117::/var/run/opendkim:/bin/false
I prawdopodobnie musisz to zrobić:
# chmod 700 /var/run/opendkim
UWAGA: Następne dwa polecenia NIE są potrzebne w systemie Ubuntu 12.04. Ale jeśli powyższe polecenie nie pokazało, że użytkownik opendkim został poprawnie skonfigurowany, zrób to podobnie do tego:
# useradd -r -g opendkim -G mail -s /sbin/nologin -d /var/run/opendkim -c "OpenDKIM" opendkim
# chown opendkim:opendkim 201205.private
# cat 201205.private
-----BEGIN RSA PRIVATE KEY-----
ABCCXQ...[long string]...SdQaZw9
-----END RSA PRIVATE KEY-----
Teraz sprawdź klucz publiczny i zauważ, że jest błąd (w openDKIM 2.5.2 na Ubuntu 12.04)! Gdzie zawiera, ;=rsa;
powinien zawierać ;k=rsa;
. k
Brakuje. Proszę wstawić
# cat 201205.txt
201205._domainkey IN TXT "v=DKIM1;=rsa; p=WIGfM..[snip]..QIDIAB" ; ----- DKIM 201205 for example.com
Po naprawieniu będzie wyglądać następująco:
201205._domainkey IN TXT "v=DKIM1;k=rsa; p=WIGfM..[snip]..QIDIAB" ; ----- DKIM 201205 for example.com
Co więcej, prawdopodobnie musisz uciec przed średnikami w ten sposób. Jeśli nie chcesz końcowego komentarza, po prostu go usuń. Należy również pamiętać, że należy dodać flagę t = y, aby wskazać serwerom odbierającym, że testujesz DKIM, ale jeszcze go nie aktywnie używasz. Pozostaje ci realny rekord zasobu:
201205._domainkey IN TXT "v=DKIM1\;k=rsa\;t=y\;p=WIGfM..[snip]..QIDIAB"
Musisz opublikować treść powyższego klucza publicznego na swoim autorytatywnym serwerze DNS. Polecam użycie rekordu TXT. Wydaje się, że jest trochę kontrowersji, czy użyć rekordu SPF, czy obu typów. Po krótkiej lekturze zdecydowałem się pozostać przy typie rekordu TXT, chociaż nie sądzę, żeby to było ostatnie słowo na ten temat.
Powinieneś użyć krótkiego czasu wygaśnięcia (TTL), abyś mógł zmienić klucz bez czekania, aż rozpowszechni się przez DNS. Użyłem 180 sekund.
Drugi przykład generowania pary kluczy był dla mnie nieco trudniejszy. Opiszę co zrobiłem. Pierwszym elementem jest to, że użyłem wartości domeny „przyklad.com”, nawet jeśli klucz zostanie użyty dla „mail.example.com”. Doszedłem do tego metodą prób i błędów. Działa, podczas gdy korzystanie z „mail.example.com” nie działało. Niestety nie znam przyczyn tego. To naprawdę jedyna różnica, na którą się natknąłem, ale było to wystarczająco kłopotliwe, że czułem, że powinienem udokumentować swoje doświadczenia z używaniem subdomen. Żaden inny samouczek poziomu początkowego, który znalazłem, tego nie zrobił. Wygeneruj drugi klucz:
opendkim-genkey -s my_selector -d example.com
sprawdź własność i uprawnienia klucza prywatnego, jak wyżej. Oto jak powinny wyglądać:
# ls -la /etc/opendkim
-rw------- 1 opendkim opendkim 891 May 10 07:44 my_selector.private
Po opublikowaniu rekordu DNS sprawdź go za pomocą dig
. Powinien zwrócić dokładnie to, co wpisałeś w rekordzie zasobów (RR).
$ dig 201205._domainkey.example.com txt +short
"v=DKIM1\;k=rsa\;t=y\;p=WIGfM..[snip]..QIDIAB"
Teraz przetestuj klucz. Poniższe polecenia zakładają, że jesteś w katalogu, w którym znajduje się klucz (/ etc / opendkim dla mnie).
# opendkim-testkey -d example.com -s 201205 -k 201205.private -vvv
opendkim-testkey: key loaded from /etc/opendkim/201205.private
opendkim-testkey: checking key '201205._domainkey.example.com'
opendkim-testkey: key not secure
opendkim-testkey: key OK
Te wyniki są oczekiwane. „Klucz niezabezpieczony” nie oznacza błędu. Jest to oczekiwana konsekwencja nieużywania DNSSSEC. DNSSEC nadchodzi, ale według mojej lektury nie jest jeszcze gotowy na najwyższy czas.
Przykład z drugim kluczem:
# opendkim-testkey -d example.com -s my_selector -k /etc/opendkim/my_selector.private -vvvv
opendkim-testkey: key loaded from /etc/opendkim/my_selector.private
opendkim-testkey: checking key 'my_selector._domainkey.example.com'
opendkim-testkey: key not secure
opendkim-testkey: key OK
Pamiętaj, że opendkim zgłasza, że klucz nie jest bezpieczny. Odnosi się to do faktu, że DNSSEC nie jest zaimplementowany na moim serwerze DNS i teoretycznie ktoś może przechwycić wyszukiwanie DNS i zastąpić go własnym kluczem.
Edytuj plik konfiguracyjny OpenDKIM:
# nano /etc/opendkim.conf
# cat /etc/opendkim.conf
# This is a basic configuration that can easily be adapted to suit a standard
# installation. For more advanced options, see opendkim.conf(5) and/or
# /usr/share/doc/opendkim/examples/opendkim.conf.sample.
#
Domain example.com
KeyFile /etc/opendkim/201205.private
Selector 201205
#
# Commonly-used options
Canonicalization relaxed/simple
Mode sv
SubDomains yes
# Log to syslog
Syslog yes
LogWhy yes
# Required to use local socket with MTAs that access the socket as a non-
# privileged user (e.g. Postfix)
UMask 022
UserID opendkim:opendkim
#
KeyTable /etc/opendkim/KeyTable
SigningTable /etc/opendkim/SigningTable
ExternalIgnoreList /etc/opendkim/TrustedHosts
InternalHosts /etc/opendkim/TrustedHosts
#
Socket inet:8891@localhost
#EOF
Jeśli używasz mojego drugiego przykładu z domeną docelową „mail.example.com”, wpis nadal będzie odnosił się tylko do domeny głównej:
Domain example.com
KeyFile /etc/dkim/my_selector.private
Selector my_selector
-----
Uwaga z jednego z moich źródeł: Jeśli uruchamiasz wiele instancji Postfix, musisz dodać to do opendkim.conf dla każdej instancji (lub tych, których chcesz użyć opendkim)
Utwórz plik za pomocą edytora tekstu /etc/opendkim/TrustedHosts
:
Dodaj domeny, nazwy hostów i / lub adresy IP, które powinny być obsługiwane przez OpenDKIM. Nie zapomnij localhost.
127.0.0.1
localhost
example.com
mail.example.com
192.168.1.100 #(IP address of your server, if applicable)
(ostatni wiersz powyżej prawdopodobnie nie będzie potrzebny. Jeśli masz adres IP do dodania, upewnij się, że używasz własnego, a nie powyższego przykładu).
Edytuj /etc/default/opendkim
:
Usuń komentarz z tego wiersza i użyj portu 8891:
SOCKET="inet:8891@localhost" # listen on loopback on port
Upewnij się, że zapora sieciowa (iptables) zezwala na sprzężenie zwrotne na localhost:
sudo iptables -A INPUT -i lo -j ACCEPT
Następnie utwórz plik za pomocą edytora tekstu /etc/opendkim/KeyTable
i dodaj domenę do KeyTable
Dodaj wiersz:
#EXAMPLE showing my 2nd key:
my_selector._domainkey.example.com example.com:my_selector:/etc/opendkim/my_selector.private
Następnie utwórz plik za pomocą edytora tekstu /etc/opendkim/SigningTable
i dodaj domenę do SigningTable
Pokazuję oba przykłady. Pamiętaj, że w przypadku drugiego klucza muszę teraz użyć pełnej nazwy domeny „mail.example.com”:
example.com 201205._domainkey.example.com
mail.example.com my_selector._domainkey.example.com
Pamiętaj, że w OpenDKIM 2.0.1 w nazwach domen rozróżniana jest wielkość liter. W tym przykładzie używamy nowszej wersji OpenDKIM i nie stanowi to problemu.
Skonfiguruj postfiks. Edytuj /etc/postfix/main.cf i dodaj linie na końcu
milter_default_action = accept
milter_protocol = 2
smtpd_milters=inet:localhost:8891
non_smtpd_milters=inet:localhost:8891
Zmień także nazwę hosta:
#myhostname = localhost #original
myhostname = mail.example.com
Powinieneś także zmienić odpowiedni wpis w / etc / hosts. Te zmiany obowiązują po ponownym uruchomieniu komputera (chociaż można to ustawić natychmiast za pomocą polecenia:) hostname NEW_NAME
.
Zrestartuj postfiks i opendkim, jeśli nie uruchomiłeś się ponownie:
# service opendkim restart
Restarting OpenDKIM: opendkim.
# service postfix restart
* Stopping Postfix Mail Transport Agent postfix [ OK ]
* Starting Postfix Mail Transport Agent postfix [ OK ]
Testowanie
Najlepszym sposobem sprawdzenia, czy podpisana poczta jest uwierzytelniana i czy rekordy DNS są prawidłowo skonfigurowane, jest skorzystanie z jednej z bezpłatnych usług testowych. Użyłem tych:
- Brandon Checketts Email Validator - http://www.brandonchecketts.com/emailtest.php (mój ulubiony)
- Wyślij podpisany e-mail na adres: check-auth@verifier.port25.com (mój ulubiony również)
Wyślij podpisany e-mail na adres: sa-test@sendmail.net (możesz przetestować wszystkie testowe adresy e-mail w polu Do: pojedynczej wiadomości wychodzącej)
Wyślij podpisany e-mail na adres: autorespond+dkim@dk.elandsys.com <--- BROKEN !!! Nie używaj tego.
Każdy z nich powie ci, czy wszystko działa poprawnie, i poda wskazówki dotyczące rozwiązywania problemów w razie potrzeby.
Jeśli masz konto Gmail, możesz również wysłać tam podpisaną wiadomość w celu szybkiego i łatwego przetestowania.
Gdy będziesz zadowolony, że wszystko jest w porządku, możesz usunąć flagę testową w rekordzie DNS TXT i zwiększyć TTL.
Gotowy!