Studio ilia

Wordpress、ゲームコンテンツ開発ブログ

CentOS 8にメールサーバー構築(Courier-MTA)

Courier-MTAについて

Courier-MTA(クーリエエムティーエー)は、メールサーバを構築する際に必要な「送信:SMTP」「受信:POP3」「受信:IMAP4」などの各種メールサービスのオールインワンでまとめたオープンソースのパッケージで、公式WEBでは「Courier Mail Server」と呼ばれています。

サーバーにメールを保存してPCやスマホなどのクライアントからメールを見に行く受信方法「IMAP」を提供するパッケージの「Courier-IMAP」は超有名(他にこれ以上のものが無い)なのですが、MTAパッケージとしてはかなりマイナーで、日本国内では解説している手順も少ないため、構築難易度は本ブログの手順の中でも高い部類に入ります。

スパム対策、ウィルス対策含め Courier-MTA の構築が出来るようになれば、恐らく大概のLinuxサーバーの構築は出来るようになるので、頑張ってトライしてみましょう!

 

MTAとは

MTA(Mail Transport Agent)はメール転送エージェントで主にメールサーバーに届いた情報を必要な場所に送信する郵便局のような役割を果たします。

 

一般的にメールサーバー構築時はqmail やPostfix、Sendmailなどのメールサービス用の各種パッケージを組み合わせて構築をしますが、Courier-MTAはメールサービスに必要なすべてのパッケージがバンドルされており一体感があるため、一度手順を覚えてしまえばとても扱い易いのです。

 

▼公式WEB

 

 

構築環境
  • CentOS Linux release 8.2.2004 (Core)
  • courier-1.0.14
  • courier-authlib-0.71.0
  • courier-unicode-2.1
  • ルータで「ポート 110、143、587、25」を開放

 

 

ルータのポート開放でメール送受信に必要な通信を受け入れる

メールサーバーの構築を行う前に、サーバー側NWのルータのポートを開放して、外部からの通信がサーバーに届くようにします。
メールサーバーは用途ごとに解放するポート番号が複数あります。

ポートの設定方法はルータによって違いますが、概ね下記のような感じです。

 

用途 プロトコル 開始ポート 終了ポート サーバーのローカルアドレス
受信:POP3 TCP/UDP 110 110 192.168.x.x
受信:IMAP TCP/UDP 143 143 192.168.x.x
送信:SMTP TCP/UDP 587 587 192.168.x.x
送信:SMTP TCP/UDP 25 25 192.168.x.x

 

▼通信イメージ

 

 

▼ルータの設定イメージ

 

 

事前準備

Courier-MTAはリポジトリにRPMパッケージ等が展開されておらずソースコードのみのため、一度ソースコードを元にRPMにパッケージ化した後インストールします。
CentOS 8の最小インストールでは下記のコマンドが無いのでインストールします。

rpmbuild ソースコードを元にコンパイルからRPMパッケージ化まで行う行ってくれるコマンドです。
wget インターネット上からURL指定でファイルをダウンロードするコマンドです。

 

▼rpmbuildコマンドのパッケージ確認

 

rpmbuildコマンドのインストール

 

▼wgetコマンドの確認

 

▼wgetコマンドのインストール

 

▼コマンドがインストールされたか確認

 

 

courier-MTA関連ファイルのDL

▼必要なパッケージ

CourierMailServer SMTP(送信)、POP(受信)等のメールサービスに必要なサーバー含め、IMAPも提供可能なオールインワンパッケージ。
courier-unicode courierをunicodeに対応させるためのライブラリ。
courier-authlib Courierアプリケーションに認証サービスを提供するためのライブラリ。

 

 

courier-authlibインストール

courier-authlibはメール送受信のユーザー認証に使われる拡張パッケージです。
CourierMailServerのインストールより先に行います。

 

▼wgetでcourier-authlibのDL
先ほどcourier-unicodeをDLしたフォルダに移動後同じようにwgetでDLします。

 

▼courier-authlibのrpm化

このように依存関係で必要なパッケージのエラーが表示された場合は、上記のパッケージをインストールしてから再度rpmbuildを行います。
依存関係のあるパッケージのインストール方法例については、後に開設する CourierMailServerで必要なパッケージのインストール方法 の手順を参照。

 

