MXレコード経由でメールを送信し、localhostに送信しないようにsendmailを構成するにはどうすればよいですか?


8

MXレコードで指定されたサーバーにメールを転送するようにsendmailを取得しようとしているため、サーバーがme@domain.comにメールを送信するときに、localhostをスキップして、Gmailに直接移動します。

sendmailのドキュメントを調べましたが、自分の状況を説明する方法がよくわかりません。基本的に私のサーバーのホスト名は「www.domain.com」ですが、「me@domain.com」にメールを送信すると、ローカルのメールスプールに送信されます。

sendmailをデバッグモードで実行すると、次のようになります。

sendmail -bt
> $=w

私は得ます:

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

そのため、へのすべての送信メールを傍受していdomain.comます。到着したくないlocalhost。Gmailサーバーに移動してほしい。

他のアドレス宛のメールはすべて正常に機能します。また、DKIMを使用するようにsendmailを構成しています。

mailertableにレコードを追加しました(そしてmailertable.dbを再構築してmc> cfファイルを再コンパイルしました)が、それが必要なのか、それとも正しく実行しているかはわかりません。

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

users@domain.com宛のメールがサーバーを離れるようにするにはどうすればよいですか?

追加情報:これが私のsendmail.mcファイルです。

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

1
あなたの質問の論理は完全に欠陥があります。つまり、「Sendmailを使用してメールを送信したくないのです。Sendmailを追加構成で再構成して、Sendmailがデフォルトでメールを送信する方法とまったく同じようにメールを送信するにはどうすればよいのでしょうか。」回答:そのままにしておきます。実際に何をしようとしているのかを理解するために、質問を完全に書き直す必要があるか、サーバーの設定をいじるのをやめ、それを壊さずに実行できるようにする必要があります。
サミッチ2013

1
じゃあオーケー。または、サーバーからではなく、サーバーからのみメールを送信したい場合はどうすればよいか説明してください。
Octopus

回答:


8

私はついに、ここでかなり包括的な解決策を見つけました。要約すると、いくつかのオプションがあります(それらのほとんどは他の回答で言及されていますが、何らかの理由で私の特定のシナリオでは機能しませんでした)。

オプション1: / etc / mail / local-host-namesからエントリを削除する

私にとって、このファイルはすでに空でした

オプション2: mcファイルのLOCAL_DOMAINエントリを削除する

私は誰もいませんでした

オプション3:インターフェースをプローブしないようにsendmailに指示する

define(`confDONT_PROBE_INTERFACES', `true')dnl

私の場合、これは設定されましたが、問題のあるホストはまだsendmailのクラスwに存在していました

オプション4:サーバーの名前を変更します。上記の外部リンクには、「クラスwからwhipple.orgを削除したい場合は、サーバーの名前をfrodo.whipple.org、www.whipple.org、elvis.whipple.orgなどに変更できます。」

私にとってはこれで十分ではありませんでした。www.domain.comという名前のホストでは、sendmailsクラスwにwww.domain.comとdomain.comの両方が含まれています(再起動後も)

オプション5:これは私のために機能しましたLOCAL_RULE_0をsendmail mcファイルに追加します

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

これはファイルの最後に<tab>置く必要があり、実際のタブ文字にする必要があります


私はオプション5を使い、bestmxマップを使用してそれを一般化します。
アダモ2013

これは完璧に動作します。Octopus LOCAL_RULESETS LOCAL_RULE_0 R $ * <@ domain.comをありがとう。> $ * <tab> $#esmtp $ @ mail.domain.com $:$ 1 <@ domain.com。> $ 2これはファイルの最後に置く必要があり、<tab>実際には<tab>の代わりにタブキーを使用する必要がありますコード。
Vinodh Kumar

7

サーバーのホスト名を変更します。ホスト名がネイキッドドメイン名と等しくなる正当な理由はありません。


はい、ホスト名をwww.domain.comに設定しても、それを試しました。sendmailをデバッグモードで実行し、$ = wと入力すると、このことがわかります。私は説明するために少し質問を言い換えました。
Octopus

3

これがあなたの質問に対する私の理解です:

  1. Sendmailをインストールして、Webサイトからメールを送信できるようにしました。

  2. SendmailをパブリックDNS名前空間の信頼できる電子メールサーバーとして構成しました。

  3. SendmailをパブリックDNS名前空間に対して権限を持たせたくない。パブリックDNS名前空間に送信されたメールを、Googleがホストするメールに送信する必要があります。

解決策:パブリックDNS名前空間に対して権限がないようにSendmailを再構成します。


2
私の質問は、sendmailの構成についてです。「sendmailを再構成する」よりも具体的に答えることはできますか?
Octopus

0

私はsendmailの設定についてあまり経験がありませんが、MXレコードに関しては正しいことをしているはずです。ただし、DNSルックアップの優先順位で、sendmailが最初/etc/hostsにほとんどのUNIXベースのオペレーティングシステムのローカルホストファイルを調べてからDNSサーバーを使用する可能性があると思います。その場合、hostsファイルに、マシンをdomain.comとして参照するエントリがあり、それをホスト名として設定した場合、それが起こっている可能性があります。エントリを変更するか新しいエントリを追加することにより、この特定のケースでのニーズに合わせてhostsファイルを編集できます。

または、URLを解決するときにローカルシステムのホストファイルを無視するようにsendmailを設定できます。どうすればいいのかわかりません。


0

1)Sendmailは、ローカルのメールドメインのリストを自動的に入力します($=w)。

sendmail.mcで次の行を使用してオフにすることはできません。

define(`confDONT_PROBE_INTERFACES',`True')

ローカル電子メールを「手動で」/etc/mail/local-host-namesファイルに追加できます。
(後にsendmailデーモンをHUPまたは再起動する必要があります)

2)Sendmailは$j、ローカルの電子メールドメインのリストに(自動設定された)「このホストの電子メール名」()を追加する場合があります。

「このホストの電子メール名」を定義できます

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

3)mailertable、NOTに記載されたドメインへの配達のためのconsultede $=w


しかし、define(confDONT_PROBE_INTERFACES',True ')はすでに(そして常に有効になっています)
Octopus

あなたの場合は、オプション2で覆われていてもよいので
アンフィ

これらはすべて私が十分に検討した良い提案ですが、オプション2はlocal-host-namesファイルにホストを追加することと同じだと思います。この場合、ホストを除外せずにホストを除外します。
Octopus

0

メールを送信するコード、完全なメールアドレスを使用していますか、それともサーバーにローカルアカウント経由でメールを送信させていますか?なぜなら:

これは、sendmailにすべてのメールをローカルにusers@localhost.localdomainに配信するように指示しています。

LOCAL_DOMAIN(`localhost.localdomain')dnl

また、これはsendmailにローカルアドレスのドメインをdomain.comに書き換えるように指示していますが、ローカル配信は変更しません

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

じゃあオーケー。または、サーバーからではなく、サーバーからのみメールを送信したい場合はどうすればよいか説明してください。

ステップ1:デフォルト設定に戻ります。
ステップ2:デフォルトの設定を使用します。


はい、そうですが、user @ domain.comに送信しています。デフォルトの設定には、質問で概説したまったく同じ問題があります。
タコ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.