B級システムエンジニアの備忘録

インフラ・プログラミングなんでもやるぞ雑用エンジニアブログ

CentOS Dovecot Linux postfix PostfixAdmin サーバー システム・技術情報 セキュリティ プライベートCA メール

CentOS7 メールサーバー構築 postfix+dovecot+postfixadmin+mysql+privateCA で imaps クライアント認証及びSMTP-Auth対応

更新日:

とても長い名前になりましたが、メールサーバーはセキュリティが大事なので、結局セキュリティ面を最低限強化するとこのようなタイトルになってしまいます汗
よくばりだと思わないで下さい!

毎回メールサーバーの構築はややこしいので忘れる前に書いとこうと思いました笑
かれこれ何十回と構築していますが、半年すると忘れます。
次みたときにこのオプションなんだっけ?みたいな。。。
それくらい設定が多いのでいまだに好きにならない^^;

実際にやること自体はシンプルです!
①SMTPはpostfixを使用 MTA(Mail Transfer Agent)
②imapはdovecotを使用 MRA(Mail Retrieval Agent )
③不正にリレーされない為にSMTP-Authを使用(迷惑メールを送るための中継対策)
④不正受信されない為にクライアント認証を使用(第三者によるメール閲覧防止)
⑤ドメイン管理はWEBからpostfixAdminを操作して行う。
⑥ドメイン管理はMySQLで行う。
⑦通信をSSLにて行う。
⑧SSL通信だがパスワード認証は平文ではなく暗号化する(CRAM-MD5)

※今回はcyrus-SASLは使用せず、Dovecot SASLを利用します。なぜかというと単純にメンテナンス量が増えるので。

今回の各種設定について

  • ドメイン:mail.example.net
  • MySQLデータベース名:postfix
  • MySQLユーザー:postfixadmin
  • MySQLパス:hogehoge
  • バーチャルドメイン管理用ユーザー:vuser
  • Apacheドキュメントルート:/var/www/postfixadmin
  • プライベートCAはローカルに存在 /etc/pki/exampleCA
  • 証明書パス/etc/postfix/tls ※Dovecot,Apache両方もこのファイルを使用

Contents

作業前にやっておくこと

opensslがないとこれからの作業ができませんので。。。
何かと良いパッケージのあるepelリポジトリは事前に入れておく

ファイアーウォールの許可設定(メール及びpostfixAdmin用のWEB系)

MySQL インストール

CentOS7ではmariaDBが標準でインストールされている可能性があるので以下手順でmariaDBをアンインストール後に、
MySQLをインストールしてください。

MariaDBがインストールされているか確認

MariaDBをアンインストールする

※以下を見ていただくとわかるようにMariaDBと一緒に依存関係にあるpostfixも削除されますのでご注意ください。後程postfixは入れなおします。

MySQL公式リポジトリを追加

インストールの対象となるバージョンを確認

MySQLをインストール

インストール内容の確認

MySQLのバージョン確認

MySQL 初期設定

パスワード確認

初期セキュリティ及びパスワード設定

postfix用データベース作成(postfixAdmin,Dovecotでも共有参照します)

早速MySQLへログインし、postfixで使用するデータベースを新規作成しましょう。

Postfix インストール

通常のインストールだとコマンド一発なのですが、
今回はバーチャルドメイン機能を使用したメールサーバーを構築予定なので、
VDAパッチと呼ばれるもの当てたpostfixをインストールします。
このパッチを当てないとバーチャルドメインで運用した場合にpostfixのQuota機能(メール容量制限)が効かなくなってしまします。。。
※openssl1.1.0だとVDAパッチを当てたpostfixが上手くビルドできないいことがわかりましたので、ご注意ください。
私は1.0.2でビルド作業を行いました。

Scientific Linux リポジトリ追加

postfixをソースからビルドする

VDAパッチ適用

各種確認

バーチャルドメイン管理用ユーザー作成

Dovecot インストール

dovecotのインストールは他の作業程難しくありません。

Apacheのインストール

パッケージインストール

httpdバージョン確認

PHPのインストール

※epel-releaseを事前に入れておかないとremiリポジトリの追加ができません。
remiリポジトリ追加

PHP7をremiリポジトリからインストール

PHP 設定

タイムゾーンを変更する

PHPの各種設定確認

postfix設定(MySQLでのバーチャルドメイン管理) SMTP-AUTH対応

postfixでSMTP-AUTHに対応し、かつ暗号化された送信を行うためにはSSL証明書が必要になります。
今回はDovecotのSASLに認証作業をまかせて、認証が完了した場合のみ送信ができるようにします。
受信に関しては外部の不特定のメールサーバーより送られてきますので、
受信については強制しないように設定します。

MySQL用設定ファイル作成

postfix設定

master.cf設定

SSL証明書用ディレクトリ作成及びファイル設置

※必ず先にプライベートCAで各種証明書を作成しておいてくださいね。

imapをクライアント認証に対応させる

まず、クライアント認証をする為には、クライアント認証用の証明書を発行する契約を各証明書の会社と行わないといけませんが、
おそらく結構高いので、今回はプライベートCAを構築してそこでクライアント認証をする流れにしたいと思います。

まず、プライベートCA構築についての記事を参考にクライアント証明書及びルート証明書を発行して下さい。
併せてDovecotの公式ページも確認するとより頭に入ると思います。
※以下プライベートCAを構築後に各種証明書を発行した前提で話しを進めますのでご注意ください。

デフォルトのパスにインストールしている場合は以下のような構成で設定に関するファイル及びディレクトリができています。
通常だとconf.d配下にあるファイルをいじるのですが、どのファイルの設定を変更したか等の管理が煩雑になりやすいので、
/etc/dovecotへlocal.confというファイルを作成し、そこから読みだすようにします。

設定ファイルの作成

MySQL用設定ファイル作成

Apache 設定

ApacheでpostfixAdminよりGUI上からユーザー作成やドメイン作成をできるようにします。
ただ、こちらもどうせならimapと一緒でクライアント認証を使用したいですよね。
ということでhttpsへの対応とクライアント認証に対応させます。
※事前証明書発行及び設置を忘れずに

postfixAdmin 導入

postfixAdminをダウンロード

postfixAdminをApacheのDocumentRootへ設置

postfixAdminの設定

ユーザー及びドメインディレクトリの削除用シェル設定

postfixAdminからユーザーやドメインを削除した場合にDBからレコードだけしか削除されないので、
シェルを動かして、実際のpostfixで管理している各種フォルダを削除します。
これをしとかないと削除したアカウントやドメインのフォルダがガンガンのこりますので、
ご注意を!
シェルはpostfixAdminに同梱されている処理を使用しますが、
そのままではパーミッション等の問題で実行できないので、
設定を変更します。

各種アプリケーションの起動と設定

postfix Dovecot Apache 起動

自動起動設定

postfixAdminのパスワード設定

postfixAdminのGUIからのパスワード設定等は以下のサイトに詳しく記載されていますので、
割愛致します。
postfixAdminの設定について

336

336

-CentOS, Dovecot, Linux, postfix, PostfixAdmin, サーバー, システム・技術情報, セキュリティ, プライベートCA, メール

Copyright© B級システムエンジニアの備忘録 , 2021 All Rights Reserved.