Sunucumda DKIM'i birden çok alan için kullanma (web siteleri)


Yanıtlar:


30

İyi! Bunu soruda belirtilen postadan anladım. Yanıtın kendisi ile verilen bağlantılar arasında bir çeşit karışma yaptım. Özellikle dördüncü bağlantı kullandığım bağlantı.

Yani şey böyle gider. Bir sunucunuz veya VPS’niz olduğunu ve etki alanlarınızdan birini ana etki alanı yapıp sunucu adı olarak kullandığınızı varsayalım (örneğimde: etkialanim.com).

Dolayısıyla, her şeyden önce, işleri kolaylaştırmak için kökü değiştireceğiz, ancak bu adımı atlayıp sudoher komuttan önce kullanabilirsiniz .

sudo su

Şimdi, OpenDKIM'i yüklüyoruz:

apt-get install opendkim opendkim-tools

Yapılandırma dosyasını düzeltelim. /etc/opendkim.confDüzenlemeye açılıyoruz . Nano kullanıyorum, fakat diğer editörle aynı.

nano /etc/opendkim.conf

Açıldıktan sonra, bunun gibi görünmesini sağlayın. Eğer rahat hissediyorsanız, bazı seçenekleri değiştirebilirsiniz ancak Domain, KeyFileve Selectoryorumunu kalmalıdır.

# 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

Daha sonra, OpenDKIM'in ne kullanması ve işlemesi gerektiğiyle ilgili bilgileri içeren klasör ve dosyaların bir kısmını yarattık. Şimdilik TrustedHostsdosya. Oluşturur ve düzenleriz:

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

Bu dosyaya güvenilir adreslerin bir listesini koymalıyız: localhost ve 127.0.0.1 ve sunucu adınız ve IP’niz:

127.0.0.1
localhost
192.99.34.121
mydomain.com

Şimdi OpenDKIM config dosyasını düzenliyoruz.

nano /etc/default/opendkim

Ve bu satırları dosyanın sonuna ekleyin. OpenDKIM'e hangi limanda imzalama isteklerini beklemesi gerektiğini söylerler:

SOCKET="inet:8891@localhost"

Postfix config dosyasını açtık.

nano /etc/postfix/main.cf

Ve bu satırları dosyanın sonuna ekleyin. Postfix'e imzalanacak e-postaları ve nereye göndermesi gerektiğini söylerler.

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

Şu anda alan adı eklemiyorsanız, her şeyi yeniden başlatabilirsiniz, böylece yapılandırma etkili olacaktır.

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

Bitti! Sunucu DKIM ile çalışmaya hazır. Şimdi, etki alanlarınızı bu sisteme eklemeniz gerekiyor. Aşağıdaki işlem, eklemek istediğiniz tüm etki alanları için aynıdır. Örnek olarak otherdomain.com kullanacağım, kendin ile değiştir.

Önceden köken olduğumu hatırlayın, ancak yapmadıysanız sudo su, anahtar kelimelerle komutlarınızı çalıştırın veya bu komutlardan önce geçin sudo.

sudo su

Öncelikle, etki alanımız için bir dizin yaratır ve onun içine gireriz:

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

Şimdi etki alanı için bir anahtar üretiyoruz:

opendkim-genkey -r -d otherdomain.com

Yeni oluşturulan dosyanın OpenDKIM kullanıcısına sahipliğini veriyoruz:

chown opendkim:opendkim default.private

KeyTableYeni alanımıza yeni anahtarımızı eklemek için dosyayı açıyoruz :

nano /etc/opendkim/KeyTable

Dosyanın sonuna ekleriz (burada sahip olabileceğimiz diğer tüm alanlardan sonra):

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

Biz açmak SigningTabledosyayı.

nano /etc/opendkim/SigningTable

Ve dosyanın sonuna ekleyin (yine her alan için bir satır olacak):

otherdomain.com default._domainkey.otherdomain.com

Bu SigningTable, imzalanan tüm postaları listeler. Sadece bir alan adı ekleyerek, o alandan gelen tüm postalar imzalanır.

Bir sonraki adımı atma zorunluluğundan emin değilim, ama sadece yaptım, tam da ... TrustedHostsDosyayı açıyoruz .

