4.1 Postfix

4.1.1 Postfix の概要

Postfix は IBM が開発したメールサーバソフトです。
Postfix をはじめとする MTA(Mail Transfer Agent)は、ポート25/TCP を LISTEN して接続を待ち受け、メールクライアントや 他のメールサーバから SMTP によって送られてきたメールを処理します。メールサーバ内のメールボックスにメールを格納したり、 必要に応じて他のメールサーバにメールを配送します。 メールサーバには 他にも sendmail, qmail などいくつものソフトウェアが存在しています。

代表的なメールサーバの特徴

名前説明
sendmail古くからあるソフトウェア。セキュリティ上の問題や設定ファイルの複雑さから、最近は利用されることが少ない。
qmailセキュリティに優れている。開発者はセキュリティホールを見つけたら賞金を出すとまで豪語している。
Postfixsendmail との互換性が高く設定が容易。

4.1.2 Postfix のパッケージと設定

CnetOS は標準で sendmail をインストールして利用します。そこで、Postfix パッケージをネットワークインストールします。

書式)postfix インストール
# yum install postfix

同様に既存の sendmail と新規 Postfix との入れ替えを行うためのツール「system-switch-mail」パッケージを探して、インストール作業を行います。

書式)system-switch-mail インストール
# yum install system-switch-mail

「system-switch-mail」インストール後に、Postfix と sendmail の入れ替え作業を行います。

書式)Postfix と sendmail の入れ替え
# system-switch-mail

Postfix の主な設定ファイルは、/etc/postfix/main.cf/etc/postfix/master.cfです。 master.cf は高度な設定をする際に編集しますが、通常あまり変更することはありません。基本は main.cf の編集を行います。

4.1.3 設定ファイル main.cf

main.cf の設定を確認するには、postconf コマンドを利用します。数多くの設定項目がありますが、デフォルトと違うものだけ 表示するには、-n オプションを指定して実行します。

書式)postfix 設定確認 ※ デフォルトと設定が違うもの
postconf -n

主な設定項目

項目名説明
myhostnameメールサーバのホスト名(FQDN)
例)smtp.ohmatsu.la.net
mydomainメールサーバ所属するドメイン名
例)ohmatsu.la.net
myoriginメールアドレスの@以下が指定されていない場合に自動補完する値。通常は、$myhostname、$mydomain を指定する
inet_interfacesSMTP で接続を受け付ける IP アドレス
例)all ※全て受付
mydestinationローカル配送を行うメールアドレスのホスト部。 宛先メールアドレスのホスト部がこの値に含まれているとローカル配送する
例)$myhostname, $mydomain
mynetworks中継(リレー)を許可する接続元の IP アドレスやサブネットを指定
例1)10.20.131.3, 127.0.0.1
例2)10.20.0.0/16, 127.0.0.0/8 ※ プレフィックス表記を使う場合は全て統一する事

4.2 Postfix の起動と動作

4.2.1 Postfix の起動と停止

Postfix を起動するには、root になり、起動スクリプトか service コマンドを利用します。

書式)postfix 起動
service postfix start 又は /etc/init.d/postfix start

Postfix を起動すると、master, qmgr, pickup という3つのプロセスが常駐します。 この中でも、master というプロセスは Postfix 全体を制御しており、他のプロセスを起動したり停止したりします。

書式)postfix プロセス確認
ps aux 又は pstree

4.2.2 メールの配送とメールボックス

Postfix がメールを受け取り、処理するには、3つケースが考えられます。

  1. mail コマンドの利用
  2. 通常のメールクライアントによる送信
  3. TELNET コマンドにようる SMTP コマンド (※ 参照)

mail コマンドを利用する場合は、引数に宛先のメールアドレスを指定して実行します。

書式)mail コマンドによるメール送信
# mail naoki@tdr-lab.com [Enter]
Subject: [件名入力][Enter]
[本文入力][Enter]
.[Enter]
Cc:[CC入力(省略可能)][Enter]

この後、Postfix は配送処理を行うことになります。また、配送されてきたメールを格納するメールボックスは /var/spool/mail/ ディレクトリ内にユーザ名と同名のファイルとして作成されます。

4.2.3 Postfix のログ

Postfix のログは、syslog を通じて /var/log/maillog に格納されます。 配送にあたって様々な情報が記録されますが、各メールには固有の ID が割り当てられており、ログに記録されるため、同じ ID をたどることで、 メール1通1通の配送履歴を追うことができます。

4.3 Postfix の運用管理

4.3.1 キューの確認

Postfix はメール配信要求を受付ると、受け付けたメールを一旦メールキューと呼ばれる場所に格納します。 そして、格納されている送信待ち状態のメールを順次送信します。キューは、メールキューディレクトリと呼ばれるディレクトリに保存されます。 Postfix におけるメールキューディレクトリは、/var/spool/postfix/ 以下のディレクトリになります。
メールサーバを運用していると、宛先に指定されたユーザが存在しないメールが送られてきたり、ネットワークトラブルによって送信が完了 しなかったりということが多々あります。このような場合、キューディレクトリに登録された後、何度か再送信を試みます。 再試行にも失敗した場合は、そのメールを送信したユーザの元に不在通知が届きます。

書式)キューの確認コマンド
# mailq

Postfix は一定時間ごとに自動的にメールキューに溜まっているメールの処理を行います。コマンドで行う場合は以下のようにします。

書式)キュー内のメールを即座に再送信
# postfix flush
書式)キュー内のメールを削除
# postsuper -d キューID

/var/spool/postfix/ 内には、数多くのディレクトリがあります。受信メールは、incoming に入り、その後 qmgr により active に移され 配送処理されます。何らかの原因で配送処理できなかったものは、deferred (deffer)に格納されます。この他、解析できないファイルや 壊れたメッセージを格納するためのキュー が corrupt 、特定の条件設定をしたメッセージが置かれる場所が hold です。 以上5つのキューが qmgr の管理下に置かれてます。

4.4 転送処理

転送処理は、大きく分けて2種類あります。まずはじめに行われるのが、システムとしての転送処理、次に行われるのが各ユーザ単位の 転送処理です。

4.4.1 システムとしての転送

/etc/aliases を使ってメールの転送を行います。

書式)info@[ドメイン] に来たメールを ユーザ naoki に転送
ユーザ名: 転送先ユーザ名
info: naoki

/etc/aliases を変更後は、下記のコマンドで設定を有効にします。

書式)aliases の有効化
# newaliases

newaliases を実行するとバイナリ化した /etc/aliases.db ファイルが生成されます。 Postfix は aliases.db を参照してます。 aliases ファイルを変更後、設定を有効にするには Postfix の再起動の必要はなく newaliases が必要です。

4.4.2 各ユーザ単位の転送

~/.forward にファイルを設置する事により、各ユーザ単位での転送が行えるようになります。 1行1転送先として、宛先のメールアドレスを記述します。 ユーザ自分自身にもメールを残す場合には、先頭に\(バックスラッシュ)をつけて、自分自身のアドレスを記述します。 \ はループ防止のために記述します。

書式)~/.forward の記述方法
forward@docomo.ne.jp
\naoki@tdr-lab.com