ฉันสามารถตั้งค่าคีย์ DKIM เดียวสำหรับหลายโดเมนด้วย OPENDKIM ได้โดยใช้ KeyTables และ SigningTable แต่เนื่องจากบริษัทเริ่มใช้ RSPAMD ฉันจึงไม่สามารถใช้ OPENDKIM ร่วมกับ RSPAMD ได้อีกต่อไป และจำเป็นต้องใช้ DKIM Signing Module โดย RSPAMD

เป็นเรื่องยาว แต่ฉันก็จบลงด้วยสถานการณ์นี้ซึ่งฉันต้องตั้งค่าคีย์ DKIM เดียวสำหรับโดเมนแบรนด์ของบริษัทอื่น โดยปกติ ฉันจะทำสิ่งนี้ใน OPEDKIM:

*@maincorp.com mail._domainkey.maincorp.com
*@brand1.com mail._domainkey.maincorp.com
*@brand2.com mail._domainkey.maincorp.com

แต่จะทำอย่างไรในการลงนาม RSPAMD DKIM ฉันได้ลองหลายวิธีแล้วแต่ไม่สำเร็จด้วยการเรียกดูและใช้เอกสาร RSPAMD เป็นไปได้ไหมที่จะใช้คีย์ DKIM เดียวสำหรับหลายโดเมน DKIM Signing ใน RSPAMD เช่นเดียวกับใน OPENDKIM

โปรดทราบว่าไกลจากการทดสอบของฉัน:

ในรูปแบบ 1 ต่อ 1 นั่นคือการลงนาม DKIM ด้วยคีย์ DKIM ที่แตกต่างกันสำหรับโดเมนต่างๆ ที่กำลังทำงานอยู่ แต่ฉันต้องการแบบแผน 1 ต่อ N, 1 คีย์ DKIM สำหรับหลายโดเมน

สำหรับหมายเหตุ:

  1. ฉันเข้าใจว่าฉันเพียงแค่เพิ่มระเบียน CNAME ที่ชี้ไปที่ maincorp.com _domainkey สำหรับชื่อโดเมนทุกยี่ห้อ แต่ชื่อโดเมนของแบรนด์ทุกชื่อจดทะเบียนในบริษัทจดทะเบียนโดเมนของประเทศอื่น ซึ่งฉันไม่สามารถเข้าถึงได้ทันที (มันจะเป็นระบบราชการที่ค่อนข้างยาว) ดังนั้นจึงไม่น่าเป็นไปได้
  2. ฉันใช้ Opendkim และ Spamassassin และได้รับการแต่งตั้งเรื่องนี้ในลำดับที่ 1 ทำงานได้ดี แต่ตอนนี้ Spamassassin แทนที่ด้วย RSPAMD และ Opendkim ไม่ได้ใช้อีกต่อไป

ขอขอบคุณ,

โทมัส

สำหรับการอ้างอิงของคุณนี่คือการกำหนดค่า DKIM Signing ของฉันใน local.d/dkim_signing.conf:

local.d/dkim_signing.conf ของฉัน:

enabled = true;

If false, messages with empty envelope from are not signed
allow_envfrom_empty = true;

# If true, envelope/header domain mismatch is ignored
allow_hdrfrom_mismatch = false;

# If true, multiple from headers are allowed (but only first is used)
allow_hdrfrom_multiple = false;

# If true, username does not need to contain matching domain
allow_username_mismatch = true;

# If false, messages from authenticated users are not selected for signing
auth_only = true;

# Default path to key, can include '$domain' and '$selector' variables
#path = "/etc/opendkim/userkeys/$domain/$selector.private";
path = "/etc/opendkim/keys/mailcorp.com/mail.private";

# Default selector to use
#selector = "default";
selector = "mail";

# If false, messages from local networks are not selected for signing
sign_local = true;

# Map file of IP addresses/subnets to consider for signing
# sign_networks = "/some/file"; # or url
# Symbol to add when message is signed
symbol = "DKIM_SIGNED";

