Nonaktifkan pengiriman lokal di Sendmail


31

Saya menggunakan Sendmail di server Centos untuk mengirim email ke skrip PHP, tetapi masalahnya adalah bahwa surat dikirim ke kotak surat lokal di mesin daripada apa yang ditentukan dalam catatan MX untuk domain - yang sebenarnya menunjuk ke komputer lain saya gunakan untuk email.

Saya ingin sendmail tidak mencoba dan mengirimkan surat secara lokal untuk domain yang diatur oleh mesin, apakah ada cara sederhana untuk menonaktifkan pengiriman lokal?

Domain tidak ada dalam file host-nama-lokal.

Saya telah melakukan banyak pencarian di Google dan saya telah melihat:

Konfigurasi Sendmail untuk tidak mengirimkan email ke mesin lokal

Nonaktifkan pengiriman lokal di Sendmail

Tapi entah tidak ada jawaban atau tidak cocok.

Saya tidak ingin merelay ke server lain, saya hanya ingin mengirim email terlepas dari domain.

Untuk memberikan contoh:

Saya memiliki dua server, satu adalah server mail di mail.example.com dan server web yaitu example.com, ketika saya menggunakan layanan smtp di server web, saat ini ia merutekan email ke kotak surat lokal di example.com, tetapi seharusnya masuk ke kotak surat di mail.example.com

Output dari sendmail -bt returns:

ADDRESS TEST MODE (aturan 3 TIDAK dipanggil secara otomatis)
Memasukkan  
> 3,0 info@example.com
canonify input: info @ example. com
Input Canonify2: info 
Canonify2 mengembalikan: info 
mengembalikan canonify: info 
masukan parse: info 
Input Parse0: info 
Parse0 mengembalikan: info 
Input ParseLocal: info 
Pengembalian ParseLocal: info 
Input Parse1: info 
Parse1 mengembalikan: $ # local $: info
pengembalian parse: $ # local $: info

stalkr.net/forum/… Tampaknya menjadi hal yang paling dekat dengan apa yang sebenarnya saya kejar. Secara khusus pengaturan MAIL_HUB disebutkan, tetapi sepertinya tidak benar-benar berfungsi.

Coba yang berikut ini: sendmail -bt dan kemudian ketik 3.0 user@domin.com Ini akan memberi Anda banyak aturan menulis ulang, yang terakhir harus memberi Anda relay yang akan digunakan. Harap berikan hasilnya.
Francois Wolmarans

Hai Francois, saya telah mengedit pertanyaan saya untuk memasukkan output

Jawaban:


37

Apa yang saya lakukan untuk menonaktifkan pengiriman lokal. Saya akan menggunakan domain example.com.

Persyaratan:

  • example.com Entri yang menunjuk ke alamat IP yang ditugaskan ke salah satu antarmuka et.
  • / etc / hosts mendefinisikan example.com yang ditugaskan ke alamat IP yang sama seperti di atas
  • example.com Data MX menunjuk ke server Google (ASPMX.L.GOOGLE.COM, dll)
  • instalasi sendmail default (milik saya ada di Ubuntu)

Tangga:

vim /etc/mail/sendmail.mc

pada akhirnya:

define(`MAIL_HUB', `example.com.')dnl
define(`LOCAL_RELAY', `example.com.')dnl

lalu:

sendmailconfig (or /etc/mail/make depending on your distro)
service sendmail restart

pengujian:

echo -e "To: user@example.com\nSubject: Test\nTest\n" | sendmail -bm -t -v
echo -e "To: user\nSubject: Test\nTest\n" | sendmail -bm -t -v

Anda akan melihatnya terhubung ke server google dan kemudian Anda akan melihat surat Anda dikirim ke kotak masuk Google Anda.


3
Ini bekerja sempurna, saya hanya ingin tahu ada. setelah nama domain.
Rodrigo

Bekerja dengan sempurna juga!
Filipe Pina

Terima kasih! Saya sudah mencoba untuk memperbaikinya untuk sementara waktu. Saya melakukan yang berikut; bersihkan dan instal ulang sendmail, jalankan sendmailconfig, tambahkan baris yang Anda tentukan, jalankan sendmailconfiglagi dan lakukan service sendmail restartdan berfungsi!
Liam Newmarch

@Rodrigo example.com. dengan trailing dot adalah FQDN kanonik. The example.com tanpa titik relatif dan dengan demikian tidak tepat, misalnya itu bisa berarti example.com.domainanda.org. tergantung pada pengaturan OS Anda. Ini persis perbedaan yang sama seperti antara /etc/passwddanetc/passwd
kubanczyk

4

Berkat sporker dan Pawel, Anda menempatkan saya di arah yang benar untuk memperbaikinya.

Masalah asli saya adalah bahwa sendmail mempertimbangkan akun email domain example.com saya sebagai akun lokal.

Tautan ini terbukti sangat berguna: Sendmail ke domain lokal mengabaikan catatan MX (bagian 2) http://lists.freebsd.org/pipermail/freebsd-questions/2004-September/057382.html http://objectmix.com/sendmail/ 367920-sendmail-ignores-mailertable-some-semilocal-domains.html

Tetapi dalam kasus saya, menggunakan FreeBSD 8.2, apa yang sebenarnya berhasil adalah:

# cd /etc/mail

# vim freebsd.mc

Tambahkan dua baris ini:

define(`MAIL_HUB', `example.com.')dnl
define(`LOCAL_RELAY', `example.com.')dnl

Tepat sebelum:

MAILER(local)
MAILER(smtp)

# make

--- Ini adalah output ---

 cp freebsd.mc host.example.com.mc
 /usr/bin/m4 -D_CF_DIR_=/usr/share/sendmail/cf/   /usr/share/sendmail/cf/m4/cf.m4 host.example.com.mc > host.example.com.cf
 cp freebsd.submit.mc host.example.com.submit.mc
 /usr/bin/m4 -D_CF_DIR_=/usr/share/sendmail/cf/   /usr/share/sendmail/cf/m4/cf.m4 host.example.com.submit.mc > host.example.com.submit.cf

--- Akhir output ---

# cp sendmail.cf sendmail.cf.bak

# cp host.example.com.cf sendmail.cf

# /etc/rc.d/sendmail restart

Semoga ini menghemat beberapa sakit kepala untuk seseorang.


1

Saya bukan orang sendmail tetapi saya yakin bahwa sendmail akan memperlakukan domain apa pun yang disimpan /etc/mail/local-host-namessebagai nama domain lokal.
Anda dapat mencoba mengosongkan file ini, (jangan hapus) dan mulai kembali sendmail dan lihat perkembangannya

EDIT
The filename saya sebutkan sebenarnya diatur dalam sendmail.cfdan Anda mungkin tidak diatur untuk local-host-names
mencari di /etc/mail/sendmail.cfuntuk

# file containing names of hosts for which we receive email 
Fw/etc/mail/local-host-names    

Ini bukan fakta yang diuji tetapi hanya saya yang berpikir keras.


Yap, itu sebabnya saya sudah menyebutkan domain tidak ada dalam file host-nama-lokal

Maaf, itu akan mengajarkan saya untuk menjawab pertanyaan yang tidak saya baca dengan benar.
aussielunix

Punya masalah ini pada satu set server Solaris 10 yang baru saja ditambal (100 atau lebih ditambal, tetapi hanya segelintir yang mengalami masalah). Ini adalah perbaikannya! Terima kasih!
Signal15

0

Ini mungkin bukan solusi yang Anda cari tetapi jika masalah Anda adalah pengguna "admin" atau "root" mendapatkan banyak email dan kotak surat besar, Anda mungkin ingin mempertimbangkan untuk menyiapkan tugas cron untuk menghapus kotak surat keluar setiap minggu, hari, dll.

Kami memiliki beberapa server CentOS dengan masalah ini, tetapi masalahnya kami ingin dapat membaca surat terkadang karena dapat membantu mendiagnosis berbagai masalah terkadang.

Solusinya adalah dengan hanya melakukan tugas cron dan menyeka kotak sesekali.

Jika kami menemukan masalah ... kami akan mengomentari pekerjaan cron (sementara) dan membaca log dan email untuk petunjuk.

Hanya pemikiran ... dan solusi cepat / mudah untukmu.

Jika tidak, lihat file sendmail.mc dan modifikasi yang sesuai.


Pembaruan cepat:

Ini bukan apa yang Anda minta tetapi mungkin memberi Anda beberapa ide dan membantu menjelaskan beberapa hal untuk Anda:

http://www.pettingers.org/code/sendmail-local.html


Maaf itu tidak membantu. Yang ingin saya lakukan adalah tidak ada surat yang dikirim secara lokal, mengapa sendmail membuat ini sangat sulit?

0

Saya pribadi lebih dari orang postfix, tetapi ini terdengar seperti Anda telah mengkonfigurasi server pengirim untuk menerima email ke @ yourdomain.com. Jika ada sendmail yang setara dengan mekanisme transport di postfix, itulah yang saya gunakan untuk merutekan email secara internal di antara server saya.


Saya tidak begitu banyak mengkonfigurasinya, karena itu adalah default untuk instalasi sendmail centos.

0

Sepertinya Ruleset 3 Anda menghapus informasi domain. Saya telah menyertakan beberapa langkah pemecahan masalah umum di bawah ini. Jika ini tidak berhasil, Anda harus mengirimi saya sendmail.cf Anda untuk melihatnya.

Dari output, example.com diperlakukan sebagai domain lokal. lakukan nslookup:

atur q = mx

domain.com

Jika ini memberikan alamat ip mesin lokal maka Anda perlu melihat dns Anda. Lihat juga di / etc / hosts untuk memastikan domain.com tidak terdaftar.

Tampaknya juga menghapus @ domain.com, bisa tolong coba dengan sesuatu seperti user@stackoverflow.com untuk melihat apakah itu juga mencantumkannya sebagai domain lokal.

Periksa juga nilai Cw di file sendmail.cf Anda.


Terima kasih Francois, saya mulai memahami internal sendmail sedikit lebih baik. Saya telah memutuskan untuk hanya mengubah nama host dari mesin untuk mengatasi hal-hal untuk saat ini, jadi sekarang www.example.com bukan example.com yang berarti akan melakukan pengiriman lokal untuk user@www.example.com tetapi bukan user@example.com - yang merupakan kompromi baik bagi saya pada tahap ini.

0

Mungkin bukan yang Anda inginkan, tetapi SSMTP sangat bagus untuk server hanya keluar, di mana Anda dapat menentukan hub email.


Terima kasih, saya akan memberikan tampilan SSMTP, masih mencoba untuk memperbaiki sendmail untuk saat ini.

0

Jika Anda ingin mengembalikan kesalahan saat pengiriman ke alamat lokal dicoba, Anda dapat menggunakan peta akses dan sesuatu seperti:

@your.domain error:nouser 550 No such user here

Jika Anda ingin pesan email 'dikirim' tetapi dibuang, Anda dapat menginstal entri yang bisa diubah-ubah yang membuat semuanya " @your.domain" menjadi dev-null. Mungkin bermanfaat untuk tetap mengirim setidaknya " root" secara lokal, karena sering kali penerima laporan email dari pekerjaan cron dll. Cobalah sesuatu seperti ini di virtusertable:

root@your.domain local:root

@your.domain local:dev-null

Dengan dev-nullalias lokal yang mengalihkan pesan ke / dev / null, ini harus terus mengirimkan email root, tetapi membuang pesan yang dikirim ke pengguna lain.


0

Perbaikan oleh Pawel bekerja untuk saya tetapi sendmailconfig tidak ada pada centos jadi saya harus menjalankan

cd /etc/mail    
m4 /usr/share/sendmail-cf/m4/cf.m4 sendmail.mc > sendmail.cf
service sendmail restart

untuk mendapatkan konfigurasi diperbarui


aturan kedua tidak berfungsi / ada pada
centOS

0

Hanya mengonfirmasi bahwa jawaban Pawel memecahkan masalah saya yang sangat mirip.

Bagi siapa pun yang menggunakan FreeBSD tetapi tidak tertarik untuk terlibat terlalu banyak dalam sendud cery file sendmail, urutan berikut adalah apa yang akan Anda gunakan untuk menambahkan dua baris dalam contoh Pawel:

cd /etc/mail
make conf (generates stock .mc/.cf files with the hostname as part of the 
filename - these will NOT be overriten during an upgrade)
vi hostname.mc
(add the two lines to the .mc file right above the last two "MAILER" lines)
make conf
cp hostname.cf sendmail.cf
/etc/rc.d/sendmail restart

0

Saya mengikuti saran-saran ini, dan telah memperhatikan bahwa hanya menambahkan langkah yang disebutkan pawel,

"/ etc / hosts mendefinisikan example.com yang ditugaskan ke alamat IP yang sama seperti di atas", pada dasarnya saya menambahkan IP server saya diikuti oleh servername ke /etc/hostsfile, dan hanya itu.

Sudah cukup bagi saya untuk mendapatkan email yang dialihkan melalui google dan kembali ke email saya.


0

Jika Anda menggunakan Cpanel / WHM untuk mengelola server Anda, pastikan Anda memilih Penukar Email Jarak Jauh di Cpanel / WHM alih-alih Secara Otomatis Mendeteksi Konfigurasi. Penukar Email Jarak Jauh akan mengirim semua email melalui data MX termasuk domain lokal. Dengan Otomatis, email domain lokal akan langsung dialihkan secara lokal dan tidak akan dikirim ke server eksternal yang ditentukan dalam catatan MX.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.