下記dnfコマンドのように必要なパッケージを一気に入れることも可能です。

 

▼書き出されたRPMファイルの確認
rpmbuild実行後は、一般ユーザーの /home/username/rpmbuild にパッケージが書き出されます。

 

authlibは大量にファイルが出力されますが、必要なライブラリは下記の3つです。

必要なライブラリ
  • courier-authlib-0.71.0-1.el8.x86_64.rpm
  • courier-authlib-devel-0.71.0-1.el8.x86_64.rpm
  • courier-authlib-userdb-0.71.0-1.el8.x86_64.rpm

 

▼必要なRPMファイルのインストール
下記3つのライブラリのみインストール。

 

 

courier-unicode のインストール

▼wgetで「courier-unicode」をDL

 

t root 447917 9月 18 2018 courier-unicode-2.1.tar.bz2

▼rpmbuild実行
先ほどの「courier-authlibのRPM化」の手順のように依存関係で必要なパッケージが大量に要求された場合は、必要なパッケージのインストール後に再度rpmbuildを実行します。
依存関係のあるパッケージのインストール方法例については、後に開設する CourierMailServerで必要なパッケージのインストール方法 の手順を参照。

 

▼書き出されたRPMファイルの確認
rpmbuild実行後は、実行ユーザーの /home/username/rpmbuild にパッケージが書き出されます。

 

いくつかファイルが書き出されますが必要なパッケージは下記の2つです。

必要なパッケージ
  • courier-unicode-2.1-1.el8.x86_64.rpm
  • courier-unicode-devel-2.1-1.el8.x86_64.rpm

 

▼必要なRPMファイルのインストール
下記2つのライブラリのみインストール。
rpmコマンドの使い方は こちら を参照。

 

 

CourierMailServerのインストール

▼CourierMailServerのDL
DL後にrpmbuild実行しますが、先ほどのunicodeとauthlibとは違い一般ユーザーで実行する必要があります。
下記の場合rootでファイルをDLしているので、実行する一般ユーザーのオーナー権限に変更しておきます。

 

▼一般ユーザーに変更
先ほどCourierMailServerをDLしたディレクトリに移動します。

 

▼courier-1.0.14.tar.bz2をRPM化
下記のようにオプション「–with-notice=unicode」を指定してbuildしないと、ビルド中に自動で行われるソースコードを元に行われる環境作成とチェック(./configure)でエラーになります。
rpmbuild実行後は、一般ユーザーの「/home/username/rpmbuild」にパッケージが書き出されます。

上記は courier-authlib をインストールする前に実行した結果のため、エラー量が多い状況です。
今回の例を依存関係のあるパッケージのインストール方法を解説します。
依存関係のあるコマンド等は何のパッケージを入れると良いか、概ね下記でパッケージ名を入力することで調べることも出来ます。

 

▼開発ツール関連があるリポジトリの有効化

 

 

CourierMailServerで必要なパッケージのインストール方法

▼インストールするにあたり
基本的はdnfコマンドにてRPMパッケージでコマンドやライブラリ等がインストールできますが、無いものはネット上で公開されているパッケージ等を探してインストールする必要があります。

 

▼「certtool」コマンドのインストール
秘密鍵や証明書を作成するのに使われるコマンドで、「gnutls-utils」パッケージをインストール

 

▼「/usr/include/fam.h」は「gamin-devel」をインストール

 

▼「/usr/lib/locale/locale-archive」は「glibc-all-langpacks」をインストール

 

▼expectのインストール
「expect」は「courier-authlib」をインストール時に自動でインストールされるので割愛。

 

▼gcc-c++のインストール
c++で作成されたソースをコンパイルするためのコンパイラです。

 

▼gdbm-develのインストール
GNU データベースシステムである gdbm 用の開発ライブラリです。

 

▼ghostscriptのインストール
アドビ社の開発したページ記述言語「PostScript」を提供するライブラリ。
Linuxで印刷等を行う場合はPostScript形式で扱う。

 

▼gnutls-develのインストール
SSL/TLSとDTLSプロトコルの開発ライブラリ。

 

▼groffのインストール
GNU プロジェクトによる文章成型コマンドroffの代替えとなるコマンド。

 

