Postfixの設定方法

目次

メールサーバーとして代表的なMTAの1つであるPostfixを紹介します。Postfixはsendmailの置き換えに特化したMTAで、設定ファイルなどsendmailの実装に依存した多くの仕様が継承されています。そのため、Mac OS Serverや各Linuxディストリビューション にもデフォルトMTAとして採用されています。今はqmailやsendmailを差し置いてもっとも流行のメールサーバと思います。当サイトのアクセスログからもそれが伺えます。
首位はストレージ(Raid)、二位がOracle、で三位がPostfixでした。(06/07/22)

Postfixの基本設定
Sendmailからの移行
Qpopper
courier-imap
smtp-auth
pop3/imap brefore smtp
main.cfパラメータの種類

戻る

Postfixの基本設定

インストールログで指定した設定ファイルの保存先は/etc/postfixです。この中で、最も基本的な設定項目を記述するのがmain.cfファイルです。記述形式は下記の様に
<パラメータ> = <値> , <値> , <値> , <値> …
となっています。パラメータに対し、カンマとスペースで複数の値を記述していきます。値を代入したパラメータは別行で$パラメータと使う事ができます。

< 初期設定>
メール自身のドメイン名はmyoriginパラメータとmydomainで決定します。

myhostname = mail.syns.net
mydomain = syns.net
myorigin = syns.net

SMTP接続を許可するインターフェイスを指定します。

inet_interfaces = all

ローカルに配送するべきドメイン名をmydestinationパラメータで定義します。

mydestination = myhostname, localhost.$mydomain

SMTPのIP制限としてmynetworksパラメータがあります。SMTPリレーを許可するクライアントのネットワークを定義します。

mynetworks = 192.168.1.0/24, 127.0.0.1

Postfixのaliasesデータベースファイルの読み取り場所を指定します。aliasesデータベースファイルの作成についてはメインページのインストールログを参考にしてください。

alias_maps = hash:/etc/postfix/aliases
alias_database = hash:/etc/postfix/aliases

qmailからの移行などからユーザのメールスプールをユーザーディレクトリに置く場合はMaildir形式にして下さい。但しPOPやIMAPはMaildir形式に対応していないものもありますので選定には注意して下さい。qpopperとcyrus-imapを使う場合はコメントアウトのままにしておいて下さい。

home_mailbox = Maildir/

最低限の設定は以上です。Postfixの起動は次の様に実行します。

# /usr/local/postfix/sbin/postfix start

起動後はsyslogファイルのログを確認してください。
設定内容はpostconfコマンドで
確認できます。(現在のプロセスが読込んでいる値です)

Postfixの起動と停止

現在、別のメールデーモンが起動している時はPostfixを起動する前に停止します。そしてsendmailに依存した管理コマンドPostfixのものに置換します。

# mv /usr/lib/sendmail /usr/lib/sendmail.bak
# chmod 0 /usr/lib/sendmail.bak
# ln -s /usr/local/postfix/sbin/sendmail /usr/lib/sendmail
# mv /usr/bin/mailq /usr/bin/mailq.bak
# chmod 0 /usr/bin/mailq.bak
# ln -s /usr/local/postfix/bin/mailq /usr/bin/mqilq
# mv /usr/bin/newaliases /usr/bin/newaliases.bak
# chmod 0 /usr/bin/newaliases.bak
# ln -s /usr/local/postfix/bin/newaliases /usr/bin/newaliases

Postfixの起動や停止は次の定型スクリプトによって制御できます。

#! /bin/sh

case "$1" in
'start')
/usr/local/posfix/sbin/postfix start
;;

'stop')
/usr/local/posfix/sbin/postfix stop
;;

*)
echo "Usage: $0 { start | stop }"
exit 1
;;
esac
exit 0

Postfixにはstart/stopの他に次のオプションが用意されています。

check
Postfixシステムのインストール状態をレポートする。

abort
Postfixシステムを強制的に終了します。

flush
キューの再送を強制的に行います。

reload
設定ファイルの再読み込みを行います。

Qpopper

