メール移行

さくらのVPS乗り換え前半戦の続き。

まずはメールサーバPostfixdovecotspf

yano@www12293ue:~$ sudo apt-get install postfix dovecot-postfix postfix-policyd-spf-perl libmail-spf-perl

spamassassin関連のパッケージ

yano@www12293ue:~$ sudo apt-get install nkf dovecot-antispam spamassassin spamassassin-rules-ja procmail

を導入。maildirmake.dovecot

yano@www12293ue:~$ sudo maildirmake.dovecot /etc/skel/Maildir

てな風にMaildirなユーザースケルトンを構築してから

yano@www12293ue:~$ sudo useradd -m -d /home/mailbox -g owner -k /etc/skel -s /bin/bash mailbox
yano@www12293ue:~$ sudo useradd -m -d /home/yoko -g family -k /etc/skel -s /bin/bash yoko
yano@www12293ue:~$ sudo useradd -m -d /home/natsumi -g family -k /etc/skel -s /bin/bash natsumi

とユーザーアカウントを作成すれば準備完了。

昨年に続いて2度目なので、大胆にもいきなりbravotouring.comとexample.comの複数ドメインで構成し、yano@example.com宛にテストメールを送信してみたところ、

<yano@example.com>: mail for example.com loops back to myself

というエラーでrejectされてしまった。

bravotouring.comの記述を止めてexample.comだけだとうまくいったので、/etc/postfix/main.cfの設定が鍵なのはすぐにわかったのだがvirtual_alias_domainsvirtual_alias_mapsへの設定はおろか、mydestinationに書いてもダメだったのでホトホト困り果ててしまった。

八方塞がりになった挙句、現mail.bravotouring.comではなく他のメールサーバ経由で送ってみたところ、すんなり受信できてしまったので、結局/etc/postfix/main.cfには

virtual_alias_domains = example.com

を追加するだけで良かったという事になる。但し、これだとbuiltinアカウントの宛先まで自動的に有効になってしまうので、設定でアカウントを絞り込む事にして、/etc/postfix/main.cfvirtual_alias_domainsではなく

virtual_alias_maps = hash:`/etc/postfix/virtual`

を追加し、/etc/postfix/virtual

example.com            anything
yano@example.com      yano
yoko@example.com      yoko

とする。

設定変更後は

yano@www12293ue:~$ postmap `/etc/postfix/virtual`

を忘れずに。

builtinアカウントとして存在するuucpやcron宛のspamを**“user unknown”で返す為、/etc/postfix/aliases太字**箇所を追記。

# See man 5 aliases for format
MAILER-DAEMON:  postmaster
postmaster:     root
webmaster:     root
**undisclosed-recipients: |"exit 67"
cron:           |"exit 67"
uucp:           |"exit 67"
news:           |"exit 67"
ntp:            |"exit 67"
nsd:            |"exit 67"
postfix:        |"exit 67"
dovecot:        |"exit 67"
**
root:           yano
mail:           mailbox

/etc/postfix/aliasesを変更した後は、newaliasesコマンドでインデックスファイルを再構築し、念の為Postfixをreload。

yano@www12293ue:~$ sudo newaliases
yano@www12293ue:~$ sudo postfix reload

拡張メールアドレス対応は/etc/postfix/main.cfを編集。

# for extended mail account by YANO
## An extended mail address delimiter is changed into '-'.
**recipient_delimiter** = -
**propagate_unmatched_extensions** = alias

~/.forwardにも拡張アドレス部分を含めて展開するようpropagate_unmatched_extensionsの設定がポイント。
【参考】Postfix manual - aliases(5)

~/.forward

"|exec /usr/bin/procmail -f- || exit 75"

~/.procmailrcはこんな感じ。

PATH=/bin:/usr/bin:/usr/local/bin
MAILDIR=$HOME/Maildir
LOGFILE=$MAILDIR/procmail.log
LOCKFILE=$HOME/.lockmail
FORMAIL=/usr/bin/formail
DEFAULT=$MAILDIR/
:0fw
*!^X-Spam-Checker-Version: SpamAssassin
| /usr/bin/spamc --max-size=1000000
:0
*^X-Spam-Status: Yes
$MAILDIR/.Spam/
:0
*^X-Spam-Status: No
{
     :0 c
     !account@pdx.ne.jp
}

最後に/etc/logrotate.d/procmaillogrotateの設定を追加して終了。

/home/*/Maildir/procmail.log {
        weekly
        rotate 2
        missingok
        nocreate
        notifempty
}

参照

さくらインターネット http://www.sakura.ad.jp/

VPS(仮想専用サーバ)のさくらインターネット http://vps.sakura.ad.jp/

Postfixのぺーじ http://www.postfix-jp.info/

Dovecot 翻訳プロジェクト http://www.dovecot.jp/