Bagaimana cara mengubah primary_hostname Exim4 pada kotak Debian?

24

Beberapa server SMTP jarak jauh yang saya coba kirimi surat untuk menolak menerima HELO dari server saya:

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

Rupanya, server Exim4 saya mengirim localhostsebagai FQDN-nya. Mencari bersih dan banyak file konfigurasi, saya telah belajar bahwa nilai yang dikirim sebagai FQDN selama HELO diambil dari primary_hostnamevariabel konfigurasi.

Pertanyaan saya adalah: apa cara yang benar untuk mengubah variabel ini dalam sistem Debian? Saya kira saya hanya dapat hardcode nilai di dalam file konfigurasi Exim4, tetapi IMHO tampaknya lebih masuk akal jika nilai secara otomatis sesuai dengan /etc/mailnameatau konfigurasi nama terpusat lainnya.

Saya merasa bahwa jawaban untuk pertanyaan saya dapat ditemukan dalam teks ini dari wiki Debian :

Nama yang digunakan oleh Exim di EHLO / HELO ditarik dari opsi konfigurasi primary_hostname. Konfigurasi default exim4 Debian tidak diatur primary_hostname. Exim lalu default ke uname () untuk menemukan nama host. Jika panggilan itu hanya mengembalikan satu komponen, gethostbyname () atau getipnodebyname () digunakan untuk mendapatkan nama host yang sepenuhnya memenuhi syarat.

Jika Exim HELO Anda sebagai localhost.localdomain, maka kemungkinan besar Anda memiliki konfigurasi yang salah / etc / hosts yang dibuat oleh beberapa versi installer Debian. Dalam hal ini, harap perbaiki / etc / hosts Anda.

Sayangnya, saya tidak cukup akrab dengan administrasi server Linux untuk mengetahui apa artinya semua ini :(

Jørn Schou-Rode
sumber

Jawaban:

21

File / etc / hosts Anda harus memiliki setidaknya dua catatan di dalamnya. Catatan pertama harus berupa:

<IP_ADDRESS> <HOST_FQDN> <HOSTNAME>

yang kedua harus dalam bentuk:

127.0.0.1 localhost

Anda juga perlu memastikan bahwa file / etc / hostname Anda berisi FQDN server, dan yang berjalan hostname -fmengembalikan FQDN server Anda. Jika Anda memastikan semua ini benar, dan mulai ulang Exim, Anda harus mulai melihatnya HELO dengan benar.

Paul Lathrop
sumber
Saya telah mengubah / etc / hostname dari nama mesin lokal ke FQDN. hostname -fmasih melaporkan "localhost". Bagian tentang / etc / hosts di jawaban Anda tampaknya tidak jelas - seperti apa tampilan rekaman pertama?
Jørn Schou-Rode
1
Saat hostname -fmasih melaporkan "localhost", tampaknya perubahan ke / etc / hostname berhasil - saya dapat mengirimkan email saya sekarang. Saya masih ingin melihat bagian yang hilang dari posting Anda :) :)
Jørn Schou-Rode
Ups! Memformat flub. Diperbaiki :-)
Paul Lathrop
1
/etc/hostnamebiasanya tidak mengandung FQDN pada sistem Debian, hanya nama host pendek.
Josip Rodin
Nah, baris pertama di /etc/hostsmungkin 127.0.0.2 mydomain.com myhostname( 127.0.0.2berfungsi juga 127.0.0.1, karena loopback adalah jaringan kelas A). Anda mungkin dapat menggabungkan dua baris menjadi satu 127.0.0.1 mydomain.com myhostname localhost, tetapi localhostapakah nama host kanonik untuk 127.0.0.1, bukan? Itu semua mengingat bahwa Anda memiliki nama host, bukan FQDN sebagai nama host Anda. Selain itu, perubahan /etc/hostnametidak segera berlaku, Anda harus melakukannya hostname myhostname. Atau restart server.
x-yuri
8

Jika Anda menggunakan file konfigurasi tunggal, setel variabel PRIMARY_HOST_NAME ke nama yang diinginkan:

Misalnya di /etc/exim4/exim4.conf:

PRIMARY_HOST_NAME = mybox.mydomain.com

atau atur MAIN_HARDCODE_PRIMARY_HOSTNAMEdi update-exim4.conf.conf jika Anda menggunakan konfigurasi file split.

Agar aman, mulai ulang exim.


