DKIM ลงชื่อออกจดหมายจากโดเมนใด ๆ (ด้วย Postfix และ Ubuntu)


40

ฉันได้รับการติดตั้ง DKIM บนเซิร์ฟเวอร์อีเมลของฉัน (postfix และ ubuntu) ดังนั้นมันจึงลงนามอีเมลขาออก ฉันใช้คำแนะนำเหล่านี้: https://help.ubuntu.com/community/Postfix/DKIM

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

ก่อนอื่นฉันตั้ง "Domain *" ใน /etc/dkim-filter.conf สิ่งนี้ได้รวมส่วนหัว DKIM ไว้ในอีเมลขาออกทั้งหมดไม่ว่าจะเป็นโดเมนใด

อย่างไรก็ตามการตรวจสอบการตรวจสอบล้มเหลวใน gmail เพราะกำลังตรวจสอบโดเมนในที่อยู่จากไม่ใช่ที่อยู่โดเมนของฉัน (และบันทึก DNS) ไม่มีใครรู้วิธีการทำเช่นนี้?

คำตอบ:


41

โอเคฉันคิดออกเอง แต่ฉันต้องการโพสต์ขั้นตอนที่นี่เพื่อลูกหลานเพราะมีเอกสารศูนย์ในนี้ (ที่ฉันสามารถหา) และมันก็คาดเดาและตรวจสอบจริง

หลังจากที่ฉันตั้งค่า "โดเมน *" ตามที่อธิบายไว้ข้างต้นก็จะเซ็นชื่อแบบนี้:

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=clientdomain.com;
    s=main; t=1250005729;
    bh=twleuNpYDuUTZQ/ur9Y2wxCprI0RpF4+LlFYMG81xwE=;
    h=Date:From:To:Message-Id:Subject:Mime-Version:Content-Type;
    b=kohI7XnLlw/uG4XMJoloc4m9zC13g48+Av5w5z7CVE0u3NxsfEqwfDriapn7s7Upi
     31F3k8PDT+eF57gOu2riXaOi53bH3Fn/+j0xCgJf8QpRVfk397w4nUWP/y8tz4jfRx
     GhH21iYo05umP0XflHNglpyEX02bssscu2VzXwMc=

สังเกตเห็น "d = clientdomain.com" มันกำลังสร้างสิ่งนี้โดยอ้างอิงจากที่อยู่ในอีเมลซึ่งที่อยู่จากนั้นเป็นบางสิ่งเช่น "contact@clientdomain.com" เห็นได้ชัดว่าถ้ามันตรวจสอบโดเมนของลูกค้าและไม่ใช่ของฉันไม่มีระเบียน DNS TXT อยู่ที่นั่นและการตรวจสอบจะล้มเหลว

ดังนั้นฉันพบในเอกสารนี้ว่าคุณสามารถตั้งค่าพารามิเตอร์ KeyList ได้ http://manpages.ubuntu.com/manpages/hardy/man5/dkim-filter.conf.5.html

มันไม่ได้อธิบายสิ่งที่ฉันต้องการจริงๆ แต่ฉันคิดว่าฉันจะเล่นกับมัน ฉันคอมเม้นท์ KeyFile และตั้ง KeyList เป็น "/etc/mail/dkim_domains.key" ซึ่งเป็นชื่อไฟล์ที่ฉันสร้างขึ้นเอง จากนั้นฉันก็สร้างไฟล์นั้นขึ้นมาและใส่ลงไปในไฟล์ "*: feedmailpro.com: /etc/mail/dkim.key" สิ่งนี้จะบอกว่าสำหรับโดเมนลูกค้าใด ๆ ลงชื่อด้วยโดเมนของฉัน (feedmailpro.com) และใช้ไฟล์ dkim.key

รีสตาร์ท DKIM และ postfix

sudo /etc/init.d/dkim-filter restart
sudo /etc/init.d/postfix restart

ตอนนี้นี่คือกุญแจสำคัญที่สร้างขึ้นเมื่อฉันส่งอีเมลทดสอบ

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=feedmailpro.com;
    s=dkim.key; t=1250005729;
    bh=twleuNpYDuUTZQ/ur9Y2wxCprI0RpF4+LlFYMG81xwE=;
    h=Date:From:To:Message-Id:Subject:Mime-Version:Content-Type;
    b=kohI7XnLlw/uG4XMJoloc4m9zC13g48+Av5w5z7CVE0u3NxsfEqwfDriapn7s7Upi
     31F3k8PDT+eF57gOu2riXaOi53bH3Fn/+j0xCgJf8QpRVfk397w4nUWP/y8tz4jfRx
     GhH21iYo05umP0XflHNglpyEX02bssscu2VzXwMc=

