あらたなインターネットドメイン名を購入した。
このドメイン名でメールを受け取ることにしてみた。
既存のドメイン chaperone.jp でのメール受付環境はそのままで、追加のドメインは VirtualMailbox を利用することとした。
&size(10){chaperone.jpドメインもVirtualMailboxにすることは可能みたい};
***DNS MXレコード [#x7b6508a]
まずは追加ドメインのMXレコードを[[mail]]と同じように&color(maroon){web.chaperone.jp};に割り当てる
&ref(2017y03m19d_234433612.png,nolink,noborder);
これで追加ドメインのメール送信先は &color(maroon){web.chaperone.jp}; となる。
***postfix設定 [#le8cff08]
方法は3つあるそうで、
-smtpを受け入れるドメイン名(&color(darkorange){sysosa.jp};)を追加
&color(magenta){/etc/postfix/main.cf};の&color(darkmagenta){mydestination};に追加ドメインを加える
#code(nonumber){{
:
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain, sysosa.jp
:
}}
非常に簡便的。だが、support@&color(maroon){chaperone.jp};と support@&color(darkorange){sysosa.jp};は同じLinuxアカウント''support''にメールが届く
-マッピングファイルを活用
support@&color(maroon){chaperone.jp};はアカウント support
support@&color(darkorange){sysosa.jp};はアカウント support-a
と届くLinuxアカウント先を意図的にずらす。ただ、、「support-a」ってどんなメールアドレスだっけ?とかになりそう。。
&size(10){Linuxのアカウント名の最大長は32文字};
&color(magenta){/etc/postfix/main.cf};に
#code(nonumber){{
:
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
virtual_alias_domains = sysosa.jp
virtual_alias_maps = hash:/etc/postfix/virtual
:
}}
/etc/postfix/virtualの中身は
#code(nonumber){{
support<_at_>sysosa.jp support-a *対策表示
}}
で、有効にするために
#code(nonumber){{
postmap /etc/postfix/virtual
}}
を実行する
-VirtualMailboxを使う
上記2つの方法はLinuxにunixアカウントが必要な方法です。メールごとにLinuxアカウントを用意せず、postfix内だけでメールを管理する方法がこれ。基盤となるドメイン自体も、VirtualMailboxで扱える。ここの例では&color(darkorange){sysosa.jp};も&color(maroon){chaperone.jp};も一緒にVirtualMailboxで扱えると言うことになる。
以下では、このVirtualMailboxを取り上げる
***VirtualMailboxで複数ドメインのメール管理 [#nd8ef092]
設定ファイル&color(magenta){/etc/postfix/main.cf};は受付ドメインの追加方式やマッピングファイル形式と大きく変わって下記のようになる
#code(nonumber){{
myhostname = c.sybyl.local
mydomain = sybyl.local
myorigin = $mydomain
inet_interfaces = all
mydestination = localhost
virtual_mailbox_domains = chaperone.jp, sysosa.jp
virtual_mailbox_base = /var/spool/vmail
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
virtual_uid_maps = static:30000
virtual_gid_maps = static:30000
}}
&color(red){*};&size(10){なので、mydestination の値はlocalhostに限定。それ以外のsmtpはmydestinationでは拾わない。それ以外はVirtualMailboxで拾う};
今回は&color(maroon){chaperone.jp};、&color(darkorange){sysosa.jp};宛のメールは全てUID:30000,GID:30000のフォルダに書かせる。
&size(10){&color(maroon){chaperone.jp};はUID:10000で、&color(darkorange){sysosa.jp};はUID:20000とかマップで調整は可能};
まずはユーザを作成する
#code(nonumber){{
[root@c ~]# groupadd -g 30000 vmail && useradd -M -g 30000 -u 30000 vmail
[root@c ~]# mkdir /var/spool/vmail && chown 30000:30000 /var/spool/vmail
}}
postfoxが受領したメールを保存する場所にUID:30000の書き込み権限を持たせる
#code(nonumber){{
[root@c ~]# mkdir /var/spool/vmail
[root@c ~]# chown -R vmail:vmail /var/spool/vmail
}}
次に、受領したメール毎に配置する場所を定義します。そして、これをpostmapコマンドでhash化します
#code(nonumber){{
[root@c ~]# vi /etc/postfix/vmailbox
support<_at_>sysosa.jp sysosa.jp/support/
support<_at_>chaperone.jp chaperone.jp/support/
:
:
[root@c ~]# postmap /etc/postfix/vmailbox
}}
postfixを再起動させて、ここでテストを実施。gmailとかからメールを送信する。
/var/spool/vmailのディレクトリに sysosa.jp と chaperone.jp なフォルダが作れればOK
#code(nonumber){{
[root@c ~]# ls -l /var/spool/vmail/
合計 0
drwx------ 3 vmail vmail 20 3月 28 13:22 chaperone.jp
drwx------ 3 vmail vmail 20 3月 28 13:21 sysosa.jp
[root@c ~]#
}}
ついでにあえて chaperone.jpに&color(magenta){存在するLinuxアカウント};にメールを送ると「そんなユーザはいない」とお叱りのメールが返送されることを確認します。
***受取人不在メールを返さない [#hefa6782]
&color(red){未完成 下記はだめっぽい};
返って来る事で「メールアドレスを間違えた」と認識して、再送して頂くのが筋っぽいが、
逆にメール送信者に「このユーザは存在しませんよ」と&color(magenta){伝えず};、受け取ってゴミ箱に入れてしまうのなら下記のようにする。
#code(nonumber){{
[root@c ~]# vi /etc/postfix/main.cf
:
virtual_alias_maps = hash:/etc/postfix/virtual
[root@c ~]# vi /etc/postfix/virtual
<_at_>sysosa.jp unknown_user@localhost.
<_at_>chaperone.jp unknown_user@localhost.
[root@c ~]# postmap /etc/postfix/virtual
[root@c ~]# echo unknown_user: /dev/null >> /etc/aliases
[root@c ~]# newaliases
[root@c ~]# systemctl restart postfix
}}
&color(white,blue){留意点}; /etc/postfix/virtual の unknown_user@localhost. の最後の「.」に注意
***VirtualMailbox対応なdovecot [#c984e82f]
[[mail/dovecot]]ではLinuxユーザに基づくメールアカウントだったので認証にpamを使い、ローカルドメインからのアクセスに制限していたので接続の保護もなく、認証も平文で行っていた。VirtualMailboxになったため、Virtualメール単位でのパスワードを別途用意する必要がある。この場合、pam認証はもはや不要となる。
#code(nonumber){{
[root@c ~]# cat /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:~/
namespace inbox {
inbox = yes
}
first_valid_uid = 1000
mbox_write_locks = fcntl
[root@c ~]# cat /etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = no
auth_mechanisms = plain login
!include auth-passwdfile.conf.ext
!include auth-static.conf.ext
[root@c ~]# cat /etc/dovecot/conf.d/10-ssl.conf
ssl = no
ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
ssl_key = </etc/pki/dovecot/private/dovecot.pem
[root@c ~]# cat /etc/dovecot/conf.d/auth-passwdfile.conf.ext
passdb {
driver = passwd-file
args = username_format=%u /etc/dovecot/passwd
}
[root@c ~]# cat /etc/dovecot/conf.d/auth-static.conf.ext
userdb {
driver = static
args = uid=30000 gid=30000 home=/var/spool/vmail/%d/%n
}
[root@c ~]#
}}
次に、メールアドレス毎にパスワードを用意する。パスワードを平分で扱う場合は
#code(nonumber){{
[root@c ~]# cat /etc/dovecot/passwd
support<_at_>sysosa.jp:{PLAIN}hogehoge1234
support<_at_>chaperone.jp:{PLAIN}hoge4321hoge
:
[root@c ~]#
}}
と扱えばいい。大抵はHASH化したパスワードを載せるのだろうが、まずはテストとして通信可能なことを確認する。
***認証方法をPLAINから「暗号化されたパスワード認証」に変更したい [#e4b53dbc]
ここではPAM経由でなく、/etc/dovecot/passwdを使って認証を行っている。なので「暗号化されたパスワード認証」のためにpasswdファイルにはハッシュ化されたパスワードを記載する。
ハッシュ化したパスワードはdoveadmコマンドで得られる
#code(nonumber){{
[root@c ~]# doveadm pw -s CRAM-MD5
Enter new password:
Retype new password:
{CRAM-MD5}xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
[root@c ~]#
}}
この「{CRAM-MD5}xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx」を/etc/dovecot/passwdへ組み込む
#code(nonumber){{
[root@c ~]# cat /etc/dovecot/passwd
support<_at_>sysosa.jp:{CRAM-MD5}xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
support<_at_>chaperone.jp:{CRAM-MD5}yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
:
[root@c ~]#
}}
そして、dovecotの設定ファイル(10-auth.conf)を修正して再起動する
#code(nonumber){{
[root@c ~]# cat /etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = yes
auth_mechanisms = plain cram-md5
auth_mechanisms = cram-md5 login
!include auth-passwdfile.conf.ext
!include auth-static.conf.ext
[root@c ~]# systemctl restart dovecot
}}
これで「暗号化されたパスワード認証」(Thunderbird)でメールサーバに認証を掛けられる
&size(10){(下図は[[mail/dovecot#ye7dbf8a]]にて接続の保護を有効にしてます)};
&ref(2017y03m29d_115240914.png,nolink);
メールサーバのdovecotではクライアントからの接続が行われると下記の様なログを出します。
#code(nonumber){{
[root@c ~]# journalctl -f -u dovecot
3月 29 11:48:12 c.sybyl.local dovecot[9585]: imap-login: Login: user=<support@sysosa.jp>, method=CRAM-MD5, (略), mpid=9632, TLS, (略)
:
3月 29 11:48:12 c.sybyl.local dovecot[9585]: imap-login: Login: user=<support@sysosa.jp>, method=CRAM-MD5, (略), TLS, (略)
:
}}