▼libgcrypt-develのインストール
汎用的な暗号化ライブラリ。

 

▼libidn-develのインストール
国際ドメインをエンコード、デコードするためのlibidnの開発ライブラリ。
日本語ドメイン名とかでアクセスできるようにしたりするのに使用されている技術です。

 

▼makeのインストール
どのソースコードをどのようにコンパイルすれば良いかを判断して必要な処理を実行してくれるコマンド。

 

▼netpbm-progsのインストール
画像などのグラフィックファイルを操作するためのライブラリ。

 

▼pam-develのインストール
ユーザー認証モジュール(pam)の開発に必要なライブラリ

 

▼pcre-develのインストール
perl互換の正規表現ライブラリ。

 

▼perlのインストール
WEBアプリケーションの開発などに使われるプログラム言語。
表示されていた「perl(ExtUtils::Embed)」も同時にインストールされます。

 

▼perl-generatorsのインストール
rpm-buildで必要なPerl依存関係ジェネレーター。

 

▼「mgetty-sendfax」のインストール
FAXサービスを提供可能なライブラリですが、CentOS8ではdnfで入手が出来ないため、CentOS7のパッケージを依存関係無視でインストールします。
「–nodeps」オプションで依存関係のパッケージをスキップさせます。
CourierMailServer のrpm化実行時にmgetty-sendfax のファイルさえ確認できれば依存関係のエラーは解消されます。
sendfax を用いたFAXサーバーを構築するのは限定的な条件だと思われるため、一般的なメールサーバーの構築では、sendfaxは動作しなくても影響はありません。

尚、上記 rpm コマンド実行時のURLが404となる場合は、こちら より最新版のファイル名に置き換えてください。

 

▼再度rpmbuildを実行

 

▼パッケージの書き出し場所

 

▼rootユーザーに変更してRPMS配下に移動
先ほどrpmbuildを実行したユーザーのディレクトリに移動します。

 

▼perl-CGIをインストール
RPMパッケージをインストールする際に依存関係で必要になります。

 

 

CourierMailServerのパッケージ説明とインストール

本ブログの手順でもまだ使われていないパッケージもありますが、使う可能性があるものはインストールしておきます。

 

▼courierコアパッケージのインストール

 

▼POPサーバーのインストール(受信用)

 

▼IMAP4サーバーのインストール(受信メールのサーバー保存)

 

▼WEBメールのインストール

 

▼メールフィルタリング

 

▼ウェブベースの管理フロントエンド

 

▼メーリングリスト

 

▼MySQL連携

 

▼本手順で使用しないパッケージ

courier-fax-1.0.14-1.el8.x86_64.rpm FAXサーバー連動用のパッケージファイル
courier-ldap-1.0.14-1.el8.x86_64.rpm LDAP認証連動用のパッケージファイル
courier-pgsql-1.0.14-1.el8.x86_64.rpm PostgreSQLのDBサーバー連動用のパッケージファイル

 

 

コンフィグの設定

設定ファイルは/etc/courier以下に展開されます。
基本的にコンフィグファイルはデフォルトで作成されていないので新規でファイルを作成する必要があります。

一部の設定は、コンフィグファイルの修正後に反映コマンドを実行してサーバーに反映させることで、サーバーの再起動をしなくても即時反映されます。

 

コマンドで反映可能な設定
コンフィグ 用途 反映コマンド
smtpaccess SMTPリレー制御 makesmtpaccess
aliases アカウントの定義 makealiases
locals ローカル配信ドメインの設定
(メールアドレスが「aaaa@domain.com」の場合、ログインIDは「aaaa」で検索される。)
makealiases
esmtpacceptmailfor.dir 受信ドメイン設定 makeacceptmailfor
hosteddomains バーチャルドメイン設定
(メールアドレスが「aaaa@domain.com」の場合、ログインIDは「aaaa@domain.com」で検索される。)
makehosteddomains

▼postmasterの設定
root や postmaster, MAILER-DAEMON などに宛てたメールを受け取るメールアカウントを設定する必要があります。
Courier は root ユーザーにはいかなるメールも配信しないので、一般ユーザーのアカウントを指定する必要があります。

 

 

 