การปรับปรุงคุณจะเห็น d = ตอนนี้ถูกตั้งค่าเป็นโดเมนของฉัน (แม้ว่าที่อยู่อีเมลจะไม่ใช่โดเมนของฉัน) อย่างไรก็ตาม s = เปลี่ยนเป็น "dkim.key" แทนตัวเลือกที่ฉันเลือกใน dkim-filter.conf ในคำแนะนำการตั้งค่าดั้งเดิมฉันจะตั้งค่าตัวเลือกเป็น "เมล" มันแปลก แต่ฉันสังเกตว่ามันเปลี่ยนเป็นชื่อไฟล์ของคีย์ dkim.key

ดังนั้นฉันจึงไปและเปลี่ยนชื่อ "/etc/mail/dkim.key" เป็น "/ etc / mail / mail" อัปเดตข้อมูลอ้างอิงด้วยใน "/etc/mail/dkim_domains.key"

รีสตาร์ท dkim-filter และ postfix อีกครั้งเหมือนข้างบนและตอนนี้มันก็เริ่มทำงาน นี่คือส่วนหัวสุดท้ายซึ่งลงชื่ออย่างถูกต้องโดยใช้ตัวเลือกที่เหมาะสม (เห็นได้ชัดว่าอิงจากชื่อไฟล์ของคีย์)

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=feedmailpro.com;
    s=mail; t=1250006218;
    bh=tBguOuDhBDlhv0m4KF66LG10V/8ijLcAKZ4JbjpLXFM=;
    h=Date:From:To:Message-Id:Subject:Mime-Version:Content-Type;
    b=c9eqvd+CY86BJDUItWVVRvI3nibfEDORZbye+sD1PVltrcSBOiLZAxF3Y/4mP6vRX
     MUUNCC004oIH1u7FYafgF32lpuioMP1cd7bi6x3AZ5zH4BYETNBnnz4AhAPBtqlIh/
     FFMz8jkhhLhcM2hDpwJkuKjAe3LzfNVDP8kD11ZI=

ตอนนี้ s = mail ถูกต้องและ d = feedmailpro.com ถูกต้อง มันได้ผล!

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

หมายเหตุสุดท้ายสุดท้ายเพื่อตรวจสอบว่ามีการตั้งค่าระเบียน TXT DNS อย่างถูกต้องหรือไม่คุณสามารถทำคำสั่งเช่นเดียวกับโดเมนของคุณ

dig mail._domainkey.feedmailpro.com TXT

อาจจำเป็นต้องติดตั้ง dig (sudo apt-get install dig) หากคุณใช้ตัวจัดการ Slicehost เพื่อเพิ่มรายการ DNS คุณจะต้องป้อนระเบียน TXT เช่นนี้

Type: TXT
Name: mail._domainkey
Data: k=rsa; t=s; p=M5GfMA0...YOUR LONG KEY...fIDAQAB
TTL seconds: 86400

ฉันไม่เข้าใจว่าทำไมชื่อจึงถูกตั้งค่าเป็น "mail._domainkey" โดยไม่มีจุดสิ้นสุดหรือไม่มีโดเมนของฉันเช่น "mail._domainkey.feedmailpro.com" แต่อะไรก็ตามมันก็ใช้ได้เหมือนกันดังนั้นฉันจึงมีความสุข

หากคุณพยายามทำซ้ำนี่คือคำแนะนำที่ฉันเริ่มต้นด้วย: https://help.ubuntu.com/community/Postfix/DKIM


2
ขอบคุณที่วางมันไว้ที่นี่มันช่วยคนอื่น (อย่างฉัน) :) :)
thomasrutter

ยินดีต้อนรับโทมัส!
Brian Armstrong

ว้าวสิ่งนี้ช่วยได้มาก ฉันทุบหัวของฉันเพราะ "s = dkim.key" จนกว่าฉันจะเจอโพสต์ของคุณ!
3molo

สิ่งหนึ่งที่คำแนะนำที่ ubuntu.com ล้มเหลวในการพูดถึงคือเมื่อคุณใช้งานได้ให้เปลี่ยน t = y เป็น t = n ในระเบียน TXT เป็นสถานะที่ไม่ใช่การทดสอบ
3molo

มีแหล่งข้อมูลที่ดีสำหรับการใช้ SigningTable เป็นต้นตัวอย่างเช่นblog.tjitjing.com/index.php/2012/03/… (ยอดเยี่ยม) และแม้แต่ opendkim readme, opendkim.org/opendkim-README
rfay

15

แรงบันดาลใจจากคำตอบที่ไบรอันอาร์มสตรองสำหรับ DKIM กรองที่นี่เป็นวิธีที่ผมทำอย่างนี้สำหรับOpenDKIM

/etc/opendkim.conf

