ฉันจะเปลี่ยน primary_hostname ของ Exim4 บนกล่อง Debian ได้อย่างไร


24

เซิร์ฟเวอร์ SMTP ระยะไกลบางตัวฉันพยายามส่งจดหมายไปยังปฏิเสธที่จะยอมรับ HELO จากเซิร์ฟเวอร์ของฉัน:

504 5.5.2 <localhost>: Helo command rejected: need fully-qualified hostname

เห็นได้ชัดว่าเซิร์ฟเวอร์ Exim4 ของฉันส่งlocalhostเป็น FQDN ค้นหาสุทธิและไฟล์ปรับแต่งมากมายฉันได้เรียนรู้ว่าค่าที่ส่งเป็น FQDN ระหว่าง HELO นั้นมาจากprimary_hostnameตัวแปรการกำหนดค่า

คำถามของฉันคืออะไรวิธีที่ถูกต้องในการเปลี่ยนตัวแปรนี้ในระบบ Debian คืออะไร? ผมคิดว่าผมสามารถ hardcode ค่าในการ config ไฟล์ exim4 แต่ IMHO มันก็ดูเหมือนจะทำให้รู้สึกมากขึ้นถ้าค่าโดยอัตโนมัติตรงกับ/etc/mailnameหรืออื่น ๆ ชื่อการตั้งค่าส่วนกลาง

ฉันรู้สึกว่าคำตอบสำหรับคำถามของฉันสามารถพบได้ในข้อความนี้จากDebian wiki :

ชื่อที่ใช้โดยเอ็กซิมใน EHLO / HELO primary_hostnameถูกดึงออกมาจากตัวเลือกการกำหนดค่า การกำหนดค่าเริ่มต้น exim4 Debian primary_hostnameไม่ได้ตั้งค่า Exim จะใช้ค่าเริ่มต้นเป็น uname () เพื่อค้นหาชื่อโฮสต์ ถ้าการเรียกนั้นส่งคืนหนึ่งคอมโพเนนต์เท่านั้น gethostbyname () หรือ getipnodebyname () จะถูกใช้เพื่อรับชื่อโฮสต์แบบเต็ม

หาก Exim HELO ของคุณเป็น localhost.localdomain คุณอาจมี / etc / hosts ที่กำหนดค่าผิดพลาดซึ่งสร้างขึ้นโดยตัวติดตั้ง Debian บางเวอร์ชัน ในกรณีนี้โปรดแก้ไข / etc / hosts ของคุณ

น่าเสียดายที่ฉันไม่คุ้นเคยกับการดูแลเซิร์ฟเวอร์ Linux เพื่อให้รู้ว่าสิ่งนี้หมายถึงอะไร :(

คำตอบ:


21

ไฟล์ / etc / hosts ของคุณควรมีระเบียนอย่างน้อยสองรายการ บันทึกแรกควรอยู่ในรูปแบบ:

<IP_ADDRESS> <HOST_FQDN> <HOSTNAME>

คนที่สองควรอยู่ในรูปแบบ:

127.0.0.1 localhost

คุณต้องตรวจสอบให้แน่ใจว่าไฟล์ / etc / hostname ของคุณมี FQDN ของเซิร์ฟเวอร์และการเรียกใช้hostname -fจะส่งคืนเซิร์ฟเวอร์ของคุณ FQDN หากคุณแน่ใจว่าทั้งหมดนี้ถูกต้องและเริ่ม Exim ใหม่คุณควรเริ่มเห็น HELO อย่างถูกต้อง


ฉันเปลี่ยน / etc / hostname จากชื่อเครื่องในระบบเป็น FQDN hostname -fยังคงรายงาน "localhost" ส่วนเกี่ยวกับ / etc / hosts ในคำตอบของคุณดูเหมือนจะเป็นรถ - อะไรคือระเบียนแรกที่ควรมีลักษณะอย่างไร
Jørn Schou-Rode

1
ในขณะที่hostname -fยังรายงานว่า "localhost" ดูเหมือนว่าการเปลี่ยนเป็น / etc / hostname นั้นเป็นเรื่องหลอกลวงฉันสามารถส่งจดหมายได้ทันที ฉันยังคงอยากจะเห็นส่วนที่ขาดหายไปของโพสต์ของคุณแม้ว่า :)
Jørn Schou-Rode

