CentOS8産自家製メールサーバーのオープンソース仕立て ~SMTP認証と通信プロトコル解説を添えて~ 前編

今、旬の食材といえばまさにCentOS8!!
 
今秋リリースされたばかりの新鮮素材です。
CentOSで作るものといえば皆さんお分かりですね。
サーバーです。
 
今日はこのCentOS8を使ってメールサーバーを構築しましょう。
普段何気なく利用しているメールのサーバーを自分で構築したことがある人は少ないんじゃないでしょうか?
構築する際のワンポイントテクニックセキュリティを高める秘訣を教えちゃいます!

前半は構築編です。
後半はプロトコルとセキュリティについての解説です。
後半は以下のリンクからどうぞ。
CentOS8産自家製メールサーバーのオープンソース仕立て ~SMTP認証と通信プロトコル解説を添えて~ 後編

材料メモ(1人前~)

CentOS Linux release 8.0.1905 (なるべく旬の内に使う)
postfix-3.3.1-8.el8.x86_64
dovecot-2.2.36-5.el8_0.1.x86_64
cyrus-sasl-2.1.27-0.3rc7.el8.x86_64
cyrus-sasl-lib-2.1.27-0.3rc7.el8.x86_64
cyrus-sasl-plain-2.1.27-0.3rc7.el8.x86_64
独自ドメイン(お好きなものを)

下ごしらえ

CentOS8のイメージを使うには

さくらのVPSやConoHaVPSは標準でCentOS8のOSイメージを使用することができます。
今回使用したのはお名前VPSです。
価格とスペックの釣り合い、カスタムISOイメージを使用できることから採用しました。
 
具体的なやり方はこちらでどうぞ。
アカウントごとに割り振られるISOイメージ領域にSFTPでアップロードを行うことで使用できるようになります。
私は意識高くCLIでアップロードしました。

CentOS8のインストール

基本的にはCentOS7から変わっていません。
ディスク領域やパーティション設定はお好みで設定してください。
 
「ソフトウェアの選択」では最小限のインストールを選択します。
今回は追加で開発ツールとセキュリティツールもチェックを入れました。
ここについても自由で構いません。

sshd設定変更

まずやるべきこととしてsshdの設定を変更します。
VPSサービスによりますが、rootアカウントのパスワード認証はやめましょう
以下はパスワード認証を無効化し、秘密鍵でログインする手順です。
rootアカウントでそもそもログインできないようにすると更にセキュリティは高くなります。
 

パッケージの更新、時刻設定、SELinux無効

続いてパッケージの更新、時刻設定、SELinuxの無効を行います。
CentOSではパッケージ管理のコマンドがyumからdnfに変更されています。
ですが、yumコマンド自体は消えたわけではなく、yumを実行するとdnfコマンドが内部的には実行されるようになっています。
yumコマンドの中身とdnfコマンドの中身は完全に一緒です。
 

 
では一気に設定していきましょう。
 

 
ここまでで最低限の設定は終了です。
今回はインストール時に設定をしたので不要ですが、swap領域がなければこのタイミングで作成しましょう。

DNS設定

取得したドメインのDNS設定もここで済ましておきましょう。(反映に時間がかかるから)
今回はサブドメインを使用しないドメインをメールサーバーのドメインとしました。
AレコードでドメインとサーバーのIPを紐付け、MXレコードでメール配送先ホスト名をドメインに紐付けます。
 
お名前.comで設定しました。こんな感じです。
 

 
余談ですがこのドメインは、新規サービスを作ろうとして先走って取得したドメインです。
形から入って中身が伴わないあるあるですね。

加熱殺菌(FireWall設定)

最低限必要なものだけ追加していきましょう。
今回追加するのは以下の4つ。
ここらの説明は最後に詳しく解説するので読み飛ばしてもらってOKです。

http(80/tcp)

Webサーバーを建てるわけではありません。
Let’s Encryptで証明書を取得する際に必要なので開放します。

smtp(25/tcp)

今回の主役。SMTP(Simple Mail Transfer Protocol)のポートです。
このポートが開いていないとメールの送信(受信も)ができません。

imaps(993/tcp)

IMAP(Internet Message Access Protocol) Over SSLのポート。
メーラーなどのクライアントがメールサーバーにアクセスし、サーバー上のメールを操作する際に使うポートです。

pop3s(995/tcp)

POP(Post Office Protocol) Over SSLのポート。
メーラーなどのクライアントがメールサーバーへメール取得する際に使うポートです。

submission(587/tcp)

今回の問題児。わかりにくくしているやつ。
クライアントからメールを送信する時に、SMTPにない認証機能を代わりにやるためのポートです。

設定

firewalldで設定を行います。
 

 
–add-serviceでやるか–add-portでやるかはお好みで。
FireWallについても、CentOS8からはiptablesが標準でなくなった等の変更はありますが、firewalldは変わっていないのでここでは省略します。

調理

必要なソフトウェアのインストール

