旧サーバ、Ubuntu Server 14.04上に構築しているメールサーバから、Ubuntu18.04上で新たにメールサーバを構築し、可能な限りアカウント情報やメールデータを移行します。

今回はUbuntu Server 18.04にPostfixとDovecotをインストール、セットアップしていきます。

ゴール

  • Ubuntu Server 18.04 LTS
  • メール転送サーバ(MTA)にPostfix
  • メール配送サーバ(MDA)にDovecot
  • メール送信の認証にはSMTP-AUTH
  • SSL/TLSを使用
  • 仮想ユーザーアカウントを使用(ユーザー名は、someuser@example.comの形式)
  • メールボックスはMaildir形式を採用する

なお、既存の移行元の環境は、上記条件に準じているのですが、唯一アカウント設定のみローカルユーザアカウントで運用しています。

そんなわけで、メールサーバを構築後、元のMairdirをそのまま、新しい仮想ユーザーアカウント(ユーザ名は同じにしていますが・・)のMaildirにそのままぶち込む形にする予定です。

仮想メールボックス用ユーザ作成

仮想メールボックス専用のユーザを作成します。この場合、uidは20000としていますが、ネット上の情報では5000とか色々あるので、OS上で予約されていないuidであれば問題ないでしょう。

またここでは、uid名、gid名共にvmailとします。次のコマンドで、仮想メールボックス用ユーザを作成します。

Postfixのインストールと設定

Postfixを、パッケージからインストールします。

途中、設定のダイアログ、General type of mail configuration: が開きますが、ここは No configuration を選択します。

/etc/postfix/main.cf の設定

設定の雛形をコピーし、編集します。

設定項目は以下のようにします。

なお、ここではSSLの証明証やキーについては、インストール時にデフォルトで入っているものを使用しています。実運用では、個人的なメールサーバであれば問題ないと思いますが、利用する範囲によっては、自己認証局発行の証明書や、Let’s Encrypt、もしくは有料認証局の証明書等を発行してもらうなどするとよいでしょう。

/etc/postfix/master.cfの設定

Dovecot LDAに関しての設定は追加します。

Dovecotのインストールと設定

パッケージからインストール。

sieve関連をインストール

/etc/dovecot/dovecot.conf

Dovecotの基本設定

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

認証関連の設定。auth_mechanismsにcram-md5、plain、loginを使用。

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

mail_locationを以下のように設定します。%dはメールアドレスの@から右側、%nは左側を指します。

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

IMAPやPOP、SMTPサービスに関する設定。

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

SSLに関する設定。

/etc/dovecot/conf.d/auth-passwdfile.conf.ext

パスワードDBに関する設定。ドライバにpasswd-file、ドライバの引数に、デフォルトのパスワードメカニズム、ユーザ名のフォーマット、パスワードファイル名となっています。

/etc/dovecot/conf.d/auth-static.conf.ext

ユーザーDBに関する設定。ドライバはstaticを使用。すべてのユーザに単一のuidgidを使用。ホームディレクトリに、/home/vmail/example.com/someuserを割り当てる設定。

/etc/dovecot/conf.d/15-lda.conf

ローカル配送にLDAを使用するので、関連の設定をしています。log_path、info_log_pathに値が設定されていない場合は、syslog等にログを残します。

/etc/dovecot/conf.d/90-sieve.conf

sieveの設定です。/home/vmail/%d/%n/sieveには、ユーザが作成したsieveスクリプトが保存されています。そのsieveスクリプトへのシンボリックリンクが/home/vmail/%d/%n/.dovecot.sieveに張られます。

/etc/dovecot/conf.d/20-managesieve.conf

managesieveの設定です。4190番のポートを使用します。

仮想ユーザーアカウント

手順としては、
1. /etc/postfix/virtual_mailboxで、仮想ユーザーアカウントと、仮想メールボックスの紐づけをし、
2. /etc/postfix/virtualを作成し、必要に応じてメールアドレスの別名(エイリアス)を登録します。
3. /etc/dovecot/usersに、仮想ユーザーアカウントと、パスワードを登録します。

/etc/postfix/virtual_mailbox

virtual_mailboxファイルを作成し、仮想ユーザと、その仮想メールボックスを記載します。

編集が終わり保存したら、データベースを更新します。

/etc/postfix/virtual

virtualにはメールアドレスの別名を登録します。別名を登録しない場合でも空のファイルを作成しておきます。

保存したら(仮に空のファイルでも)、データベースを更新します。

/etc/dovecot/users

まず最初に、ユーザーのパスワードを作成します。doveadm pwを実行すると、パスワードの入力を促されるので入力すると、CRAM-MD5形式で暗号化されたパスワードが出力されます。

usersファイルを作成し、仮想ユーザとそのパスワードを記載します。

アクセス許可リスト

postfixの/etc/postfix/main.cfに、smtpd_client_restrictionsという項目があります。次のような内容です。

これは、Postfixが、クライアントからの接続要求を受けた時に、どのように接続を許可するのかについて記載されています。

その意味は:

  • permit_mynetworks
    $mynetworksからの接続要求は許可
  • check_client_access hash:/etc/postfix/access
    /etc/postfix/accessにリストされたアクセス許可リストに記載のあるものに関しては、その記載に従って処理します。
  • reject_unknown_client
    逆引きで解決できないホストからの接続要求を拒否します。
  • permit
    以上の制限フィルタによってフィルタされなかった場合は、接続要求を許可。

となり、この順番でフィルタが処理されます。

この中の reject_unknown_client は、DNSで逆引きできない送信元の接続を拒否する設定です。
これは、本来スパム対策なのにもかかわらず、結構たくさんの非スパムな送信元も頻繁にこのフィルタによって拒否されてしまう事を意味します(過去の投稿: cannot find your hostname,)。

そこで、/etc/postfix/accesssmtpd_client_restrictionsで弾かれる、本来スパムではないホスト等に対して許可(あるいは拒否)を与える場合に使用します。

ファイルの書式は:

アクションには、OKの他に、REJECTDISCARDがあります。
REJECTは、送信元にエラーメッセージを返しますが、
DISCARDは、何も返さずにメールを破棄します。

なお、編集後は、

することを忘れないでください。

このようなことから、このオプションを設定するときは、時々ログをチェックすることをおすすめします。もし、必要な送信元でこのチェックが元で拒否された場合、先の/etc/postfix/accessを編集して、OK で許可します。

また、check_client_access..と、reject_unknown_client の順番を逆にすると、check_client_accessでチェックする前に拒否されるので気をつけて下さい。

サービスの再起動

sudo systemctl restart postfix dovecotで、サービスを再起動します。

ファイアウォールでポートを開放する

次のようにして、ポートを開放してください。

この時、smtp(25/tcp)を開き忘れると、メール送信できるのに一切受信できないという不可解な事象に悩まされるので気をつけて下さい(私は小一時間悩みました。灯台もと暗しです)。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です