(作成:2006/03)
Postfixは従来のsendmailに比べてパフォーマンスやセキュリティ等の様々な面で優位なMTAらしい。qmailと並んで、Linuxサーバではメジャーなんじゃないかしらん。
今回は仕事でVine Linuxへの導入をしたので、その備忘録。Vineには始めから導入されてるみたいなんだが、デフォルトのパッケージではSMTPAuthなんかが使えないので、 src.rpm
からのリビルドで導入してみた。
Install on Vine
SMTPAuthによるアクセスを実現するため、一度 src.rpm
からリビルドする必要がある。 ビルド環境の構築については拙サイト「Vine - パッケージのリビルド」参照。
src.rpm
を取得。
$ apt-get source postfix
...
以下のコマンドで一時的に展開し、specファイルを書換える。
$ rpm -Uvh postfix-2.0.20-0vl5.1.src.rpm
...
#### ~/rpm/SPECS/postfix.spec
...
%build
...
-DUSE_SASL_AUTH -I/usr/include" \
AUXLIBS="-L/usr/lib -lsasl"
...
パッケージのリビルド。
$ rpm -bb rpm/SPECS/postfix.spec
...
このリビルドでは、あらかじめ cyrus-sasl
cyrus-sasl-md5
cyrus-sasl-plain
cyrus-sasl-devel
のパッケージが必要。
# apt-get install cyrus-sasl cyrus-sasl-md5 cyrus-sasl-plain cyrus-sasl-devel
...
出来上がったパッケージで再インストール。
# apt-get remove --purge postfix
...
# rpm -Uvh rpm/RPMS/i386/postfix-2.0.20-0vl5.1.i386.rpm
...
設定
SMTPサーバにする
ここではサーバのホスト名 mail
、ドメイン名 hyakki.local
として話を進める。(FQDN: mail.hyakki.local
)
設定ファイルの修正。
#### /etc/postfix/main.cf
myhostname = mail.hyakki.local
mydomain = hyakki.local
myorigin = $myhostname
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain $mydomain
unknown_local_recipient_reject_code = 550
#unknown_local_recipient_reject_code = 450
mynetworks_style = subnet
#home_mailbox = Mailbox
#home_mailbox = Maildir/
# VRFYコマンドを許可
disable_vrfy_command = no
# MAIL FROMやRCPT TOがRFC821構文のものを拒否(SPAM対策)
strict_rfc821_envelopes = no
# HELOコマンドを許可
smtpd_helo_required = no
# bounceメールサイズの指定
bounce_size_limit = 50000
# mboxサイズの指定
mailbox_size_limit = 102400000
mail_spool_directory = /var/spool/mail
動作確認
# /etc/init.d/postfix start
...
/var/log/maillog
にて起動ログのチェックができる。設定が間違っとるとfatalエラーが残るんで、必ずチェックしとくこと。
動作チェック。取り敢えず外部から telnet
で接続してみる。
$ telnet mail.hyakki.local 25
Trying ***.***.***.***...
Connected to mail.hyakki.local.
Escape character is '^]'.
220 mail.hyakki.local ESMTP Postfix
HELO mail.hyakki.local
250 mail.hyakki.local
mail from: riyo@hyakki.local
250 Ok
rcpt to: root@hyakki.local
250 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
subject: test
Viva la raza!
.
250 Ok: queued as EFFEEE5406F
QUIT
221 Bye
Connection closed by foreign host.
$
mail.hyakki.local
の宛先アカウントにログインしてみて、 mail
コマンドか何かで確認してみる。 入力通りの情報が入っていれば、外部からの接続は大丈夫と見て良いんじゃないかな。
SMTPAuthサーバにする
こちらもサーバのホスト名 mail
、ドメイン名 hyakki.local
として話を進める。(FQDN: mail.hyakki.local
)
上記設定に加えて以下の設定を施す。
#### /etc/postfix/main.cf
# SMTPAuthを使う
smtpd_sasl_auth_enable = yes
# SASL認証するドメイン
smtpd_sasl_local_domain = $myhostname
# SASL認証しなくて良いネットワーク
#mynetworks = 192.168.0.0/24, 127.0.0.0/8
# SMTP認証に必要なリレー設定
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination
# 匿名での接続を拒否する
smtpd_sasl_security_options = noanonymous
# Outlook Expressから利用可能にする
broken_sasl_auth_clients = yes
続いてSASLの設定。
#### /usr/lib/sasl/smtpd.conf
pwcheck_method:sasldb
SASL認証用ユーザの作成。認証用ユーザは実際に存在するアカウントじゃないと駄目。 一度目は何故か必ずエラーで弾かれるので、二度実行する必要があるみたい。バグ?
# /usr/sbin/saslpasswd -c -u `/usr/sbin/postconf -h myhostname` (SMTPAuth認証用アカウント名)
Password:********
Again (for verification):********
登録出来たかどうかは以下のコマンドで確認できる。
# /usr/sbin/sasldblistusers
user: wi realm: mail.hyakki.local mech: CRAM-MD5
user: wi realm: mail.hyakki.local mech: PLAIN
user: wi realm: mail.hyakki.local mech: DIGEST-MD5
Postfixでsasldbを参照出来るように修正する。
# chgrp postfix /etc/sasldb
# chmod 640 /etc/sasldb
動作確認
# /etc/init.d/postfix start
...
/var/log/maillog
にて起動ログのチェックができる。設定が間違っとるとfatalエラーが残るんで、必ずチェックしとくこと。
動作チェック。以下のPerlスクリプトでBase64エンコードされたアカウント情報を作成、これを使ってログインチェックしてみる。
$ perl -MMIME::Base64 -e 'print encode_base64("アカウント名\0アカウント名\0パスワード");'
(エンコード済アカウント情報が表示される)
取り敢えず外部から telnet
で接続し、EHLO
コマンドで拡張機能を確認する。 250-AUTH PLAIN LOGIN DIGEST-MD5 CRAM-MD5
の行があればSMTPAuthが使用可能。
$ telnet mail.hyakki.local 25
Trying ***.***.***.***...
Connected to mail.hyakki.local.
Escape character is '^]'.
220 mail.hyakki.local ESMTP Postfix
EHLO mail.hyakki.local
250-mail.hyakki.local
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH PLAIN LOGIN DIGEST-MD5 CRAM-MD5
250-AUTH=PLAIN LOGIN DIGEST-MD5 CRAM-MD5
250 8BITMIME
AUTH PLAIN (エンコード済アカウント情報)
235 Authentication successful
QUIT
221 Bye
Connection closed by foreign host.
$
こんな感じで認証に成功したらOK。
alias設定
メールのエイリアスは /etc/postfix/aliases
で設定する。場所が気に食わなんだら、 /etc/postfix/main.cf
内で設定変更しとけば良い。 設定の詳細はここでは省く。けどまぁ、以下みたいな名称のエイリアスは作っといて損は無いんじゃないかな。
admin
全サーバ管理者宛all
全員宛
設定を施したら以下のコマンドで aliasDB
を更新する。
# newaliases
送信用サーバにする
昨今の巷のメールサーバはspam業者との戦いのなかから、一般利用者からすると色々と融通が利かないカターい設定になってたりする。例えば riyo@hyakki.local
でメールしようものなら「そんなドメイン無いよ? ばかなの?」と言われる始末。
まあ個人で外部向けメールを作る事なんて殆ど無いだろうけれど、CGI検証なんかでどーしても sendmail
使って外部にメールを送りたい事もあったりして。会社とかならメールサーバがあったりするけれど、個人環境だとISPのメールサーバくらいしか使えそうなモノが無く、そこもやっぱりカターい設定がされていたりして。
というわけで、試験サーバから外部にメール送信する際、あたかも「私はプロバイダから送ってますよー」と誤魔化すための設定。
#### /etc/postfix/main.cf
relayhost = [(ISPのSMTPサーバ)]
smtp_generic_maps = hash:/etc/postfix/generic
#### /etc/postfix/generic
@localhost.localdomain @(ISPのメールドメイン)
# postmap /etc/postfix/generic
# /etc/init.d/postfix reload