DKIM menandatangani surat keluar dari domain apa pun (dengan Postfix dan Ubuntu)

40

Saya mendapatkan pengaturan DKIM di server email saya (postfix dan ubuntu) sehingga menandatangani email keluar. Saya menggunakan instruksi ini: https://help.ubuntu.com/community/Postfix/DKIM

Namun, saya memerlukannya untuk menandatangani email dari domain apa saja (di alamat Dari) dan bukan hanya milik saya. Saya sedang membangun layanan buletin email dan klien akan mengirim email mereka sendiri melalui server.

Pertama saya atur "Domain *" di /etc/dkim-filter.conf. Ini membuatnya memasukkan header DKIM dalam semua email keluar, apa pun domainnya.

Namun, pemeriksaan verifikasi gagal pada gmail karena memeriksa domain di alamat dari, dan bukan domain saya (dan catatan dns). Adakah yang tahu bagaimana melakukan ini?

Brian Armstrong
sumber

Jawaban:

41

Ok saya berhasil mencari tahu sendiri, tapi saya ingin memposting langkah-langkah di sini untuk anak cucu karena tidak ada dokumentasi tentang ini (yang bisa saya temukan) dan itu praktis menebak dan memeriksa.

Setelah saya mengatur "Domain *" seperti dijelaskan di atas, itu akan menandatanganinya seperti ini:

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=

perhatikan "d = clientdomain.com". Itu menghasilkan ini berdasarkan alamat dari dalam email, di mana alamat dari itu seperti "[email protected]". Jelas jika itu memeriksa domain klien dan bukan milik saya, tidak ada catatan TXT DNS di sana dan verifikasi akan gagal.

Jadi bagaimanapun saya menemukan di documentaion ini bahwa Anda dapat mengatur parameter KeyList. http://manpages.ubuntu.com/manpages/hardy/man5/dkim-filter.conf.5.html

Itu tidak benar-benar menggambarkan apa yang ingin saya lakukan, tetapi saya pikir saya akan bermain dengannya. Saya mengomentari KeyFile dan mengatur KeyList ke "/etc/mail/dkim_domains.key" yang merupakan nama file sewenang-wenang yang saya buat. Saya kemudian membuat file itu dan memasukkannya ke dalamnya "*: feedmailpro.com: /etc/mail/dkim.key". Ini memberitahukannya untuk domain klien apa pun, menandatanganinya dengan domain saya (feedmailpro.com), dan menggunakan file dkim.key.

Restart DKIM dan postfix

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

Sekarang ini adalah kunci yang dihasilkannya ketika saya mengirim email percobaan.

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=

Perbaikan, Anda lihat d = sekarang disetel ke domain saya (meskipun alamat dari email itu bukan domain saya). Namun s = diubah menjadi "dkim.key", bukan pemilih yang saya pilih di dkim-filter.conf. Dalam instruksi pengaturan awal saya akan mengatur pemilih ke "mail". Itu aneh, tapi saya perhatikan itu mengubahnya menjadi nama file kunci saya, dkim.key.

Jadi saya pergi dan mengganti nama "/etc/mail/dkim.key" menjadi "/ etc / mail / mail". Juga perbarui referensi untuk itu di "/etc/mail/dkim_domains.key".

Restart dkim-filter dan postfix lagi sama seperti di atas, dan sekarang mulai berfungsi Berikut ini adalah header terakhir yang menandatangani dengan benar menggunakan pemilih kanan (tampaknya didasarkan pada nama file kunci).

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=

Sekarang s = mail benar, dan d = feedmailpro.com benar. Berhasil!

Secara keseluruhan ini jauh lebih sulit daripada yang saya harapkan dan sepertinya tidak ada dokumentasi tentang cara melakukan ini (masuk untuk semua domain keluar), tapi saya kira itu adalah perangkat lunak open source jadi saya tidak bisa mengeluh.

Satu catatan terakhir, untuk memeriksa apakah data TXT DNS telah dipasang dengan benar, Anda dapat melakukan perintah seperti pada domain Anda

dig mail._domainkey.feedmailpro.com TXT

Mungkin perlu menginstal dig (sudo apt-get install dig). Jika Anda menggunakan manajer Slicehost untuk menambahkan entri DNS, Anda akan memasukkan data TXT seperti ini.

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

Saya tidak begitu mengerti mengapa nama disetel ke "mail._domainkey" tanpa titik di ujung atau tanpa domain saya, seperti "mail._domainkey.feedmailpro.com". Tapi apapun itu, sepertinya berhasil jadi saya senang.

