ひとつのサーバで複数ドメインのメールアドレスを扱う構築方法は多々のサイトで見かけます。
当サイトで紹介している『バーチャルメールサーバの設定(Virtual Postfix)』でも紹介していますが、大きな問題はメールボックスが1つである事です。
要は、バーチャルドメイン宛てのメール(linux@kaju.homeip.net)もリアルドメインのメールボックス(linux@kajuhome.com)に配送されてしまいます。
(*:「kajuhome.com」をリアルドメイン、「kaju.homeip.net」をバーチャルドメインと表記しています。)
別にこれでも構わないなら問題ないのですが、できることならメールボックスもドメイン毎に管理したいと思いました。
色々と調べるとリアルドメインをバーチャルとして扱えばメールボックスを個別のものにする事ができます。(多々のサイトで構築方法が紹介されている。)
(余談:バーチャルメールは、UNIX上にアカウントがなくても可能。メールアドレスのみ提供しているサービスなどはこの方法を利用していると思われます。)
いわゆる「バーチャルメールアドレス」と呼んでいて、これでも十分利用できます。
しかし、大きな問題点として「バーチャルメールアドレス」はメール振り分けをなどを行う「procmail」が利用できません。
当方はリアルドメインのメールは「procmail」でSPAMメールの処理やメール加工したものを携帯アドレスに転送などを行っているので必須となっています。
こちらの紹介ページは個別のメールボックスを利用し、かつ、「procmail」も動作する方法を紹介しています。
(注意:「procmail」が動作するのはリアルドメインであって、バーチャルドメインは動作しないので注意する事。)
SMTPサーバ「postfix」とPOP/IMAPサーバ「dovecot」、メール振り分けの「procmail」をインストールします。
既にインストール済みの場合は読み飛ばして下さい。
# yum -y install postfix dovecot procmail |
設定ファイルの編集 # vi /etc/postfix/main.cf ホスト名を設定する(ホスト名.ドメイン名) myhostname = fedora.kajuhome.com ドメイン名を設定する mydomain = kajuhome.com 送信者メールアドレスの@以降をドメイン名にする myorigin = $mydomain Postfix が待ち受けるべき全てのネットワークインターフェースを指定 inet_interfaces = all メールをローカルで受信するドメイン名を指定(ドメイン全体のメールサーバ) mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain 信頼されたネットワークをCIDR (network/mask) 表記で指定(ローカルネットワーク) mynetworks = 192.168.1.0/24, 127.0.0.0/8 中継を許可するドメインを指定 relay_domains = $mydestination メールボックスコマンド(procmail)の指定 mailbox_command = /usr/bin/procmail バーチャル設定(最終行に追加) バーチャル転送(同名)設定ファイルの指定 virtual_alias_maps = hash:/etc/postfix/virtual メールボックスの基点を指定 (以下のディレクトリに全ユーザの「リアルドメイン」「バーチャルドメイン」のメールが管理される) virtual_mailbox_base = /home/user_mails バーチャルドメイン設定ファイルの指定 virtual_mailbox_domains = /etc/postfix/virtual_domains 各メールアカウントのメールボックス定義を行う設定ファイルの指定 virtual_mailbox_maps = hash:/etc/postfix/virtual_maps バーチャルメールの最小のUIDを指定(これより小さいUIDは拒否。 (以下は、一般ユーザの追加を行った場合(Fedora/CentOS)のデフォルト最小値「500」を基準としている。) virtual_minimum_uid = 499 バーチャルドメインで動作するメールボックスの配送を行うUIDを指定(適当値で) virtual_uid_maps = static:5000 バーチャルドメインで動作するメールボックスの配送を行うGIDを指定(適当値で) virtual_gid_maps = static:5000 |
# vi /etc/postfix/virtual : : : # AUTHOR(S) # Wietse Venema # IBM T.J. Watson Research # P.O. Box 704 # Yorktown Heights, NY 10598, USA # # VIRTUAL(5) 最終行に何も設定されていない事を確認 バーチャル転送定義ファイルのDB化(設定内容が空でも作成する必要があります) # postmap /etc/postfix/virtual |
# vi /etc/postfix/virtual_domains 管理したいバーチャルドメインを設定(複数ある場合は、1行毎に1ドメインを設定する) kaju.homeip.net 注意:ここには「リアルドメイン」を設定しない事。 本来の目的である「procmail」が動作しなくなります。 |
# vi /etc/postfix/virtual_maps 各ドメイン毎(メールアドレス毎)のメールボックスを定義する。 # kajuhome.com linux@kajuhome.com kajuhome.com/linux/Maildir/ fedora@kajuhome.com kajuhome.com/fedora/Maildir/ # kaju.homeip.net linux@kaju.homeip.net kaju.homeip.net/linux/Maildir/ fedora@kaju.homeip.net kaju.homeip.net/fedora/Maildir/ centos@kaju.homeip.net kaju.homeip.net/centos/Maildir/ 注意:「リアルドメイン」「バーチャルドメイン」の管理したいメールアドレス全てを定義する事。 また、メールボックスの末尾に「/」を忘れない事。(Maildir形式となります。) 上記例) linux@kajuhome.com kajuhome.com/linux/Maildir/ 「linux@kajuhome.com」のメールボックスはメールボックスの基点「virtual_mailbox_base」で指定した ディレクトリ配下に「kajuhome.com/linux/Maildir/」として作成される。 すなわち、「/home/user_mails/kajuhome.com/linux/Maildir/」が「linux@kajuhome.com」のメールボックスとなる。 メールボックス定義ファイルのDB化 # postmap /etc/postfix/virtual_maps メールボックスの基点作成とパーミッション変更 # mkdir /home/user_mails # chmod 1777 /home/user_mails *:スティッキービット「1」を忘れない事。(以下パーミッション部分に「t」が付加される) 作成したメールボックスの基点の確認 # ls -ld /home/user_mails drwxrwxrwt 13 root root 4096 2007-12-20 12:01 /home/user_mails 各ドメインが使用するディレクトリ作成とパーミッション変更 リアルドメイン # mkdir /home/user_mails/kajuhome.com # chmod 1777 /home/user_mails/kajuhome.com バーチャルドメイン # mkdir /home/user_mails/kaju.homeip.net # chown 5000:5000 /home/user_mails/kaju.homeip.net オーナ・グループは postfix設定ファイルで指定した「virtual_uid_maps」の値にする事。 # chmod 700 /home/user_mails/kaju.homeip.net |
postfiixを起動する 【FC8 から Fedora15 / CentOS5 / CentOS6 の場合】 # /etc/rc.d/init.d/postfix start 【Fedora16以降 / CentOS7 の場合】 # systemctl start postfix.service |
dovecot Ver2 より設定ファイルが分散型(機能別)になりました。
設定箇所が違うので、現在のdovecotバージョンを確認します。
dovecot バージョンの確認 # rpm -qa dovecot dovecot-1.0.15-16.fc9.x86_64 上記の場合は、Ver 1.0となり、下記の場合は、Ver 2.0となります。 dovecot-2.0.1-1.fc14.x86_64 |
設定ファイルの編集 # vi /etc/dovecot.conf プロトコルを指定 protocols = imap imaps pop3 pop3s メールボックス(Maildir)を指定 mail_location = maildir:/home/user_mails/%d/%n/Maildir %の意味: %d :ドメイン名 %n :アカウント名 パスワードファイルを指定(「auth default」カテゴリ内である事に注意) auth default { passdb passwd-file { # Path for passwd-file args = /etc/dovecot-passwd } userdb passwd-file { # Path for passwd-file args = /etc/dovecot-passwd } } |
設定ファイルの編集 # vi /etc/dovecot/dovecot.conf プロトコルを指定 # Protocols we want to be serving. protocols = imap pop3 メールボックス(Maildir)を指定 # vi /etc/dovecot/conf.d/10-mail.conf mail_location = maildir:/home/user_mails/%d/%n/Maildir plaintext 認証(認証メカニズム)の設定 # vi /etc/dovecot/conf.d/10-auth.conf # SSL/TLS is used (LOGINDISABLED capability). Note that if the remote IP # matches the local IP (ie. you're connecting from the same computer), the # connection is considered secure and plaintext authentication is allowed. disable_plaintext_auth = no # Space separated list of wanted authentication mechanisms: # plain login digest-md5 cram-md5 ntlm rpa apop anonymous gssapi otp skey # gss-spnego # NOTE: See also disable_plaintext_auth setting. auth_mechanisms = plain login # Password database is used to verify user's password (and nothing more). # You can have multiple passdbs and userdbs. This is useful if you want to # allow both system users (/etc/passwd) and virtual users to login without # duplicating the system users into virtual database. # # <doc/wiki/PasswordDatabase.txt> # # User database specifies where mails are located and what user/group IDs # own them. For single-UID configuration use "static" userdb. # # <doc/wiki/UserDatabase.txt> #!include auth-deny.conf.ext #!include auth-master.conf.ext 先頭に"#"を追加しコメント化 #!include auth-system.conf.ext #!include auth-sql.conf.ext #!include auth-ldap.conf.ext 先頭の"#"を削除し有効化 !include auth-passwdfile.conf.ext #!include auth-checkpassword.conf.ext #!include auth-vpopmail.conf.ext #!include auth-static.conf.ext |
# vi /etc/dovecot-passwd 各メールアドレス毎に設定する。 # kajuhome.com linux@kajuhome.com:{plain}reallinuxpasswd:500:500::/home/user_mails/kajuhome.com/linux:/sbin/nologin: fedora@kajuhome.com:{plain}realfedorapasswd:501:501::/home/user_mails/kajuhome.com/fedora:/sbin/nologin: # kaju.homeip.net linux@kaju.homeip.net:{plain}virtuallinuxpasswd:5000:5000::/home/user_mails/kaju.homeip.net/linux:/sbin/nologin: fedora@kaju.homeip.net:{plain}virtualfedorapasswd:5000:5000::/home/user_mails/kaju.homeip.net/fedora:/sbin/nologin: centos@kaju.homeip.net:{plain}virtualcentospasswd:5000:5000::/home/user_mails/kaju.homeip.net/centos:/sbin/nologin: *:フォーマット user:password:uid:gid:gecos:home:shell:extra user :メールアドレス password :パスワード(上記では「plain」としているがMD5等も指定可) uid :ユーザID リアルドメインの場合 :「/etc/passwd」のユーザ名のIDと同一にする事 バーチャルドメインの場合:「5000」固定。(postfix設定ファイルで指定した「virtual_uid_maps」の値) gid :グループID リアルドメインの場合 :「/etc/group」のユーザ名のグループIDと同一にする事 バーチャルドメインの場合:「5000」固定。(postfix設定ファイルで指定した「virtual_gid_maps」の値) gecos :ユーザの詳細情報(設定しない) home :メールボックスを指定 shell :シェル(上記では「/sbin/nologin」として無効) extra :予備(何も使われていない) |
dovecotを起動する 【FC8 から Fedora14 / CentOS5 / CentOS6 の場合】 # /etc/rc.d/init.d/dovecot start 【Fedora15以降 / CentSO7 の場合】 # systemctl start dovecot.service |
リアルドメイン宛てのメールをメールボックスに配送する設定を行います。
レシピファイルの作成 全ユーザ共通の場合 : /etc/procmailrc 各ユーザ個別の場合 : < ユーザホームディレクトリ >/.procmailrc linuxユーザのレシピを作成する場合 # vi /home/linux/.procmailrc MAILDIRECTORY=/home/user_mails/kajuhome.com LOGFILE=$HOME/procmail.log LOCKFILE=$HOME/.lockfile DEFAULT=$MAILDIRECTORY/$LOGNAME/Maildir/ :0 $DEFAULT オーナ・グループ、パーミッション設定 # chown linux:linux /home/linux/.procmailrc # chmod 600 /home/linux/.procmailrc *:既にアカウントが存在している場合は全てのアカウント毎に必要となります。 以下を作成しておく事で、新規にアカウントを追加した場合自動的に生成する事も可能です。 新規アカウント用のテンプレートレシピ作成 # vi /etc/skel/.procmailrc MAILDIRECTORY=/home/user_mails/kajuhome.com LOGFILE=$HOME/procmail.log LOCKFILE=$HOME/.lockfile DEFAULT=$MAILDIRECTORY/$LOGNAME/Maildir/ :0 $DEFAULT オーナ・グループ、パーミッション設定 # chmod 600 /etc/skel/.procmailrc |
メールボックスの設定で「基本設定」タブを開き、以下の項目を指定します。