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

今回はUbuntu Server 18.04にPostfixとDovecotをインストール後の諸々の設定をしていきます。

ゴール

  • 前回の作業が終わっているものとします。
  • DNSで、メールサーバを解決できるようにゾーン設定をします。
  • メールクライアント、Thunderbirdからメールを送受信できるか確認します。
  • Sieveを設定し、メール振り分けが問題なくできるか確認します。
  • メールサーバの不正中継のテストをします。
  • メールデータを移行し、エイリアスの設定をします。
  • ログ集計コマンド、pflogsummをインストールし、Cronで自動実行を構成します。

ドメインゾーン設定

  1. さくらの会員メニュートップ
  2. 契約サービスの確認:ドメインの確認をクリック
  3. 契約ドメインの一覧:ドメインメニューをクリック
  4. ドメイン名の管理:ゾーン編集をクリック
    で、ゾーンを編集します。

概ね以下のようになるように設定しています。

エントリ名 タイプ データ
 @  NS  ns1.dns.ne.jp.
 NS  ns2.dns.ne.jp.
 MX  10 @
 TXT  "v=spf1 mx ~all"
 A  xxx.yyy.zzz.aaa
 www  CNAME  @
 mail  CNAME  @
 ftp  CNAME  @
 myhostname  A  xxx.yyy.zzz.aaa

メールサーバを構築したので、それをDNSに登録する必要があります。

MXレコード、MX 10 @は、メールサーバのありかを示しています。このドメインのメールサーバは、@のAレコード、すなわちxxx.yyy.zzz.aaaになります。このレコードは必須になります。

また、肝になると思われるのは、TXTレコードです。
メールサーバを運営してみて驚くのは、メールアドレスとその送信元のアドレス(@の右側の部分)が同じであることを強制されない、ということです。これは、迷惑メールの温床となり得、実際に多くの迷惑メールの手口になっています。

要は、いくらでも送信元のメールアドレスは偽ることができるということです。しかも、これはバグとなんかではなく、もう、そういう仕様のようなものになっている事に更に驚かされます。

そこで、メールアドレスのドメイン部分から、SPFレコードというものをDNSに問い合わせをして、SPFレコードに記されているIPアドレスと、送信元のIPアドレスをチェックしてドメインの認証をした上で、メール転送を受け付ける、というものです。

一部のメールサーバは、SPFレコードをDNSレコードに記述しておかないと、メールの転送を受け付けてくれませんので、このTXTレコードを登録している、ということになります(SPFに関する詳しい情報は、ここにあります)。

メールクライアントの設定

詳細な設定は割愛しますが、概ね次のようにします(Thunderbirdの場合)。
テスト用にユーザーを作成して、送受信のチェックをします。

デフォルトでインストールされている証明書や、自己認証(Self Signed)な証明書の場合、Thunderbirdが警告を出すことがあります。
その場合は、[セキュリティ例外を承認]することで回避してください。これは、送信と受信、それぞれで警告が発生します。

メール受信

サーバーの種類
IMAP
サーバー名
mail.example.com
ユーザー名
someuser@example.com
ポート
993
接続の保護
SSL/TLS
認証方式
暗号化されたパスワード認証

メール送信

サーバーの種類
SMTP
サーバー名
mail.example.com
ユーザー名
someuser@example.com
ポート
465
接続の保護
SSL/TLS
認証方式
暗号化されたパスワード認証

送受信に失敗する場合

送受信に失敗する場合は、ログ( /var/log/mail.log、あるいは/var/log/mail.error)をtail -f /var/log/mail.logなどとしながら確認して、対処する必要があります。

tail -f /var/log/mail.logコマンドでログを垂れ流しにしつつ、メールの送受信を行うと確認しやすいです。

そもそも送受信時にログが反応しない場合は、メールサーバに通信が届いていない可能性があります。ファイアウォールが閉じたままになっていないか、DNSによるメールサーバの名前解決が可能かどうか、そもそもメールクライアントの設定間違い等にも気をつけてください。

ログは流れるが、送受信に失敗する場合は、ログに多くのヒントが隠されているはずなので、そのヒントを元にして調査する必要があります。エラーが発生している場合には、/var/log/mail.errにもヒントがあります。

また、送受信にはPostfixとDovecotがそれぞれ役割を分担しています。

そのため、認証が通っているのか、認証のエラーの場合にはDovecotの/etc/dovecot/usersや、passdbの設定、Postfixでは、/etc/postfix/virtual_mailboxでの定義間違いがよくあるパターンだと思います。