Jika Anda mencoba menduplikasi ini, berikut adalah petunjuk yang saya mulai dengan: https://help.ubuntu.com/community/Postfix/DKIM

Brian Armstrong
sumber
2
Terima kasih telah meletakkan ini di sini, ini membantu orang lain (seperti saya) keluar :)
thomasrutter
Terima kasih, thomas!
Brian Armstrong
Wow, ini banyak membantu. Saya membenturkan kepala karena "s = dkim.key" hingga saya menemukan posting Anda!
mili
Satu hal yang tidak disebutkan oleh panduan di ubuntu.com adalah begitu Anda membuatnya berfungsi, ubah t = y ke t = n dalam catatan TXT untuk menyatakan bahwa itu bukan tes.
bulanolo
Ada beberapa sumber daya yang bagus di luar sana untuk menggunakan SigningTable, dll. Misalnya, blog.tjitjing.com/index.php/2012/03/… (luar biasa) dan bahkan readme opendkim
rfay
15

Terinspirasi oleh jawaban Brian Armstrong untuk dkim-filter, inilah cara saya melakukan ini untuk OpenDKIM .

/etc/opendkim.conf

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

Perhatikan bahwa SigningTable memiliki refile : dalam definisi itu, ini menentukan bahwa file menyertakan ekspresi reguler; dalam kasus kami * wildcard.

/ etc / mail / dkim_key_table

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

Di sini keyname digunakan untuk mencocokkan kunci antara file ini dan file dkim_signing_table. Dalam file asli saya, saya menamai ini sama dengan pemilih saya.

example.com dan pemilih harus diganti domain dan pemilih mana yang ingin Anda gunakan dalam tanda tangan Anda masing-masing d = dan s = .

/ etc / mail / dkim_signing_table

*   keyname

File ini alamat peta sederhana ditemukan di header Dari: ke kunci di dkim_key_table. Dalam hal ini kami ingin semua email yang dikirim melalui server ini ditandatangani dengan kunci yang sama, jadi * wildcard digunakan.

Adam J. Forster
sumber
bagi mereka yang mendapatkan "tidak ada pertandingan dalam tabel penandatanganan di OpenDKIM" serverfault.com/q/569823/115907
kommradHomer
Jika ada yang mendapatkan jawaban ini (jawaban yang bagus, btw! Mengajari saya apa yang saya butuhkan) dan mencari untuk mengirim dari dua domain yang berbeda dengan kunci yang berbeda, yang dapat dilakukan seperti ini: File 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 "Setiap file terdiri dari 2 baris (komentar tidak menyimpan linebreak di sini)
Sean Colombo
atau: SigningTable csl: * = keyname KeyTable csl: keyname = example.com: selector: /etc/mail/selector.key
danblack
3

Utas lama tetapi mungkin orang lain yang menemukan ini memiliki kegunaan untuk mengetahui versi 2.x dari opendkim bekerja dengan KeyTable, bukan KeyList.

Anda dapat mengonversi file KeyList Anda dengan alat opendkim-convert-keylist ( http://manpages.ubuntu.com/manpages/lucid/man8/opendkim-convert-keylist.8.html )

Anda dapat membaca lebih lanjut tentang penerapan KeyTable di halaman manual opendkim: ( http://www.opendkim.org/opendkim.conf.5.html )

pengguna203421
sumber
Silakan meringkas artikel yang Anda tautkan, mengutip setiap segmen kode yang relevan atau blok konfigurasi. Situs dapat berubah di masa mendatang atau gagal memuat karena sejumlah alasan.
89c3b1b8-b1ae-11e6-b842-48d705
2

Saya tidak begitu mengerti mengapa nama diatur ke "mail._domainkey" tanpa tanda titik

Dokumentasi untuk filter DKIM biasanya dipasang dalam format thre unix man. Hanya Google yang mengetahuinya :-) Saya juga punya masalah.

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

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

Saya mencobanya di Debian. Jika tidak benar-benar dalam distribusi Anda, Anda dapat mengunduh tarball sumber dan dokumen yang mudah dibaca.

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

dll.

-

Saya tidak begitu mengerti mengapa nama diatur ke "mail._domainkey" tanpa tanda titik

Sehingga Anda dapat menggunakan persis sama di kedua catatan DNS dari domain yang berbeda.

hynekcer
sumber