cronはなぜMTAを使用してメールを送信しますか?

cronはなぜMTAを使用してメールを送信しますか?

MTA、MUA、MDAの定義を調べました。https://ccm.net/contents/116-how-email-works-mta-mda-muaそしてhttps://en.wikipedia.org/wiki/Email_agent_(インフラストラクチャ)

  • Lubuntuでは、デフォルトの電子メールクライアントはSylpheedであり、多くの人がThunderbirdも使用しています。私の記憶が正しい場合、SylpheedとThunderbirdはどちらもMUAです。

  • 存在するhttps://unix.stackexchange.com/a/479613/674、Stephenは、cronが作業結果を電子メールで送信するためにMTA(postfixやsendmailなど)を使用していると述べました。

私の質問は次のとおりです

  • cronが電子メールを送信するときにMUAの代わりにMTAを使用するのはなぜですか? cronがMUAを使用して電子メールを送信できる場合はどうなりますか?

  • 電子メールを送信するときにMTAの代わりにMUA(SylpheedまたはThunderbird)を使用するのはなぜですか? MTAを使用して電子メールを送信できる場合はどうすればよいですか?

  • MUA(SylpheedまたはThunderbird)をインストールするときは、SylpheedまたはThunderbirdからシステムにMTAをインストールする必要がありますか?同じ電子メールを送信するマシン?

ありがとうございます。

答え1

Unix のメールは基本的にローカル現象です。同じホストのユーザーは、ネットワーク接続なしで互いにメールを送信できます。 (「アドレス」は単にユーザー名であり、何もありません。@)これはもちろん、MUAからMTAにメッセージを転送する方法がローカルでなければならないことを意味します。通常、メソッドはというプログラムを指すパイプですsendmail

MTAにこのシンボルを含むアドレスを理解させることで、純粋にローカルメールを参加しているインターネットメールシステムに拡張できます@。 MUAはまだネットワークが存在するかどうかを知る必要はありません。単にアドレスを不透明文字列として処理し、ローカルMTAにネットワークを通過する必要があるアドレスを決定するようにします。

システムにはMTAが1つしかないため、MTAは明らかにネットワーク構成に適した場所ですが、複数のMUAは異なるユーザーまたは同じユーザーが使用できます。このすべてのネットワーク操作を処理する単一のプログラムは、構成を複数回実行する必要がないことを意味します。

発信メッセージをリモートサーバーに注入するMUAは、「Unixファミリー」システムがMTAなしで正常に動作しているように見えるように設計されています。この構成は既存のソリューションを拒否します。これは、メールシステムのコア(すべてのローカルユーザーにメッセージを送信する機能)をブロックし、適切な代替機能を提供しません。

CronはMUAとして機能します。これは「MUAを使用する」ことではなく、Unix MUAが常にやってきたことを行うことです。つまり、ネットワークが存在することを知らず、メールを送信し、それを把握するためにローカルMTAに依存します。ローカルユーザー名で受信者アドレスを指定することは、cronジョブがローカルユーザーの代わりに実行され、そのユーザーが一部のリモートホストにどのアドレスを持っているかを知る方法がないため、唯一の合理的なデフォルトです。

答え2

cronとMUA-MTAの接続情報

実用的な答え

私は通常cronユーザーのための接尾辞のエイリアスを作ります。これにより、すべてのクローンジョブ電子メールがルックアップテーブルのエイリアスアドレスに送信されます。

  • したがって、実用的な答えは次のとおりです。

クローンメッセージは、サーバー/ドメイン/マシンからインターネット全体の電子メールアドレスに送信できます。


メーラーMTAを使用するように独自に構成することもcronできます。

Debian Busterのcronソースツリーから:

cron-3.0pl1/config.h

45 #define MAILCMD _PATH_SENDMAIL                   /*-*/
46 /* #define MAILARGS "%s -i -FCronDaemon -odi -oem  %s"       /*-*/
47 #define MAILARGS "%s -i -FCronDaemon -B8BITMIME -oem  %s"        /*-*/
48          /* -i    = don't terminate on "." by itself
49                         * -Fx     = set full-name of sender
50           * -odi  = Option Deliverymode Interactive
51           * -oem  = Option Errors Mailedtosender
52           * -t    = read recipient from header of message
53           * -or0s = Option Readtimeout -- don't time out
54           * XXX: sendmail doesn't allow -or0s when invoked
55           * by joe user.  --okir
56           */
57
58 /* #define MAILCMD "/bin/mail"           -*/
59 /* #define MAILARGS "%s -d  %s"          -*/
60          /* -d = undocumented but common flag: deliver locally?
61           */
62
63 /* #define MAILCMD "/usr/mmdf/bin/submit"    -*/
64 /* #define MAILARGS "%s -mlrxto %s"      -*/

  • 2番目の実際の答えは次のとおりです。

CronはすべてのMTAを使用するようにコンパイルできます。


理論的な答え

