Sendmailでローカル配信を無効にする


31

CentosサーバーでSendmailを使用してPHPスクリプトのメールを送信していますが、問題は、ドメインのMXレコードで指定されているものではなく、実際には別のマシンを指しているマシンのローカルメールボックスにメールが配信されることです電子メールに使用します。

sendmailでマシンがセットアップされているドメインのメールをローカルに配信しようとしないようにしたいのですが、ローカル配信を無効にする簡単な方法はありますか?

ドメインはlocal-host-namesファイルにありません。

私はすでに多くのグーグルを行っており、私は見てきた:

ローカルマシンにメールを配信しないSendmail構成

Sendmailでローカル配信を無効にする

しかし、答えがないか、適切ではありません。

別のサーバーに中継したくないので、ドメインに関係なくメールを送信したいだけです。

例を提供するには:

2つのサーバーがあります。1つはmail.example.comのメールサーバーとexample.comのWebサーバーです。Webサーバーでsmtpサービスを使用すると、現在example.comのローカルメールボックスにメールをルーティングしますが、 mail.example.comのメールボックスに送信する必要があります

sendmail -btの出力は以下を返します。

アドレステストモード(ルールセット3は自動的に呼び出されません)
入る  
> 3,0 info@example.com
入力の正規化:info @ example com
Canonify2入力:情報 
Canonify2の戻り値:info 
canonifyの戻り値:情報 
入力の解析:情報 
Parse0入力:情報 
Parse0は以下を返します:info 
ParseLocal入力:情報 
ParseLocalは以下を返します:info 
Parse1入力:情報 
Parse1は以下を返します:$#local $:info
解析結果:$#local $:info

stalkr.net/forum/… は、私が実際に求めているものに最も近いようです。具体的にはMAIL_HUB設定が言及されていますが、実際には機能していないようです。

以下を試してください。sendmail-btを入力してから、3,0 user@domin.comと入力します。多くの書き換えルールが提供されます。最後のルールは、使用するリレーを提供する必要があります。出力を提供してください。
フランソワウォルマラン

こんにちはフランソワ、私は出力を含めるように私の質問を編集した

回答:


37

ローカル配信を無効にするためにしたこと。example.comドメインを使用します。

要件:

  • example.com ethインターフェースの1つに割り当てられたIPアドレスを指すエントリ。
  • 上記とまったく同じIPアドレスに割り当てられたexample.comを定義する/ etc / hosts
  • Googleサーバーを指すexample.com MXレコード(ASPMX.L.GOOGLE.COMなど)
  • デフォルトのsendmailインストール(私のものはUbuntuにありました)

手順:

vim /etc/mail/sendmail.mc

最後に:

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

その後:

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

テスト:

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

googleサーバーに接続していることを確認し、Googleの受信ボックスにメールが配信されていることを確認してください。


3
これは完璧に機能しました。ドメイン名の後。
ロドリゴ

同様に完璧に働いた!
フィリペピナ

ありがとう!私はこれをしばらくの間修正しようとしています。私は次のことをしました。sendmailをパージして再インストールし、実行しsendmailconfig、指定した行を追加し、sendmailconfig再度実行して実行するservice sendmail restartと動作します!
リアムニューマーチ

@Rodrigo example.com。末尾にドットが付いているものは正規のFQDNです。ドットのないexample.comは相対的であるため不正確です。たとえば、example.com.yourdomain.orgを意味する場合があります。OSの設定によります。これは、間と全く同じ違いである/etc/passwdetc/passwd
kubanczyk

4

sporkerとPawelのおかげで、これを修正するための正しい方向に導かれました。

私の元々の問題は、sendmailがドメインexample.comのメールアカウントをローカルアカウントと見なしていたことです。

これらのリンクは非常に有用であることが わかりました。MX レコードを無視するローカルドメインへのSendmail(パート2) http://lists.freebsd.org/pipermail/freebsd-questions/2004-September/057382.html http://objectmix.com/sendmail/ 367920-sendmail-ignores-mailertable-some-semilocal-domains.html

しかし、私の場合は、FreeBSD 8.2を使用して、実際にトリックを実行したのは次のとおりです。

# cd /etc/mail

# vim freebsd.mc

次の2行を追加します。

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

直前:

MAILER(local)
MAILER(smtp)

# make

---これは出力です---

 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

---出力の終わり---

# cp sendmail.cf sendmail.cf.bak

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

# /etc/rc.d/sendmail restart

これで誰かの頭痛が軽減されることを願っています。


1

私はsendmailの担当者ではありませんが、sendmail /etc/mail/local-host-namesはローカルドメイン名として保存されているドメインを扱うと考えています。
このファイルを空にして(削除しないで)、sendmailを再起動して、どうなるかを確認してください。

EDIT
私が言及したファイル名が実際に設定されているsendmail.cfとあなたがに設定されていない可能性local-host-names
に一見/etc/mail/sendmail.cfのために

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

これは決して事実をテストするものではなく、私が大声で考えているだけです。


