旧サーバ、Ubuntu Server 14.04上に構築しているメールサーバから、Ubuntu18.04上で新たにメールサーバを構築し、可能な限りアカウント情報やメールデータを移行します。
今回はUbuntu Server 18.04にPostfixとDovecotをインストール後の諸々の設定をしていきます。
ゴール
- 前回の作業が終わっているものとします。
- DNSで、メールサーバを解決できるようにゾーン設定をします。
- メールクライアント、Thunderbirdからメールを送受信できるか確認します。
- Sieveを設定し、メール振り分けが問題なくできるか確認します。
- メールサーバの不正中継のテストをします。
- メールデータを移行し、エイリアスの設定をします。
- ログ集計コマンド、pflogsummをインストールし、Cronで自動実行を構成します。
ドメインゾーン設定
- さくらの会員メニュートップ
- 契約サービスの確認:ドメインの確認をクリック
- 契約ドメインの一覧:ドメインメニューをクリック
- ドメイン名の管理:ゾーン編集をクリック
で、ゾーンを編集します。
概ね以下のようになるように設定しています。
エントリ名 | タイプ | データ |
---|---|---|
@ | NS | ns1.dns.ne.jp. |
NS | ns2.dns.ne.jp. | |
MX | 10 @ | |
TXT | "v=spf1 mx ~all" | |
A | xxx.yyy.zzz.aaa | |
www | CNAME | @ |
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.cf
のdovecot-lda
のオプションの設定におかしい部分があるかもしれません。
いずれにしても、ログに多くのヒントがあると思います。
SIeveの動作確認
sieve、およびManagedieveの動作を確認するために、Thunderbirdのアドオン、SIeveをインストールしておきます。
メニューバーが表示されていない場合は、三本線のハンバーガーアイコンをクリックして、オプション→メニューバーで、メニューバーを表示させます。
メニューバーのツール→ Message Filtersで、SieveFiltersというタブが開くので、上部の「Filters for:」で、テスト用のメールアカウントをドロップダウンから選択します。
おそらく「Server-side Sieve mailfilters」には何も表示されていないと思うので、ウィンドウ右側にある[Settings]ボタンをクリックします。
アカウント設定のウィンドウが開いて、該当するアカウントのSieve Settingsが開くと思います。そこの中の[Change Settings]をクリックして、SIeve Optionsという新しいウィンドウを開きます。
- Sieve:
Server Name → IMAP Serverをチェックして選択。
Server Port → 4190(Default)をチェック - Security:
Connection Security → Force TLS をチェック
Authentication → Mechanism: CRAM-MD5 を選択 - General:
→ そのまま。 - 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)
入力後、新たに編集用のタブが開かれます。
編集画面は、二通りの編集方法を提供してくれています。それは、
- グラフィカルな編集
- ソースを直接編集
の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
また、テストメールを行って、実際にメールが振り分けられて、自動的にフォルダが作成されるのか、といったことも確認してください。
オープンリレーのチェック
メールサーバを設定して、ゾーン設定も終われば、あとは運用開始・・と行きたいのですが、一応いつもここでオープンリレーのチェックをしています。要は迷惑メール、スパムメールをほうぼうに転送しまくらないかどうかの確認です。
以下のようなサイトを利用して自身のメールサーバのチェックをします。
これらのサイトは、不正中継のテストだけではなく、不正なログインや、不正なメールアドレス等のチェックも行われます。
すべてのチェックに合格するか、確認してください(前回のメール設定を行っていれば、問題なくテストをクリアするはずです)。
必ず自分自身のサイトのみに実施してください。 他のメールサーバに対して行うと、攻撃とみなされます。そうなることで、こういった確認サイトが閉鎖される可能性があります(というより、現実に閉鎖を余儀なくされています)。 絶対に他所のメールサーバに対して、テストを実行しないでください。 絶対に他所のメールサーバに対して、テストを実行しないでください。 大事なことなので二回書きました。 |
メールデータの移行
以下の条件ですが、単純に元のMaildirをTarで固めてから、新しいサーバ上でtarボールを展開して、Maildirを置き換えるだけの作業ですが、Sieve、Managesieveも含めて問題なく動作しています。
- 元環境、新環境ともにMaildir形式のメールボックス
- 元メールアドレスと、新メールアドレスは同一
- 置き換え後、
chown -R vmail:vmail
で所有者とグループを変更する
IMAPにはACL(Access Control List)という機構があるので、もしも新旧でメールアドレスが違うような場合どうなるかは検証していません。
メールアドレスのエイリアス設定
root宛のメールや、webmaster宛のメールを全て、あるメールアカウントに送りたい場合、/etc/postfix/virtual
に、その受信メールアドレスと、実際に配送されるメールアドレスとの対になった値を記載していきます。これは、/etc/postfix/main.cf
のvirtual_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
コマンドをインストールして、一日に一回、ログの集計をレポートさせるようにしましょう。
基本は、
- コマンドをインストール
- 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件のコメント