Bagaimana cara mengkonfigurasi sendmail untuk mengirim email melalui data MX dan tidak ke localhost?

8

Saya mencoba untuk mendapatkan sendmail untuk mentransfer email ke server yang ditentukan dalam catatan MX sehingga ketika server mengirim email ke [email protected] saya ingin itu melewati localhost dan langsung ke gmail.

Saya telah memeriksa dokumen sendmail, tetapi tidak begitu mengerti bagaimana menjelaskan situasi saya. Pada dasarnya nama host server saya adalah 'www.domain.com' tetapi ketika saya mengirim email ke '[email protected]' itu berakhir di spool mail lokal.

Ketika saya menjalankan sendmail dalam mode debug:

sendmail -bt
> $=w

Saya mendapat:

www.domain.com
www.domain.com.
domain.com
localhost
[54.245.___.___] 

Jadi, ini mencegat semua surat keluar ke domain.com. Saya tidak ingin tiba di localhost. Saya ingin pergi ke server gmail.

Semua surat terikat untuk alamat lain berfungsi dengan baik. Saya juga sudah mengonfigurasi sendmail untuk menggunakan DKIM.

Saya telah menambahkan catatan ke mailertable (dan membangun kembali mailertable.db dan mengkompilasi ulang file mc> cf) tetapi saya tidak yakin apakah itu yang perlu saya lakukan atau apakah saya melakukannya dengan benar.

domain.com esmtp:[aspmx.l.google.com]

Bagaimana cara mendapatkannya agar email terikat agar [email protected] meninggalkan server?

INFO TAMBAHAN: Ini adalah file sendmail.mc saya:

divert(-1)dnl