認証は通っているし、メールの配送も大丈夫なのにメールが来ない・・
といった場合は、Dovecotの方でmail_locationや、userdbの設定、Postfixの方では、master.cfdovecot-ldaのオプションの設定におかしい部分があるかもしれません。

いずれにしても、ログに多くのヒントがあると思います。

SIeveの動作確認

sieve、およびManagedieveの動作を確認するために、Thunderbirdのアドオン、SIeveをインストールしておきます。

メニューバーが表示されていない場合は、三本線のハンバーガーアイコンをクリックして、オプション→メニューバーで、メニューバーを表示させます。

メニューバーのツール→ Message Filtersで、SieveFiltersというタブが開くので、上部の「Filters for:」で、テスト用のメールアカウントをドロップダウンから選択します。

おそらく「Server-side Sieve mailfilters」には何も表示されていないと思うので、ウィンドウ右側にある[Settings]ボタンをクリックします。

アカウント設定のウィンドウが開いて、該当するアカウントのSieve Settingsが開くと思います。そこの中の[Change Settings]をクリックして、SIeve Optionsという新しいウィンドウを開きます。

  1. Sieve:
    Server Name → IMAP Serverをチェックして選択。
    Server Port → 4190(Default)をチェック
  2. Security:
    Connection Security → Force TLS をチェック
    Authentication → Mechanism: CRAM-MD5 を選択
  3. General:
    → そのまま。
  4. Proxy:
    → 必要に応じて。私の場合は、Direct Connection

で、OKをクリック。

Sieve Fitersタブの、接続中を示す"Connectiong..."が消えて、右側のボタン群が有効になればOK。
もしも、自己認証局発行の証明書を使用している場合は、ここで、"Secure connection failed. The mail server identified itself with a bad certificate." という警告が出るかもしれませんが、[Continue] で続行すれば先の画面に進めます。

ボタン群の、[New...]ボタンをクリック。
Create a new Script で、スクリプト名を入力(例: default)

入力後、新たに編集用のタブが開かれます。

編集画面は、二通りの編集方法を提供してくれています。それは、

  1. グラフィカルな編集
  2. ソースを直接編集

の2種類で、画面上部のツールバーの [Source] をクリックすることで切り替えることが出来ます。

ここでは、メールを振り分ける際のサンプルを何パターンか提示しておきます。

#
# 2019-XX-XX
#
require"fileinto";
# 単純なメール振り分けの例
if address :contains "From" "*@somedomain.com" {
    # 受信トレイと同じレベルに、hogedomainというフォルダを作成して、そこにメールを入れます
    fileinto "hogedomain";
}
# マッチする箇所や、させたいメールアドレスを複数にすることが出来ます
elsif address :contains ["From", "To"] ["info@someshop.com", "mm@onothershop.com"] {
    # INBOX.メールマガジンは、受信トレイ直下にメールマガジンというフォルダを作成して、そこにメールをいれます
    fileinto 'INBOX.メールマガジン';
}

編集が終わったら、Saveで保存し、編集用のタブを閉じます。

再び、フィルタ一覧画面に戻ると、先ほど作成したスクリプトが一覧に表示されていて、かつ、右端の方にある [Active] の欄がグレーアウトしていると思います。

ここで、そのスクリプトをクリックして選択し、ボタン群の中の [Active] をクリックします。そこで、先程のActive欄の項目がグリーンのチェックアイコンに変わると思います。

今まさに、仮想ユーザのホームディレクトリのsieveディレクトリ下にスクリプトファイル(例では、default)が作成され、そのシンボリックリンクが、ホームディレクトリに作成サれました。

実際に、サーバーにログインしてディレクトリやリンクが作成されているか、確認してください。

# ls -al
total 20
drwxr-xr-x  4 vmail vmail 4096 Feb 23 16:41 .
drwxr-xr-x  4 vmail vmail 4096 Feb 20 08:47 ..
lrwxrwxrwx  1 vmail vmail   19 Feb 20 09:22 .dovecot.sieve -> sieve/default.sieve
-rw-------  1 vmail vmail 2585 Feb 23 16:41 .dovecot.svbin
drwxr-xr-x 34 vmail vmail 4096 Feb 23 17:02 Maildir
drwx------  3 vmail vmail 4096 Feb 23 16:40 sieve

また、テストメールを行って、実際にメールが振り分けられて、自動的にフォルダが作成されるのか、といったことも確認してください。

オープンリレーのチェック