▼defaultdomainファイルを新規作成

 

 

▼webadminファイルを新規作成

 

 

▼esmtpdの変更

 

 

▼ローカルで受けるドメインの設定を新規作成

 

 

備考

・メールアドレスが「aaaa@example.com」の場合、ログインIDは「aaaa」で検索されます。
・ログインIDが「aaaa@example.com」のようにドメインも含めたい場合は、localsは空欄で「hosteddomains」にドメインを記述します。
両方記述した場合は、localsが優先で読まれます。

 

▼自ホスト名の設定を新規作成

 

 

▼courierのアクセスポリシーを修正

 

上記以外はコメントアウト(#)する。

 

▼WEB管理画面のパスワード
設定ファイルを全てviで修正するなら管理画面は使わないのですが一応設定しておきます。

 

 

▼SMTP認証の設定

 

 

▼バーチャルドメインの設定
example.com以外のドメインを利用したメールサーバーを構築する場合は、下記のファイルを作成して記載してください。

 

メール転送を許可するドメイン

 

▼Courierが保有するドメイン一覧

 

 

備考

・ログインIDが「aaaa@other-domain.com」のようにドメインを含めたメールアドレス形式で検索されます。
・ログインIDにドメインを含まず「aaaa」で検索されるようにする場合は、「locals」にドメインを記述してください。

 

▼下記ディレクトリのコマンドPATHを設定
下記にsbin配下にcourierのコマンドが格納されていますので環境変数でPATHを通しておきます。

 

▼PATHの有効化
するために「-」をつけて環境変数を読み込みsuで再ログイン

 

▼コマンドをwhichで検索すると表示される

 

▼フォルダーのパーミッションを変更

 

▼上記コンフィグの有効化

 

 

courierの自動起動設定

▼courierのサービス起動
 

▼courierの起動確認

 

▼courier認証デーモンの自動起動

 

▼courier認証デーモンの起動

 

▼courier認証デーモンの起動確認

 

 

メールを利用するCentOS側のユーザーを作成

▼ユーザーを作成

 

▼ユーザー testusr のパスワードを変更

 

▼Maildir確認
ユーザー作成後にメールが格納されるMaildirが作成されているので確認をします。

 

 

メール認証アカウントの作成

▼アカウント情報に必要なuidとpidを確認
下記の例では「testusr」ユーザー名のGIDとUIDが「1009」というのを確認。

 

▼ユーザーdbファイルの作成
(courierのホストと同じドメインのアドレスの場合)

 

▼ユーザーdbファイルの作成
(courierのホストと違うバーチャルドメインの場合)
ユーザー名の後にドメインを記載します。
この場合はメーラーに設定するユーザー名も「testusr@other-domain.com」とドメインの記載されたユーザー名になります。

 

▼作成されたユーザーデータのファイル確認

 

▼courier-authlibに反映
初回目実行時に上記「/etc/authlib/userdb」ファイルが作成されます。
下記コマンドを実行すると userdb ファイルの記述内容を元にバイナリデータが同一ディレクトリに作成されます。
実際の認証に使われるデータは、このバイナリファイルが利用されます。

 

 

メーラーでアカウントを設定してログイン確認

▼上記設定例でのログイン

メールアドレス testusr@example.com
受信メール imap4 or pop3 ※本手順ではではimap4想定
ユーザー(#courierのホスト名と同一) testusr
ユーザー(バーチャルドメインを利用) testother@other-domain.com
パスワード userdbpw実行時に入力したパスワード
SMPTポート(メール送信用) 587
POP3ポート(メール受信用 ※DL型 110
IMAP4ポート(メール受信用 ※サーバー側で管理 143
認証方法 SMTP認証 LOGIN

 

▼ログインエラー等になった場合のログの確認方法
tail -f でリアルタイムにログを表示。

ログ表示を止める場合は「Ctrl+C」

 

▼デバッグモードにしてmaillogを確認
デバッグモードにするとログインセッションの細かい応答内容等が分かるようになり、ログインエラー発生時の解析が可能です。
ログの量が多くファイルサイズが肥大化するため、解析が完了したらデバッグモードを無効化してください。

 

▼authlibを再起動でデバッグモードの設定を反映

 

Home
Profile
Menu
Search