web-dev-qa-db-ja.com

外部の受信メールを受け入れるようにSendmailサーバーを構成する

セキュリティ上の理由から、sendmailは、オープンメールリレーの問題を回避するために、デフォルトでローカルシステム(127.0.0.1)からの接続を受け入れるように構成されています。だが、

Sendmailにインターネットからのメールを強制的に受け入れるにはどうすればよいですか?

http://www.cyberciti.biz/tips/sendmail-is-only-accepting-connections-from.html の記事には、Addr=127.0.0.1の部分を削除すると書かれています。

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

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

「任意のホストからの接続を強制的に受け入れる」。私はそれをしました:

$ grep smtp /etc/mail/sendmail.mc
dnl DAEMON_OPTIONS(`Family=inet6, Name=MTA-v6, Port=smtp, Addr=::1')dnl
DAEMON_OPTIONS(`Family=inet,  Name=MTA-v4, Port=smtp')dnl
MAILER(`smtp')dnl

しかし、まだインターネットからの受信メールを受け入れることができないようです。それで、moonpointによって提案されたようにそれをコメントアウトしました:

$ grep smtp /etc/mail/sendmail.mc
dnl DAEMON_OPTIONS(`Family=inet6, Name=MTA-v6, Port=smtp, Addr=::1')dnl
dnl DAEMON_OPTIONS(`Family=inet,  Name=MTA-v4, Port=smtp')dnl
MAILER(`smtp')dnl

% make
Updating databases ...
Reading configuration from /etc/mail/sendmail.conf.
Validating configuration.
Creating /etc/mail/databases...
Creating /etc/mail/relay-domains
# Optional file...
Updating Makefile ...
Reading configuration from /etc/mail/sendmail.conf.
Validating configuration.
Creating /etc/mail/Makefile...
Updating sendmail.cf ...
The following file(s) have changed:
  /etc/mail/sendmail.cf /etc/mail/local-Host-names
** ** You should issue `/etc/init.d/sendmail reload` ** **

% /etc/init.d/sendmail reload
 * Reloading Mail Transport Agent (MTA) sendmail                    [ OK ]

ただし、以前は少なくとも「Relayingdenied」エラーが発生したため、期待どおりに機能していないと思いますが、現在、Google経由でシステムにメールを送信しようとすると、約10分間何も起こりませんでした。自分で問題のトラブルシューティングを試みて、 http://support.moonpoint.com/blog/blosxom/2015/04/04#smtp-telnet-commands を参照し、telnetを使用してサーバーに接続しようとしました。 。しかし、すぐに「接続が拒否されました」というエラーが表示されます。

$ telnet xpt.mydomain.org 25
Trying 104.243.xx.xx...
telnet: Unable to connect to remote Host: Connection refused

以前に取得したものに戻すためにそのdnlを削除すると、少なくとも接続できるようになります。

$ telnet xpt.mydomain.org 25
Connected to xpt.mydomain.org.
Escape character is '^]'.
220 mail.xpt.mydomain.net ESMTP Sendmail 8.14.4/8.14.4/Debian-2.1ubuntu4; Sun, 14 Jun 2015 22:16:13 -0400; (No UCE/UBE) logging access from: my.remote.domain

インターネットからの受信メールを受け入れたい場合はどうすればよいですか?

更新:LANのメールサーバーとしてsendmailを既に構成しており、サーバー上の電子メールに使用している関連ドメイン名の電子メールを受け入れるようにsendmailを構成したと思いましたが、これが得られたものです。

% sendmail -bv [email protected]
[email protected]... deliverable: mailer relay, Host mail.myisp.com, user [email protected]

今ではそうではないことがわかったので(実際には、私が持っている別のダイナミックDNS名で構成されていました)、xpt.mydomain.orgに変更します。そして今、それは大丈夫に見えます:

% sendmail -bv [email protected]
[email protected]... deliverable: mailer local, user me

ただし、外部の電子メールアカウントを使用してシステムに電子メールを送信すると、次のようになります。

Delivery to the following recipient failed permanently:

     [email protected]

Technical details of permanent failure:
Google tried to deliver your message, but it was rejected by the server for the recipient domain xpt.mydomain.org by xpt.mydomain.org. [104.243.xx.xx].

The error that the other server returned was:
550 5.7.1 <[email protected]>... Relaying denied

----- Original message -----

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20120113;
        h=mime-version:date:message-id:subject:from:to:content-type;
        bh=0rLnzRsn....

OK、スパマーが私のSendmailサーバーを電子メールの中継に使用できないことを嬉しく思いますが、私も電子メールを受け取りません。

では、すべてのLANホストからの接続でメールを送信したり、誰からもメールを受信したりできるようにしながら、オープンメールリレーの問題を回避するにはどうすればよいでしょうか。

Update2:自分で問題のトラブルシューティングをさらに試みて、さらにプッシュし、telnetを使用して完全なSMTPプロトコルをテストしました。奇妙なことに、telnetを使用したときに「Relayingdenied」エラーが発生しませんでした:

...
mail from: [email protected]
250 2.1.0 [email protected]... Sender ok
rcpt to: [email protected]
550 5.7.1 [email protected]... Relaying denied
rcpt to: [email protected]
250 2.1.5 [email protected]... Recipient ok
Data
354 Enter mail, end with "." on a line by itself
This is a test message.
.
250 2.0.0 t5F2ItI0008331 Message accepted for delivery
quit
221 2.0.0 mail.xpt.mydomain.net closing connection
Connection closed by foreign Host.

これで、すべてが正常に機能しています。どうもありがとうムーンポイント!!!

ありがとう

$ lsb_release -a 
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 13.10
Release:        13.10
Codename:       saucy

$ apt-cache policy sendmail-bin
sendmail-bin:
  Installed: 8.14.4-2.1ubuntu4
  Candidate: 8.14.4-2.1ubuntu4
  Version table:
 *** 8.14.4-2.1ubuntu4 0
        500 http://us.archive.ubuntu.com/ubuntu/ saucy/universe AMD64 Packages
        100 /var/lib/dpkg/status

PS。私がそれをしたい理由についてもう少し-私がしたいのは、私の個人的な使用のために、sendmailサーバーがインターネットからのメールを受け入れることができるようにすることです。私はこれらの5つの簡単なステップを数回実行しようとしましたが、

Debianで簡単なメールサーバーを5つの簡単なステップでセットアップする方法
http://cnedelcu.blogspot.ca/2014/01/how-to-set-up-simple-mail-server-debian-linux.html

しかし、結局、彼らは決して機能しませんでした、そして私は何が悪かったのかさえ知りません。したがって、最も簡単な方法は、代わりにsendmailサーバーを有効にすることだと思います。

4
xpt

サーバー上の電子メールに使用している関連ドメイン名の電子メールを受け入れるようにsendmailを構成しましたか?たとえば、ドメイン名がexample.comで、システムの有効なメールアドレスが[email protected]である場合、システムのルートアカウントからコマンドsendmail -bv [email protected]を実行すると、メールが成果物と参照「メーラーローカル」とローカルアカウントはありますか?たとえば、次のようなものがありますか?

# sendmail -bv [email protected]
[email protected]... deliverable: mailer local, user xpt

関連するドメイン名の電子メールを受け入れるようにsendmailを構成している場合は、「mailerlocal」とローカルアカウントを参照します。

更新:sendmail -bvコマンドから提供された出力は、xpt宛ての電子メールを受け入れるようにsendmailが構成されていないことを示しています。 mydomain.org。 sendmailにドメイン名の電子メールを受け入れさせるには、そのドメイン名xpt.mydomain.orgを/etc/mail/local-Host-namesに追加してから、コマンドmakemap hash /etc/mail/local-Host-names < /etc/mail/local-Host-namesを発行する必要があります。コマンドを発行したときに表示される「noRHSforLHS」メッセージについて心配する必要はありません。それを試してから、同じsendmail -bv [email protected]コマンドを再実行してください。 sendmail -bv [email protected]コマンドを再実行すると、「mailerrelay」ではなく「mailerlocal」への参照が表示され、「user」の後に「[email protected]」ではなくローカルアカウントが続くはずです。 org」。 makemapおよびsendmail -bvコマンドからの出力例については、 sendmailにドメインの電子メールを受け入れるようにする を参照してください。

更新2Sendmailはローカルホスト(127.0.0.1 IP)からの接続のみを受け入れています の記事を参照しましたが、おそらく/etc/mail/sendmail.mcの以下の行に必要な変更を加えないでください。

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

その行の先頭に「dnl」を付けてコメントアウトする必要があります。次の行のようになります。

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

記事が提案する行を元の行の代わりに追加しません。コメントアウトしてから、次のコマンドを使用してsendmail.mcファイルからsendmail.cfファイルを再構築し、sendmailが送信された電子メールを受け入れるようにします。 sendmailが実行されているサーバーの外部にある電子メールクライアントによって。

m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf

M4コマンドを使用してファイルを再構築したら、sendmailを再起動する必要があります。この記事では、/etc/init.d/sendmail restartを使用してこれを行うことを提案しています。たとえば、そのコマンドがシステムでsendmailを再起動しない場合、たとえばNo such file or directory messageが生成される場合は、代わりにservice sendmail restartまたはsystemctl restart sendmailを試してください。 sendmailを再起動すると、システム上の有効な電子メールアドレス、つまりlocal-Host-namesファイルにリストしたドメインの電子メールを受け入れる必要があります。

システム上のアドレス(Hotmail、Gmail、その他の電子メールアカウントなど)に電子メールを送信するために使用できる外部電子メールアカウントをお持ちですか?もしそうなら、あなたがあなたのシステムの有効な電子メールアドレスに送信した場合、あなたは今バウンスされた電子メールメッセージに何を見ますか?バウンスメールで参照されているエラーは何ですか?

Sendmailが適切に構成されている場合でも、インターネットから電子メールを受信できるようにするために対処する必要のある他の問題があります。ファイアウォールルールが適切に構成されているとおっしゃいました。 sendmailを実行しているシステムと、sendmailサーバーが存在するローカルエリアネットワーク(LAN)上の外部ルーター/ファイアウォールの両方で適切なファイアウォールルールが必要になる場合があります。外部の電子メールサーバーが電子メールサーバーと通信するために、LAN上のルーター/ファイアウォールが ネットワークアドレス変換(NAT )を使用している場合は、そのデバイスを ポート転送 に構成する必要があります。 =ポート25への接続、 Simple Mail Transfer Protocol(SMTP) ある電子メールサーバーから別の電子メールサーバーへ、ファイアウォール/ルーターから送信メールサーバーへの電子メールの配信に使用されるポート。

必要なファイアウォールルールと必要なポート転送が適切に設定されている場合、外部システムはsendmailサーバーのポート25に正常に接続できるはずです。多くのWebサイトで無料で提供されている多くのポートチェックサービスの1つを使用して、それが可能かどうかをテストできます。これにより、問題の原因を絞り込むことができます。たとえば、 ポートフォワーディングテスター を使用できます。サーバーからテストを実行していない場合は、外部システムがサーバーと通信しようとしたときに表示されるIPアドレスを指定する必要があります。これは、サーバーに割り当てたIPアドレスとは異なります。サーバーが存在するネットワーク上のファイアウォールまたはルーターは、サーバーをインターネットから分離するNAT)を採用しています。外部システムに表示されるアドレスを見つけるには、多数の無料サービスのいずれかを使用できます。これにより、そのサービスを提供するエンティティのWebサイトにアクセスすると、デバイスの外部に表示されるIPアドレスが表示されます。たとえば、Webブラウザーを使用して、sendmailサーバーから whatismyip.com にアクセスできます。 Port Forwarding Tester サイトでは、そのIPアドレスを「リモートアドレス」に使用し、25をポート番号に使用します。「チェック」をクリックすると、「ポート25は開いています」と表示されます。 "必要なファイアウォールルールと必要なポート転送がある場合は、提供されたIPアドレスが続きます正しく構成されています。

ネットワーク外のシステムで telnet を使用して、sendmailサーバーのポート25への接続を試みることもできます。必要なファイアウォールルールと必要なポート転送が設定されている場合は、サーバー上でsendmailからの応答が表示されます。 sendmailサーバーのポート25への接続を確立できる場合は、SMTPコマンドを発行して、サーバー上のアカウントにテストメッセージを送信できるようにすることができます。例: SMTPコマンドを使用した電子メール配信のテスト を参照してください。

その方法でメールを正常に配信できる場合は、メールサーバーに適切な メールエクスチェンジャー(MX)レコード がない可能性があります。 sendmailサーバーの 完全修飾ドメイン名 がexample.comであると仮定しましょう。 Hotmail、Gmail、またはメールサーバー以外のメールサーバーを使用しているユーザーがメールを送信した場合、たとえば[email protected]を使用すると、他のメールサーバーがメールを処理するように指定されているメールサーバーを確認します。 example.com。必ずしもexample.comである必要はありません。たとえば、bigemailprovider.comなどの外部の電子メールプロバイダーが提供する電子メールサービスを使用できます。

MX Lookup サービスを使用して、ドメインのMXレコードを確認できます。ドメイン名を入力して「MXルックアップ」をクリックするだけです。例:this link は、gmail.comの結果を表示します。 sendmailサーバーからgmail.comアドレスに電子メールメッセージを送信しようとすると、サーバーは同様のチェックを実行し、同様の結果を表示します。 Googleには、Gmailユーザーのために他のサーバーからのメールを受け入れることができる多くのメールサーバーがあります。さまざまな設定とIPアドレスを持つそのようなサーバーのリストが表示されます。あなたのサーバーと他の人は最初に最も低い優先度のサーバーを試します。たとえば、優先度5のGmailサーバーは、優先度10のGmailサーバーよりも先に試行されます。サーバーが優先度5のGmailサーバーと通信できなかった場合は、優先度10のGmailサーバーを試行します。諦める前に多くのGmailサーバー。

ドメインのMXレコードが表示されない場合は、問題ありません。 example.comを使用していて、example.comのMXレコードが存在しない場合、別の電子メールサーバーは、example.comのIPアドレスが電子メールの配信を試行する場所であると想定します。 sendmailサーバーのIPアドレス以外のIPアドレスを指すMXレコードが表示される場合は、ドメイン名レジストラが提供するドメインネームシステム(DNS)設定のWebページからドメインのMXレコードを変更する必要がある場合があります。たとえば、サーバーのドメイン名を登録した会社。一部のレジストラは、デフォルトで、ドメインを登録するときにメールサーバーを指すMXレコードを作成します。 Unix、Linux、OS X、またはMicrosoft Windowsシステムのコマンドラインプロンプトから手動で同じチェックを実行できます nslookupコマンドを使用してMXレコードをチェックします 。例:nslookup -querytype=mx gmail.com

3
moonpoint