sumber
Hanya sebuah catatan bahwa host yang terdaftar tidak boleh menggunakan tanda kutip, jika tidak ada pengirim HELO 'mybox.mydomain.com'yang tidak mengirim email ke Google, mungkin yang lain.
mkomarinski
1
Saya tidak dapat menemukan penyebutan nama variabel "PRIMARY_HOST_NAME" ini dalam dokumentasi. Di mana Anda menemukan ini?
Josip Rodin
Di Debian Anda harus menjalankan update-exim4.confsetelah mengubah konfigurasi. Dan restart biasanya tidak diperlukan setelah itu.
x-yuri
... Yah, eximsecara umum tampaknya memperhatikan perubahan pada konfigurasi tanpa memuat ulang. Tapi bisa dibilang lebih aman untuk memuat ulang, karena saya kira daemon itu sendiri tidak membaca ulang konfigurasi sampai memuat ulang. Kemudian, Anda membuatnya terdengar seperti /etc/exim4/exim4.confbisa berisi hanya baris di atas , tetapi saat Anda membuat file, /var/lib/exim4/config.autogenerateddiabaikan ...
x-yuri
... "Proses bercabang Exim dimulai untuk menerima SMTP atau menjalankan antrian akan menggunakan file konfigurasi baru, sedangkan daemon exim utama asli masih akan menggunakan file konfigurasi lama." Jadi, untuk file konfigurasi tunggal yang terbaik untuk digunakan /etc/exim4/exim4.conf.localmacros, untuk split /etc/exim4/conf.d/main/000_localmacros(file dalam maindir diproses terlebih dahulu). Dan jalankan update-exim4.conf+ systemctl reload exim4setelah membuat perubahan.
x-yuri
4

Nama host utama diminta selama instalasi exim4. Anda dapat menjalankan perintah

sudo dpkg-reconfigure exim4-config

untuk pergi melalui petunjuknya lagi.

Sejauh yang saya tahu, jika Anda sudah menggunakan 'konfigurasi split' (banyak file kecil di bawah /etc/exim4/conf.d) dan memilih untuk tetap dengan itu ketika diminta, dpkg-mengkonfigurasi ulang tidak boleh menimpa salah satu perubahan konfigurasi yang ada selain pengaturan yang diminta, tetapi, seperti biasa, Anda harus mengambil cadangan terlebih dahulu agar aman.

David North
sumber
2
Tampaknya hanya meminta "nama surat [yang] harus menjadi nama domain tunggal yang memenuhi syarat (FQDN)". Namun, pengaturan ini sudah benar, dan HELO sepertinya masih mengatakan "localhost".
Jørn Schou-Rode
Yang Anda bicarakan adalah nama surat yang ditujukan untuk, kejutan, kejutan /etc/mailname,. Secara default ini digunakan untuk memenuhi syarat alamat yang tidak memenuhi syarat . Yang hanya terdiri dari nama pengguna. Dengan menambahkan nama domain dari /etc/mailname. Alamat yang dihasilkan digunakan di Fromheader.
x-yuri
2

The primary_hostnamevariabel diisi sesuai dengan nama domain berkualifikasi lengkap (FQDN) dari sistem. Pada Debian dan sistem terkait ini biasanya dibentuk menggunakan konten /etc/hostnamedan /etc/hostsfile. File hostname harus berisi nama host pendek (misalnya foo), dan host file harus mengandung entri menyelesaikan fooke foo.bar.baz, yaitu hostname dengan akhiran domain-nya (biasanya cocok entri DNS).

Output dari perintah hostname(tanpa parameter apa pun) akan mengembalikan yang pertama, dan hostname -foutput akan mengembalikan yang terakhir.

File hostname biasanya diisi setelah instalasi, dan file host dapat diedit untuk memiliki satu catatan lain di dalamnya di samping catatan localhost default - itu harus dalam bentuk:

<IP address> <hostname FQDN> <hostname>

Tiga kolom harus dipisahkan oleh spasi atau tab, tidak masalah. Alamat IP bisa 127.0.0.1 seperti localhost, tetapi bagian nama host telah cocok dengan nama host sistem, dan bagian tengah harus menjadi FQDN, yaitu nama host dengan akhiran domain.

Untuk memverifikasi jalur berfungsi, cukup jalankan hostname -fdan periksa apakah ia mengembalikan FQDN server Anda.

Terakhir, restart Exim, misalnya dengan:

sudo service exim4 restart