include(`/usr/share/sendmail-cf/m4/cf.m4')dnl
VERSIONID(`setup for linux')dnl
OSTYPE(`linux')dnl

define(`confDEF_USER_ID', ``8:12'')dnl

define(`confTO_CONNECT', `1m')dnl
define(`confTRY_NULL_MX_LIST', `True')dnl
define(`confDONT_PROBE_INTERFACES', `True')dnl
define(`PROCMAIL_MAILER_PATH', `/usr/bin/procmail')dnl
define(`ALIAS_FILE', `/etc/aliases')dnl
define(`STATUS_FILE', `/var/log/mail/statistics')dnl
define(`UUCP_MAILER_MAX', `2000000')dnl
define(`confUSERDB_SPEC', `/etc/mail/userdb.db')dnl
define(`confPRIVACY_FLAGS', `authwarnings,novrfy,noexpn,restrictqrun')dnl
define(`confAUTH_OPTIONS', `A')dnl

define(`confTO_IDENT', `0')dnl

FEATURE(`no_default_msa', `dnl')dnl
FEATURE(`smrsh', `/usr/sbin/smrsh')dnl
FEATURE(`mailertable', `hash -o /etc/mail/mailertable.db')dnl
FEATURE(`virtusertable', `hash -o /etc/mail/virtusertable.db')dnl
FEATURE(redirect)dnl
FEATURE(always_add_domain)dnl
FEATURE(use_cw_file)dnl
FEATURE(use_ct_file)dnl

FEATURE(local_procmail, `', `procmail -t -Y -a $h -d $u')dnl
FEATURE(`access_db', `hash -T<TMPF> -o /etc/mail/access.db')dnl
FEATURE(`blacklist_recipients')dnl

DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl

FEATURE(`accept_unresolvable_domains')dnl
FEATURE(`relay_based_on_MX')dnl
FEATURE(`relay_entire_domain')dnl

LOCAL_DOMAIN(`localhost.localdomain')dnl

MASQUERADE_AS(`domain.com')dnl
MASQUERADE_DOMAIN(`localhost.localdomain')dnl

EXPOSED_USER(`root')dnl

FEATURE(masquerade_envelope)dnl
FEATURE(masquerade_entire_domain)dnl

INPUT_MAIL_FILTER(`opendkim', `S=inet:8891@localhost')

MAILER(smtp)dnl
MAILER(procmail)dnl
Gurita
sumber
1
Logika pertanyaan Anda benar-benar cacat. Itu bermuara pada "Saya tidak ingin menggunakan Sendmail untuk mengirim email saya. Bagaimana cara mengkonfigurasi ulang Sendmail dengan konfigurasi tambahan untuk mengirim email persis bagaimana Sendmail mengirim email secara default?" Jawab: biarkan saja. Entah pertanyaan Anda perlu ditata ulang sepenuhnya untuk mengetahui apa yang sebenarnya Anda coba lakukan, atau Anda perlu berhenti mencampuri konfigurasi server Anda dan membiarkannya melakukan apa yang dilakukannya tanpa merusaknya.
Sammitch
1
Baiklah kalau begitu. sebagai alternatif, jelaskan kepada saya apa yang akan saya lakukan jika saya hanya ingin mengirim email dari server dan tidak ke sana.
Octopus

Jawaban:

8

Saya akhirnya menemukan solusi yang agak komprehensif di sini . Singkatnya, ada sejumlah opsi (sebagian besar telah disebutkan dalam jawaban lain, tetapi karena alasan apa pun tidak berhasil dalam skenario khusus saya).

Opsi 1: hapus entri dari / etc / mail / local-host-names

bagi saya file ini sudah kosong

Opsi 2: hapus entri LOCAL_DOMAIN di file mc

saya tidak punya

Opsi 3: beri tahu sendmail untuk tidak menyelidiki antarmuka

define(`confDONT_PROBE_INTERFACES', `true')dnl

dalam kasus saya ini sudah diatur, namun host bermasalah masih ada di kelas w dari sendmail

Opsi 4: ganti nama server. tautan eksternal yang disediakan di atas bahkan secara khusus mengatakan, "Jika saya ingin menghapus whipple.org dari kelas w, saya dapat mengubah nama server menjadi frodo.whipple.org, www.whipple.org, elvis.whipple.org, misalnya."

bagi saya ini tidak cukup. dengan host bernama www.domain.com , kelas sendmails masih berisi KEDUA www.domain.com DAN domain.com (bahkan setelah reboot)

Opsi 5: INI APA YANG BEKERJA UNTUK SAYA tambahkan LOCAL_RULE_0 ke file mc sendmail

LOCAL_RULESETS
LOCAL_RULE_0
R$* < @domain.com. > $*  <tab>$#esmtp $@ mail.domain.com $: $1<@domain.com.>$2

ini harus dilakukan di akhir file dan <tab>harus karakter tab yang sebenarnya

Gurita
sumber
Saya akan menggunakan opsi 5 dan menggunakan bestmxpeta untuk membuatnya menjadi generik.
adamo
Yang ini bekerja dengan sempurna. Terima kasih untuk Gurita LOCAL_RULESETS LOCAL_RULE_0 R $ * <@ domain.com. > $ * <tab> $ # esmtp $ @ mail.domain.com $: $ 1 <@ domain.com.> $ 2 ini harus dilakukan di akhir file dan <tab> sebenarnya Anda harus menggunakan kunci tab alih-alih Kode.
Vinodh Kumar
7

Ubah nama host server. Tidak ada alasan valid untuk nama host sama dengan nama domain telanjang.

Michael Hampton
sumber
ya, saya mencobanya, bahkan ketika saya mengatur hostname ke www.domain.com sendmail ingin menjaga semuanya terikat untuk www.domain.com, domain.com dan localhost. saya dapat melihat bahwa ketika saya menjalankan sendmail dalam mode debug dan ketik $ = w. Saya menulis ulang pertanyaan yang sedikit untuk dijelaskan.
Octopus
3

Inilah pemahaman saya tentang pertanyaan Anda:

  1. Anda menginstal Sendmail sehingga Anda dapat menggunakannya untuk mengirim email dari situs web Anda.

  2. Anda mengonfigurasi Sendmail menjadi server email resmi untuk DNS namespace publik Anda.

  3. Anda tidak ingin Sendmail berwibawa untuk namespace DNS publik Anda. Anda ingin email yang dikirim ke namespace DNS publik Anda dikirim ke email yang dihosting Google.

Solusi: konfigurasi ulang Sendmail sehingga tidak sah untuk namespace DNS publik Anda.

joeqwerty
sumber
2
Pertanyaan saya adalah tentang konfigurasi sendmail. Bisakah jawaban Anda lebih spesifik dari "konfigurasi ulang sendmail"?
Octopus
0

Saya tidak terlalu berpengalaman dengan konfigurasi sendmail, tetapi saya merasa harus melakukan hal yang benar sehubungan dengan catatan MX. Namun, saya membayangkan ada kemungkinan bahwa dalam pendahuluan pencarian DNS, sendmail pertama-tama berkonsultasi dengan file host lokal /etc/hostspada kebanyakan sistem operasi berbasis unix sebelum menggunakan server DNS-nya. Jika itu masalahnya, dan ada entri dalam file host yang merujuk ke mesin Anda sebagai domain.com jika Anda menetapkannya sebagai nama host, itu bisa jadi apa yang terjadi. Anda dapat mengedit file host sesuai dengan kebutuhan Anda dalam kasus khusus ini dengan memodifikasi entri atau menambahkan yang baru.

Atau Anda dapat mengonfigurasi sendmail untuk mengabaikan file host sistem lokal saat menyelesaikan url. Saya tidak yakin bagaimana melakukan itu.

inetplumber
sumber
0

1) Sendmail secara otomatis mengisi daftar domain email lokal ( $=w).

Anda tidak dapat mematikannya menggunakan baris berikut di sendmail.mc Anda:

define(`confDONT_PROBE_INTERFACES',`True')

Anda dapat menambahkan email lokal "secara manual" dalam /etc/mail/local-host-namesfile.
(Dibutuhkan HUPing atau restart daemon sendmail setelah)

2) Sendmail dapat menambahkan (dikonfigurasi otomatis) "nama email host ini" ( $j) ke daftar domain email lokal.

Anda dapat menentukan "nama email host ini"

define(`confDOMAIN_NAME',`hostname.example.net')

3) mailertableadalah TIDAK consultede untuk pengiriman ke domain yang terdaftar di $=w.

AnFi
sumber
tetapi define ( confDONT_PROBE_INTERFACES',True ') sudah (dan selalu telah) diaktifkan
Octopus
Jadi
kasing
Ini semua adalah saran bagus yang telah saya eksplorasi sepenuhnya, tetapi saya percaya bahwa opsi 2 sama dengan menambahkan host ke file local-host-names. dalam hal ini saya ingin MENGECUALIKAN tuan rumah bukan TERMASUK satu.
Octopus
0

Kode yang mengirim surat, apakah Anda menggunakan alamat email lengkap, atau Anda hanya meminta server mengirimkannya melalui akun lokal? Karena:

Ini memberitahu sendmail untuk mengirimkan semua email ke [email protected] secara lokal

LOCAL_DOMAIN(`localhost.localdomain')dnl

Dan ini memberi tahu sendmail untuk menulis ulang domain di alamat lokal menjadi domain.com, tetapi tidak mengubah pengiriman lokal .

MASQUERADE_AS(`domain.com')dnl
MASQUERADE_DOMAIN(`localhost.localdomain')dnl

Baiklah kalau begitu. sebagai alternatif, jelaskan kepada saya apa yang akan saya lakukan jika saya hanya ingin mengirim email dari server dan tidak ke sana.

Langkah 1: Kembali ke konfigurasi default.
Langkah 2: Gunakan konfigurasi default.

Sammitch
sumber
Ya itu benar tetapi, saya mengirim ke [email protected]. Konfigurasi default memiliki masalah yang sama persis seperti yang saya uraikan dalam pertanyaan.
Octopus