とりあえず心を無にして以下のコマンドでインストールしましょう。
それぞれが何かは後ほど解説します。
 

 
最小限のインストールであれば問題ないと思いますが、MTAがsendmailなどになっている場合はpostfixに変更しましょう。
MTAはメール転送エージェント(Message Transfer Agent)の略です。
 

証明書の取得

SSL/TLS暗号化を行うにあたって、証明書を取得します。
Let’s Encryptを利用して無料で取得しましょう。
 
ソースをgithubからcloneし、依存パッケージをインストールします。
-dオプション以下はメールアドレスのドメインを指定します。
 

 
証明書は
/etc/letsencrypt/live/voicemaker.net
以下にダウンロードされます。

postfixの設定

postfixはSMTPサーバーです。
その名の通り、単純にメールの送受信をやりとりするサーバーで本体とも言えます。
 
変更を行う箇所について解説していきます。

main.cf

myhostname

myhostnameはSMTPサーバーのFQDNを設定します。
今回の例ではメールサーバーにはサブドメインを使用していないので、FQDN=ドメイン名となります。
 

mydomain

mydomainはドメイン名を設定します。
FQDNが「mail.example.com」だとすると、ドメイン名は「example.com」です。
前述したように今回はFQDN=ドメイン名で設定します。
 

inet_interfaces

SMTPサーバーがListenするネットワークインターフェースアドレスを設定します。
どこから来たメールを受け付けるかです。
メールは色々なメールサーバーから届くのでallを設定します。
 

mydestination

mydestinamtionはこのサーバーが、他のサーバーに転送せずにローカルに配送するドメインを指定します。
ここの設定は複数ドメインを1つのメールサーバーで受け取りたい時に便利です。
例えばこのサーバーでgeekfeed.xyzドメインのメールも受け取りたい場合、以下のように追記するだけです。
その場合、ippei@voicemaker.net宛のメールとippei@geekfeed.xyz宛のメールは同じメールボックスに入ります。
 

local_recipient_maps

ローカルユーザー名参照先を指定して、それ以外のユーザーにメールが来た場合は拒否をする設定です。
簡単にいうと、以下ではLinuxユーザー名とaliasマップをローカルユーザー名参照先としていて、
Linuxユーザーにippeiがいた場合はメールを届けて、存在しないユーザーのsanpeiにメールが来たら拒否するよという設定です。
 

home_mailbox

home_mailboxはメールボックスファイルの、ユーザーのホームディレクトリからの相対パスを設定します。
Mailr/(スラッシュを必ず付ける)を設定するとqmail-style deliveryというのになるらしい。
 

virtual_alias_maps

先程mydestinationで別ドメインのメールを受信する方法を説明しましたが、このvirtual_alias_mapsを設定することで、別ドメインにメールが来た際に転送する設定をすることができます。
それ以外にも、メーリングリスト設定などもすることができます。
 

postfixのSSL/TLS設定

main.cfに以下の設定を追加します。
デフォルトで有効になっている設定もあると思うので、その場合は確認、修正をしてください。
 

master.cf

以下の設定にします。
 

 
設定が完了したら、postfixを再起動します。
 

dovecotの設定

dovecot.conf

dovecotはimapとpop3が通信可能なように設定します。
 

10-master.conf

imapsとpop3sのポートを指定し、SSLを有効にします。
 

10-ssl.conf

postfixと同様にSSLを有効化して証明書のpathを設定します。
 

10-mail.conf

メールボックスの設定をします。
 

 
設定変更を行ったあとには、dovecotを再起動します。
 

saslauthdの設定

postfixでのSMTP認証にSASL(Simple Authentication and Security Layer)を利用します。
/etc/sasl2/smtpd.confを以下の設定にすることで、PAMをあ使用してUNIXユーザーでの認証が可能になります。
 

 
設定後、saslauthdを再起動します。
 

試食(動作確認)

ユーザーの作成

まずはメールを受信するユーザーを作成します。
認証にはUNIXユーザー情報を使用するので、useraddコマンドで追加となります。
 

 
shellの指定がnologinにするかはお好みで決めてください。
パスワードも忘れず設定しましょう。

メーラーへ登録

今回はGmailクライアントを使用してメールの送受信を行います。
まずは受信メールから設定すると楽です。
 

「メールの取得にセキュリティで保護された接続(SSL)を使用する。」にチェックを必ず入れましょう。

受信設定は確認メールなしで完了です。
以下は送信メールの設定です。

確認メールがGmailへ届くので、完了すると送信ができるようになります。

おわりに

以上でセキュリティ的に問題のないメールサーバーの構築は終了です。
コンフィグ関連の設定が結構ややこしいですね。
メールサーバーはサーバー構築の中でも結構レベルが高いと思います。
 
原因は、設定にあたって内部的な通信の仕組み等がわかっていないといけないからだと思います。
そういった部分について、後半の記事で解説して行こうと思いますのでぜひ読んでください!!

後半記事↓
CentOS8産自家製メールサーバーのオープンソース仕立て ~SMTP認証と通信プロトコル解説を添えて~ 後編

この記事が気に入ったら
いいね ! しよう

Twitter で

【採用情報】一緒に働く仲間を募集しています

採用情報
ページトップへ