web-dev-qa-db-ja.com

Postfix + Php Mail()VS Postfix + SMTP

ほとんどのCMS(Joomlaなど)にはデフォルトでphp mail()が付属しており、必要に応じてSMTPに変更するオプションがあります。 Debian 7の同じVPSにWebサーバーとメールサーバー(Postfix)の両方をセットアップします。私が理解しようとしているのは次のとおりです。

  1. 配信レピュテーション: php mail()とSMTPを使用すると、配信速度に違いはありますか?私の理解では、Postfixはメールを配信するときにインターネット上の他のサーバーと通信するときにSMTPプロトコルを使用するので、メールがphpメールまたはlocalhostからsmptを介してpostfixに送信されたかどうかは問題ではないと考えるのが安全です?これらの2つの方法のいずれかが、電子メールのレピュテーションに影響を与えますか?

  2. パフォーマンス負荷:メール送信時のphpメールとSMTPのパフォーマンスに違いはありますか?たとえば、10,000通のメールを送信する場合、どの方法が最も多くのリソース(または時間)を消費しますか?私の想定では、ヘッダーなどを使用して電子メールをコンパイルするためのphpメールと、毎回接続を確立するためのSMTPのように、両方とも少し時間がかかる可能性があります。サーバーリソースを最も消費するのはどれですか?

  3. セキュリティの問題: 2つの違いを検索したところ、ハッカーがphpスクリプトをアップロードしてスパムを送信できるため、多くのサイトがphpメールのセキュリティの問題について述べています。しかし、SMTPのユーザー名とパスワードは構成ファイルにテキストで保存されており、どちらも安全ではないため、SMTPに関する別のセキュリティ問題も確認できます。どちらの方法にもセキュリティの問題があるので、いずれかの面で一方が他方よりも重くなりますか?

  4. 設定:サーバーでphpmailとSMTPの両方を設定できる場合、何らかの理由でどちらか一方を優先して使用する必要がありますか?つまり、サーバーでSMTPを使用できる場合、上記のポイントで説明されているさまざまな理由により、phpmailの代わりにSMTPを使用する必要がありますか?

背景:私のマシンは、Joomlaからのメール、ニュースレター、さまざまなサービスからのルートメールを送信するためだけにpostfixを使用するシンプルなWebサーバーになります。

3
Neel

配信レピュテーション:php mail()とSMTPを使用すると、配信率に違いはありますか?私の理解では、Postfixはメールを配信するときにインターネット上の他のサーバーと通信するときにSMTPプロトコルを使用するので、メールがphpメールまたはlocalhostからsmptを介してpostfixに送信されたかどうかは問題ではないと考えるのが安全です?これらの2つの方法のいずれかが、電子メールのレピュテーションに影響を与えますか?

すべての関連はありません。 Postfixはmail()とSMTPの両方を介してメールを受信できます。それを処理した後、postfixはSMTP経由で送信します。

パフォーマンス負荷:電子メールを送信するときのphpメールとSMTPのパフォーマンスの違いはありますか?たとえば、10,000通のメールを送信する場合、どの方法が最も多くのリソース(または時間)を消費しますか?私の想定では、ヘッダーなどを使用して電子メールをコンパイルするためのphpメールと、毎回接続を確立するためのSMTPのように、両方とも少し時間がかかる可能性があります。サーバーリソースを最も消費するのはどれですか?

ベンチマーク!これに関するデータはありません。


ここで、mail()とSMTPに関係するプロセスは何ですか?

Mail()コマンドで、PHP sendmailコマンドを呼び出すと、プログラムはメールをmaildropキューディレクトリ内のファイルに配置します。ピックアップデーモンはそのディレクトリをスキャンし、メールをクリーンアップデーモンに移動します。

SMTP 1では、PHP SMTPdを介してPostfixサーバーへの接続を作成します。SMTPの儀式が終了した後、SMTPdは電子メールが許可されているかどうかをチェックします。デーモン。

出典: 接尾辞の公式ドキュメント


セキュリティの問題:2つの違いを検索したところ、ハッカーがphpスクリプトをアップロードしてスパムを送信できるため、多くのサイトがphpメールのセキュリティ問題について述べています。しかし、SMTPのユーザー名とパスワードは構成ファイルにテキストで保存されており、どちらも安全ではないため、SMTPに関する別のセキュリティ問題も確認できます。どちらの方法にもセキュリティの問題があるので、いずれかの面で一方が他方よりも重くなりますか?

@Tutulが別の回答で述べたように、一部のスパムスクリプトはmail()を使用してスパムを送信することを期待している可能性があります。はい、これはphpでメールコマンドをブロックする際の考慮事項の1つです。

ただし、1つの原則が成り立ちます:誰かが成功すると、スクリプトをWebおよびメールサーバーに配置すると、彼はPHP mail()およびSMTP経由。

Php自体には、スパマーが呼び出すことができるSMTP接続またはmail()の数を制限する保護はありません。防御線を配置する場所の1つは、MTA(後置)です。残念ながら、mail()コマンドから呼び出される受信メールを調整することはできません。ただし、SMTP接続から送信できる送信要求の数を調整できます。 Policyd または postfwd は、接尾辞による抑制に役立ちます。

注:上記の説明は、電子メールを受信するときのスロットルプロセスに関するものです。もちろん、メールを送信するときにそれを絞ることができます。たとえば、GMAILブラックリストデーモンがブロックしないように、1分あたり20通のメールを@ gmail.comに制限します。 Postfix Performance Tuningに関するドキュメントを参照してください

最後の注意

私見、私はSMTP経由でメールを送信することを好みます。スパムの発生からの追加の保護としてMTAを使用できます。 @Sanmainが別の回答で言ったように、PHP)で別のメールキューを処理する必要があるかもしれません:)

2
masegaloeh

あなたはそれが他の人にとって重要ではないということは正しいですが、SMTPを介して送信するときPostfixがあなたの制御できない理由であなたのメッセージを受け入れることを拒否するかもしれないのであなたにとって確かに重要です。つまり、独自の配信キューを使用して、他の膨張コードを追加する必要があります。実際、あなたはPostfixの仕事をしているでしょう。

mail()も失敗する可能性があると言う人もいるかもしれませんが、それ自体はメッセージをファイルに書き込むのと同じくらい簡単に機能します。言い換えれば、壊すものはあまりありません。

結論:SMTPを使用する必要が絶対にない限り、システムのメーラーを使用してください。

6
sanmai

多くの場合、スパムスクリプトは、自動スキャナーがWebアプリの脆弱性を検出した後、自動プロセスによってアップロードされます。これらのスパムスクリプトは、ほとんどの場合、SMTPではなくphp mail()関数を使用します。誰かがあなたのサーバーをハッキングして設定ファイルからSMTPパスワードを取得した場合、とにかく城を失ってしまいます。しかし、古いCMSなどに対する多くの自動化された攻撃では、スパムスクリプトはmail()を使用するだけです。したがって、postfixでmail()を無効にし、認証されたSMTPを排他的に使用することをお勧めします。

2
Tutul