Menggunakan DKIM di server saya untuk beberapa domain (situs web)


Jawaban:


30

Baik! Saya menemukan ini dari pos yang disebutkan dalam pertanyaan. Saya membuat semacam campuran antara jawaban itu sendiri dan tautan yang disediakan di dalamnya. Khususnya tautan keempat adalah yang saya gunakan.

Jadi masalahnya seperti ini. Misalkan Anda punya server atau VPS dan menjadikan salah satu domain Anda menjadi domain utama dan digunakan sebagai nama server (dalam contoh saya: mydomain.com).

Jadi, pertama-tama, kami akan berubah menjadi root untuk mempermudah, tetapi Anda dapat melewati langkah ini dan menggunakan sudosebelum setiap perintah.

sudo su

Sekarang, kami memasang OpenDKIM:

apt-get install opendkim opendkim-tools

Mari kita perbaiki file konfigurasi. Kami membuka /etc/opendkim.confuntuk mengedit. Saya menggunakan nano, tetapi sama dengan editor lainnya.

nano /etc/opendkim.conf

Setelah dibuka, buat seperti ini. Jika Anda merasa nyaman, Anda dapat mengubah beberapa opsi, tetapi Domain, KeyFiledan Selectorharus tetap dikomentari.

# 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

Selanjutnya, kami membuat beberapa folder dan file yang akan menyimpan informasi tentang apa yang harus digunakan dan diproses OpenDKIM. Untuk saat ini, TrustedHostsfile. Kami membuat dan mengeditnya:

mkdir /etc/opendkim
nano /etc/opendkim/TrustedHosts

Kita harus memasukkan ke dalam file ini daftar alamat tepercaya: localhost dan 127.0.0.1, dan nama server dan IP Anda:

127.0.0.1
localhost
192.99.34.121
mydomain.com

Sekarang kita mengedit file konfigurasi OpenDKIM.

nano /etc/default/opendkim

Dan tambahkan baris ini di akhir file. Mereka akan memberi tahu OpenDKIM di port mana seharusnya mengharapkan permintaan masuk:

SOCKET="inet:8891@localhost"

Kami membuka file konfigurasi Postfix.

nano /etc/postfix/main.cf

Dan tambahkan baris ini ke akhir file. Mereka akan memberi tahu Postfix bahwa itu harus mengirim email untuk ditandatangani dan ke mana.

milter_default_action = accept
milter_protocol = 6
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891

Jika Anda tidak menambahkan domain sekarang, Anda dapat memulai kembali semuanya, sehingga konfigurasi mulai berlaku.

/etc/init.d/opendkim restart
/etc/init.d/postfix reload
/etc/init.d/postfix restart

Selesai! Server siap bekerja dengan DKIM. Sekarang, Anda perlu menambahkan domain Anda ke sistem ini. Proses berikut ini sama untuk semua domain yang ingin Anda tambahkan. Saya akan menggunakan otherdomain.com sebagai contoh, ganti dengan milik Anda.

Ingat saya root dari sebelumnya, tetapi jika Anda tidak, jalankan sudo suatau awali perintah Anda dengan kata kunci sudo.

sudo su

Pertama, kami membuat direktori untuk domain kami dan masuk ke dalamnya:

mkdir -p /etc/opendkim/keys/otherdomain.com
cd /etc/opendkim/keys/otherdomain.com

Sekarang kami membuat kunci untuk domain:

opendkim-genkey -r -d otherdomain.com

Kami memberikan kepemilikan pengguna OpenDKIM dari file yang baru dibuat:

chown opendkim:opendkim default.private

Dan kami membuka KeyTablefile untuk menambahkan kunci baru kami untuk domain baru kami:

nano /etc/opendkim/KeyTable

Kami menambahkannya ke akhir file (setelah semua domain lain yang kami miliki di sini):

default._domainkey.otherdomain.com otherdomain.com:default:/etc/opendkim/keys/otherdomain.com/default.private

Kami membuka SigningTablefile.

