最終回 メールを守れ! セキュアなメールサーバ構築法SELinuxで強化するソリューション(1/3 ページ)

最近注目のSELinuxについて学ぶ同連載、今回は、これまでの知識を総動員して、Postfixを使用したセキュアなメールサーバの構築方法を紹介しよう。

» 2005年05月13日 15時00分 公開
[佐々木 生弥(サイボウズ),ITmedia]

 これまで本連載では、SELinuxの基礎を押さえてきた。基本的な内容については前回までに解説した内容でひととおり網羅したので、最終回となる今回は実際にSELinuxを使用した環境構築方法について解説する。Postfixを使用したセキュアなメールサーバの構築方法を紹介しよう。

今回構築するシステム構成

 図1は、今回構築するシステム構成の概念図だ。SMTPサーバとPOP3サーバには、それぞれTurbolinux 10 serverに標準でインストールされるpostfix、pop-3を使用する。加えて、通信経路の暗号化にSMTP over SSLを利用し、これらのサービスをSELinuxサーバ上で構築することでセキュアなメール環境を実現するのが今回のポイントとなる。

図1 今回構築するシステム構成

環境構築フロー

 全体の見通しを良くするために、今回構築するメールサーバの構築フローを以下に示す。まずアプリケーションが正常に動作することを確認した後、permissiveモードで出力されたアクセス拒否ログをもとに、必要なポリシーを追加するという流れになる。

今回構築するメールサーバの構築フロー
・アプリケーションの設定(動作確認)
        ↓
・SELinuxの初期設定
        ↓
・ポリシーの追加に必要なアクセス拒否ログを採取する
        ↓
・ログをもとにしたポリシーの追加
        ↓
・enforcingモードでの運用

アプリケーションの設定――postfixの設定

ローカルにメールが配送できるかを確認する

 postfixの設定は、まずローカルにメールが配送できるかを確認する。確認の方法としては、ローカルのユーザーあてにメールを送信後、宛先ユーザーでログインしてメールの受信を確認すればよい。ローカルあての送信なので、宛先ユーザーは、同一サーバ内のユーザーとなる。ここでは「isasaki」というユーザーにメールを送信している。

# mail isasaki ←ユーザーisasakiにメールを送信
Subject: test
hoge
.
Cc:
# exit

localhost login: isasaki ←あて先ユーザー(isasaki)でログイン
Password:
Last login: Wed Apr 13 22:40:50 from 10.0.0.97
Welcome to Turbolinux.
You have new mail.
# mail ←受信メールの確認
Mail version 8.1 6/6/93. Type ? for help.
"/var/spool/mail/isasaki": 1 messages 1 new 1 unread
U 1 root@localhost.local Wed Apr 13 22:55 17/505 "test"

 ローカルでのメール配送が正常に行なえることを確認したら、外部のマシンと通信するための設定、ドメインあてのメール*を受信する設定をそれぞれ行なう。

ドメインあてのメールの受信
通常、メールアドレスは、isasaki@hoge.co.jpのような記述で送信されるが、デフォルト状態では、ドメイン宛のメールの受信が許可されていないため、isasaki@selinux.hoge.co.jpのように、@以降をFQDNで指定する必要がある。


FQDNでホスト名を定義

 /etc/sysconfig/networkにてFQDNを登録後、ネットワークを再起動して設定を反映させる。

# vi /etc/sysconfig/network
NETWORKING=yes
NETWORKING=yes
#HOSTNAME=localhost.localdomain
HOSTNAME=turbo10.****.******.co.jp  ←FQDNでホスト名を指定
TIMESERVERATBOOT=no

# hostname
localhost.localdomain
# /etc/rc.d/init.d/network restart ←ネットワークの再起動
Shutting down interface eth0                                     OK
Disabling IPv4 packet forwarding                                 OK
Enabling IPv4 packet forwarding. Bringing up interface lo                                         OK
Bringing up interface eth0 Determining IP information for eth0... done.
                                                                 OK
# hostname ←ホスト名の確認
turbo10.****.******.co.jp