อ๊ะ! การจัดรูปแบบ flub คงที่ :-)
Paul Lathrop

1
/etc/hostnameโดยทั่วไปจะไม่มี FQDN ในระบบ Debian เพียงชื่อโฮสต์สั้น ๆ
Josip Rodin

บรรทัดแรกใน/etc/hostsอาจจะเป็น127.0.0.2 mydomain.com myhostname(ใช้127.0.0.2งานได้ดี127.0.0.1เนื่องจาก loopback เป็นเครือข่ายคลาส A) คุณอาจรวมสองบรรทัดเข้า127.0.0.1 mydomain.com myhostname localhostด้วยกัน แต่localhostเป็นชื่อโฮสต์ที่ยอมรับ127.0.0.1ได้ใช่ไหม ทั้งหมดระบุว่าคุณมีชื่อโฮสต์ไม่ใช่ FQDN เป็นชื่อโฮสต์ของคุณ นอกจากนี้การเปลี่ยนแปลงไม่ได้จะมีผลทันทีที่คุณได้/etc/hostname hostname myhostnameหรือรีสตาร์ทเซิร์ฟเวอร์
x-yuri

8

หากคุณใช้ไฟล์กำหนดค่าเดียวให้ตั้งค่าตัวแปร primary_HOST_NAME เป็นชื่อที่ต้องการ

ตัวอย่างเช่นใน /etc/exim4/exim4.conf:

PRIMARY_HOST_NAME = mybox.mydomain.com

หรือตั้งMAIN_HARDCODE_PRIMARY_HOSTNAMEใน update-exim4.conf.conf หากคุณใช้การกำหนดค่าไฟล์แยก

เพื่อความปลอดภัยให้เริ่ม exim ใหม่


เพียงทราบว่าโฮสต์ที่ระบุไว้ไม่สามารถอยู่ในเครื่องหมายอัญประกาศมิฉะนั้น exim จะส่งHELO 'mybox.mydomain.com'ตัวแบ่งที่ส่งจดหมายไปยัง Google หรืออื่น ๆ
mkomarinski

1
ฉันไม่พบชื่อตัวแปร "Primary_HOST_NAME" นี้ในเอกสารประกอบ คุณพบสิ่งนี้ที่ไหน
Josip Rodin

ใน Debian คุณต้องเรียกใช้update-exim4.confหลังจากเปลี่ยนการกำหนดค่า และการรีสตาร์ทโดยทั่วไปไม่จำเป็นต้องมีหลังจากนั้น
x-yuri

... eximโดยทั่วไปดูเหมือนว่าจะสังเกตเห็นการเปลี่ยนแปลงการตั้งค่าโดยไม่ต้องโหลดซ้ำ แต่มันปลอดภัยกว่าในการโหลดเนื่องจากฉันคิดว่า daemon นั้นจะไม่อ่านการกำหนดค่าอีกครั้งจนกว่าจะโหลดซ้ำ จากนั้นคุณทำให้ดูเหมือน/etc/exim4/exim4.confจะมีเพียงบรรทัดด้านบนแต่ช่วงเวลาที่คุณสร้างไฟล์/var/lib/exim4/config.autogeneratedจะถูกละเว้น ...
x-yuri