Syslog          yes
UMask           002
KeyTable        /etc/mail/dkim_key_table
SigningTable    refile:/etc/mail/dkim_signing_table

โปรดทราบว่า SigningTable มีrefile:ในคำจำกัดความของมันนี้ระบุว่าไฟล์มีการแสดงออกปกติ; ในกรณีของเราคือ * สัญลักษณ์แทน

/ etc / mail / dkim_key_table

keyname  example.com:selector:/etc/mail/selector.key

ที่นี่keynameใช้เพื่อจับคู่คีย์ระหว่างไฟล์นี้กับไฟล์ dkim_signing_table ในไฟล์จริงของฉันฉันชื่อนี้เหมือนกับตัวเลือกของฉัน

example.comและselectorควรแทนที่โดเมนและตัวเลือกที่คุณต้องการใช้ในd =และs =ตามลำดับ

/ etc / mail / dkim_signing_table

*   keyname

ไฟล์นี้แม็พแอดเดรสธรรมดาที่พบในส่วนหัวจาก:ถึงคีย์ใน dkim_key_table ในกรณีนี้เราต้องการให้อีเมลทั้งหมดที่ส่งผ่านเซิร์ฟเวอร์นี้ถูกเซ็นชื่อด้วยรหัสเดียวกันดังนั้นจึงใช้ * wildcard


สำหรับผู้ที่ได้รับ "ไม่มีการจับคู่ตารางการลงนามใน OpenDKIM" serverfault.com/q/569823/115907
kommradHomer

หากใครมาถึงคำตอบนี้ (คำตอบยอดเยี่ยม btw! สอนสิ่งที่ฉันต้องการ) และกำลังมองหาที่จะส่งจากสองโดเมนที่แตกต่างกันด้วยคีย์ที่แตกต่างกันซึ่งสามารถทำได้เช่นนี้: ไฟล์ KeyTable: "tagone._domainkey.firstdomain.com firstdomain .com: tagone: /etc/opendkim/keys/firstdomain.com/tagone tagtwo._domainkey.seconddomain.com seconddomain.com:tagtwo:/etc/opendkim/keys/seconddomain.com/tagtwo "การลงชื่อเข้าใช้ตาราง:" * @ firstdomain com tagone._domainkey.firstdomain.com *@seconddomain.com tagtwo._domainkey.seconddomain.com "แต่ละไฟล์มี 2 บรรทัด (ความคิดเห็นไม่ได้บันทึกการระบาดที่นี่)
Sean Colombo

หรือ: SigningTable csl: * = keyname KeyTable csl: keyname = example.com: selector:
/etc/mail/selector.key

3

เธรดเก่า แต่อาจเป็นคนอื่นที่พบว่าสิ่งนี้มีประโยชน์ในการรู้ว่า opendkim เวอร์ชั่น 2.x ทำงานร่วมกับ KeyTable แทน KeyList

คุณสามารถแปลงไฟล์ KeyList ของคุณด้วยเครื่องมือ opendkim-convert-keylist ( http://manpages.ubuntu.com/manpages/lucid/man8/opendkim-convert-keylist.8.html )

คุณสามารถอ่านเพิ่มเติมเกี่ยวกับการใช้งาน KeyTable ได้ในหน้า man opendkim: ( http://www.opendkim.org/opendkim.conf.5.html )


โปรดสรุปบทความที่คุณเชื่อมโยงโดยอ้างถึงส่วนของรหัสที่เกี่ยวข้องหรือบล็อกการกำหนดค่า ไซต์สามารถเปลี่ยนแปลงได้ในอนาคตหรือไม่สามารถโหลดได้ด้วยเหตุผลหลายประการ
89c3b1b8-b1ae-11e6-b842-48d705

2

ฉันไม่เข้าใจว่าทำไมตั้งชื่อเป็น "mail._domainkey" โดยไม่มีระยะเวลา

เอกสารสำหรับตัวกรอง DKIM มักจะติดตั้งในรูปแบบ thre unix man มีเพียง Google เท่านั้นที่รู้ :-) ฉันก็มีปัญหาเช่นกัน

man dkim-filter.conf
man dkim-filter
man dkim-genkey

man dkim-stats
man dkim-testkey
man dkim-testssp

ฉันลองใช้ Debian หากไม่ได้อยู่ในการกระจายของคุณคุณสามารถดาวน์โหลด tarball ต้นฉบับและอ่านเอกสารได้ง่าย

man dkim-milter-2.8.3/dkim-filter/dkim-filter.conf.5

เป็นต้น

-

ฉันไม่เข้าใจว่าทำไมตั้งชื่อเป็น "mail._domainkey" โดยไม่มีระยะเวลา

เพื่อให้คุณสามารถใช้เหมือนกันในระเบียน DNS ของโดเมนที่ต่างกัน

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