Asial Blog

Recruit! Asialで一緒に働きませんか?

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

カテゴリ :
バックエンド(インフラ)
タグ :
Tech
インフラ
Mail
こんにちは、牧野です。久々のブログになりました。。

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 です。
  1. myhostname = mail.makmakmak.asia
  2. alias_maps = hash:/etc/aliases
  3. alias_database = hash:/etc/aliases
  4. myorigin = /etc/mailname
  5. mydestination =
  6. #relayhost = 
  7. mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.0.2 ...
  8. mailbox_size_limit = 0
  9. recipient_delimiter = +
  10. inet_interfaces = all
  11. virtual_mailbox_domains = makmakmak.asia, localhost, localhost.localdomain, localhost
  12. virtual_mailbox_base = /var/spool/mail/vhosts
  13. virtual_mailbox_maps = hash:/etc/postfix/vmailbox
  14. virtual_minimum_uid = 100
  15. virtual_uid_maps = static:5000
  16. 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ユーザー、グループを用意します。
  1. useradd -u 5000 vhosts

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

/etc/dovecot/dovecot.conf
  1. protocols = pop3 pop3s
  2. log_path = /var/log/dovecot.log
  3. log_timestamp = "%Y-%m-%d %H:%M:%S "
  4. mail_location = maildir:/var/spool/mail/vhosts/%d/%n
  5. mail_uid = 5000
  6. mail_gid = 5000
  7. mail_privileged_group = mail
  8. protocol pop3 {
  9.   pop3_uidl_format = %08Xu%08Xv
  10. }
  11. auth default {
  12.   mechanisms = plain cram-md5 apop
  13.   passdb passwd-file {
  14.     args = /etc/dovecot-passwd
  15.   }
  16.   user = root
  17. }
  18. 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に書きます。
  1. makki@makmakmak.asia:{CRAM-MD5}hogehoge...
CRAM-MD5は認証で使う方式で、{CRAM-MD5}の後ろのhogehoge...の部分は暗号化したパスワード文字列です。
この文字列は、以下のコマンドを実行してパスワードを入力すると出力されます。
  1. dovecotpw -s CRAM-MD5
auth_debug = yes があるとログに詳細が出力されます。最初の受信確認ができるまで入れておくといいと思います。


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

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

  1. auth default {
  2.   mechanisms = plain cram-md5 apop
  3.   passdb passwd-file {
  4.     args = /etc/dovecot-passwd
  5.   }
  6.   user = root
  7.   socket listen {
  8.     client {
  9.       path = /var/spool/postfix/private/auth
  10.       mode = 0660
  11.       user = postfix
  12.       group = postfix
  13.     }
  14.   }
  15. }
インターネットプロバイダによっては、外部の25番ポートにアクセスできないようになっていることがあります(OP25B: Outboud Port 25 Blocking)。
その場合の対応として、SMTP認証を通れば587番ポート(Submissionポート)を使ってメールを送信できるようにします。

/etc/postifx/master.cf
下記3行の先頭#を消して、設定を有効にします。
  1. submission inet n       -       -       -       -       smtpd
  2.   -o smtpd_sasl_auth_enable=yes
  3.   -o smtpd_client_restrictions=permit_sasl_authenticated,reject
変更したら、postfixとdovecotをリロードします。
  1. /etc/init.d/postfix reload
  2. /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 だけ読み込むようにしています。

  1. protocols = pop3
  2. log_path = /var/log/dovecot.log
  3. log_timestamp = "%Y-%m-%d %H:%M:%S "
  4. ssl_cert =
  5. ssl_key =
  6. mail_location = maildir:/var/spool/mail/vhosts/%d/%n
  7. mail_uid=5000
  8. mail_gid=5000
  9. mail_privileged_group = mail
  10. mail_debug = yes
  11. protocol pop3 {
  12.   pop3_uidl_format = %08Xu%08Xv
  13. }
  14. auth_mechanisms = cram-md5 apop plain
  15. passdb {
  16.   driver = passwd-file
  17.   args = /etc/dovecot-passwd
  18. }
  19. !include /etc/dovecot/conf.d/10-master.conf
  20. auth_verbose=yes
  21. auth_debug=yes
  22. 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
  1. service auth {
  2.   unix_listener /var/spool/postfix/private/auth {
  3.     mode = 0666
  4.     user = postfix
  5.     group = postfix
  6.   }
  7.   user = root
  8. }

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