nano /etc/opendkim/TrustedHosts

Ve dosyanın sonuna ekleyin:

otherdomain.com

Son bir şey: dosyanın içeriğini gösteririz /etc/opendkim/keys/otherdomain.com/default.txt.

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

Ve tırnak işaretleri arasına bilgileri TXTetki alanının DNS Bölgesinde bir kayda ekleyin; kaydın default._domainkeyadı olarak da kullanmamız gerekir . NOT: "tırnak işaretleri arasında", " v=DKIM1;k=rsa; p=WIGfM..." ile başlayan metindir .

Alan adı eklemeyi bitirdiyseniz (şimdiye kadar), değişiklikleri uygulamak için her şeyi yeniden başlatırız.

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

Bitti!


2
Büyük Kılavuzu, ama başına bir hata mail.log içinde " 'user@example.com' için imza masa maçı" önlemek için SigningTable girişlerinden * @ kaldırmak zorunda lists.opendkim.org/archive/opendkim/ users / 2011/08 / 1332.html
dw1 20:15

1
Bu rehber için teşekkürler, dw1 ile aynı problemi yaşadım ama * @ SigningTable'dan çıkardıktan sonra her şey beklendiği gibi çalıştı. Bir başka şey ise, /etc/opendkim/TrustedHostsbu host üzerinden kaç alan adı çalıştırıldığına bakılmaksızın , dosyada hostun IP'sinin sadece bir kez orada olması gerektiğidir. Diğer tüm seçiciyi kullanmak istiyorsanız tüm dosyalarda defaultdeğiştirdiğinizden emin olun !
Flatron

Tüm rehbere uydum, ancak DKIM imzası eklenmemiş gibi görünüyor ... nasıl hata ayıklayabilirim?
the_nuts

1
Bunun için teşekkürler! Ubuntu 16.x'deyim ve 2.10.3'te opendkim ... SigningTable'da *@alan adının önündeki bölüme ihtiyacım var ; Ben bunu düzeltinceye kadar hiçbir şey imzalanmadı. cc: @ the_nuts
Patrick Moore

1
Eğer / etc / opendkim / KeyTable ve / veya / etc / opendkim / SigningTable dosyaları mevcut değilse, hizmetlerin ilk yeniden başlatılması başarılı olamaz. Sadece kullanarak onları oluşturun # touch /etc/opendkim/KeyTable # touch /etc/opendkim/SigningTable
Kristjan Adojaan

4

Bu komut dosyası, "Bitti! Sunucu, DKIM ile çalışmaya hazır" durumundan sonra otomatikleştiriyor

Bu işlemi otomatikleştirmek için biraz bu bash betiğini yarattım. Alanlar = () dizi içindeki her satıra bir 'domain.com' ekleyin.

Önceden mevcut değilse, önce dosyaları ve dizinleri oluşturun

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

spfs.txt dosyası, her etki alanı için DNS kayıtlarınıza eklemeniz gereken tüm spf kayıtlarını içerecektir.

NOT: bir defadan fazla çalıştırmayın, bir etki alanının zaten var olup olmadığını kontrol etmeyin. Komut dosyasının ayrıca kök olarak çalıştırılması gerekir.

#!/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

Bu komut dosyası, "Bitti! Sunucu, DKIM ile çalışmaya hazır" durumundan sonra otomatikleştiriyor

Bu işlemi otomatikleştirmek için biraz bu bash betiğini yarattım. Alan adları = () dizisinin satırına 'example.com' gibi bir alan ekleyin.

Bu komut dosyası sizin için dosyaları oluşturur ve dosyada bir satır olup olmadığını denetler

Her çalıştırıldığında Spfs.txt kaldırılır ve yeniden oluşturulur ve eklenmeden önce default.txt öğesinin 2. satırını spfs.txt ile kontrol eder

Sunucunuzu ipv4 ve ipv6'yı (eğer varsa) sağlanan değişkenlere yerleştirmelisiniz. Boş olup olmadıklarını kontrol eder

Eklenen çekler sayesinde bu dosyayı birkaç kez çalıştırabilirsiniz.

#!/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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.