Debian(lenny)にてPostfix+dovecot+SMTP-Authの設定


Postfixdovecotを使って、バーチャルドメインとバーチャルエイリアスに対応させる方法。


o 利用ドメイン         13nightcrows.org
o ヴァーチャルユーザアカウント hogehoge@13nightcrows.org


( いないんだからメール送らないでね!絶対にいないんだからね! )

このサーバ自体がDebianでできているので
まずは必要なパッケージをインストール

# apt-get install postfix
# apt-get install dovecot-common dovecot-pop3d

的な感じでインストールします。
Debianだとsendmailとかexim4とかが入っているので、
その辺は適時によろしくです。


o 1, dovecotの設定

- /etc/dovecot/dovecot.conf ( /etc/dovecot.conf )



### この辺は詳細にログを出力する設定ね。
### ログいらねーっていう人はnoとかでよいかと。
auth_verbose = yes
auth_debug = yes
auth_debug_passwords = yes
log_path = /var/log/dovecot.log
log_timestamp = "%Y-%m-%d %H:%M:%S"


### POP3で起動しますよー。PLAINの認証はしませんよーという宣言
protocols = pop3
disable_plaintext_auth = no


### Maildir形式で受信。mboxタイプ使っている人最近見ないよね。
mail_location = maildir:~/Maildir


### UIDのフォーマットね。なんでこれで設定したんだっけ。。。
protocol pop3 {
pop3_uidl_format = %08Xu%08Xv
}



### 認証の設定
auth default {
mechanisms = cram-md5 plain
passdb passwd-file {
args = /etc/dovecot/passwd
}
### パスワードのファイルはこれですよー。
### 認証形式はCRAM-MD5かPLAINでやりますよー
### という宣言。PLAIN使わないって言ったじゃんって。。
### これはね、telnetする時にね。色々とね。。

userdb passwd-file {
args = /etc/dovecot/passwd
}
### お、おい。。マジかよあんた。。。
### ユーザDBとパスワードファイルを一緒になんて。。
### ZEIJAKUだろって。。

socket listen {
client {
path = /var/spool/postfix/private/auth-dovecot
mode = 0660
user = postfix
group = postfix
### で、SMTP-Authするよーって宣言。
### 認証情報は上のやつ使うよー。
}
}
}




で、dovecot.confの設定は完了。シンプルでいいねー。好きよ。
さっきpasswdとuserdbで利用するファイルの中身を

# dovecotpw -lCRYPT MD5 MD5-CRYPT SHA SHA1 SMD5 SSHA PLAIN
CLEARTEXT CRAM-MD5 HMAC-MD5 DIGEST-MD5 PLAIN-MD4
PLAIN-MD5 LDAP-MD5 LANMAN NTLM RPA


まぁ色々とございますが

# dovecotpw -s CRAM-MD5
Enter new password:
Retype new password:
{CRAM-MD5}dcbe8064d829ee98ad16817611150a6c7ee5fe1c9dfd79f5395be892f162bfd3


こんな感じでCRAM-MD5でパスワードさくせいしますよと。
ちなみに上のはパスワードをhogehogeって打った例です。

んで、パスワードファイルに色々記述するんだけど
その前にdovecotユーザやらディレクトリとか掘ったりしなければならないのです。



o 2, dovecot用のユーザを作成


# useradd -u 10000 -s /bin/false vmailmgr

かっこいいー。vmailmgr。ヴァーチャルメールマネージャー!!
ユーザIDは被らなければ何番でも大丈夫。
んで、ヴァーチャルドメイン用のディレクトリを掘ります。


# mkdir /home/dovecot

ので

# mkdir /home/dovecot/13nightcrows.org

で、最初に書いたように、今回はまんま 13nightcrows.org を利用します。
掘っちゃいますね。掘る掘るってなんだか芋掘りみたいだね。


# mkdir /home/dovecot/13nightcrows.org/hogehoge

もうここまで掘っちゃいましょうかね。


# chown -R vmailmgr.vmailmgr /home/dovecot
# ls -lRa /home/dovecot

オーナーを変更します。これでハコモノは完了。
次にパスワードファイルを作成します。


# vi /etc/dovecot/passwd
hogehoge@13nightcrows.org:{CRAM-MD5}dcbe8064d829ee98ad16817611150a6c7ee5fe1c9dfd79f5395be892f162bfd3:10000:100000::/home/dovecot/13nightcrows.org/hogehoge/::/sbin/nologin
# chmod 600 /etc/dovecot/passwd

