DigiLoog

PC関係の事なら何でもいけるそんな処

「Postfix/GlusterFS/Rspamd/RainLoop/gdnsd」で自宅メール鯖をリプレース

2018年07月16日(月) - 19:43 | カテゴリ: Linux

今まで自鯖を色々と拡張しつつ、システムリプレースし続けてきたのだが、
稼働歴が長いけれど手を付けられていないのがメール鯖だった。
当初はスキル修得目的でとりあえず構築したメール鯖だが、
昨今だとスマホのメイン用途で使う事もあり重要度が上がっていた。

という事で「メール鯖の刷新をやるか~」と構想を練りつつ早1年。
粗方の構成が決まった後、必要なシステムを次々を構築してはメモを作りと繰り返し、
海の日含めた3連休を使って、ns-labの全メール鯖リプレースが完了した。

という事で、今回は新ns-labメールサーバがどんな構成で動いているのか紹介しようと思う。

  • コンセプト

刷新前はメールゲートウェイが4台、ユーザアクセス用が1台、メーリングリスト用が1台の計6台構成。
メーリングリストはそれ程使っていないので現状維持で良いとして、
問題はユーザアクセス用のMUAサーバが1台であった事。
要するに、鯖がトラブるとメールが読めなくなるのを解消したかった。

メールゲートウェイは権威DNSも兼ねているので、増減含めた構成変更は行わないとしつつ、
外部送信時のSMTPS対応・DKIM署名のチューニングなど改善系を行った。
その他、修正したいポイントとしてはサーバ間接続用のVPNが切れるとメール配送が遅延するので、
SMTPSを活用しつつInternet周りで直配送に切り替えたかった。

クライアント系の課題としては、
Sylpheedを入れたPCが3台、スマホが2台、タブレット1台と色々端末が存在するので、
メールの振り分けルールを個々に設定しなければいけないのが、超絶面倒臭かった。
なので、今回を機にMUAはWebメールクライアントに移行し、
フィルタリングもsieveを用いてWebメールクライアントから一括管理出来る構成にした。

という事で色々と要件・(自分の)要望が出そろった結果、
大方針は自鯖に依存しない構成に落ち着いたので、
『VPS上のサーバを活用しつつ、WEBクライアントにレンタルサーバも使う』事とした。

 

  • 全体構成

今回は中々にデカイ構成になった…
恐らく、自宅の仮想ホストサーバ並に複雑な気がする (´・ω・`)


サーバ台数と用途は左下に書いてある通り。
契約上だと、VPSが6台・仮想鯖が4台・レンタルサーバが2台の合計12台 ヘ(゚∀゚ヘ)
ただ、専用サーバでは無くアプリを色々と同居させているので新規契約はレンタルサーバのみ。

メール系の構成には書いていないが、以前構築したgdnsdを使って、
上手い具合に拠点レベルでの冗長化を保つように設計した。
ただ、GSLBを使って拠点冗長化を行うと、WebメールのHTTPSセッション維持が難しくなるので、
gdnsdのフェールオーバー機能を用いてActive/Standby動作させる事で参照先を1サーバに限定し、
セッション維持出来るように構築した。

 

  • 構築手順

今回は使った事の無いアプリを導入したので詳細までメモしておいた。
普段は簡単にメモしてから内容を微修正しているのだが、
最初からガッツリと内容を作った後にメモを作成した。

  1. wiki – gdnsd
  2. wiki – GlusterFS
  3. wiki – Postfix
  4. wiki – Rspamd

………

実は、当初メール鯖を完全廃止してレンタル鯖にMXレコードを向けるのも検討していたが、
一応は技術者である事と、Linuxで新しい事に挑戦したかったので基幹サーバは自前で構築した。
ただ、10年以上前に使ったきりのレンタルサーバ事情も知りたかった為、
レンタルサーバを契約した経緯があったりする。

そして、要となるレンタルサーバは色々と悩み、ZenlogicとCORESERVERの二つに絞り込んだ。
最終的には、2サイトで稼働が出来る事と過去の実績を考えてcoreserverにした。
そして、CORESERVER契約後にZenlogicの方で大規模障害が起きていたので危なかった….

………

今回、一番苦労したのはGlusterFSのチューニングだった。
MTA(Postfix)自体は本職のサーバ構築で何回も使っている事もありすんなり終わった。
MUAからサーバに接続してメールを読む際、ディスクI/Oが遅いとアクセスがもっさりするので、
今回は如何にサーバ負荷を下げつつディスクI/Oを確保するかに注力した。
最終的には設定をRead重視に寄せる事で、Webメールから接続した際のディスクI/Oを確保した。

………

スパムフィルターは今までbogofilterと自作スクリプトで賄っていたが、
今回サーバを作り直すにあたり違う物を入れようと画策していた。
そんな事を思いつつ情報収集していたら、ニューラルネットワーク学習に対応しつつ、
従来の重み付け学習も出来るRspamdを見つけたので即採用。

今回はGW側でDKIM対応しているので使っていないが、
RspamdはDKIM検証・署名も出来たり、sophosと組み合わせるとウイルスチェック可能。
唯一の欠点が日本での採用例が少なくググっても見つからないので、
マニュアル(英語)をGoogle翻訳片手に読み解く必要があった。

ちなみに、RspamdはバックエンドにはRedisを用いる事も出来るが、
VPSだとインメモリDBを使う程メモリが無いので今回はSQLiteにした。
SQLiteだとRedisと比較して微妙に遅くなるが、
スクリプトで一気に学習処理をさせた時位しか影響が無いので、
個人利用ならSQLiteでも問題ないと思う。

………

Webメールクライアントは、RoundCubeとRainLoopで相当迷った。
今回はレンタルサーバで稼働させる都合上、軽いアプリを使いたかったのと、
自鯖と比較して自由度が下がるレンタルサーバで細かい事をやりたくなかったので、
構築が楽で挙動もシンプルなRainLoopを採用した。

RainLoopは設定で癖の強いソフトだが、sieveを使ったサーバサイドフィルタリングにも対応していたり、
マルチアカウントも使えるので、最終的にはRainLoopを採用して正解だった。


UIとしてはGmailに似ている。
アクセスはそれなりにサクサク動き、メール読込みで2秒以上待たされる事は無かった。

………

色々と試行錯誤しつつ構築した結果、本気で取りかかってから2ヶ月かかってしまったが、
中々使い勝手の良いWebメールシステムが出来上がった。

お金かかる・時間かかる・セキュリティ対策が大変と、万人には絶体お勧め出来ないが、
Linuxでシステム構築が出来る人のステップアップとして、メール鯖をチョイスするのは良いと思う。
特にメールはサーバ・DNS・ミドルウェア・配送設計・セキュリティと学ぶ事が多く、
普段使いすれば課題が出ても解決せざるを得なくなるので躍起にやれるのも良いと思う。

クラウド・SaaSやらが台頭する中、オンプレで構築する事は皆無だと思うが、
基本知識を知っといて損は無いので経験積むのは良いと思う。
さらに言うと、オンプレの構築ノウハウがあればクラウド・SaaS移行時にも応用が利くので。

なので、今回は昨今の事情を無視しつつVPSでメールシステム刷新をやったのでした。





  • 応援中

    はじめるセカイの理想論 -goodbye world index-