コメントやその他の回答で述べたように、cronMUAとして機能しています。独自の論理システムで予約されたMTAになる以外に、実際のメッセージ転送を処理するコードベースはありません。論理マシンが実際に同じ物理マシンではない可能性があることは注目に値します。

MTAを使用したEメール送信について

SMTPポートを介してMTAに直接接続する

SMTP.URL:portMTA に接続して認証を手動で行うと、MTA から直接電子メールを送信できます。

telnet example.com 25

これは通常、ISP接続を介してポート25へのアクセスをブロック解除した場合に機能します。次のようなメッセージが届きます。

Trying xxxx:xxxx::xxxx:xxxx:xxxx:xxxx...
Trying xxx.xxx.xxx.xxx...
Connected to example.com.
Escape character is '^]'.
220 mail.example.com ESMTP Postfix (Debian/GNU)

ただし、ほとんどのISPはポート25接続をブロックします。さらに、この電子メールの送信方法はより面倒であるため、一般的にはよくsylpheed設計されたMUAを使用または待ちます。thunderbird

ISPが標準SMTPポートをブロックする理由:25

ほとんどのインターネットユーザーは、インターネットサービスプロバイダ(ISP)を介して広域ネットワーク(WAN)に接続します。これらのISPは、通常、HTTP(80)、SMTP(25)、および他のいくつかの可能なポートなど、インターネットサービスを実行するために使用される一般的なポートをブロックします。

一般的に、ISPは、顧客とネットワークでインターネットサービスの運用を禁止する利用規約契約を結んでいます。この一般 ISP ポリシーには少なくとも 2 つの理由があります。

  1. インターネットサービスは帯域幅を消費します。
  2. ISPは、多くのスパマーや悪意のあるWebサービスに対する最小の障害です。

ISP はしばしば、独自の動的 IP アドレス プールをブラックリストに追加します。したがって、ISPの動的IPアドレスで実行されているすべてのメールサービスは拒否されるか、大規模な電子メールプロバイダの「スパム」フォルダに直接配置される可能性があります。

ブラックリストIPブロック

IPブラックリストは非常にシンプルで効果的です。ブラックリストに登録されているドメインからの着信メールを即座に拒否するために、MTA構成に使用されます。

/etc/postfix/main.cf

...
smtpd_client_restrictions = ...
                            reject_rbl_client cbl.abuseat.org
                            reject_rbl_client pbl.spamhaus.org
                            reject_rbl_client sbl.spamhaus.org
                            reject_rbl_client bl.blocklist.de
...

私の物理サーバーログの1つの例:

Oct 14 04:45:23 xxxx postfix/smtpd[17679]: NOQUEUE: reject: RCPT from xxxxx.xxxx.xxxx.jp[xxx.149.xxx.xxx]: 554 5.7.1 Service unavailable; Client host [xxx.149.xxx.xxx] blocked using sbl.spamhaus.org; https://www.spamhaus.org/sbl/query/SBL319039; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<xxxx.xxx.xxx.jp>

ボットネット時代のポート遮断とRBLの効率

これらの戦略は、現在オンデマンドのWebサーバーの時代以前に、より効果的でした。私の経験によれば、スパマーと悪意のある行為者はISP接続サービスからボットネットとオンデマンドコマンドと制御(C&C)サーバーに移動します。

私のサーバーに対するほとんどのスパム攻撃や無差別攻撃は通常、Amazon EC2 IPアドレスで実行されているC&Cプローブから始まります。その後、遠く離れた国の住所から始まった一連のボットネットが誕生しました。

ポートをブロックしないISP

米国のISPがすべてのポートを許可しているかどうかはわかりません。しかし、一部のヨーロッパISPは、ブロックされたポートやフィルタなしで消費者にインターネット消防ホースだけを提供することを見ました。

だから「ISPに確認してください」以外に答えはありません。

答え3

短い答えはおそらく:それはUnixの哲学です。」何かをしてうまくいく」。

まず、MTAとMUAの違いを理解してください。

  • MUA(Mail User Agent)(Thunderbirdなど)は、ユーザーと簡単にやり取りできるプログラムです。このプログラムは主にユーザーの対話に焦点を当てています。さまざまなメールボックス内の現在のメッセージをユーザーに表示し、ユーザーが指定したメールアドレスにメッセージを送信できるようにします。追加機能が可能です。主にユーザーを満たすために、すべての下位レベルのタスクを処理します。
  • MTAはバックグラウンドプログラムです。唯一の目的は、ある「場所」から別の「場所」にメールを送信するための安定したバックエンドを提供することです。 (ここで「場所」はホスト、人、または他のものを意味することができます。その背後にあるアイデアを理解するだけです。)そのインターフェースは主にプログラミングAPIです(参照SMTPプロトコル)。もちろん、人間はそのようなテキストを偽造することができますが、実際の電子メールの例を実行するときに仕様内でそれを手動で維持することは容易ではありません。
  • MDA(Mail Delivery Agent)は、ユーザーのメールボックスへのアクセスを提供するプログラムです。また、プログラミングインターフェイスを使用します。このようなインタフェースの例には、POP3またはIMAPがある。

