ติดตั้ง DKIM (DomainKeys) สำหรับ Ubuntu, Postfix และ Mailman


22

ฉันใช้ Ubuntu 12.04 กับ Postfix และ Mailman ฉันต้องการที่จะตั้งค่าDKIM DomainKeys Identified Mail หรือ DKIM เป็นผู้สืบทอดของ "DomainKeys" ของ Yahoo มันรวมจดหมายระบุตัวของซิสโก้

ขั้นตอนในการตั้งค่านี้มีอะไรบ้าง

แนะนำให้ใช้ opendkim หรือไม่?

การอ้างอิงเดียวที่ฉันมีคือHowToForgeแต่ฉันต้องการความช่วยเหลือที่นี่ (แม้ว่ามันจะเป็นเพียงการยืนยันขั้นตอนที่ลิงค์นั้น) ที่จริงแล้วฉันคิดว่าข้อมูลที่ HowToForge นั้นล้าสมัยเพราะกล่าวถึง dkim-filter แทนที่จะเป็น opendkim

คำตอบ:


39

openDKIM และ Postfix บน Ubuntu Server 12.04LTS

ฉันจะพยายามกลับมาและจัดรูปแบบนี้ดีกว่า แต่เนื่องจากมีคำขอให้โพสต์คำตอบของฉันฉันต้องการโพสต์ทันทีแทนที่จะรอจนกว่าฉันจะมีเวลาจัดรูปแบบที่ถูกต้อง เนื่องจากไม่มีเวลาฉันจึงเก็บคำตอบทั้งหมดไว้ในบล็อกสี่เหลี่ยม ฉันหวังว่าโซลูชันนี้มีประโยชน์

นี่คือการอ้างอิงของฉัน:

และWikipediaมีเนื้อหาที่ดีในหัวข้อนี้

อย่างน้อยคุณจะต้อง:

  • รูทการเข้าถึงเซิร์ฟเวอร์อีเมลของคุณ
  • การเข้าถึงเพื่ออัปเดตระเบียน DNS สำหรับโดเมนของคุณ

ติดตั้ง opendkim จากที่เก็บ:

# sudo apt-get install opendkim opendkim-tools

คุณต้องตัดสินใจเลือก“ ตัวเลือก” ที่คุณต้องการใช้ ตัวเลือกเป็นคำสำคัญที่อธิบายถึงคีย์ที่คุณต้องการใช้ ที่นี่ฉันจะใช้ตัวเลือก 201205 เนื่องจากคีย์จะใช้ได้ในเดือนพฤษภาคม 2012 (ไหวพริบใช่มั้ย) ฉันให้สองตัวอย่างสำหรับความหลากหลายซึ่งหวังว่าจะเพิ่มความชัดเจน คุณจะต้องสร้างหนึ่งคีย์ อย่างไรก็ตามฉันให้ทั้งสองตัวอย่างเพื่อให้คุณสามารถเปรียบเทียบได้

  • 201205 (คีย์ที่ 1)
  • my_selector (คีย์ที่สอง)

โดเมนของฉันจะเป็นexample.comแต่ฉันจะใช้โดเมนย่อยสำหรับตัวอย่างที่สองของฉัน:

  • example.com (คีย์ที่ 1)
  • mail.example.com (คีย์ที่สอง)

ฉันตัดสินใจที่จะทำงานในไดเรกทอรีต่อไปนี้:

# mkdir /etc/opendkim/
# cd /etc/opendkim

สร้างคีย์ในไดเรกทอรีปัจจุบันโดยใช้ตัวเลือกและโดเมนที่คุณเลือก

# opendkim-genkey -s 201205 -d example.com

คุณอาจหรืออาจไม่จำเป็นต้องเปลี่ยนความเป็นเจ้าของ ดูรายละเอียดในตัวอย่างของฉันสำหรับคีย์ที่ 2 ด้านล่างสำหรับสิ่งที่เป็นเจ้าของและสิทธิ์ควรเป็น