Postfixにはpopサーバーの機能はありません。Postfixでメールの受信(POP3)を行いたい場合はQpopperなどのPOPサーバをインストールする必要があります。 Qpopperのインストール方法はメインページのインストールログを参照して下さい。
そのほかのPOPサーバとの比較はこちらをご参考下さい。
インストールが済めばinetdからQpopperを起動させるために/etc/inetd.confを次の様に修正します。

pop3 stream tcp nowait root /usr/local/sbin/popper popper -s

Solaris10の場合はSMFに対応させるために次のコマンドを実行します。

# inetconv

一度、testuser(ローカルユーザ)にメールを送り、ポート110にtelnetしてみて動作を確認してみます。

$ echo "this is a test mail" | /usr/ucb/Mail -s testsubject testuser
$ telnet localhost 110

USER testuser
PASS test
LIST
RETR 1

[メール内容が表示されます]

QUIT

courier-imap

SSLに対応しているcourier-imapを紹介します。今回の素材はcourier-imap-2.2.1.tar.gzとopenssl-0.9.7とdb-4.0.14です。OpenSSLのインストール方法はOpenSSHとセットで メインページの「インストールログ」に示していますのでそちらを参照してください。尚、Berkeley DBのパスは/usr/local/dbとします。

$ gtar zxvf courier-imap-2.2.1.tar.gz
$ cd courier-imap-2.2.1
$ setenv CPPFLAGS "-I /usr/local/ssl/include -I /usr/local/db/include"
$ setenv LDFLAGS "-L /usr/local/ssl/lib -L /usr/local/db/lib "
$ ./configure --without-authmysql --prefix=/usr/local/imapd --without-authldap
$ make
$ make check [error]
$ su
# make install
# make install-configure

<imapdの通常起動>
/usr/local/imapd/libexec/authlibに認証モジュールが入っていますので各々の認証より使い分けて下さい。
authdaemondにはBerkeleyDBのlibdb-4.1.soが必要です。こちらを/usr/lib以下にリンクを貼ってから以下のコマンドラインより起動して下さい。

/usr/local/imapd/libexec/imapd.rc start

<SSL通信imapdの起動>
etc/imapd-sslファイルの以下の行を編集します。
IMAPDSSLSTART=YES
OpenSSLで作成した秘密鍵と公開鍵を追記したファイルを/share/imapd.pemに生成します。起動は次のコマンドラインを実行して下さい。

/usr/local/imapd/libexec/imapd-ssl.rc start

vpopmailと併用する際にpreauthvchkpw.cのコンパイルでエラーが発生する場合があります。解決策としてhttp://www.inter7.com/vpopmail/download.htmlを参考にしてください。

smtp-auth (cyrus-sasl)

Postfix環境でsmtp-authを使う場合はsaslライブラリを使うのが一般的です。尚、今回のサンプルはsasl2ですが、インストールログに紹介したOpenLDAPに使用しているsasl1でもかまいません。
入手先:cyrus-sasl-2.1.18.tar.gz

> gtar zxvf cyrus-sasl-2.1.18.tar.gz
> cd cyrus-sasl-2.1.18
> setenv CPPFLAGS '-I/usr/include/des'
> ./configure --with-plugindir=/usr/local/lib/sasl2 --with-pwcheck --with-saslauthd --enable-login --disable-krb4 --disable-otp --disable-gssapi --disable-digest
> make
> su
# make install

もし、コンパイル途中でdigest-md5に関するエラーやkerberosに関するエラーがでた場合は別途ライブラリが必要です。関連ライブラリのインストール方法はこちらのページを参考にして下さい。sasl2のインストールが完了したら、次にPostfixの再コンパイルを行います。

> tar zxfv postfix-2.0.19.tar.gz
> cd postfix-2.0.19
> make tidy
> make makefiles CCARGS="-DUSE_SASL_AUTH -DHAS_DB -I/usr/local/db/include -I/usr/local/include/sasl" AUXLIBS="-L/usr/local/db/lib -L/usr/local/lib -lsasl2 -ldb -R/usr/local/lib -R/usr/local/db/lib"
> make
> su
# ln -s /usr/local/lib/libsasl2.so.2 /usr/lib
# ln -s /usr/local/lib/sasl2 /usr/lib/
# make install

Configure時のオプション--with-plugindirで指定したディレクトリにsmtpd.confを作成します。

