Tôi đã đọc hướng dẫn được đăng bởi MountainX ( Setup DKIM (DomainKeys) cho Ubuntu, Postfix và Mailman ), nhưng tôi không thể tìm ra cách áp dụng các bước này nếu tôi muốn lưu trữ và gửi e-mail cho một số tên miền. Có ai có manh mối không?
Tôi đã đọc hướng dẫn được đăng bởi MountainX ( Setup DKIM (DomainKeys) cho Ubuntu, Postfix và Mailman ), nhưng tôi không thể tìm ra cách áp dụng các bước này nếu tôi muốn lưu trữ và gửi e-mail cho một số tên miền. Có ai có manh mối không?
Câu trả lời:
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 sudo
trướ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
, KeyFile
và Selector
vẫ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 TrustedHosts
tậ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 su
hoặ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ở KeyTable
tệ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ở SigningTable
tậ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ở TrustedHosts
tệ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 TXT
bả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._domainkey
là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!
/etc/opendkim/TrustedHosts
tệ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!
*@
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
# touch /etc/opendkim/KeyTable
# touch /etc/opendkim/SigningTable
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
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