Sử dụng DKIM trong máy chủ của tôi cho nhiều tên miền (trang web)


Câu trả lời:


30

Tốt Tôi đã tìm ra điều này từ bài viết được đề cập trong câu hỏi. Tôi đã thực hiện một loại kết hợp giữa chính câu trả lời và các liên kết được cung cấp trong đó. Đặc biệt liên kết thứ tư là liên kết tôi đã sử dụng.

Vì vậy, điều này đi như thế này. Giả sử bạn đã có máy chủ hoặc VPS và biến một trong các tên miền của mình thành tên miền chính và được sử dụng làm tên máy chủ (trong ví dụ của tôi: mydomain.com).

Vì vậy, trước hết, chúng tôi sẽ thay đổi để root để làm cho mọi thứ dễ dàng hơn, nhưng bạn có thể bỏ qua bước này và sử dụng sudotrước mỗi lệnh.

sudo su

Bây giờ, chúng tôi cài đặt OpenDKIM:

apt-get install opendkim opendkim-tools

Hãy sửa tập tin cấu hình. Chúng tôi đang mở /etc/opendkim.confđể chỉnh sửa. Tôi sử dụng nano, nhưng nó giống với trình soạn thảo khác.

nano /etc/opendkim.conf

Sau khi mở, làm cho nó trông như thế này. Nếu bạn cảm thấy thoải mái, bạn có thể thay đổi một số tùy chọn, nhưng Domain, KeyFileSelectorvẫn phải bình luận.

# 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

Tiếp theo, chúng tôi tạo một số thư mục và tệp sẽ chứa thông tin về những gì OpenDKIM nên sử dụng và xử lý. Để bây giờ, các TrustedHoststập tin. Chúng tôi tạo và chỉnh sửa nó:

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

Chúng tôi phải đưa vào tệp này một danh sách các địa chỉ đáng tin cậy: localhost và 127.0.0.1, và tên máy chủ và IP của bạn:

127.0.0.1
localhost
192.99.34.121
mydomain.com

Bây giờ chúng tôi chỉnh sửa tập tin cấu hình OpenDKIM.

nano /etc/default/opendkim

Và thêm những dòng này vào cuối tập tin. Họ sẽ nói với OpenDKIM về cổng nào sẽ yêu cầu ký yêu cầu:

SOCKET="inet:8891@localhost"

Chúng tôi mở tập tin cấu hình Postfix.

nano /etc/postfix/main.cf

Và thêm các dòng này vào cuối tập tin. Họ sẽ nói với Postfix rằng nó sẽ gửi e-mail sẽ được ký và ở đâu.

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

Nếu bạn không thêm tên miền ngay bây giờ, bạn có thể khởi động lại mọi thứ, do đó cấu hình có hiệu lực.

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

Làm xong! Máy chủ đã sẵn sàng để làm việc với DKIM. Bây giờ, bạn cần thêm tên miền của bạn vào hệ thống này. Quá trình sau đây giống nhau cho tất cả các tên miền bạn muốn thêm. Tôi sẽ sử dụng otherdomain.com làm ví dụ, thay thế nó bằng của riêng bạn.

Hãy nhớ rằng tôi đã root từ trước, nhưng nếu bạn không, hãy chạy sudo suhoặc đặt trước các lệnh của bạn bằng từ khóa sudo.

sudo su

Đầu tiên, chúng tôi tạo một thư mục cho tên miền của chúng tôi và đi vào bên trong nó:

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

Bây giờ chúng tôi tạo một khóa cho miền:

opendkim-genkey -r -d otherdomain.com

Chúng tôi cung cấp quyền sở hữu người dùng OpenDKIM cho tệp mới được tạo:

chown opendkim:opendkim default.private

Và chúng tôi mở KeyTabletệp để thêm khóa mới cho tên miền mới của chúng tôi:

nano /etc/opendkim/KeyTable

Chúng tôi thêm nó vào cuối tệp (sau tất cả các tên miền khác mà chúng tôi có thể có ở đây):

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

Chúng tôi mở SigningTabletập tin.

nano /etc/opendkim/SigningTable

Và nối vào cuối tệp (một lần nữa, chúng tôi sẽ có một dòng cho mỗi tên miền):

otherdomain.com default._domainkey.otherdomain.com

SigningTable này liệt kê tất cả các thư được ký. Chỉ cần thêm một tên miền, tất cả các thư từ tên miền đó sẽ được ký.

