ฉันจะใช้ไวด์การ์ดสำหรับ sendmail TLS_Rcpt ได้อย่างไร


9

sendmail ช่วยให้ข้อ จำกัด สถานที่หนึ่งในการสนทนา TLS ฉันต้องการตรวจสอบว่าข้อความที่ส่งถึง example.com ถูกส่งไปยังเซิร์ฟเวอร์ที่มีใบรับรอง * .messagelabs.com ฉันต้องการป้องกันการปลอมแปลง DNS และ MitM หาก messagelabs มีเซิร์ฟเวอร์เพียงเซิร์ฟเวอร์เดียวที่ง่าย:

TLS_Rcpt:example.com VERIFY:256+CN:mx.messagelabs.com

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

ฉันเหนื่อย

TLS_Rcpt:example.com VERIFY:256+CN:messagelabs.com
TLS_Rcpt:example.com VERIFY:256+CN:*.messagelabs.com
TLS_Rcpt:example.com VERIFY:256+CN:.*.messagelabs.com

แต่ฉันได้รับข้อผิดพลาดเช่น

CN mail31.messagelabs.com does not match .*.messagelabs.com

ฉันจะทำสิ่งนี้ได้อย่างไร นี่เป็นคำขอที่เกิดขึ้นอีกครั้งสำหรับเรา (ส่วนใหญ่ใช้สำหรับการกำหนดค่าเช่น TLS_Rcpt: example.com VERIFY: 256 + CN: *. example.com) ดังนั้นฉันจึงพร้อมที่จะแก้ไข sendmail.cf แต่ฉันไม่เข้าใจ

STLS_req
R $| $+         $@ OK
R<CN> $* $| <$+>                $: <CN:$&{TLS_Name}> $1 $| <$2>
R<CN:$&{cn_subject}> $* $| <$+>         $@ $>"TLS_req" $1 $| <$2>
R<CN:$+> $* $| <$-:$+>  $#error $@ $4 $: $3 " CN " $&{cn_subject} " does not match " $1
R<CS:$&{cert_subject}> $* $| <$+>       $@ $>"TLS_req" $1 $| <$2>
R<CS:$+> $* $| <$-:$+>  $#error $@ $4 $: $3 " Cert Subject " $&{cert_subject} " does not match " $1
R<CI:$&{cert_issuer}> $* $| <$+>        $@ $>"TLS_req" $1 $| <$2>
R<CI:$+> $* $| <$-:$+>  $#error $@ $4 $: $3 " Cert Issuer " $&{cert_issuer} " does not match " $1
ROK                     $@ OK

Sendmail 8.14.7 (อัปเกรดเป็น 8.15.2 เร็ว ๆ นี้)


ดังนั้นไม่มีคำตอบ (หรือยัง) ฉันพยายามตอบด้วยตัวเอง แต่ฉันไม่แน่ใจว่าจะรวมบทที่ 28 ของ sendmail ในเวลาหนึ่งวันหรือมากกว่านั้นหรือไม่
Law29

2
ฉันไม่มีความมั่นใจพอที่จะให้คำตอบที่ชัดเจน แต่ฉันไม่คิดว่า wildcard ได้รับการสนับสนุนตามส่วน "ข้อ จำกัด ในการใช้งานปัจจุบัน" ของโพสต์บล็อกนี้: security-skywalker.blogspot.com/2013/01//
Mike B

... และใช่ฉันทราบว่า "wildcard certs" นั้นแตกต่างจากฟังก์ชันการทำงานของรูปแบบการจับคู่สัญลักษณ์ที่คุณกำลังมองหา แต่บทความนี้เน้นถึงลักษณะคงที่ของคุณลักษณะนั้น :-)
Mike B

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

คุณต้องการทดสอบการสนับสนุนแท็ก CNRE หรือไม่ มันจะทดสอบ $ & {cn_subject} กับนิพจน์ทั่วไปที่กำหนดเองของคุณ
AnFi

คำตอบ:


1

ทำให้ร้านค้า sendmail.cf กับส่วนที่เป็นเจ้าภาพในการปล้น${cn_subject} มันทำให้การดำเนินการเสร็จสิ้นเป็นเรื่องเล็กน้อย${cn1_subject}

คำเตือน:ขอความคิดเห็นnews:comp.mail.sendmailก่อนที่จะปรับใช้ในสภาพแวดล้อมการทดสอบไม่ได้ มันอาจใช้งานได้ แต่ sendmail ทำให้หลีกเลี่ยง "ผลข้างเคียงที่ไม่คาดคิด" อย่างระมัดระวังมากกว่าที่ฉันพร้อมที่จะ "ลงทุน" ฉัน "ทดสอบแห้ง" ด้วย sendmail-8.15.2