ก่อนอื่นคุณควรตรวจสอบว่ามีopendkimผู้ใช้หรือไม่ (ID ผู้ใช้ / กลุ่มของคุณอาจแตกต่างกัน):

# grep opendkim /etc/passwd
opendkim:x:108:117::/var/run/opendkim:/bin/false

และคุณอาจต้องทำสิ่งนี้:

# chmod 700 /var/run/opendkim

หมายเหตุ: ไม่จำเป็นต้องใช้สองคำสั่งถัดไปใน Ubuntu 12.04 แต่ถ้าคำสั่งด้านบนไม่แสดงว่าผู้ใช้ตั้งค่า opendkim อย่างถูกต้องให้ทำเช่นนี้:

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

ตอนนี้ตรวจสอบกุญแจสาธารณะและสังเกตว่ามีข้อผิดพลาด (ใน openDKIM 2.5.2 บน Ubuntu 12.04)! ที่ไหนมี, ก็ควรมี;=rsa; ;k=rsa;ที่kขาดหายไป กรุณาใส่มัน

# cat 201205.txt
201205._domainkey IN TXT "v=DKIM1;=rsa; p=WIGfM..[snip]..QIDIAB" ; ----- DKIM 201205 for example.com

หลังจากได้รับการแก้ไขแล้วจะมีลักษณะเช่นนี้:

201205._domainkey IN TXT "v=DKIM1;k=rsa; p=WIGfM..[snip]..QIDIAB" ; ----- DKIM 201205 for example.com

นอกจากนี้คุณอาจต้องหลีกเลี่ยงเซมิโคลอนเช่นนี้ หากคุณไม่ต้องการความคิดเห็นที่สิ้นสุดเพียงลบมัน นอกจากนี้โปรดทราบว่าคุณควรเพิ่มการตั้งค่าสถานะ t = y เพื่อระบุว่ารับเซิร์ฟเวอร์ที่คุณกำลังทดสอบ DKIM แต่ยังไม่ได้ใช้งาน คุณมีบันทึกทรัพยากรที่ทำงานได้:

201205._domainkey IN TXT "v=DKIM1\;k=rsa\;t=y\;p=WIGfM..[snip]..QIDIAB"

คุณต้องเผยแพร่เนื้อหาของกุญแจสาธารณะข้างต้นไปยังเซิร์ฟเวอร์ DNS ที่มีสิทธิ์ของคุณ ฉันแนะนำให้ใช้เรคคอร์ด TXT ดูเหมือนจะมีข้อโต้แย้งเล็กน้อยว่าจะใช้ระเบียน SPF หรือทั้งสองประเภท หลังจากการอ่านเล็กน้อยฉันเลือกที่จะยึดติดกับประเภทเรคคอร์ด TXT โดยเฉพาะแม้ว่าฉันไม่เชื่อว่านี่เป็นคำสุดท้ายในหัวข้อนี้

คุณควรใช้ TTL สั้น ๆ (ใช้เวลาในการถ่ายทอดสด) เพื่อให้คุณสามารถเปลี่ยนคีย์ได้โดยไม่ต้องรอให้อายุทำการเผยแพร่แม้ว่า DNS ฉันใช้ 180 วินาที

ตัวอย่างที่สองของการสร้างคู่กุญแจเป็นเรื่องยากสำหรับฉัน ฉันจะอธิบายสิ่งที่ฉันทำ องค์ประกอบแรกคือฉันใช้ค่าโดเมน "example.com" แม้ว่าคีย์จะใช้สำหรับ "mail.example.com" ฉันมาถึงที่นี่ผ่านการลองผิดลองถูก ใช้งานได้ขณะใช้ "mail.example.com" ไม่ทำงาน น่าเสียดายที่ฉันไม่ทราบสาเหตุที่อยู่เบื้องหลัง นี่เป็นความแตกต่างเพียงอย่างเดียวที่ฉันพบ แต่มันก็หนักใจพอที่ฉันรู้สึกว่าฉันควรบันทึกประสบการณ์ของฉันด้วยการใช้โดเมนย่อย ไม่มีบทเรียนอื่น ๆ ในระดับเริ่มต้นที่ฉันพบว่าทำสิ่งนี้ สร้างคีย์ที่สอง:

opendkim-genkey -s my_selector -d example.com

ตรวจสอบความเป็นเจ้าของและการอนุญาตของรหัสส่วนตัวดังกล่าวข้างต้น นี่คือสิ่งที่พวกเขาควรมีลักษณะ:

# ls -la /etc/opendkim
-rw-------  1 opendkim opendkim  891 May 10 07:44 my_selector.private

หลังจากประกาศระเบียน DNS digให้ตรวจสอบด้วย มันควรกลับสิ่งที่คุณป้อนในบันทึกทรัพยากร (RR)

$ dig 201205._domainkey.example.com txt +short
"v=DKIM1\;k=rsa\;t=y\;p=WIGfM..[snip]..QIDIAB"

ตอนนี้ทดสอบคีย์ คำสั่งด้านล่างถือว่าคุณอยู่ในไดเรกทอรีที่มีคีย์อยู่ (/ etc / opendkim สำหรับฉัน)

# 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

คาดว่าผลลัพธ์เหล่านี้ "รหัสไม่ปลอดภัย" ไม่ได้ระบุข้อผิดพลาด เป็นผลที่คาดว่าจะไม่ได้ใช้ DNSSSEC DNSSEC กำลังจะมา แต่ก็ยังไม่พร้อมสำหรับช่วงเวลาที่ดีตามการอ่านของฉัน

ตัวอย่างด้วยคีย์ที่ 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

โปรดทราบว่า opendkim กำลังรายงานว่ารหัสไม่ปลอดภัย สิ่งนี้เกี่ยวข้องกับความจริงที่ว่า DNSSEC ไม่ได้ถูกนำไปใช้กับเซิร์ฟเวอร์ DNS ของฉันและในทางทฤษฎีแล้วใครบางคนสามารถขัดขวางการค้นหา DNS และแทนที่ด้วยคีย์ของตัวเอง

แก้ไขไฟล์กำหนดค่า 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

หากคุณใช้ตัวอย่างคีย์ที่สองของฉันกับโดเมนเป้าหมาย“ mail.example.com” รายการจะยังคงอ้างอิงโดเมนหลักเท่านั้น:

Domain                  example.com
KeyFile                 /etc/dkim/my_selector.private
Selector                my_selector 
-----

หมายเหตุจากแหล่งที่มาของฉัน: ถ้าคุณเรียกใช้ Postfix หลายอินสแตนซ์คุณต้องเพิ่มสิ่งนี้ใน opendkim.conf สำหรับแต่ละอินสแตนซ์ (หรืออันที่คุณต้องการใช้ opendkim)

สร้างไฟล์ด้วยโปรแกรมแก้ไขข้อความของคุณ/etc/opendkim/TrustedHosts:

เพิ่มโดเมนชื่อโฮสต์และ / หรือ ip ที่ OpenDKIM ควรจัดการ อย่าลืม localhost

127.0.0.1
localhost
example.com
mail.example.com
192.168.1.100 #(IP address of your server, if applicable)

(บรรทัดสุดท้ายด้านบนอาจไม่จำเป็นหากคุณมีที่อยู่ IP ให้เพิ่มตรวจสอบให้แน่ใจว่าคุณใช้ของคุณเองไม่ใช่ตัวอย่างด้านบน)

แก้ไข/etc/default/opendkim:

ยกเลิกข้อคิดเห็นแถวนี้และใช้พอร์ต 8891:

SOCKET="inet:8891@localhost" # listen on loopback on port

ตรวจสอบให้แน่ใจว่าไฟร์วอลล์ของคุณ (iptables) อนุญาตให้วนรอบบนโลคัลโฮสต์:

sudo iptables -A INPUT -i lo -j ACCEPT

จากนั้นสร้างไฟล์ด้วยโปรแกรมแก้ไขข้อความของคุณ/etc/opendkim/KeyTableและเพิ่มโดเมนใน KeyTable

