地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

【メール】Postfixに入門する

www.postfix.org

Postfixは、オープンソースで広く使用されているメール転送エージェント(MTA)です。MTAとは、インターネット上でメールの送受信を担当するソフトウェアのことを指します。Postfixは高度なスケーラビリティ、パフォーマンス、およびセキュリティ機能を提供し、メールシステムの要件を満たすために設計されています。C言語で実装されていて今も開発は行われている。Changelogを見ると2023/12/21にもセキュリティ関連の変更が加えられているようでした。

https://linorg.usp.br/postfix/release/official/postfix-3.8.4.HISTORY

Postfixの主要な特徴は以下です。

  • パフォーマンスとスケーラビリティ: Postfixは高いパフォーマンスを持ち、大量のメールを効率的に処理することができます。小規模なセットアップから大規模な企業環境まで、様々な規模の環境に対応しています。
  • セキュリティ: セキュリティはPostfixの設計で最優先されています。Postfixは、標準的なセキュリティ機能として、スパムフィルタリング、ウイルスチェック、TLS/SSLによる暗号化通信などをサポートしています。
  • 柔軟性: Postfixは非常に柔軟で、多くの設定オプションを提供します。これにより、さまざまなメール配信ポリシー、ルーティング規則、アクセス制御リストを設定することができます。
  • 互換性: Postfixは、他のメールシステムやプロトコルとの互換性を持っています。これにより、既存のメールシステムに容易に統合することができます。
  • 拡張性: Postfixは、さまざまな追加機能やサードパーティのツールと組み合わせることができます。例えば、追加のスパムフィルタリングやウイルススキャンのためのプログラムと連携させることができます。

Postfixはその信頼性と効率性から、世界中の多くの企業やISPによってメールサーバソフトウェアとして採用されています。また、LinuxUNIX系のオペレーティングシステム上で動作し、Sendmailといった他のMTAの代替としてもよく使用されています。

ja.wikipedia.org

アーキテクチャ

これが個人的に驚きだったのですがPostfixシステムは1つのプログラムではなく複数のコアプログラムから成り立っています。psコマンドとかでpostfixが動いているサーバを見に行ってもどれがメールを送ってるんだ?となるのですが複数プログラムによって機能が成り立っています。

www.postfix-jp.info

主要なプロセスは以下です。

  • master: Postfixシステムの中心となるプロセス。他のすべてのPostfixプロセスの起動と管理を行います。設定ファイル(通常はmaster.cf)に基づいて、どのプロセスをいつ、どのように起動するかを制御します。
  • smtpd: SMTPサーバーデーモン。外部のSMTPクライアントからの接続を受け付け、メールの受信を担当します。これは、メールがPostfixシステムに入る入り口です。
  • smtp: SMTPクライアントデーモン。外部のSMTPサーバーへの接続を確立し、メールを他のサーバーに配送(転送)します。
  • qmgr (Queue Manager): メールキューを管理し、配送待ちのメールを適切なプロセスに渡します。メールの配送をスケジュールし、配送ポリシーを適用します。
  • pickup: メールスプールディレクトリから新しいメールを拾い上げ、それを処理キューに移動します。これは通常、Postfixのローカルユーザーからの送信に関係します。
  • cleanup: メールメッセージを処理し、必要なヘッダー情報を追加します。メールのフォーマットを正規化し、必要に応じてフィルタリングや検証を行います。
  • trivial-rewrite: メールアドレスの書き換え(リライト)やキャノニカル化(正規化)を担当します。これには、送信元と宛先のメールアドレスの書き換えやドメイン名の解決が含まれます。
  • local: ローカルシステム上の受信者へのメール配送を担当します。これは、メールボックスや他のローカル配送エージェント(LDA)へのメール配信に使用されます。

Postfix関連のコマンド

Postfixは、メールサーバーの管理とトラブルシューティングのために多くの有用なコマンドを提供しています。以下は、Postfixに関連する主要なコマンドとその説明です。

  • postfix: Postfixメールシステムを開始、停止、リロードするための基本コマンド。一般的な使用例は postfix start, postfix stop, postfix reload です。
  • postconf: Postfix設定ファイル(通常は main.cf)を管理するためのコマンド。設定を表示、変更するのに使用します。例:postconf -e 'myhostname = mail.example.com'(設定の変更)、postconf -n(設定の表示)。
  • postqueue: メールキューを管理するためのコマンド。キューにあるメールのリスト表示、配送のフラッシュ(強制的に再試行)、メールの削除などができます。例:postqueue -p(キューの表示)、postqueue -f(キューのフラッシュ)。
  • postsuper: スーパーユーザー向けのキュー管理コマンド。メールキューの整理、キュー内のメッセージの削除、ダメージを受けたキューファイルの修復などができます。例:postsuper -d ALL(すべてのキューメールを削除)。
  • mailq: postqueue -p と同じく、メールキューにあるメールを表示します。
  • newaliases: /etc/aliases ファイルを更新した後に、新しいエイリアスデータベースを生成するために使用します。
  • postlog: ログメッセージをPostfixログに送信するために使用します。
  • sendmail: 互換性のために提供されているコマンドで、標準の sendmail コマンドと同様の機能を持ちます。メールの送信に使用します。

メールログ

qiita.com

/var/log/maillogにメールの配送結果などが出力されています。maillogはqueue-idが書いてある行を連結することでどこの宛先にどこから送られたのかを調べる必要があります。分散プロセス故なのでしょうかメール送信結果までを一貫して1行のログに出ていなくてちょっと不便だったりします。なのでパーサを作ってる方がいて個人的に便利に使わせてもらっています。

blog.youyo.info