การเข้าถึง:

TLS_Rcpt:example.com VERIFY:256+CN1:messagelabs.com

sendmail.mc แก้ไขเพื่อสนับสนุนรายการข้างต้น

คำเตือน:จดจำเกี่ยวกับ TAB (\ t) ระหว่าง RHS และ LHS ในRบรรทัด
มันคือการดำเนินการที่สกปรกมากขึ้นผ่านทางเท่านั้นsendmail.mc

define(`_LOCAL_TLS_RCPT_')dnl
LOCAL_RULESETS
SLocal_tls_rcpt
R$*     $: $&{cn_subject}
R$-.$+  $@ $(macro {cn1_subject}  $@ $2 $)
R$*     $@ $(macro {cn1_subject}  $@ $)    

# Ruleset continued
STLS_req
R<CN1:$&{cn1_subject}> $* $| <$+>               $@ $>"TLS_req" $1 $| <$2>
R<CN1:$+> $* $| <$-:$+> $#error $@ $4 $: $3 " CN-1 " $&{cn_subject} " does not match " $1
ROK                     $@ OK
divert(0)dnl

คำอธิบาย:

  1. ทำให้Local_tls_rcptร้านค้าตั้งกฎ${cn_subject}ด้วยส่วน "ก่อนจุดแรก" ถอด${cn1_subject}
  2. เพิ่มการตรวจสอบของที่${cn1_subject}ถูกเรียกโดยคำนำหน้า CN1 ใน "ส่วนพิเศษ" ของTLS_reqการตั้งค่ากฎ

สคริปต์ตัวอย่างเพื่อทดสอบ

#!/bin/sh
# -C sendmail-test.cf -- use non standard cf file
# -d60.5 -- trace (access) map lookus
# -d21.12 -- trace R lines rewriting 
sendmail -C sendmail-test.cf -bt -d60.5 <<END
.D{verify}OK
.D{cn_subject}mail31.messagelabs.com
.D{server_name}mail31.messagelabs.com
tls_rcpt user1@example.com
END

ยอมรับสิ่งนี้แม้ว่าฉันจะยังไม่ได้ทดสอบก็ตาม มันเป็นสิ่งที่ฉันเชื่อว่าต้องเป็นไปได้ แต่ไม่สามารถหาวิธีทำได้
Law29

1

นี่ไม่ใช่คำตอบสำหรับคำถามที่ถูกโพสต์ แต่ดูเหมือนว่าฉันเหมือนคุณกำลังทำสิ่งที่ยาก

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

Sendmail เป็นวัตถุโบราณที่น่ากลัวเมื่อ 15 ปีที่แล้ว linux distribbutions บางตัวยังคงจัดเตรียมไว้ตามค่าเริ่มต้นและก็ใช้ได้ถ้าค่าเริ่มต้นเหมาะกับคุณ แต่ทันทีที่คุณพบว่าตัวเองทำอะไรที่ใช้เวลาไม่กี่นาทีคุณควรโยน sendmail ออกและติดตั้ง MTA ที่ทันสมัย .

ประมาณ 15 ปีที่ผ่านมา qmail อาจยังคงเป็นสิ่งทดแทนที่สมเหตุสมผล แต่เกือบจะเป็นเวลานานที่ฉันได้พิจารณาทางเลือกที่ดีกว่า เอกสารจากเว็บไซต์ postfix.org นั้นดีเมื่อคุณพบบิตที่คุณต้องการ ในกรณีของคุณคุณจะต้องการhttp://www.postfix.org/TLS_README.htmlสำหรับปัญหานี้

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


ที่จริงฉันบริหาร postfix นานกว่าที่ฉันจัดการ sendmail ด้วยเหตุผล $ และวันนี้ฉันมีเซิร์ฟเวอร์ sendmail 16 หลักในสภาพแวดล้อมที่กำหนดเองซึ่งไม่ง่ายที่จะเปลี่ยน การอัพเกรดเป็นเวอร์ชั่นล่าสุดนั้นใช้เวลาไม่กี่นาที แต่การเปลี่ยนแปลงนั้นเป็นอีกเรื่องหนึ่ง อย่างไรก็ตามคุณถูกต้องว่าการใช้ postfix "smtp_tls_policy_maps" ที่มี "example.com secure match = .messagelabs.com" ดูเหมือนจะให้ความปลอดภัยที่ฉันต้องการ กรณีการใช้งานจริงอาจให้เหตุผลที่ฉันต้องใช้เวลาที่จำเป็นในการเปลี่ยนแปลง
กฎหมาย 29
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.