Tôi không chắc chắn về sự cần thiết phải thực hiện bước tiếp theo, nhưng tôi chỉ làm điều đó, chỉ trong trường hợp ... Chúng tôi mở TrustedHoststệp.

nano /etc/opendkim/TrustedHosts

Và thêm vào cuối tập tin:

otherdomain.com

Một điều cuối cùng: chúng tôi hiển thị nội dung của tập tin /etc/opendkim/keys/otherdomain.com/default.txt.

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

Và thêm thông tin giữa các trích dẫn vào một TXTbản ghi trong Vùng DNS của tên miền và chúng tôi cũng phải sử dụng default._domainkeylàm tên của bản ghi. LƯU Ý: "giữa các trích dẫn" là văn bản bắt đầu bằng " v=DKIM1;k=rsa; p=WIGfM...".

Nếu chúng tôi hoàn tất việc thêm tên miền (đến bây giờ), chúng tôi sẽ khởi động lại mọi thứ để áp dụng các thay đổi.

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

Làm xong!


2
Hướng dẫn tuyệt vời, nhưng tôi đã phải xóa * @ khỏi các mục nhập SigningTable để tránh lỗi "không có bảng ký nào khớp với 'user@example.com'" trong mail.log, mỗi danh sách.opendkim.org
dw1

1
Cảm ơn về hướng dẫn này, tôi đã gặp vấn đề tương tự như dw1 nhưng sau khi xóa * @ khỏi SigningTable, mọi thứ hoạt động như mong đợi. Một điều nữa là trong /etc/opendkim/TrustedHoststệp, IP của máy chủ chỉ phải ở đó một lần, bất kể có bao nhiêu tên miền chạy qua máy chủ này. Nếu bạn muốn sử dụng một số bộ chọn khác như defaultđảm bảo thay đổi nó trong tất cả các tệp!
Flatron

Làm theo tất cả các hướng dẫn nhưng chữ ký DKIM dường như không được thêm vào ... làm thế nào tôi có thể gỡ lỗi này?
the_nuts

1
Cảm ơn vì điều đó! Tôi đang dùng Ubuntu 16.x và opendkim 2.10.3 ... Tôi DID cần *@phần trước tên miền trong SigningTable; không có gì được ký cho đến khi tôi sửa nó. cc: @the_nuts
Patrick Moore

1
Lần khởi động lại dịch vụ đầu tiên có thể không thành công, nếu các tệp / etc / opendkim / KeyTable và / hoặc / etc / opendkim / SigningTable không xuất hiện. Đơn giản chỉ cần tạo chúng bằng cách sử dụng # touch /etc/opendkim/KeyTable # touch /etc/opendkim/SigningTable
Kristjan Adojaan

4

Tập lệnh này tự động hóa phần sau khi "Xong! Máy chủ đã sẵn sàng hoạt động với DKIM"

Để giúp tự động hóa quá trình này một chút, tôi đã tạo tập lệnh bash này. Chỉ cần thêm một 'domain.com' trên mỗi dòng bên trong mảng domain = ().

Đầu tiên tạo các tệp và thư mục nếu chúng chưa tồn tại

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

Tệp spfs.txt sẽ chứa tất cả các bản ghi spf bạn cần thêm vào bản ghi DNS của mình cho mỗi tên miền.

LƯU Ý: không chạy nhiều hơn một lần, nó không kiểm tra xem tên miền đã tồn tại chưa. Script cũng cần được chạy dưới quyền 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

Tập lệnh này tự động hóa phần sau khi "Xong! Máy chủ đã sẵn sàng hoạt động với DKIM"

Để giúp tự động hóa quá trình này một chút, tôi đã tạo tập lệnh bash này. Chỉ cần thêm một tên miền như 'example.com' trên mỗi dòng bên trong mảng domain = ().

Kịch bản lệnh này tạo các tệp cho bạn và kiểm tra xem một dòng đã có trong tệp chưa

Spfs.txt bị xóa và được tạo lại mỗi lần chạy và kiểm tra dòng thứ 2 của default.txt so với spfs.txt trước khi nối thêm

Bạn phải đặt máy chủ của mình ipv4 và ipv6 (nếu bạn có chúng) trong các biến được cung cấp. Nó kiểm tra nếu họ không có sản phẩm nào

bạn có thể chạy tệp này nhiều lần nhờ các kiểm tra được thêm vào.

#!/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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.