Postfix の動作概要について調べた

Postfixとは

Postfixの概要について紹介します。

Postfix-logo

Postfix概要

Postfixはsendmailに代わるMTA (Mail Transport Agent)として開発されたソフトウェアで、sendmailとの互換性が高く、安全、メンテナンスが容易、速い、などの特徴を兼ね備えたメールサーバソフトです。最近ではLinuxの一部のディストリビューションで標準のMTAとして採用されており、sendmailに比べ設定ファイルの書き方が簡単で、かつ簡単な設定でも高いセキュリティを実現できると評価されています。設定が簡便にできる反面、sendmailほどの細かい設定ができないという問題点もありますが、通常の使い方においては十分な設定が行なえ、よほどの特殊な用途でないかぎりは問題はないと言われています。

 

Postfixの特徴

Postfixの強みはバッファ溢れ攻撃に強いことと、大量の電子メールを捌けることです。 Postfixは異なったデーモンが協調動作するネットワークで構成されます。 そして、各々のデーモンには1つの仕事しか無く、必要最小限の権限でそれを行うことで、デーモンが乗っ取られたとしても、その影響はそのデーモンだけに留まり、システム全体に影響が及ぶことはありません。 実際、管理者権限を持つデーモンは(常にバックグラウンドプロセスとなる)master一つだけで、Postfixの外への書き込みや外部プロセスの起動を行うのもlocal、virtual、pipeだけですので、ほとんどのデーモンはchrootして動作させることが出来ます。またPostfixはsendmailとの互換性を保ちながら,運用管理を楽にし,処理速度を上げ,セキュリティを強化するという方針で開発されています。またqmailよりも後発であるため,qmailのMaildir方式も取り込んでおり、双方のいいとこ取りの設計になっています。

 

Postfixのプログラム

smtpd,qmqpd

ネットワーク越しに送られてきたメールはsmtpdが受け取ります。qmqpdはsmtpdより高速なqmqpプロトコルを扱えますが、現在はほぼ使用されていません。これらはいずれもcleanupプログラムに渡さます。一方、ローカルで受け取ったメールはsendmailの代替プログラムが受け取ります。このプログラムはPostfixに同梱されている。その後、postdropコマンドによりmaildropキューに送られ、pickupによってcleanupに渡されます。

cleanup

メールを受け取ったcleanupはFrom:フィールドが抜け落ちていたら付け加えるなどのメールヘッダを整えます。ヘッダを整えたら、incomingキューにメールを送り、qmgrにメールが届いたことを通知する。trivial-rewriteはメールアドレスをhogehoge@clj.comといった一般的な形式に書き換える。

anvil

anvilはクライアントが大量のメール処理要求を出すのに備えて、リクエスト数をカウントし、制限する。

verify

verifyはsmtpdがメールを受け取る前に送信者、宛先が正しいか検証を行う。

qmgr

incomingキューに入ったメールはPostfixの心臓部であるqmgrによって配送処理が行われます。メールによって指定されたプログラムに振り分けてメールの配送を依頼します。qmgrはincomingキューから取り出したメールをいったん小さなactiveキューに入ります。これはqmgrが高負荷になったときに備えてのメモリリークを防ぐ役割のためです。配送に失敗したメールはdeferedキューにいったん入ります。そこでqmgrに設定された間隔でスキャンが行われ、再びactiveキューに戻されたのち、配送を試みます。

smtp

smtpdは宛先からDNSに問い合わせを行い、MXレコードを調べます。宛先のIPアドレスがわかると、メールの配送ができるようにメールを並び替えます。

lmtp

lmtpはなじみの薄いプロトコルだが、smtpに似ていて、より高速な処理を行う為利用されます。

local

MDAの役割にあたります。localはMailbox,Maildir,sendmailそれぞれの形式のエイリアスデータベースや.forwardファイルを利用してローカル宛のメールを配信します。localがフックとなって、procmailなどの他のプログラムに処理を依頼することも可能。

virtual

バーチャルドメイン設定を行っている場合に使用され、ドメインごとにメールを配送する。

pipe

pipeは他のメール配送システムにメールを渡すインターフェースの役割を持つ。現在ではほとんど使用されていない。UUCPによる配送にも利用される。

error,discard

errorとdiscardはメールを配送しません。errorはエラーを返すが、discardは返しません。いずれもメールを破棄します。

scashe

SMTP接続のキャッシュを行う。このキャッシュが働いている場合はSMTP接続は配送後、切断されずコネクションが維持されます。(キープアライブ)セキュリティ上あまり長い時間のキャッシュは推奨されません。しかし、SSL/TLS接続時は大きく負荷を減らすことができます。

showq

showqはmailq,postqueueコマンドで使用するリストの作成をおこないます。

master

Postfixの心臓部ともいうべきサーバプロセスです。masterはPostfixシステムのハイパーバイザーのような役割を持ち、システムに常駐します。postfix startコマンドによってこのmasterが起動され、メール配送に関わる各プログラムを起動させます。masterはmaster.cfの設定内容を読み込んで起動し、その設定内容に従い、smtpd,qmgr,localの各サーバプロセスを起動、制御します。smtpdはメール受け取り、qmgrはメールの配送処理、localはローカル配送を行います。

Copyright © 2021 たぐたぐ.com. All rights reserved.