Setelah itu Anda harus mulai melihatnya HELO dengan benar. Variabelnya dapat diverifikasi dengan menjalankan:

/usr/sbin/exim4 -bP primary_hostname

(NB: Saya awalnya melakukan ini sebagai edit untuk jawaban dari tahun 2009, tetapi ditolak. Hal-hal yang awalnya saya perbaiki adalah: tidak perlu mengulangi catatan localhost default, cukup jelaskan apa penambahan yang seharusnya; jelaskan mana Alamat IP dapat digunakan; jelaskan apa itu FQDN; jelaskan cara memverifikasi exim itu sendiri.)

Josip Rodin
sumber
/usr/sbin/exim4 -bP primary_hostnametidak bekerja Anda dapat memverifikasi nama host HELO dengan mengirim email percobaan ke pemeriksa otentikasi port25 , atau kotak surat lain tempat Anda dapat melihat aslinya. Lebih lanjut di sini . Pertimbangkan untuk memperbarui jawaban Anda.
x-yuri
Ini bekerja dengan baik pada mesin stabil Debian saya (stretch). Bisakah Anda jelaskan itu tidak bekerja untuk Anda? Perhatikan dokumentasi di exim.org/exim-html-current/doc/html/spec_html/… dengan jelas mengatakan bahwa standarnya helo_dataadalah $primary_hostname. Pada sistem Debian, Anda bisa menimpanya menggunakan REMOTE_SMTP_HELO_DATAvariabel, tetapi jika Anda hanya mengatur nama host utama Anda dengan benar, itu tidak perlu.
Josip Rodin
Saya yakin saya sudah mencoba dan mengeluh karena tidak mengambil argumen. Tapi tidak bisa mereproduksi sekarang, jadi tidak apa-apa, salahku. Mengenai "jika Anda hanya mengatur nama host utama Anda dengan benar," itu tidak diterima secara umum bahwa nama host harus menyelesaikan apa pun. Jadi katakanlah "jika Anda menetapkan nama host seperti exim mengharapkan Anda untuk ..." dan biarkan begitu :)
x-yuri
Maaf, tapi saya pikir tidak bijaksana untuk mengambil kesimpulan ad hoc dari diskusi panjang debian-devel lebih dari satu dekade lalu dengan nilai nominal. Akan lebih bermanfaat jika Anda menunjuk beberapa dokumen kebijakan mengenai hal semacam itu.
Josip Rodin
Itu yang terbaik yang bisa kutemukan. Jika Anda dapat menemukan sesuatu yang lebih baik atau bukti dari kata-kata Anda, saya akan senang jika Anda memberi tahu saya. Untuk sekarang yang bisa saya katakan adalah bahwa bahkan akhir-akhir ini ada orang yang tidak memasukkan nama host /etc/hosts. Dan yang saya minta adalah untuk tidak memanggil dengan tepat apa yang tidak diterima secara umum.
x-yuri
1

setelah menambahkan string yang sama di / etc / hosts, hostname -f akan mengembalikan FQDN Anda

myrocode
sumber
Dengan kata lain, myhostnamemasuk ke /etc/hostname(diikuti oleh hostname myhostname). Dan 127.0.0.1 mydomain.com myhostname.com localhostpergi ke /etc/hosts. Plus isi ulang eximuntuk jaga-jaga.
x-yuri
0

Saya memiliki masalah yang sama. Saya perlu mengubah nama host surat, karena beberapa email gagal, ketika dikirim. Dengan kesalahan ini:

host receiver.server.com [200.200.200.200]: 550 <[email protected]>: Sender address rejected: Domain not found

Jadi saya mengubahnya menjadi /etc/exim.configparam primary_hostname

Beberapa kode dari file ini:

smtp_connect_backlog = 50
smtp_accept_max = 100

#primary_hostname = myhostname.com 
deliver_queue_load_max = 3
Diego Gallardo
sumber
Hah, postingan ini membantu saya dengan "primary_hostname" dan sekarang exim saya berfungsi lebih baik dari sebelumnya :)
0

di WHM goto Exim Configuration Manager -> Editor Tingkat Lanjut

gulir ke bawah hingga Anda menemukan "Tambahkan pengaturan konfigurasi tambahan" (tombol biru besar) dan klik.

di baris baru, tambahkan [primary_hostname] = [mydomain.com]

gulir ke bawah dan klik Simpan.

Satalink
sumber