このように、先ほど作成したCRAM-MD5のパスワードをこんな感じで設定します。
この情報を参考にdovecot君は認証したりメールボックス見に行ったりするので
間違えないようにね。

パーミッション減らしてもあんまり意味ないかもだけど
情報が情報だけに減らしておいて損はないよね、きっと。 以上がdovecotの設定!

# /etc/init.d/dovecot start

なんか打ってみてエラーが出たらログファイル!
エラーが出なかったらおめでとう! さて、次はPostfixさんの設定です。



o 3, Postfixの設定

- /etc/postfix/main.cf


myorigin = /etc/mailname
smtpd_banner = $myhostname ESMTP
disable_vrfy_command = yes
smtpd_helo_required = yes
biff = no
myhostname = 13mail.local
append_dot_mydomain = no
readme_directory = no
mydomain = 13nightcrows.local
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = $mydomain
inet_interfaces = all
mydestination = localhost
unknown_local_recipient_reject_code = 550
unknown_local_recipient_reject_code = 550
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
home_mailbox = Maildir/
relayhost =
mynetworks = host
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all

### SMTP
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth-dovecot
smtpd_sasl_authenticated_header = yes

### virtual
virtual_mailbox_domains = 13nightcrows.org
virtual_mailbox_base = /home/dovecot
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
virtual_alias_maps = hash:/etc/postfix/virtual
virtual_uid_maps = static:10000
virtual_gid_maps = static:10000

細かいことは抜かしまーす。
気をつけなきゃいけないところを列挙します。

mydomain

  • > 適当な名前をふる。フルドメインが入っていなければなんでもおけ

alias_maps = hash:/etc/aliases

  • > デフォルトさんで

alias_database = hash:/etc/aliases

  • > デフォルトさんで

myorigin

  • > 適当な感じ

home_mailbox

  • > さっき設定したdovecotと合わせる

virtual_mailbox_domains

virtual_mailbox_base

virtual_mailbox_maps

virtual_alias_maps

virtual_uid_maps

この設定にちびっとでも差異があると、全くどうして動いてくれないの。。。
なので上手く動かないとかがあったら、この辺を確認してあげてください。



o 4, 各バーチャルファイルの設定

- virtual_mailbox_maps (/etc/postfix/vmailbox)
バーチャルメールボックスの設定。

hogehoge@13nightcrows.org 13nightcrows.org/hogehoge/Maildir/

virtual_mailbox_baseにて設定したファイルパスから下を書くの。


つまりvirtual_mailbox_base/home/dovecot と設定しているので、
その下の 13nightcrows.org/hogehoge/Maildir/を書いてあげる。


そうすると hogehoge@13nightcrows.org のアカウントのメールボックス
/home/dovecot/13nightcrows.org/hogehoge/Maildir/ ですよ。
という意味になります。


そしてその設定を反映するために

# postmap /etc/postfix/vmailbox


これで設定が読み込まれます。
念のため、vmailboxと同じディレクトリに
vmailbox.dbファイルができたか 確認しておくとなおよしですね。
実はそっちが参照されている実ファイルなので。


- virtual_alias_maps(/etc/postfix/virtual)

ヴァーチャルエイリアスは今回では使用しないので


# touch /etc/postfix/virtual # postmap /etc/postfix/virtual
# strings /etc/postfix/virtual


とかなんとかで空ファイルをつくってよみこませます。
ファイルがないとおこられるので仕方なし。 このエイリアスファイルは次の回で使用する予定。
んでは、いよいよです。



# postfix check # postfix start

で、動かしてみて!
動かなかったりしたら


- /var/log/mail.(info,warn,err)


に何が悪いのかが出てくるからそいつらをつぶす!
# postconf -nなどで設定内容を確認しながらやるとジョージ・ベストさん!
動いたらおめでとうございます!

あとは適当なMTAで設定してみてください。Thunderbirdを例にあげると
[保護された認証]にチェックボックスを入れないと認証でつまずいてしまうまう。
そして、見事MTAでメールの送受信ができたら完了です!

- 内部 to 外部
- 外部 to 内部
- 内部 to 内部

これらを全て問題なく送受信できたら ミッションコンプリートです!
おめでとうございます!


念のため不正中継テストを実施しちゃえばなおよろしですな。
三者中継チェック - RBL.JP


以上、おつかれさまでした!!!

[参考サイト]
サバカン日記+
satospo