読者です 読者をやめる 読者になる 読者になる

FLYING

〈全日本・紀文豆乳飲料シリーズ「麦芽コーヒー」の500ミリリットルパックを扱う小売店が少ないことに遺憾の意を表明する会〉活動記録

メール設定まとめ

unix

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)。