うん、私はすでにドメインを述べた理由thatsのは、local-host-namesファイルにありません

申し訳ありませんが、正しく読めなかった質問に答えることを教えてくれます。
aussielunix

最近パッチを適用した一連のSolaris 10サーバーでこの問題が発生しました(パッチを適用したのは100ほどですが、問題が発生するのはほんの一握りです)。これが修正されました!ありがとう!
信号

0

これはあなたが探している解決策ではないかもしれませんが、問題が「admin」または「root」ユーザーが大量のメールと巨大なメールボックスを取得している場合、メールボックスをクリアするためにcronジョブを設定することを検討したいかもしれません毎週、日などに

この問題には複数のCentOSサーバーがありましたが、キャッチされるのは、さまざまな問題の診断に役立つことがあるため、メールを読むことができるようにしたかったからです。

解決策は、単純にcronジョブを実行し、ときどきボックスを消去することでした。

問題が見つかった場合... cronジョブを(一時的に)コメントアウトし、手がかりを得るためにログとメールを読みます。

ただ考え...と屋のための迅速/簡単な解決策。

そうでない場合は、sendmail.mcファイルを見て、それに応じて変更します。


クイックアップデート:

これはまさにあなたが求めているものではありませんが、いくつかのアイデアを提供し、あなたのために物事に光を当てるのに役立つかもしれません:

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


申し訳ありませんが、助けにはなりませんでした。私がやりたいことは、メールがローカルに配信されないことだけです。sendmailがこれを難しくしているのはなぜですか?

0

私は個人的には後置者ですが、@ yourdomain.com宛のメールを受信するように送信サーバーを設定しているように思えます。postfixのトランスポートメカニズムに相当するsendmailがある場合、それを使用してサーバー間でメールを内部的にルーティングします。


CentOS sendmailインストールのデフォルトであったため、あまり設定していません。

0

Ruleset 3はドメイン情報を削除するようです。以下にいくつかの一般的なトラブルシューティング手順を含めました。これが機能しない場合は、sendmail.cfを送信して確認する必要があります。

出力から、example.comはローカルドメインとして扱われます。nslookupを実行します。

q = mxを設定

domain.com

これがローカルマシンのIPアドレスを提供する場合、DNSを調べる必要があります。また、/ etc / hostsを調べて、domain.comがリストされていないことを確認します。

@ domain.comも削除されているようです。user@ stackoverflow.comのようなもので試してみて、ローカルドメインとしても表示されるかどうかを確認してください。

sendmail.cfファイルのCw値も確認してください。


フランソワのおかげで、私はsendmailの内部構造をもう少しよく理解し始めています。私は今のところ物事を回避するためにマシンのホスト名を変更することに決めたので、今はexample.comの代わりにwww.example.comです。これはuser@www.example.comのローカル配信を行うことを意味しますが、 user@example.comではありません-これは、この段階で私にとって大丈夫です。

0

おそらくあなたが望むものではありませんが、SSMTPはメールハブを指定できる送信専用サーバーに非常に適しています。


おかげで、私はSSMTPを見て、まだ今のところsendmailを修正しようとしています。

0

ローカルアドレスへの配信が試行されたときにエラーを返したい場合は、アクセスマップなどを使用できます。

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

電子メールメッセージを「配信」したが破棄する場合は、「@your.domain」のすべてをdev-nullにエイリアスするvirtusertableエントリをインストールできます。root多くの場合、cronジョブなどからの電子メールレポートの受信者であるため、少なくとも「」をローカルに配信し続けることが役立つ場合がありますvirtusertable

root@your.domain local:root

@your.domain local:dev-null

dev-nullメッセージを/ dev / nullにリダイレクトするローカルエイリアスを使用すると、ルートメールの配信は継続されますが、他のユーザーに配信されたメッセージは破棄されます。


0

Pawelによる修正はうまくいきましたが、sendmailconfigがcentosに存在しなかったため、

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

構成を更新する


その二番目のルールしない仕事/私のCentOSの上に存在する
solsol

0

Pawelの答えが私の非常によく似た問題を解決したことを確認しただけです。

FreeBSDを使用しているが、sendmail cfファイルの手間のかかることにあまり興味がない人は、Pawelの例の2行を追加するために次のシーケンスを使用します。

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

私はこれらの提案に従いましたが、pawelが述べたステップを追加するだけで、

「上記とまったく同じIPアドレスに割り当てられたexample.comを定義する/ etc / hosts」、基本的にはサーバーIPに続いてサーバー名を/etc/hostsファイルに追加しました。

Google経由でメールをルーティングして、メールに戻すには十分でした。


0

サーバーの管理にCpanel / WHMを使用している場合は、[構成の自動検出]ではなく、Cpanel / WHMでリモートメールエクスチェンジャーを選択してください。リモートメールエクスチェンジャーは、ローカルドメインを含むMXレコードを介してすべての電子メールを送信します。自動では、ローカルドメインの電子メールはローカルに直接ルーティングされ、MXレコードで定義された外部サーバーには送信されません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.