nano /etc/opendkim/SigningTable

Dan tambahkan di akhir file (sekali lagi, kami akan memiliki satu baris untuk setiap domain):

otherdomain.com default._domainkey.otherdomain.com

SigningTable ini mencantumkan semua email yang ditandatangani. Hanya dengan menambahkan nama domain, semua email dari domain itu akan ditandatangani.

Saya tidak yakin perlunya melakukan langkah berikutnya, tapi saya baru saja melakukannya, untuk berjaga-jaga ... Kami membuka TrustedHostsfile.

nano /etc/opendkim/TrustedHosts

Dan tambahkan di akhir file:

otherdomain.com

Satu hal terakhir: kami menunjukkan isi file /etc/opendkim/keys/otherdomain.com/default.txt.

cat /etc/opendkim/keys/otherdomain.com/default.txt

Dan menambahkan informasi antara tanda kutip ke TXTcatatan di Zona DNS domain, dan kita juga harus menggunakan default._domainkeysebagai nama catatan. CATATAN: "antara tanda kutip" adalah teks yang dimulai dengan " v=DKIM1;k=rsa; p=WIGfM...".

Jika kami sudah selesai menambahkan domain (sekarang), kami memulai kembali semuanya untuk menerapkan perubahan.

/etc/init.d/opendkim restart
/etc/init.d/postfix reload
/etc/init.d/postfix restart

Selesai!


2
Panduan hebat, tetapi saya harus menghapus * @ dari entri SigningTable untuk menghindari kesalahan "tidak ada tabel penandatanganan yang cocok untuk 'user@example.com'" di mail.log, per lists.opendkim.org/archive/opendkim/ users / 2011/08 / 1332.html
dw1

1
Terima kasih untuk panduan ini, saya memiliki masalah yang sama dengan DW1 tetapi setelah menghapus * @ dari SigningTable semuanya berfungsi seperti yang diharapkan. Satu hal lagi adalah bahwa dalam /etc/opendkim/TrustedHostsfile IP host hanya harus ada di sana sekali, terlepas dari berapa banyak domain yang dijalankan melalui host ini. Jika Anda ingin menggunakan pemilih lain, defaultpastikan untuk mengubahnya di semua file!
Flatron

Ikuti semua panduan tetapi tanda tangan DKIM sepertinya tidak ditambahkan ... bagaimana saya bisa men-debug ini?
the_nuts

1
Terima kasih untuk ini! Saya di Ubuntu 16.x dan opendkim 2.10.3 ... Saya TIDAK perlu *@bagian depan nama domain di SigningTable; tidak ada yang ditandatangani sampai saya memperbaiki ini. cc: @the_nuts
Patrick Moore

1
Restart pertama layanan mungkin tidak berhasil, jika file / etc / opendkim / KeyTable dan / atau / etc / opendkim / SigningTable tidak ada. Cukup buat mereka menggunakan # touch /etc/opendkim/KeyTable # touch /etc/opendkim/SigningTable
Kristjan Adojaan

4

Script ini mengotomatiskan bagian setelah "Selesai! Server siap bekerja dengan DKIM"

Untuk membantu mengotomatiskan proses ini sedikit, saya membuat skrip bash ini. Cukup tambahkan satu 'domain.com' per baris di dalam array domains = ().

Pertama buat file dan direktori jika belum ada

/etc/opendkim/keys/
/etc/opendkim/KeyTable
/etc/opendkim/SigningTable
/etc/opendkim/TrustedHosts
/etc/opendkim/spfs.txt

file spfs.txt akan berisi semua catatan spf yang perlu Anda tambahkan ke catatan DNS Anda untuk setiap domain.

CATATAN: jangan dijalankan lebih dari sekali, itu tidak memeriksa untuk melihat apakah domain sudah ada. Script juga harus dijalankan sebagai root.