# Whether to fallback to global config
try_fallback = false;
selector_map = "/etc/rspamd/dkim_selectors.map";
path_map = "/etc/rspamd/dkim_paths.map";

# Domain to use for DKIM signing: can be "header" (MIME From), "envelope" (SMTP From) or "auth" (SMTP username)
use_domain = "header";

# Domain to use for DKIM signing when sender is in sign_networks ("header"/"envelope"/"auth")
use_domain_sign_networks = "header";

# Domain to use for DKIM signing when sender is a local IP ("header"/"envelope"/"auth")
use_domain_sign_local = "header";

# Whether to normalise domains to eSLD
use_esld = false;

# Whether to get keys from Redis
# Not using redis, keys coming from files in /etc/opendkim
use_redis = false;

# Hash for DKIM keys in Redis
key_prefix = "DKIM_KEYS";

/etc/rspamd/dkim_selector.map ของฉัน:

maincorp.com mail
brand1.com mail
brand2.com mail

และ /etc/rspamd/dkim_paths.map ของฉัน:

maincorp.com /etc/opendkim/keys/mancorp.com/mail.private
brand1.com /etc/opendkim/keys/mancorp.com/mail.private
brand2.com /etc/opendkim/keys/mancorp.com/mail.private

การใช้การกำหนดค่าด้านบนที่ local.d/dkim_signing.conf ส่งผลให้ได้ผลลัพธ์ดังต่อไปนี้:

  • เมื่อส่งอีเมลจาก @mailcorp.com จะไม่มีปัญหาและ DKIM จะได้รับการลงนาม ทำไม? เพราะที่ DNS mailcorp.com มี _domainkey
  • แต่เมื่อส่งอีเมลจาก @brand1.com และ @brand2.com จะไม่มีการเซ็นชื่อ DKIM เว้นแต่ฉันจะเพิ่มระเบียน CNAME ใน brand1.com และ brand2.com ซึ่งฉันไม่ต้องการตั้งแต่ครั้งแรก

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

เป้าหมายคือเพื่อให้สามารถสำหรับ brand1.com และ brand2.com ได้รับการลงนามโดยคีย์ DKIM เดียวที่มีอยู่แล้วซึ่งใช้งานแล้วใน TXT Record ใน maincorp.com โดยไม่จำเป็นต้องเพิ่ม CNAME หรือ TXT Record _domainkey ในแต่ละ brand1.com และแผง DNS ของ brand2.com

สำหรับ maincorp.com มันใช้งานได้แล้วเพราะมี TXT Record ของ mail._domainkey.maincorp.com ในแผง DNS แต่ใช้ไม่ได้กับ brand1.com และ brand2.com

กรุณาช่วย...

อัปเดต 9 เมษายน 2019:

ฉันพบว่าคุณลักษณะนี้ที่ฉันต้องการยังไม่ได้รับการสนับสนุนจาก RSPAMD อย่างน้อยก็ในเวลาที่มีการสอบสวนเรื่องนี้ หวังว่าพวกเขาจะเปิดใช้งานได้

ดังนั้น สำหรับตอนนี้ ฉันแค่ต้องเพิ่มระเบียน CNAME ใน brand1.com และ brand2.com เพื่อให้ DKIM ถูกต้องและลงนาม :(

ขอบคุณมากสำหรับความอดทนและความช่วยเหลือ! มีวันที่ดี!

answer

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

key_table = [ 
  "maincorp.com maincorp.com:dkim:/var/lib/rspamd/dkim/dkim.key"
];
signing_table = [ 
  "*@maincorp.com maincorp.com",
  "*@brand1.com maincorp.com",
  "*@brand2.com maincorp.com"
];

หรือเพียงแค่ลงชื่อทุกโดเมน

signing_table = [ 
  "* maincorp.com",
];

ซึ่งจะส่งผลให้ลายเซ็น dkim ต่อไปนี้:

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=maincorp.com;
    s=dkim; t=[...];
    h=from:from:reply-to:subject:subject:date:date:message-id:message-id:to:
     cc; bh=[...];
    b=[...]

เอกสาร rspamd dkim_signing อย่างเป็นทางการ