たとえば、MTA、MUA、MDAの定義を見てきました https://ccm.net/contents/116-how-email-works-mta-mda-mua and https://en.wikipedia.org/wiki/Email_agent_(infrastructure)
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をインストールする必要がありますか?
ありがとう。
基本的に、Unix上のメールはローカルな現象です。同じホスト上のユーザーは、ネットワークがなくても相互にメールを送信できます。 (「アドレス」は単なるユーザー名であり、@
はありません。)これはもちろん、MUAからMTAにメッセージを通信する方法がローカルでなければならないことを意味します。通常、そのメソッドはsendmail
という名前のプログラムへのパイプです。
@
記号を含むアドレスをMTAに認識させることにより、純粋にローカルメールを拡張してインターネットメールシステムに参加させることができます。 MUAは、ネットワークの存在について知る必要はありません。アドレスを不透明な文字列として扱い、ローカルMTAにネットワークを経由する必要があるアドレスを特定させる必要があります。
MTAは、システム上に1つしかないため、明らかにネットワーク構成に適した場所ですが、複数のMUAを異なるユーザー、または同じユーザーが使用することもできます。それらすべてのネットワーク関連のものを処理する単一のプログラムは、構成を複数回行う必要がないことを意味します。
送信メッセージをリモートサーバーに挿入するMUAは、「Unixライクな」システムがMTAなしで正しく動作するふりをすることを可能にすることを目的としています。この構成は、従来のスキームを拒否したものです。これは、メールシステムの心臓部(ローカルユーザーにメッセージを送信する機能)を切り取り、適切な代替手段を提供しません。
CronはMUAとして機能しているため、「MUAを使用」せず、Unix MUAが常に行ってきたことを実行し、ネットワークが存在することを知らずにメールを送信し、ローカルMTAに依存してそれを把握します。 。また、cronジョブはローカルユーザーに代わって実行され、そのユーザーがリモートホストでどのアドレスを持っているかを知る方法がないため、ローカルユーザー名で受信者をアドレス指定することが唯一の妥当なデフォルトです。
実用的な回答
私は通常、cronユーザーの接尾辞エイリアスを作成します。このようにして、すべてのcronジョブメールがルックアップテーブルのエイリアスアドレスに配信されます。
cronメッセージは、サーバー/ドメイン/マシンから任意のインターネット全体の電子メールアドレスに送信できます。
さらに、cron
自体は任意の任意のものを使用するように構成できます メーラー MTA。
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" -*/
cronは任意のMTAを使用するようにコンパイルできます
理論的回答
コメントやその他の回答で述べられているように、cron
はMUAとして機能しています。独自の論理マシン上にある所定のMTAを除いて、実際にメッセージを送信するためのコードベースはありません。論理マシンは実際には同じ物理マシンではない可能性があることに注意してください。
SMTPポートを介してMTAに直接接続
SMTP.URL:port
に接続し、任意の認証を手動で行うことにより、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
やThunderbird
などの適切に設計されたMUAが使用されます。
ISPが標準のSMTPポートをブロックする理由:25
ほとんどのインターネットユーザーは、インターネットサービスプロバイダー(ISP)を介してワイドエリアネットワーク(WAN)に接続します。これらのISPは通常、HTTP(80)SMTP(25)やその他のいくつかの可能なインターネットサービスの実行に使用される一般的なポートをブロックします。
一般に、ISPは顧客と契約条件を結んでおり、ネットワークからインターネットサービスを実行することはできません。この一般的なISPポリシーには、少なくとも2つの理由があります。
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に確認する」以外に答えはありません。
簡単な答えは次のようになります。それはunix哲学です " 1つのことを実行してそれをうまく実行してください "。
まず、MTAとMUAの違いを理解します。
ユーザーが自分のMUAでメールを送信する場合、MUAは自分のISPのMTAに接続します。 MTAはユーザーの資格情報を確認し、メールの配信を受け入れます。これで、メールはユーザーに送信されたものとして報告されます。 ISPのMTAは、メールの配信方法をチェックし、メールを送信する次のステーションを見つける可能性があります。メールは、メールの最終的な宛先であるホストが見つかる前に、この方法で複数のホップを作成できます。このMTAは、宛先ユーザーのメールボックス(通常はサーバー上でローカル)に配置する方法を認識します。これで、受信者はMUAを開き、ISPのMDAに接続できます。 MDAはローカルファイルシステムを調べて、新しいメッセージとその内容があったことを報告します。
したがって、簡単な答えは次のとおりです。Cronはプログラムであるため、MUAではなくMTAのプログラムインターフェイスを使用します。 (cronはこれらのプログラムとどのように相互作用する必要がありますか?)
MTAを使用してメールを送信するには:ポート25、578、または使用するものに接続し、SMTP(S)プロトコルを使用します。これは、MUAが内部で行うことです。 MUAの設定で使用するのと同じ資格情報/ホスト/ポート設定を使用できます/使用する必要があります。
MUAは、MTAとのネットワーク通信を行うことができます。したがって、各マシンにローカルMTAは必要ありません(Thunderbirdを実行するためにローカルでpostfixを実行する必要はありませんよね?)。
ただし、どこにでもメールを送信できるはずのマシン上のサービスについて話している場合、実際には2つのオプションがあります。
ここで、上記のUNIX哲学が機能します。すべてのプログラムに通信(および承認など)を実装する代わりに、一度実装され(MTA)、このプログラムは、ローカルサービスからのメールを受け入れるデフォルトのインターフェイスを提供します(unixソケットを介して、コマンドまたはネットワークポートにパイプします)。これが、ほとんどのサービスがローカルMTAが実行されていると想定している理由です。このMTAは、並べ替えなどのためにメールをより大きなMTAに転送するだけの非常に最小限のMTAである可能性があります。
ここでの事実上の標準は、最近のプログラムsendmail(これもMTA)でした。それに関する大きな問題のために、それはまだ古いsendmailインターフェースを提供するpostfixのような他のMTAによってスーパーシードされました(postfixパケット内にsendmailラッパーが存在する理由)。