main.cfの編集

 次に、postfixの設定ファイルである/etc/postfix/main.cfで以下の内容を設定する。

[myhostnameディレクティブ]……ホスト名の登録
myhostname = (ホストのFQDN)

[inet_interfacesディレクティブ]……リモートからのSMTP接続要求を許可する
inet_interfaces = (接続を許可するドメイン、IPアドレス)

[mydestinationディレクティブ]……ドメインあてのメールを受け取れるようにする
mydestination = $myhostname, localhost.$mydomain $mydomain

 このほか、必要に応じてmynetworksディレクティブでアクセスできるネットワークセグメントを制限しよう。

# vi /etc/postfix/main.cf
        :
        :
myhostname = turbo10.****.******.co.jp ←FQDNでホスト名を登録
        :
        :
inet_interfaces = 10.0.0. ←接続を許可するドメイン、IPアドレス
        :
        :
mydestination = $myhostname, localhost.$mydomain $mydomain
↑ドメインあてのメールを受け取れるようにする

 main.cfを修正後、postfixデーモンを再起動する。

# /etc/rc.d/init.d/postfix restart
Shutting down postfix:                                                OK
Starting postfix:                                                OK

DNSの指定とメールサーバのDNSへの登録

 ローカルあてにメールが配送できることを確認したら、外部のメールサーバに対してメールを送信してみよう。外部のメールサーバに送信するには、宛先メールアドレスのドメインに対し、名前解決ができる必要がある(図2)

図2 名前解決ができないと外部にメールが送れない

 digコマンドなどで正常なレスポンスが返ってこない場合は、DNSの設定を行おう。DNSは、/etc/resolv.conf を編集する。以下の例では、digコマンドで正常に名前解決が行なわれていることがわかる。

# dig ******.co.jp

; <<>> DiG 9.2.3 <<>> ******.co.jp
;; global options: printcmd
;; connection timed out; no servers could be reached

# vi /etc/resolv.conf
nameserver 10.0.1.**
nameserver 10.0.1.**
sarch ****.******.co.jp

# dig ******.co.jp
    :
    :
;; ANSWER SECTION:
******.co.jp.         3600    IN     A     ***.***.*.**
↑正常に名前解決が行なわれている
    :
    :

 次に、DNSサーバにメールサーバの登録(MXレコード*)を行なう。これは、クライアントマシンや外部のメールサーバから名前解決するための設定だ(図3)。DNSへメールサーバの登録が完了したら、外部のメールサーバなどから名前解決できることを確認する。

図3 DNSへメールサーバの登録をすることで外部からの名前解決も可能となる
MXレコード
Mail Exchangeレコードの略で、ドメインに対するメールサーバの配送先、優先度を定義する。


動作確認

 設定が完了したら、動作確認を行ってみよう。telnetコマンドでポート25(SMTP)に接続することで動作を確認できる。

# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 turbo10.****.******.co.jp ESMTP Postfix
↑ SMTPサービスが正常に動作している
quit
221 Bye
Connection closed by foreign host.

 コマンドラインで正常動作を確認したら、実際にメールクライアントからメールを送信できるかを確認する。Postfixサーバあてのメールと、Postfixサーバを経由した外部のメールサーバに対してメールを送信してみよう。

アプリケーションの設定――SMTP over SSLの設定

 SMTP over SSLは、クライアントマシンとサーバ間の通信経路を暗号化する技術で、パスワードやメール本文の盗聴、改ざんなどを防止できる。通信のはじめから暗号化通信を行う方法と、通常のsmtpポートへ接続し、その後に暗号化通信を行うstarttlsの2通りの方法がある。今回は、starttlsを使用する方法について解説する。SMTP over SSLの設定は、以下の手順で行う。

  • 証明書の作成

1.サーバ秘密鍵の作成

2.サーバ証明書の作成

3.作成した秘密鍵、証明書のパーミッションを変更

  • Postfixの設定

4.main.cf の変更

5.master.cfの変更

 以下、詳細な手順について解説していく。

       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