openDKIM dan Postfix pada Ubuntu Server 12.04LTS
Saya akan mencoba untuk kembali dan memformat ini lebih baik. Tetapi karena ada permintaan untuk mengirim jawaban saya, saya ingin mempostingnya sekarang daripada menunggu sampai saya punya waktu untuk memformatnya dengan benar. Karena kurangnya waktu, saya membungkus seluruh jawaban saya dalam blockquote. Saya harap solusi ini bermanfaat.
Ini adalah referensi saya:
dan Wikipedia memiliki entri yang bagus tentang masalah ini
Minimal Anda perlu:
- Rooting akses ke server email Anda
- Akses untuk memperbarui catatan dns untuk domain Anda
Instal opendkim dari repositori:
# sudo apt-get install opendkim opendkim-tools
Anda harus memutuskan "pemilih" apa yang ingin Anda gunakan. Pemilih pada dasarnya adalah kata untuk menggambarkan kunci yang ingin Anda gunakan. Di sini saya akan menggunakan pemilih 201205 karena kunci menjadi valid pada Mei 2012 (licik eh?). Saya memberikan dua contoh untuk variasi, yang diharapkan akan menambah kejelasan. Anda hanya perlu menghasilkan SATU kunci. Namun, saya memberikan kedua contoh sehingga Anda dapat membandingkannya.
- 201205 (kunci 1)
- my_selector (kunci 2)
Domain saya akan menjadi example.com
, tetapi saya akan menggunakan subdomain untuk contoh kedua saya:
- example.com (kunci 1)
- mail.example.com (kunci 2)
Saya memutuskan untuk bekerja di direktori berikut:
# mkdir /etc/opendkim/
# cd /etc/opendkim
Buat kunci di direktori saat ini, menggunakan pemilih dan domain yang Anda pilih.
# opendkim-genkey -s 201205 -d example.com
Anda mungkin atau mungkin tidak perlu mengubah kepemilikan. Lihat detail dalam contoh saya untuk kunci kedua di bawah ini untuk mengetahui kepemilikan dan izin apa.
Pertama, Anda harus memeriksa apakah ada opendkim
pengguna (ID pengguna / grup Anda mungkin berbeda):
# grep opendkim /etc/passwd
opendkim:x:108:117::/var/run/opendkim:/bin/false
Dan Anda mungkin perlu melakukan ini:
# chmod 700 /var/run/opendkim
CATATAN: Dua perintah berikut ini TIDAK diperlukan di Ubuntu 12.04. Tetapi jika perintah di atas tidak menunjukkan bahwa opendkim pengguna telah diatur dengan benar, lakukan seperti ini:
# 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-----
Sekarang periksa kunci publik dan perhatikan ada bug (di openDKIM 2.5.2 di Ubuntu 12.04)! Di mana berisi ;=rsa;
, itu harus mengandung ;k=rsa;
. Tidak k
ada. Silakan masukkan.
# cat 201205.txt
201205._domainkey IN TXT "v=DKIM1;=rsa; p=WIGfM..[snip]..QIDIAB" ; ----- DKIM 201205 for example.com
Setelah diperbaiki, akan terlihat seperti ini:
201205._domainkey IN TXT "v=DKIM1;k=rsa; p=WIGfM..[snip]..QIDIAB" ; ----- DKIM 201205 for example.com
Selain itu, Anda mungkin perlu melarikan diri dari titik koma seperti ini. Jika Anda tidak ingin komentar akhir, hapus saja. Perhatikan juga bahwa Anda harus menambahkan tanda t = y untuk menunjukkan kepada server penerima bahwa Anda menguji DKIM tetapi belum menggunakannya secara aktif. Anda dibiarkan dengan catatan sumber daya yang layak:
201205._domainkey IN TXT "v=DKIM1\;k=rsa\;t=y\;p=WIGfM..[snip]..QIDIAB"
Anda harus mempublikasikan konten kunci publik di atas ke server DNS resmi Anda. Saya sarankan menggunakan catatan TXT. Tampaknya ada sedikit kontroversi tentang apakah akan menggunakan catatan SPF atau kedua jenis. Setelah sedikit membaca, saya memilih untuk tetap menggunakan tipe catatan TXT secara eksklusif, meskipun saya tidak percaya ini adalah kata terakhir pada topik ini.
Anda harus menggunakan TTL pendek (waktu untuk hidup) sehingga Anda dapat mengubah kunci tanpa menunggu usia untuk diperbanyak melalui DNS. Saya menggunakan 180 detik.
Contoh kedua menghasilkan sepasang kunci agak sulit bagi saya. Saya akan menjelaskan apa yang saya lakukan. Elemen pertama adalah saya menggunakan nilai domain "example.com" meskipun kuncinya akan digunakan untuk "mail.example.com". Saya sampai pada ini melalui coba-coba. Ini berfungsi, saat menggunakan "mail.example.com" tidak berfungsi. Sayangnya, saya tidak mengetahui alasan di balik ini. Ini benar-benar satu-satunya perbedaan yang saya temui, tetapi cukup meresahkan sehingga saya merasa harus mendokumentasikan pengalaman saya menggunakan subdomain. Tidak ada tutorial tingkat awal lainnya yang saya temukan melakukan ini. Hasilkan kunci kedua:
opendkim-genkey -s my_selector -d example.com
periksa kepemilikan dan izin kunci pribadi, seperti di atas. Seperti apa bentuknya:
# ls -la /etc/opendkim
-rw------- 1 opendkim opendkim 891 May 10 07:44 my_selector.private
Setelah menerbitkan catatan DNS, periksa dengan dig
. Itu harus mengembalikan apa yang Anda masukkan dalam catatan sumber daya (RR).
$ dig 201205._domainkey.example.com txt +short
"v=DKIM1\;k=rsa\;t=y\;p=WIGfM..[snip]..QIDIAB"
Sekarang, coba kuncinya. Perintah di bawah ini menganggap Anda berada di direktori tempat kuncinya berada (/ etc / opendkim untuk saya).
# 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
Hasil ini diharapkan. "Kunci tidak aman" tidak menunjukkan kesalahan. Ini adalah konsekuensi yang diharapkan dari tidak menggunakan DNSSSEC. DNSSEC akan datang, tetapi belum siap untuk prime time, menurut bacaan saya.
Contoh dengan kunci 2:
# 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
Perhatikan bahwa opendkim melaporkan bahwa kunci tidak aman. Ini berkaitan dengan fakta bahwa DNSSEC tidak diimplementasikan pada server DNS saya dan secara teoritis seseorang dapat mencegat pencarian DNS dan menggantinya dengan kunci mereka sendiri.
Edit file konfigurasi 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
Jika Anda menggunakan contoh kunci ke-2 saya, dengan domain yang ditargetkan "mail.example.com" entri tersebut masih hanya merujuk domain utama:
Domain example.com
KeyFile /etc/dkim/my_selector.private
Selector my_selector
-----
Catatan dari salah satu sumber saya: Jika Anda menjalankan beberapa instance dari Postfix, Anda perlu menambahkan ini ke opendkim.conf untuk setiap instance (atau yang Anda ingin gunakan opendkim)
Buat file dengan editor teks Anda /etc/opendkim/TrustedHosts
:
Tambahkan domain, nama host, dan / atau ip yang harus ditangani oleh OpenDKIM. Jangan lupa localhost.
127.0.0.1
localhost
example.com
mail.example.com
192.168.1.100 #(IP address of your server, if applicable)
(baris terakhir di atas mungkin tidak diperlukan. Jika Anda memiliki alamat IP untuk ditambahkan, pastikan Anda menggunakan alamat Anda sendiri, bukan contoh di atas.)
Edit /etc/default/opendkim
:
Batalkan komentar pada baris ini dan gunakan port 8891:
SOCKET="inet:8891@localhost" # listen on loopback on port
Pastikan firewall Anda (iptables) memungkinkan loopback di localhost:
sudo iptables -A INPUT -i lo -j ACCEPT
Selanjutnya, Buat file dengan editor teks Anda /etc/opendkim/KeyTable
dan tambahkan domain ke KeyTable
Tambahkan baris:
#EXAMPLE showing my 2nd key:
my_selector._domainkey.example.com example.com:my_selector:/etc/opendkim/my_selector.private
Selanjutnya Buat file dengan editor teks Anda /etc/opendkim/SigningTable
dan tambahkan domain ke SigningTable
Saya menunjukkan kedua contoh. Perhatikan bahwa untuk kunci kedua saya, sekarang saya harus menggunakan nama domain lengkap "mail.example.com":
example.com 201205._domainkey.example.com
mail.example.com my_selector._domainkey.example.com
Perhatikan bahwa dalam OpenDKIM 2.0.1 nama domain peka huruf besar-kecil. Dalam contoh ini kami menggunakan versi OpenDKIM yang lebih baru dan ini tampaknya bukan masalah.
Konfigurasikan postfix. Edit /etc/postfix/main.cf dan tambahkan baris ke akhir
milter_default_action = accept
milter_protocol = 2
smtpd_milters=inet:localhost:8891
non_smtpd_milters=inet:localhost:8891
Juga ubah nama host:
#myhostname = localhost #original
myhostname = mail.example.com
Anda juga harus mengubah entri yang sesuai di / etc / hosts. Perubahan ini efektif setelah reboot (walaupun Anda dapat mengaturnya langsung dengan perintah:) hostname NEW_NAME
.
Mulai ulang postfix dan opendkim jika Anda tidak me-reboot:
# service opendkim restart
Restarting OpenDKIM: opendkim.
# service postfix restart
* Stopping Postfix Mail Transport Agent postfix [ OK ]
* Starting Postfix Mail Transport Agent postfix [ OK ]
Pengujian
Cara terbaik untuk memeriksa apakah surat yang Anda tandatangani sedang diautentikasi dan bahwa catatan DNS Anda telah diatur dengan benar adalah dengan menggunakan salah satu layanan pengujian gratis. Saya menggunakan ini:
- Validator Email Brandon Checketts - http://www.brandonchecketts.com/emailtest.php (favorit saya)
- Kirim email yang ditandatangani ke: check-auth@verifier.port25.com (favorit saya juga)
Kirim email yang bertanda tangan ke: sa-test@sendmail.net (Anda dapat memasukkan semua alamat email uji dalam bidang Ke: dari satu pesan keluar yang akan diuji)
Kirim email yang telah ditandatangani ke: autorespond+dkim@dk.elandsys.com <--- BROKEN !!! Jangan gunakan yang ini.
Masing-masing akan memberi tahu Anda jika semuanya berfungsi dengan baik, dan memberi Anda beberapa petunjuk tentang pemecahan masalah jika diperlukan.
Jika Anda memiliki akun Gmail, Anda juga dapat mengirim pesan yang ditandatangani di sana untuk pengujian cepat dan mudah.
Setelah Anda senang bahwa semuanya baik-baik saja, Anda dapat menghapus bendera pengujian dalam catatan DNS TXT dan meningkatkan TTL.
Selesai!