... "กระบวนการที่แยกออกมา Exim เริ่มต้นสำหรับการรับ SMTP หรือการรันคิวจะใช้ไฟล์กำหนดค่าใหม่ในขณะที่ exim-daemon หลักดั้งเดิมจะยังคงใช้ไฟล์กำหนดค่าเก่า" ดังนั้นสำหรับไฟล์การกำหนดค่าเดียวจะใช้ดีที่สุด/etc/exim4/exim4.conf.localmacrosสำหรับการแบ่ง/etc/exim4/conf.d/main/000_localmacros(ไฟล์ในmaindir ถูกประมวลผลก่อน) และเรียกใช้update-exim4.conf+ systemctl reload exim4หลังจากทำการเปลี่ยนแปลง
x-yuri

4

ชื่อโฮสต์หลักจะได้รับแจ้งในระหว่างการติดตั้ง exim4 คุณสามารถเรียกใช้คำสั่ง

sudo dpkg-reconfigure exim4-config

เพื่อผ่านการแจ้งเตือนอีกครั้ง

เท่าที่ฉันรู้ถ้าคุณใช้ 'แบ่งการกำหนดค่า' (ไฟล์จำนวนมากภายใต้ /etc/exim4/conf.d) และเลือกที่จะยึดติดกับที่เมื่อได้รับแจ้ง dpkg-reconfigure ไม่ควรเขียนทับใด ๆ ของ การเปลี่ยนแปลงการกำหนดค่าที่มีอยู่ของคุณนอกเหนือจากการตั้งค่าที่แจ้งให้คุณทราบ แต่เช่นเคยคุณควรสำรองข้อมูลก่อนเพื่อความปลอดภัย


2
ดูเหมือนว่าจะขอ "ชื่อเมล [ซึ่ง] ควรเป็นชื่อโดเมนแบบเต็ม (FQDN) ที่มีคุณสมบัติครบถ้วน" อย่างไรก็ตามการตั้งค่านี้ถูกต้องแล้วและดูเหมือนว่า HELO จะพูดว่า "localhost"
Jørn Schou-Rode

/etc/mailnameสิ่งที่คุณกำลังพูดถึงเป็นชื่ออีเมลที่ไปที่แปลกใจประหลาดใจ โดยค่าเริ่มต้นจะใช้เพื่อให้มีคุณสมบัติไม่เหมาะสมอยู่ รายการที่ประกอบด้วยเฉพาะจากชื่อผู้ใช้ /etc/mailnameโดยการเพิ่มชื่อโดเมนจาก ที่อยู่ที่เป็นผลลัพธ์จะใช้ในFromส่วนหัว
x-yuri

2

primary_hostnameตัวแปรเต็มไปตามชื่อโดเมน (แบบเต็ม FQDN) ของระบบ บน Debian และระบบที่เกี่ยวข้องสิ่งนี้จะเกิดขึ้นโดยใช้เนื้อหาของ/etc/hostnameและ/etc/hostsไฟล์ ไฟล์ชื่อโฮสต์ควรมีชื่อโฮสต์แบบสั้น (เช่นfoo) และไฟล์โฮสต์ควรมีรายการที่แก้ไขfooเข้าไปfoo.bar.bazเช่นชื่อโฮสต์ที่มีส่วนต่อท้ายโดเมน (โดยปกติจะตรงกับรายการ DNS)

เอาต์พุตจากคำสั่งhostname(ไม่มีพารามิเตอร์ใด ๆ ) จะส่งคืนค่าก่อนหน้าและhostname -fเอาต์พุตจะส่งคืนค่าหลัง

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

<IP address> <hostname FQDN> <hostname>

คอลัมน์ทั้งสามควรคั่นด้วยช่องว่างหรือแท็บไม่สำคัญ ที่อยู่ IP สามารถเป็น 127.0.0.1 เช่นเดียวกับ localhost แต่ส่วนชื่อโฮสต์นั้นตรงกับชื่อโฮสต์ของระบบและส่วนตรงกลางควรเป็น FQDN เช่นชื่อโฮสต์ที่มีส่วนต่อท้ายโดเมน

ในการตรวจสอบสายทำงานเพียงแค่เรียกใช้hostname -fและตรวจสอบว่ามันส่งกลับ FQDN ของเซิร์ฟเวอร์ของคุณ

