« PERLモジュールのダウンロード | メイン | postfixによるSMTPサーバの構築その2 »

postfixによるSMTPサーバの構築その1

●プロセス概要

postfixは内部的に処理が分割されていてそれぞれが自分の仕事をこなすことで成り立っています。
主なものは以下。

master
postfix全体の管理する。

sendmail
ローカルからの送信処理を担当。

smtpd
メールの受信処理を担当。その後cleanupプロセスに渡す。

cleanup
メールをincomingキューに保管するプロセス

qmgr
incomingキューを監視し,メール配送の準備をするプロセス

active
qmgrが配送中のメールを管理するプロセス

local
届いたメールをローカルスプールに格納するプロセス

incoming
受信したメールを保存し,配送プロセスに渡す。

pickup
maildropキューを監視するプロセス。メールを検知するとcleanupプロセスに渡す。


メール送受信の流れの概要は,
外部からメールを受信した場合のプロセスは,
smtpd -> cleanup --> incoming --> qmgr --> active --> local

内部からメールを送信する場合のプロセスは,
sendmail --> postdrop --> maildrop --> pickup --> cleanup --> incoming --> qmgr --> active --> smtp


●インストール

実際にpostfixによるメールサーバの構築をします。
CentOS4ではsendmailとpostfix関連のパッケージが入っていると思うのでアンインストールしてソースからインストールします。
依存関係で必要なパッケージをおいておきたい場合は --nodeps をつけてアンインストールします。

例えばこんな感じ。

# rpm -e --nodeps sendmail

postfix ユーザと postfix, postdrop グループがなければ作成しておきます。

オプションの設定によってはpcre-develが必要になるかもしれません。

ソースの入手先は http://www.postfix.org
現時点での最新バージョンは postfix-2.3.7.tar.gz でした。
ではさっそくダウンロードしてインストール準備をしましょう。

# tar zxvf postfix-2.3.7.tar.gz -C /usr/local/src
# cd /usr/local/src/postfix-2.3.7

以前のコンパイル情報を初期化する場合は以下のコマンドを打ちます。

# make tidy

コンパイルオプションは必要に応じて適宜設定してください。
CCARGSにコンパイルオプション,AUXLIBSにライブラリを指定します。
特に拡張機能を有効にする必要がない場合は make とシンプルに入力です。

# make makefiles 'CCARGS=-DHAS_LDAP -DHAS_PCRE -I/usr/include/pcre -DUSE_SASL_AUT\H -DUSE_CYRUS_SASL -I/usr/include/sasl -DUSE_TLS -DDEF_MANPAGE_DIR=\"/usr/share/m\an\"' AUXLIBS="-ldb -lldap -llber -lz -lm -lpcre -lsasl2 -lssl -l crypto"

# make install

以下のようなことを聞いてきますがいろいろ聞いてくるが基本的にはデフォルトでOKです。
私は好みでcommand_directoryを /usr/local/sbin にしました。

install_root: [/]
tempdir: [/usr/local/src/postfix-2.3.7]
config_directory: [/etc/postfix]
daemon_directory: [/usr/libexec/postfix]
command_directory: [/usr/sbin]
queue_directory: [/var/spool/postfix]
sendmail_path: [/usr/sbin/sendmail]
newaliases_path: [/usr/bin/newaliases]
mailq_path: [/usr/bin/mailq]
mail_owner: [postfix]
setgid_group: [postdrop]
html_directory: [no]
manpage_directory: [/usr/share/man]
readme_directory: [no]

これでインストールは終了です。
設定は次回書きます。