เพิ่มบรรทัด:

#EXAMPLE showing my 2nd key:
my_selector._domainkey.example.com example.com:my_selector:/etc/opendkim/my_selector.private

ถัดไปสร้างไฟล์ด้วยโปรแกรมแก้ไขข้อความของคุณ/etc/opendkim/SigningTableและเพิ่มโดเมนใน SigningTable

ฉันแสดงตัวอย่างทั้งสอง โปรดทราบว่าสำหรับคีย์ที่ 2 ของฉันตอนนี้ฉันต้องใช้ชื่อโดเมนแบบเต็ม "mail.example.com":

example.com 201205._domainkey.example.com
mail.example.com my_selector._domainkey.example.com

โปรดทราบว่าในชื่อโดเมน OpenDKIM 2.0.1 จะต้องตรงตามตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก ในตัวอย่างนี้เรากำลังใช้ OpenDKIM เวอร์ชันที่ใหม่กว่าและดูเหมือนจะไม่มีปัญหา

กำหนดค่า postfix แก้ไข /etc/postfix/main.cf และเพิ่มบรรทัดต่อท้าย

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

เปลี่ยนชื่อโฮสต์ด้วย:

#myhostname = localhost         #original
myhostname = mail.example.com

คุณควรเปลี่ยนรายการที่เกี่ยวข้องใน / etc / hosts การเปลี่ยนแปลงเหล่านี้มีผลบังคับใช้หลังจากรีบูต (แม้ว่าคุณสามารถตั้งค่าได้ทันทีที่มีคำสั่ง: hostname NEW_NAME)

รีสตาร์ท postfix และ opendkim หากคุณไม่รีบูต:

# service opendkim restart
Restarting OpenDKIM: opendkim.
# service postfix restart
 * Stopping Postfix Mail Transport Agent postfix   [ OK ]
 * Starting Postfix Mail Transport Agent postfix   [ OK ] 

การทดสอบ

วิธีที่ดีที่สุดในการตรวจสอบว่าจดหมายที่เซ็นชื่อของคุณกำลังถูกรับรองความถูกต้องและมีการตั้งค่าระเบียน DNS ของคุณอย่างถูกต้องคือการใช้บริการทดสอบฟรีหนึ่งใน ฉันใช้สิ่งเหล่านี้:

  • เครื่องมือตรวจสอบอีเมล Brandon Checketts - http://www.brandonchecketts.com/emailtest.php (รายการโปรดของฉัน)
  • ส่งอีเมลที่ลงชื่อแล้วไปที่: check-auth@verifier.port25.com (ที่ฉันชอบ)
  • ส่งอีเมลที่ลงชื่อแล้วไปที่: sa-test@sendmail.net (คุณสามารถใส่ที่อยู่อีเมลทดสอบทั้งหมดลงในฟิลด์ถึง: ของข้อความขาออกเดียวเพื่อทดสอบ)

  • ส่งอีเมลที่ลงชื่อแล้วไปที่: autorespond+dkim@dk.elandsys.com <--- BROKEN !!! อย่าใช้อันนี้

แต่ละสิ่งเหล่านี้จะบอกคุณว่าสิ่งต่าง ๆ ทำงานได้อย่างถูกต้องหรือไม่และให้คำแนะนำในการแก้ไขปัญหาหากจำเป็น

หากคุณมีบัญชี Gmail คุณสามารถส่งข้อความที่ลงชื่อเพื่อรับการทดสอบที่ง่ายและรวดเร็ว

เมื่อคุณมีความสุขที่ทุกอย่างเรียบร้อยแล้วคุณสามารถลบการตั้งค่าสถานะการทดสอบในระเบียน DNS TXT และเพิ่ม TTL

ทำ!


ทำงานอย่างสมบูรณ์แบบแม่นยำ ขอขอบคุณคำแนะนำที่ดี
Aki

ใช้ -b 1024 เพื่อสร้างคีย์จำนวน 1024 บิต มันเป็นสิ่งจำเป็นสำหรับการลงนามใน Gmail ของฉัน!
Prashant Singh