メールサーバを設定して、ゾーン設定も終われば、あとは運用開始・・と行きたいのですが、一応いつもここでオープンリレーのチェックをしています。要は迷惑メール、スパムメールをほうぼうに転送しまくらないかどうかの確認です。

以下のようなサイトを利用して自身のメールサーバのチェックをします。

Anonymous Relay Test

これらのサイトは、不正中継のテストだけではなく、不正なログインや、不正なメールアドレス等のチェックも行われます。

すべてのチェックに合格するか、確認してください(前回のメール設定を行っていれば、問題なくテストをクリアするはずです)。

必ず自分自身のサイトのみに実施してください
他のメールサーバに対して行うと、攻撃とみなされます。そうなることで、こういった確認サイトが閉鎖される可能性があります(というより、現実に閉鎖を余儀なくされています)。
絶対に他所のメールサーバに対して、テストを実行しないでください。
絶対に他所のメールサーバに対して、テストを実行しないでください。
大事なことなので二回書きました。

メールデータの移行

以下の条件ですが、単純に元のMaildirをTarで固めてから、新しいサーバ上でtarボールを展開して、Maildirを置き換えるだけの作業ですが、Sieve、Managesieveも含めて問題なく動作しています。

  • 元環境、新環境ともにMaildir形式のメールボックス
  • 元メールアドレスと、新メールアドレスは同一
  • 置き換え後、chown -R vmail:vmail で所有者とグループを変更する

IMAPにはACL(Access Control List)という機構があるので、もしも新旧でメールアドレスが違うような場合どうなるかは検証していません。

メールアドレスのエイリアス設定

root宛のメールや、webmaster宛のメールを全て、あるメールアカウントに送りたい場合、/etc/postfix/virtualに、その受信メールアドレスと、実際に配送されるメールアドレスとの対になった値を記載していきます。これは、/etc/postfix/main.cfvirtual_alias_mapsで定義されている値になります。(参考:メールサーバ移行計画(1) /etc/postfix/main.cfの設定)

$ sudo vi /etc/postfix/virtual
# Virtual aliases map
root@example.com    someuser@example.com
webmaster@example.com   someuser@example.com

これは見てみるとよく分かるように、root@example.comとwebmaster@example.com宛に送られたメールは、全てsomeuser@example.comに配送されます。

編集が終わったら、

$ sudo postmap /etc/postfix/virtual

で、データベースを更新し、Postfixを再起動します。

$ sudo systemctl restart postfix

この、/etc/postfix/virtualを編集 → postmapコマンドの実行 → Postfix再起動の流れは、毎回忘れないようにしましょう。

pflogsummで、ログを集計

メールサーバー構築直後は、頻繁にログをチェックすると思うのですが、ある程度なれてくるとサーバーの方で勝手に見ててもらえないかな?と思うことがあると思います。

pflogsummコマンドをインストールして、一日に一回、ログの集計をレポートさせるようにしましょう。

基本は、

  1. コマンドをインストール
  2. Cronで定期的に集計を実行しレポートをメールで送る

という形になります。

コマンドのインストールとテスト

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

$ sudo apt install pflogsumm

デフォルトのままで、一度テストをしてみます。

$ sudo perl /usr/sbin/pflogsumm -d yesterday /var/log/mail.log
Postfix log summaries for Feb 23

Grand Totals
------------
messages

     36   received
     36   delivered
      0   forwarded
      0   deferred
      0   bounced
      5   rejected (12%)
      0   reject warnings
      0   held
      0   discarded (0%)
      :
      :
Fatal Errors: none

Panics: none

Master daemon messages: none

そのままでも十分な量のレポートが出力されると思うので、次にメール送信のテストをします。

$ sudo perl /usr/sbin/pflogsumm -d yesterday /var/log/mail.log | mail -s 'Logwatch for Postfix' root

前項のメールアドレスのエイリアス設定ができていれば、"Logwatch for Postfix" というメールがsomeuser@example.com宛に届くはずです。

Crontabに登録

/etc/crontabに次の行を追加します。

00 1    * * *   root    /usr/bin/perl /usr/sbin/pflogsumm -e -d yesterday /var/log/mail.log | mail -s 'Logwatch for Postfix' root

これは、毎晩深夜1:00に先程テストした内容のメールが、root宛(エイリアスで設定している配送先)に前日分の集計メールがやってきます。

時間に関しては、ここでは深夜1:00という時間にしてますが、これについては、管理者の都合の良い時間を選定してください。


0件のコメント

コメントを残す

メールアドレスが公開されることはありません。