# mkdir -p /var/state/saslauthd
# chmod 700 /var/state/saslauthd
# chown postfix /var/state/saslauthd
# vi /usr/local/lib/sasl2/smtpd.conf

そして次の様に記述してください。

pwcheck_method: saslauthd
method: login plain

Postfixのmain.cfにsmtpdの設定を追記します。

broken_sasl_auth_clients = yes
allow_mail_to_commands = alias,forward,include
relayhost = mail.host.domain
smtpd_recipient_restrictions = permit_mynetworks
permit_sasl_authenticated, reject

つづきは作成中

pop3/imap brefore smtp (drac)

dracのインストールから行います。

> mkdir drac
> mv drac.tar.Z
> gtar zxvf drac.tar.Z

configureファイルが無いので、手動でMakefileを編集します。各サーバー環境に合わせて随時調整してください。今回は次の様に編集しました。

INSTALL = install
EBIN = /usr/local/sbin
MAN = /usr/local/man/man
DEFS = DEFS = -DTI_RPC -DFCNTL_LOCK -DSYSINFO -DREQ_HASH
CFLAGS = $(DEFS) -g -I/usr/local/db/include
LDLIBS = -L/usr/local/db/lib -lnsl -ldb-4.1
CC = gcc
RANLIB = :
CFLAGS = $(DEFS) -g
LDLIBS = -ldb -lnsl -lrpcsvc -L/usr/lib -R/usr/lib
TSTLIBS = -L. -ldrac -lnsl -lrpcsvc
RPCGENFLAGS =
MANLIB = 3
MANADM = 8

さらにrcp.dracd.cを次の様に編集しました。

#define DBFILE "/etc/postfix/dracd.db"
#define ALFILE "/etc/postfix/dracd.allow"

dracの動作確認はソースディレクトリのtestsファイルで実行します。

# /usr/local/sbin/rpc.dracd -i -e 3
# /usr/local/db/bin/db_dump -p /etc/postfix/dracd.db
# ./testing localhost 192.168.0.1
# /usr/local/db/bin/db_dump -p /etc/postfix/dracd.db

courier-imapにも対応させる場合はパッチを当てて下さい。

> wget http://www.infojam.net/patches/drac-courier.patch
> patch -p0 < drac-courier.patch

コンパイルを行いdracdの起動に必要なライブラリをコピーします。

> make
> su
# make install
# cp libdrac.a /usr/lib
# ln -s /usr/local/db/lib/libdb-4.1.so /usr/lib

Postfixのmain.cfにsmtpdの設定を追記します。

smtpd_recipient_restrictions = permit_mynetworks, check_client_access hash:/etc/postfix/dracd, check_relay_domains
mynetworks = 192.168.1.0/24, 127.0.0.0/8, hash:/etc/postfix/dracd

次にcourier-imapにdracのパッチを当てて再コンパイルを行います。
パッチの入手先 (本家)
パッチの保存先

$ gtar zxvf courier-imap-2.2.1.tar.gz
$ cd courier-imap-2.2.1
$ cp /usr/lib/libdrac.a ./
$ gpatch -p1< courier-imap-2.2.1-drac.patch
$ setenv CC gcc
$ setenv CPPFLAGS "-I /usr/local/ssl/include -I /usr/local/db/include"
$ setenv LDFLAGS "-L /usr/local/ssl/lib -L /usr/local/db/lib "

$ ./configure --without-authmysql --prefix=/usr/local/imapd --without-authldap
$ make
$ su
# make install
# make install-configure

最後に起動について説明します。

# /usr/local/imapd/libexec/pop3d.rc start
# /usr/local/imapd/libexec/imapd.rc start

main.cfパラメータの種類

disable_vrfy_command
Yesにすることで、SMTPのVRFY コマンドを拒否します。

strict_rfc821_envelopes
Yesにすることで、RFC822で定義されている書式に適合しないメールアドレスが通知された場合、リレー(受信)を拒否します。

smtpd_helo_required
Yesにすることで、HELO コマンドでホスト名を通知しないホストの接続を拒否します。


 


<関連書籍の購入>
Postfix実用ガイド

<戻る>