1
โปรดทราบว่าใน opendkim.conf พารามิเตอร์ทั้งสาม "Domain", "KeyFile" และ "Selector" จะถูกละเว้นเมื่อใช้ "SigningTable" และ "KeyTable" ไม่แน่ใจว่านี้มีการเปลี่ยนแปลงในบางจุด แต่มูลค่าการกล่าวขวัญ ( opendkim.org/opendkim.conf.5.html )
billynoah

0

นี่เป็นแนวทางที่ดี

มันอธิบาย opendkim ที่จะแนะนำแน่นอนและขั้นตอนในการดำเนินการลงนาม DKIM ของคุณเป็นเช่นเดียวกับ DKIM กรอง

dkim-milter ไม่ได้รับการพัฒนาอีกต่อไป เป็นผู้เขียนต้นฉบับได้แยกแหล่งที่มาและตอนนี้กำลังพัฒนา opendkim สำหรับ Lucid และรีลีสในภายหลัง opendkim เป็นที่ต้องการมากกว่า dkim-filter คำแนะนำในหน้านี้ควรเหมือนกัน (เฉพาะชื่อแพ็คเกจที่ปรับเปลี่ยนตามความจำเป็น)

BTW Domainkeys เป็นรุ่นก่อนหน้าของ DKIM เพิ่มระเบียน TXT ใน DNS Zone ของคุณสำหรับ SPF และ DKIM แต่ไม่จำเป็นต้องกังวลกับ Domainkeys อีกต่อไป


บทความที่คุณเชื่อมโยงนั้นล้าสมัย opendkim เป็นแพ็คเกจที่ใช้ตอนนี้ ฉันกำลังทำงานผ่านการตั้งค่า ...
MountainX สำหรับ Monica Cellio

ฉันให้ความสำคัญกับการอัปเดตจากประสบการณ์ของคุณขณะที่ฉันกำลังจะเปลี่ยนเซิร์ฟเวอร์จาก Exim4 ไปเป็น Postfix-Dovecot และจะมองหาคำแนะนำล่าสุด
iainH

ฉันโพสต์โซลูชัน แต่ไม่มีเวลาจัดรูปแบบ คุณ (หรือคนอื่น ๆ ) ยินดีที่จะจัดรูปแบบ แต่บันทึกของฉันนั้นกว้างขวางมากดังนั้นฉันต้องการให้คุณเข้าถึงได้โดยไม่ชักช้า ฉันหวังว่าพวกเขาจะเป็นประโยชน์
MountainX สำหรับ Monica Cellio

-1

http://wiki.zimbra.com/wiki/Configuring_for_DKIM_Signing

ฉันมักจะแน่ใจว่าข้ามคำแนะนำบางอย่างเกี่ยวกับอะไร ตุตันคาเมนในการตั้งค่าใช้งานนี้ฉันเพิ่งตรวจสอบแล้วและตรวจสอบความถูกต้องนี้ แต่คุณอาจต้องการแสดงตัวอย่าง TXT เพื่อให้ระเบียนโดเมนมีรายละเอียด ผู้คนอาจสับสนและใส่กุญแจทุกอย่างลงในค่า p ซึ่งฉันไม่แน่ใจว่าถูกต้องทั้งหมด เช่น ... รวมถึง ----- BEGIN พับลิกคีย์ ----- และ ----- สิ้นสุดพับลิกคีย์ ----- นั่นอาจทำให้บางคนสับสน ตรวจสอบให้แน่ใจว่าใส่เฉพาะส่วนการเข้ารหัสไม่ใช่ตัวทำเครื่องหมาย


3
ยินดีต้อนรับสู่ถาม Ubuntu! ในขณะที่สิ่งนี้อาจตอบคำถามในทางทฤษฎีมันก็ควรที่จะรวมส่วนที่สำคัญของคำตอบที่นี่และให้ลิงค์สำหรับการอ้างอิง
Braiam
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.