備忘録とかいろいろ

駆け出しのインフラエンジニアです。自分用のメモです

Postfixについて

Postfixとは

Postfixの内部構成

キュー

・incoming
SMTPなどで外から受け付けたメールが格納される

・active
メールの配送が試みられるときにメールが格納される

・deferred
一時的なエラーで配送に失敗した場合に格納される
配送に失敗した理由などの情報はdeferディレクト配下のキューIDの名前のファイルに格納される

・maildrop
マシン内部で正世されたメールが最初に格納されるキュー

デーモン

【メールの取り込み】
・smtpd
SMTPクライアントからの接続を受付け、
接続元、送信元、宛先などの情報をもとにメールを受付けるかどうか判定する

・qmqpd

・pickup

【キューへの格納】
・cleanup

【キュー管理】
・qmgr

【配送エージェント】
smtp
・lmtp
・local
・virtual
・pipe
・error
・discard

【その他】
・trivial-rewrite
メールアドレスの正規化
配送先の選択

・showq

アクセス制御パラメータ

・smtpd_client_restrictions
 クライアントからの接続時に評価されるアクセス制御のリスト
 
・smtpd_helo_restrictions
 HELO/EHLOコマンド発行時に評価されるアクセス制御のリスト
 
・smtpd_sender_restrictions
 MAILコマンド発行時に評価されるアクセス制御のリスト
 
・smtpd_recipient_restrictions
 RCPTコマンド発行時に評価されるアクセス制御のリスト
permit_mynetworks
reject_unauth_destinations

・smtpd_data_restrictions
 DATAコマンド発行時に評価されるアクセス制御のリスト
 
・smtpd_end_of_data_restrictions
 DATAコマンド終了時に評価されるアクセス制御のリスト
 
・smtpd_etrn_restrictions
 ETRNコマンド発行時に評価されるアクセス制御のリスト
 
これらのパラメータは接続時/各コマンド発行時のタイミングで評価される
※ただし$smtpd_deley_rejectがyesの場合(デフォルト)、smtpd_client_restrictions、
smtpd_helo_restrictions、smtpd_sender_restrictions、smtpd_recipient_restrictionsは
RCPTコマンド発行時にまとめて評価される

smtpd_*_restrictionsに設定されたアクセス制御は記述された順番に評価される。
どのアクセス制御条件にも該当しない場合はアクセスは許可される

アクセス制御の種類

・permit
 アクセスを許可する

・defer
 アクセスを一時的に拒否する(エラーコード:450)

・defer_if_permit
 これ以降の評価結果でアクセスが許可される場合は代わりにdeferする

・defer_if_reject
 これ以降の評価結果でアクセスが拒否される場合は代わりにdeferする

・reject
 アクセスを拒否する(エラーコード:554)

・warn_if_reject
 この次に書かれたアクセス制御の評価の結果、アクセスが拒否される場合、
 ログに警告を出力して、評価結果を無視し評価を続ける
 
・sleep
 引数として秒数を指定する。指定された秒数だけ停止し、
 次の評価に進む

・check_client_access
 引数としてルックアップテーブルを指定する。
 クライアントのIPアドレスまたはDNSを逆引きしてホスト名をキーとして
 ルックアップテーブルを検索し、得られた値をアクセス制御として使用する
 

・permit_mynetworks
 クライアントのIPアドレスが$mynetworksに適合する場合にアクセスを許可する

・reject_invaild_helo_hostname
 引数としてルックアップテーブルを指定する。
 HELO/EHLOでクライアントが名乗ったホスト名をキーとしてルックアップテーブルを
 検索し、得られた値をアクセス制御として使用する

・reject_invaild_helo_hostname
 HELO/EHLOでクライアントが名乗ったホスト名が文法的に不正な場合アクセスを
 拒否する(エラーコード:501)

・reject_non_fqdn_helo_hostname
 HELO/EHLOでクライアントが名乗ったホスト名がFQDNでない場合アクセスを
 拒否する(エラーコード:501)

・check_sender_access
・引数としてルックアップテーブルを指定する。
 送信者メールアドレスをキーとしてルックアップテーブルを検索し、
 得られた値をアクセス制御として使用する
 
・reject_non_fqdn_sender
 送信者メールアドレスのドメイン部が不正な形式の場合アクセスを拒否する
 
・reject_unknown_sender_domain
 送信者メールアドレスのドメイン部に対するDNSのA,MXレコードが存在しない場合、
 アクセスを拒否する
 
・check_recipient_access
 引数としてルックアップテーブルを指定する
 宛先メールアドレスをキーとしてルックアップテーブルを検索し、
 得られた値をアクセス制御として使用する

・permit_auth_destination
 宛先メールアドレスのドメイン部が「$relay_domains」「$mydestination」
 「$inet_interfaces」「$proxy_interfaces」「$virtual_alias_domains」
 「$virtual_mailbox_domains」のいずれかに適合する場合アクセスを許可する

・reject_non_fqdn_recipient
 宛先メールアドレスのドメイン部が不正な形式の場合アクセスを拒否する

・reject_unauth_destination
 受信者アドレスのドメイン部が「$relay_domains」「$mydestination」
 「$inet_interfaces」「$proxy_interfaces」「$virtual_alias_domains」
 「$virtual_mailbox_domains」のいずれにも適合しない場合アクセスを拒否する
 
・reject_unknown_recipient_domain
 宛先メールアドレスのドメイン部に対するDNSのA,MXレコードが存在しない場合、
 アクセスを拒否する(エラーコード:450)

・reject_unlisted_recipient
 宛先メールアドレスのドメイン部が自分が受け取るべきものなのに、
 存在するユーザがいない場合アクセスを拒否する
 

ルックアップテーブル

postfoxのパラメータでルックアップテーブルを指定する場合は「タイプ名:引数」とする

・hash
 単純に検索キーと値のペアを指定するルックアップテーブル。
 ファイルはBerkeleyDBのhash形式のデータベース。
 
・dbm
 使用しているデータベースの形式がDBM形式であること以外はhashと同じ。

・cidr
 検索キーのパターンにネットワークアドレスを指定できる形式。

・static
 検索キーに係らず常に一定の値を返すルックアップテーブル。

・regexp
 検索キーに適合するパターンを正規表現で指定する。
 
unix
 passwd、groupデータベースを参照するルックアップテーブルをこちらで

mysql
 検索にmysqlを使用するルックアップテーブルをこちらで

コマンドラインユーティリティ

Postfixコマンド

postfix start
postfix stop
postfix status
postfix reload
postfix abort
postfix drain
postfix flush
postfix check

Postfixパラメータの管理

・postconf
・-nオプション
・-dオプション
・-eオプション
・-mオプション

・postmap
・-sオプション
・-qオプション
・-dオプション
・-i/-r/-wオプション

・postalias

・newaliases

キュー管理コマンド

・postqueue
・-pオプション

・postcat
・mailq
・postsuper



疲れたので詳細はまた後日・・・