ในที่สุดรีสตาร์ท Exim เช่นด้วย:

sudo service exim4 restart

หลังจากนั้นคุณควรเริ่มเห็น HELO อย่างถูกต้อง ตัวแปรสามารถตรวจสอบได้ด้วยการรัน:

/usr/sbin/exim4 -bP primary_hostname

(NB: ฉันเดิมทำสิ่งนี้เป็นการแก้ไขคำตอบจาก 2009 แต่มันถูกปฏิเสธสิ่งที่ฉันแก้ไขเดิมคือ: ไม่จำเป็นต้องทำซ้ำบันทึก localhost เริ่มต้นเพียงอธิบายสิ่งที่ควรจะเพิ่ม; สามารถใช้ที่อยู่ IP ได้อธิบายว่า FQDN คืออะไรอธิบายวิธีการตรวจสอบ exim ด้วยตนเอง)


/usr/sbin/exim4 -bP primary_hostnameไม่ทำงาน คุณสามารถตรวจสอบชื่อโฮสต์ HELO โดยส่งอีเมลทดสอบไปยังตัวตรวจสอบความถูกต้องของพอร์ต 25 หรือกล่องจดหมายอื่น ๆ ที่คุณสามารถดูต้นฉบับได้ เพิ่มเติมเกี่ยวกับมันนี่ พิจารณาอัปเดตคำตอบของคุณ
x-yuri

มันใช้งานได้ดีกับเครื่อง Debian ที่เสถียรของฉัน คุณช่วยอธิบายได้มั้ยว่ามันไม่ได้ผลสำหรับคุณ หมายเหตุเอกสารที่exim.org/exim-html-current/doc/html/spec_html/...อย่างชัดเจนกล่าวว่าเริ่มต้นคือhelo_data $primary_hostnameบนระบบ Debian คุณสามารถลบล้างมันได้โดยใช้REMOTE_SMTP_HELO_DATAตัวแปร แต่ถ้าคุณเพิ่งตั้งชื่อโฮสต์หลักของคุณให้ถูกต้องนั่นก็ไม่จำเป็น
Josip Rodin

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

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

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

1

หลังจากเพิ่มสตริงเดียวกันใน / etc / hosts ชื่อโฮสต์ -fจะส่งคืน FQDN ของคุณ


ในคำอื่น ๆmyhostnameไปที่/etc/hostname(ตามด้วยhostname myhostname) และไป127.0.0.1 mydomain.com myhostname.com localhost /etc/hostsบวกeximในกรณีที่โหลดซ้ำ
x-yuri

0

ผมมีปัญหาเดียวกัน. ฉันต้องเปลี่ยนชื่อโฮสต์ของเมลเนื่องจากอีเมลบางฉบับล้มเหลวเมื่อส่งไปแล้ว ข้อผิดพลาดนี้:

host receiver.server.com [200.200.200.200]: 550 <info@sender.server.com>: Sender address rejected: Domain not found

ดังนั้นฉันจึงเปลี่ยนเป็น/etc/exim.configparam primary_hostname

รหัสของไฟล์นี้:

smtp_connect_backlog = 50
smtp_accept_max = 100

#primary_hostname = myhostname.com 
deliver_queue_load_max = 3

ฮะโพสต์นี้ช่วยฉันด้วย "primary_hostname" และตอนนี้ exim ของฉันทำงานได้ดีกว่าที่เคย :)

0

ใน WHM goto Exim เครื่องมือจัดการการกำหนดค่า -> ตัวแก้ไขขั้นสูง

เลื่อนลงจนกว่าคุณจะพบ "เพิ่มการตั้งค่าเพิ่มเติม" (ปุ่มสีฟ้าขนาดใหญ่) แล้วคลิก

ในบรรทัดใหม่เพิ่ม [primary_hostname] = [mydomain.com]

เลื่อนไปที่ด้านล่างและคลิกบันทึก

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