#!/bin/bash
domains=(
        'domain.com'
)
for domain in "${domains[@]}"
do
keydir="/etc/opendkim/keys/$domain"
if [ -d "$keydir" ]
then
cd $keydir
else
mkdir $keydir
cd $keydir
fi
opendkim-genkey -r -d $domain
chown opendkim:opendkim default.private
echo "default._domainkey.$domain $domain:default:$keydir/default.private" >> /etc/opendkim/KeyTable
echo "$domain default._domainkey.$domain" >> /etc/opendkim/SigningTable
echo "$domain" >> /etc/opendkim/TrustedHosts
echo "$(cat $keydir/default.txt)" >> spfs.txt
done

3

Script ini mengotomatiskan bagian setelah "Selesai! Server siap bekerja dengan DKIM"

Untuk membantu mengotomatiskan proses ini sedikit, saya membuat skrip bash ini. Cukup tambahkan satu domain seperti 'example.com' per baris di dalam array domains = ().

Script ini membuat file untuk Anda dan memeriksa apakah suatu baris sudah ada dalam file

Spfs.txt dihapus dan diciptakan kembali setiap kali dijalankan dan memeriksa baris ke-2 default.txt terhadap spfs.txt sebelum menambahkan

Anda harus menempatkan server Anda ipv4 dan ipv6 (jika Anda memilikinya) dalam variabel yang disediakan. Ia memeriksa apakah mereka tidak kosong

Anda dapat menjalankan file ini beberapa kali berkat cek yang ditambahkan.

#!/bin/bash
# List of domains
domains=( 
        'example.com'
)
# file paths and directories
dkim="/etc/opendkim"
keys="$dkim/keys"
keyfile="$dkim/KeyTable"
signfile="$dkim/SigningTable"
trustfile="$dkim/TrustedHosts"
spffile="$dkim/spfs.txt"
# Set Ipv6 and Ipv4 addresses for the server here
ipv4=""
ipv6=""
# loopback addresses for the server
loop=( localhost 127.0.0.1 )
function loopback {
        for back in "${loop[@]}"
        do
                if ! grep -q "$back" "$trustfile"; then
                        echo "$back" >> "$trustfile"
                fi
        done
}
# Check for files and create / write to them if they dont exist
if [ ! -d "$keys" ]; then
        mkdir "$keys"
fi
if [ ! -f "$keyfile" ]; then
        touch "$keyfile"
fi
if [ ! -f "$signfile" ]; then
        touch "$signfile"
fi
if [ ! -f "$trustfile" ]; then
        touch "$trustfile"
        loopback
else
        loopback
fi
if [ ! -f "$spffile" ]; then
        touch "$spffile"
else
        rm -rf "$spffile"
        touch "$spffile"
fi
if [ ! -z "$ipv6" ]; then
        if ! grep -q "$ipv6" "$trustfile"; then
                echo "$ipv6" >> "$trustfile"
        fi
fi
if [ ! -z "$ipv4" ]; then
        if ! grep -q "$ipv4" "$trustfile"; then
                echo "$ipv4" >> "$trustfile"
        fi
fi
# Generate keys and write the spfs records we need for each domain to one file
for domain in "${domains[@]}"
do
        keydir="$keys/$domain"
        default="$keydir/default.txt"
        if [ ! -d "$keydir" ]; then
                mkdir $keydir
        fi
        cd $keydir
        opendkim-genkey -r -d $domain
        chown opendkim:opendkim default.private
        key="default._domainkey.$domain $domain:default:$keydir/default.private"
        sign="$domain default._domainkey.$domain"
        trust="$domain"
        spf="$(cat $default)"
        # Check only the last line against the spf file as the first line is always the same
        spflast="$(tail -1 $default)"
        if ! grep -q "$key" "$keyfile"; then
                echo "$key" >> "$keyfile"
        fi
        if ! grep -q "$sign" "$signfile"; then
                echo "$sign" >> "$signfile"
        fi
        if ! grep -q "$trust" "$trustfile"; then
                echo "$trust" >> "$trustfile"
        fi
        if ! grep -q "$spflast" "$spffile"; then
                echo "$spf" >> "$spffile"
        fi
done
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.