こんにちは、牧野です。久々のブログになりました。。
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メール受信
postfixをdovecotと組み合わせて使用します。(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
変更したら、postfixとdovecotをリロードします。
/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をリスタートした時のメッセージとログのデバッグ出力を見ると、設定ファイルの修正箇所が見つけやすいと思います。