アシアルブログ

アシアルの中の人が技術と想いのたけをつづるブログです

メールサーバーの設定まとめ(postfixとdovecot)

こんにちは、牧野です。久々のブログになりました。。

2年くらい、インフラに関する仕事がメインでしたが、最近ここ2、3ヶ月はフロント側を作ることが多くなっています。
javascriptを触ることも多くなり、夏休みには以前作ったandroidアプリの百人一首のHTML版を作ったりしていました。よかったら遊んでみて下さい。
http://demo.asial.co.jp/~makki/karuta/
スマートフォンgoogle chrome推奨です。

さて、今日の話題はjavascriptやプログラミングではなく、メールサーバー設定の話です。
もう何ヶ月か前になりますが、postfixを使ってメールサーバーを立てる機会があったので、その時の設定をまとめようと思います。

やりたかったことは大きく分けて以下の3つです。
・バーチャルドメイン、バーチャルメールボックス
pop3メール受信
SMTP認証

■バーチャルドメイン、バーチャルメールボックス
postfixのパッケージをインストールすると、メインとなる設定ファイルは/etc/postfix/main.cf です。
以下の設定ではメールのドメインは makmakmak.asia です。


myhostname = mail.makmakmak.asia
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination =
#relayhost = 
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.0.2 ...
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
virtual_mailbox_domains = makmakmak.asia, localhost, localhost.localdomain, localhost
virtual_mailbox_base = /var/spool/mail/vhosts
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
virtual_minimum_uid = 100
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000

myhostname: 自サーバーのホスト名を記載
mynetworks: メール送信元となる全サーバーのIPを追加
virtual_mailbox_domains: メールアドレスで使うドメインを全部記述
virtual_mailbox_base: このディレクトリ内にドメインディレクトリが作成され、その中に各ユーザーのメールディレクトリが作成されます
virtual_uid_maps, virtual_gid_maps: 今回は、メールファイルを触るユーザのユーザーID、グループIDを5000番に指定

5000番のユーザー、グループにはvhostsユーザー、グループを用意します。


useradd -u 5000 vhosts


POP3メール受信
postfixdovecotと組み合わせて使用します。(dovecotはバージョン1.1系)

/etc/dovecot/dovecot.conf


protocols = pop3 pop3s
log_path = /var/log/dovecot.log
log_timestamp = "%Y-%m-%d %H:%M:%S "
mail_location = maildir:/var/spool/mail/vhosts/%d/%n
mail_uid = 5000
mail_gid = 5000
mail_privileged_group = mail
protocol pop3 {
  pop3_uidl_format = %08Xu%08Xv
}
auth default {
  mechanisms = plain cram-md5 apop
  passdb passwd-file {
    args = /etc/dovecot-passwd
  }
  user = root
}
auth_debug = yes


mail_location: postfixのvirtual_mailbox_base, /etc/postfix/vmailbox の記載と合わせる(%dはドメイン名、%nはユーザー名)
mail_uid, mail_gid: postfixの virtual_uid_maps, virtual_gid_maps と合わせる

パスワードの設定は /etc/dovecot-passwdに書きます。


makki@makmakmak.asia:{CRAM-MD5}hogehoge...

CRAM-MD5は認証で使う方式で、{CRAM-MD5}の後ろのhogehoge...の部分は暗号化したパスワード文字列です。
この文字列は、以下のコマンドを実行してパスワードを入力すると出力されます。


dovecotpw -s CRAM-MD5

auth_debug = yes があるとログに詳細が出力されます。最初の受信確認ができるまで入れておくといいと思います。


smtp認証
以下はSMTP認証もdovecotで行うための設定です。
postfixの /etc/postfix/main.cf に2行追加します。


smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth


dovecotの /etc/dovecot/dovecot.conf には、
auth default内に socket listen のブロックを追加します。



auth default {
  mechanisms = plain cram-md5 apop
  passdb passwd-file {
    args = /etc/dovecot-passwd
  }
  user = root
  socket listen {
    client {
      path = /var/spool/postfix/private/auth
      mode = 0660
      user = postfix
      group = postfix
    }
  }
}

インターネットプロバイダによっては、外部の25番ポートにアクセスできないようになっていることがあります(OP25B: Outboud Port 25 Blocking)。
その場合の対応として、SMTP認証を通れば587番ポート(Submissionポート)を使ってメールを送信できるようにします。

/etc/postifx/master.cf
下記3行の先頭#を消して、設定を有効にします。


submission inet n       -       -       -       -       smtpd
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject

変更したら、postfixdovecotをリロードします。


/etc/init.d/postfix reload
/etc/init.d/dovecot reload




…とここまで書いてきましたが、最近のディストリビューションでインストールされるdovecotパッケージはバージョン2系になっていて、設定ファイルの書き方がけっこう変わっていました。。
バージョン2系では、/etc/dovecot/conf.d 内に役割ごとの設定ファイルがいろいろあり、それを使って設定するようになっています。
単純にdovecot.confを置き換えても動かないので、dovecot2系で動作確認できたらまた追記しようと思います。。


以下、追記です。

■dovecot2系の設定ファイル
dovecot1から2にバージョンアップして、設定ファイルを直しました。
今回は、/etc/dovecot/conf.d 内の.confファイルをすべて読み込んでいたのをやめて、/etc/dovecot/conf.d/10-master.conf だけ読み込むようにしています。



protocols = pop3
log_path = /var/log/dovecot.log
log_timestamp = "%Y-%m-%d %H:%M:%S "
ssl_cert =</etc/ssl/certs/dovecot.pem
ssl_key =</etc/ssl/private/dovecot.pem
mail_location = maildir:/var/spool/mail/vhosts/%d/%n
mail_uid=5000
mail_gid=5000
mail_privileged_group = mail
mail_debug = yes

protocol pop3 {
  pop3_uidl_format = %08Xu%08Xv
}

auth_mechanisms = cram-md5 apop plain
passdb {
  driver = passwd-file
  args = /etc/dovecot-passwd
}

!include /etc/dovecot/conf.d/10-master.conf
auth_verbose=yes
auth_debug=yes
auth_debug_passwords=yes

mail_debug = yes
auth_verbose=yes
auth_debug=yes
auth_debug_passwords=yes
デバッグ用です。
conf.d 内のファイルを読み込む設定は、もともと
!include /etc/dovecot/conf.d/*.conf
になっています。

/etc/dovecot/conf.d/10-master.conf


service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
  }
  user = root
}


dovecot1と2の主な変更点は以下の通りです。
・conf.d内の.confファイルの読み込み
・protocol のpop3 1つで、pop3とpop3sの両方OKに
ssl_cert_file => ssl_cert, ssl_key_file => ssl_key
・auth default {...} => service auth {...}
・auth defualt内にあったpassdbが外に出て、passdb内にdriver設定追加
・auth default内にあったmechanismsが外に出てauth_mechanismsに
・socket listen ... => unix_listener ...

dovecotをリスタートした時のメッセージとログのデバッグ出力を見ると、設定ファイルの修正箇所が見つけやすいと思います。