FLYING

/* TODO: 気の利いた説明を書く */

メール設定まとめ

ServersMan@VPSでのメール設定のまとめ。

目標

メールアドレス
<アカウント名>@mydomain.com
メール配送先
/home/vmail/vhosts/<ドメイン名>/<アカウント名>/Maildir
サポートするプロトコル
SMTP over SSL/TLS (with SMTP-AUTH),IMAP over SSL/TLS

Postfix

/etc/postfix/main.cf

Postfixのメイン設定ファイル。記述が有効な箇所のみを抜粋。

queue_directory = /var/spool/postfix

command_directory = /usr/sbin

daemon_directory = /usr/libexec/postfix

mail_owner = postfix

myhostname = mydomain.com

mydomain = mydomain.com

#myorigin = $myhostname
myorigin = $mydomain

inet_interfaces = all
#inet_interfaces = $myhostname
#inet_interfaces = $myhostname, localhost
#inet_interfaces = localhost

#mydestination = $myhostname, localhost.$mydomain, localhost
#mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
#mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain,
#	mail.$mydomain, www.$mydomain, ftp.$mydomain
mydestination =

unknown_local_recipient_reject_code = 550

#alias_maps = dbm:/etc/aliases
alias_maps = hash:/etc/aliases
#alias_maps = hash:/etc/aliases, nis:mail.aliases
#alias_maps = netinfo:/aliases

#alias_database = dbm:/etc/aliases
#alias_database = dbm:/etc/mail/aliases
alias_database = hash:/etc/aliases
#alias_database = hash:/etc/aliases, hash:/opt/majordomo/aliases

#home_mailbox = Mailbox
home_mailbox = Maildir/

#smtpd_banner = $myhostname ESMTP $mail_name
#smtpd_banner = $myhostname ESMTP $mail_name ($mail_version)
smtpd_banner = $myhostname ESMTP MyMTA(0.1)

debug_peer_level = 2

debugger_command =
	 PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
	 xxgdb $daemon_directory/$process_name $process_id & sleep 5

sendmail_path = /usr/sbin/sendmail.postfix

newaliases_path = /usr/bin/newaliases.postfix

mailq_path = /usr/bin/mailq.postfix

setgid_group = postdrop

html_directory = no

manpage_directory = /usr/share/man

sample_directory = /usr/share/doc/postfix-2.3.3/samples

readme_directory = /usr/share/doc/postfix-2.3.3/README_FILES

# SMTP-Auth
#
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_recipient_restrictions =
	permit_mynetworks
	permit_sasl_authenticated
	reject_unauth_destination

# message_size_limit (10M)
#
message_size_limit = 10485760

# virtual domain
#
local_transport = virtual
virtual_transport = virtual
virtual_mailbox_domains = mydomain.com
virtual_mailbox_base = /home/vmail/vhosts
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
virtual_minimum_uid = 100
virtual_uid_maps = static:1000
virtual_gid_maps = static:1000
virtual_alias_maps = hash:/etc/postfix/virtual

# smtp tls suppoert
#
smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/pki/tls/certs/mail.pem
smtpd_tls_key_file = /etc/pki/tls/certs/mail.pem
smtpd_tls_session_cache_database = btree:/etc/postfix/smtpd_scache
/etc/postfix/master.cf

Postfixのプロセス設定ファイル。重要な箇所のみを抜粋。

#
# Postfix master process configuration file.  For details on the format
# of the file, see the master(5) manual page (command: "man 5 master").
#
# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (100)
# ==========================================================================
smtp      inet  n       -       n       -       -       smtpd
submission inet n       -       n       -       -       smtpd
#  -o smtpd_enforce_tls=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
smtps     inet  n       -       n       -       -       smtpd
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
tlsmgr    unix  -       -       n       1000?   1       tlsmgr
/etc/postfix/vmailbox

バーチャルドメインのメールディレクトリ設定を記述したファイル。

admin@mydomain.com mydomain.com/admin/Maildir/

更新したら/usr/sbin/postmapコマンドでdbファイルに反映する。
main.cfに「virtual_mailbox_base = /home/vmail/vhosts」という設定があるので,admin@mydomain.comの配送先は「/home/vmail/vhosts/mydomain.com/admin/Maildir」になる。

/etc/postfix/virtual

バーチャルドメインのメール転送設定を記述したファイル。使っていないので空のまま。更新したら/usr/sbin/postmapコマンドでdbファイルに反映する。

/etc/sasl2/smtpd.conf

smtpdの認証方式を記述するファイル。ここでは,SMTP-AUTH用に新しくアカウントDBを作ることにする。

pwcheck_method: auxprop
# auxprop -> /etc/sasldb2
# saslauthd -> /etc/sysconfig/saslauthd
mech_list: cram-md5 digest-md5 plain login
# auxprop -> all mechanisms
# saslauthd -> plain login

SMTP-AUTHでログインするアカウントは/usr/sbin/saslpasswd2コマンドによって追加できる。また,アカウントDBの内容は/usr/sbin/sasldblistusers2コマンドによって確認できる。

その他のハマりどころ

この辺のパッケージがないとSMTP-AUTHでコケる。

cyrus-sasl
cyrus-sasl-devel
cyrus-sasl-lib
cyrus-sasl-plain
cyrus-sasl-md5

Dovecot

/etc/dovecot.conf

Dovecotのメイン設定ファイル。記述が有効な箇所のみを抜粋。

#protocols = imap imaps pop3 pop3s
protocols = imap imaps

ssl_disable = no

#ssl_cert_file = /etc/pki/dovecot/certs/dovecot.pem
#ssl_key_file = /etc/pki/dovecot/private/dovecot.pem
ssl_cert_file = /etc/pki/tls/certs/mail.pem
ssl_key_file = /etc/pki/tls/certs/mail.pem

#mail_location = 
mail_location = maildir:~/Maildir

protocol imap {
}

protocol pop3 {
}

protocol lda {
  # Address to use when sending rejection mails.
  postmaster_address = postmaster@example.com
}

auth default {
  mechanisms = cram-md5 digest-md5 plain login

  passdb passwd-file {
    # Path for passwd-file
    args = /etc/dovecot/passwd
  }

  userdb passwd-file {
    # Path for passwd-file
    args = /etc/dovecot/passwd
  }

  socket listen {
    client {
      path = /var/spool/postfix/private/auth
      mode = 0660
      user = postfix
      group = postfix
    }
  }
}

dict {
}

plugin {
}
/etc/dovecot/passwd

Dovecotの認証で使われるユーザー定義ファイル。パスワードのハッシュ化には/usr/sbin/dovecotpwコマンドを使う。ユーザー名とパスワード(ハッシュ化済み),uid,gid,メール配送先のディレクトリを下記の形式で記述する。

admin:{HMAC-MD5}XXXXXXXX:1000:1000:::::Maildir:/home/vmail/vhosts/mydomain.com/admin/Maildir

Maildirの準備

/usr/sbin/useraddコマンドで次のようにしてMaildirにアクセスするユーザーを追加する。

useradd -u 1000 vmail

配送先のディレクトリをmkdirして,適宜chmod,chownしておく。

mkdir /home/vmail/vhosts/mydomain.com/admin/Maildir
chmod -R 701 /home/vmail/vhosts
chown -R vmail:vmail /home/vmail/vhosts

パーミッションを700にしたら何故かPostfix・Davecotにメール配送先に書き込めないと怒られました(Permission Denied)。