ฉันกำลังเล่นกับ Exim และสร้างเซิร์ฟเวอร์อีเมลที่สามารถรับและส่งอีเมลได้ ตอนนี้ ฉันต้องการเปิดใช้การตรวจสอบ SPF สำหรับอีเมลขาเข้าทุกฉบับ เพื่อให้ก ได้รับค่า SPF
เพิ่มส่วนหัวในอีเมลเหล่านี้ แต่ฉันไม่สามารถหาวิธีที่จะทำสิ่งนี้ได้
เอกสารกล่าวว่า การสนับสนุนการตรวจสอบ SPF มีอยู่ใน Exim หากมีการตั้งค่า SUPPORT_SPF=yes ใน Local/Makefile การสนับสนุนใช้ไลบรารี libspf2 https://www.libspf2.org/
แต่ฉันคิดว่าใคร ๆ ก็สามารถตั้งค่าตัวเลือกนี้เป็นใช่ได้หากเขา / เธอกำลังสร้าง Exim จากแหล่งที่มา ฉันติดตั้งโดยตรงจากแพ็คเกจ Ubuntu (ฉันคิดว่า libspf2 ติดตั้งอัตโนมัติแล้ว) และไม่รู้ว่าตำแหน่งของ โลคอล/เมคไฟล์
เป็น. ฉันค่อนข้างแน่ใจว่าสิ่งนี้สามารถทำได้ค่อนข้างง่าย แต่ตอนนี้ฉันไม่มีเงื่อนงำในเรื่องนี้
ฉันยังตรวจสอบไดเร็กทอรีการกำหนดค่า Exim และพบโค้ดที่เกี่ยวข้องต่อไปนี้ 30_exim4-config_check_rcpt
ไฟล์.
สิ่งนี้บอกอย่างชัดเจนว่า Exim จะตรวจสอบบันทึก SPF ของผู้ส่งหลังจากคำสั่ง RCPT หากเปิดใช้การตรวจสอบ SPF และ spf-เครื่องมือ-perl
มีการติดตั้ง ฉันติดตั้ง spf-เครื่องมือ-perl
และยังไม่เห็นมี ได้รับค่า SPF
หัวข้อ. ดังนั้นสิ่งนี้ทำให้เกิดคำถามสองข้อ
- จะเปิดใช้งานการตรวจสอบ SPF เพื่อเปิดใช้งานการเรียกใช้โค้ดนี้ได้อย่างไร
- เหตุใด spf-tools-perl เนื่องจากเอกสารระบุชัดเจนว่า Exim ใช้ libspf ทำไมต้องมีห้องสมุดสองแห่ง
# ใช้ spfquery เพื่อตรวจสอบค่า SPF หนึ่งคู่
#
# นี่เป็นค่าใช้จ่ายที่ค่อนข้างแพงในแง่ของการค้นหา DNS (ประมาณ 6 การค้นหาต่อเมล) อย่า
# เปิดใช้งานหากเป็นปัญหา โปรดทราบว่าหากคุณเปิดใช้งานสิ่งนี้ คุณต้อง
# ติดตั้ง "spf-tools-perl" ซึ่งมีคำสั่ง spfquery
# spf-tools-perl ที่ขาดหายไปจะทำให้เกิด "ข้อผิดพลาดที่ไม่คาดคิดใน
#ตรวจสอบSPF"คำเตือน
.ifdef CHECK_RCPT_SPF
ปฏิเสธ
ข้อความ = [SPF] $sender_host_address ไม่ได้รับอนุญาตให้ส่งจดหมายจาก \
${if def:sender_address_domain {$sender_address_domain}{$sender_helo_name}}
log_message=การตรวจสอบ SPF ล้มเหลว
!acl = acl_local_deny_exceptions
เงื่อนไข = ${run{/usr/bin/spfquery.mail-spf-perl --ip \
${quote:$sender_host_address} --identity \
${ถ้า def:sender_address_domain \
{--ขอบเขต mfrom --identity ${quote:$sender_address}}\
{--scope helo --identity ${quote:$sender_helo_name}}}}\
{ไม่}{${if eq {$runrc}{1}{ใช่}{no}}}}
ผัดผ่อน
ข้อความ = ข้อผิดพลาด DNS ชั่วคราวขณะตรวจสอบระเบียน SPF ลองอีกครั้งในภายหลัง
!acl = acl_local_deny_exceptions
condition = ${if eq {$runrc}{5}{yes}{no}}
เตือน
condition = ${if <={$runrc}{6}{yes}{no}}
add_header = ได้รับ-SPF: ${if eq {$runrc}{0}{pass}\
{${if eq {$runrc}{2}{softfail}\
{${if eq {$runrc}{3}{เป็นกลาง}\
{${if eq {$runrc}{4}{permerror}\
{${if eq {$runrc}{6}{none}{error}}}}}}}}}\
} client-ip=$sender_host_address; \
${ถ้า def:sender_address_domain \
{ซองจาก=${sender_address}; }{}}\
helo=$sender_helo_name
เตือน
log_message = ข้อผิดพลาดที่ไม่คาดคิดในการตรวจสอบ SPF
condition = ${if >{$runrc}{6}{yes}{no}}
.endif```