ユーザがMUAからメールを送信すると、MUAはISPのMTAに接続される。 MTA はユーザー資格情報を確認し、メッセージの配信を受け入れます。これで、メッセージがユーザーに配信されたことが報告されます。 ISPのMTAは、メッセージの配信方法を確認し、メッセージを配置する次のサイトを見つけることができます。メッセージは、最終的な宛先であるホストを見つける前に、この方法で複数のホップを作成できます。このMTAは、それをターゲットユーザーのメールボックス(通常はサーバーのローカルメールボックス)に配置する方法を知っています。これで、受信者はMUAをオンにしてISPのMDAに接続できます。 MDAはローカルファイルシステムを調べ、新しいメッセージとその内容を報告します。

したがって、簡単な答えは次のようになります。 Cronはプログラムなので、MUAではなくMTAのプログラミングインターフェイスを使用します。 (クローンはこれらのプログラムとどのようにやり取りする必要がありますか?)

MTAを使用してメールを送信するには:ポート25、578、または使用するポートに接続し、SMTP(S)プロトコルを使用します。これがMUAが後ろからあなたのためにすることです。 MUA設定で使用されているのと同じ資格情報/ホスト/ポート設定を有効または使用する必要があります。

MUAはMTAとのネットワーク通信が可能です。したがって、各マシンにローカルMTAは必要ありません(Thunderbirdを実行するためにローカルでpostfixを実行する必要はありません、そうですか?)。

ただし、どこからでもメールを送信できる必要があるシステムのサービスについて話すとき、実際には2つのオプションがあります。

  1. プログラム(cronなど)は、メールを受け入れるリモートMTAを知っています。これはプログラムごとに個別に実行する必要があります。これは、多くのサービスを管理する際の面倒な作業です。
  2. すべてのメールには「デフォルトパス」があります。これにより、すべてのローカルプログラムが手動設定なしでそのパスを簡単に使用できるようになります。

ここでは、上記のUnix哲学が適用されます。すべてのプログラムに対して通信(および認証など)を実装するのではなく、一度だけ実行し(MTA)、プログラムはローカルサービスからメールを受け入れるための基本インターフェイスを提供します(コマンドまたはネットワークポートにパイプされたUnixソケットインターフェイス)。これがほとんどのサービスがローカルMTAが実行されていると仮定する理由です。 MTAは、ソートなどのために単にメールをより大きなMTAに転送する非常に小さなMTAです。

ここでの事実上の標準は最近のプログラムであるsendmail(MTAでもある)です。大きな問題があったため、まだ古いsendmailインターフェースを提供するpostfixなどの他のMTAに置き換えられました(これがsendmailラッパーがpostfixパケットに存在する理由です)。


編集1: @Tim、なぜ送受信するのが対称でなければならないと思いますか? MTAはサーバー間通信を担当します。 (他人にメールを送っている間)片側だけが見えるという点で対称です。受信はプロバイダのサーバによって行われる。メール送信自体は非常に高速です(数ミリ秒)。

したがって、送信側にはMDAのようなものは必要ありません。一度試してみるとメールが届きます。郵便サービスのように考えてみてください。郵便局にパッケージを預けると、追加設定が処理されます。

MUAは単にメールを途中で送信します。最初のMTAで承認された場合、MUAはこれを考慮します。送る。もう一度、郵便サービスを例に挙げてみましょう。送るために郵便局にパッケージを置くと配達されると仮定します。途中で問題が発生した場合は、パッケージを返品いたします。配送中にメールに問題がある場合に発生します。メッセージが次の停留所に配信できない場合、MTAは戻りメッセージ(いわゆるバウンスメッセージ)を送信します。

今すぐ受信側にあります。私は郵便アナログを再選択することから始めました。常に連絡が可能で、常に同じ場所にいる場合は、郵便局が直接あなたに来て、郵便を配達することができます。これは、MTAがあなたに直接メールを送信することを意味します。

残念ながら、あなたは非静的IPを持っており(常に同じ場所にいない)、常にそこにいるわけではありません(常に家にいるわけではありません)。したがって、MTAからメールを配信しようとすることができますが、あなたの不在によってメールが返送されます(上記を参照)。

これを防ぐには、独自のメールアドレスが必要です。これは電子メールと通常のメールの両方に当てはまります。郵便局の従業員/MTAは、自分が決めた時間(時間)に合わせて郵便物を郵便箱に入れます。メッセージを転送する必要があるたびに、彼はそうすることができます。 MTAの場合、これは専用フォルダにファイルを保存することを意味します。

メールボックスは、あなたと郵便局の間の同期要素を表します。いつでもPOに行くことができます。あなた正しいものを見つけて投稿を見つけます。 MTAはメッセージをサーバーに保存するため、直接アクセスできません。これがMDAが役に立つ場所です。 MDAを使用すると、あなたの代わりにあなたが望む時間にメールボックスにアクセスできます。

関連情報