かつて山市良と呼ばれたおじさんのブログ

セイテクエンジニアのブログ  かつて山市良と呼ばれたおじさんのブログ  vol.20 WSL 2で作るクローズドなメール送受信環境のデモ

 

 

vol.20 WSL 2で作るクローズドなメール送受信環境のデモ

2024年06月20日配信
2024年07月12日更新
執筆者:山内 和朗

 前回は、Windowsに簡単導入でき、ポータビリティの高い、評価、検証に使えるクローズドなメール送受信環境を、「Windows Subsystem for Lunuxバージョン2(WSL 2)」を利用してこれから作っていくことを表明しました。どう作るかは次回以降にして、今回は先に成果物のデモを見ていただきます。

 

デモ環境の実装イメージ

 

 図1は、前回見ていただいた、クローズドなメール送受信環境の実装イメージです。WSL 2上でインストールし、構成済みのpostfixとdovecotを含むUbuntuのイメージは、このプロジェクトの成果物として「Ubuntu_mailenv.tar」(約1.2GB)というファイル名で保存してあります。このプロジェクトの成果物を導入すると、ローカル環境で「<ユーザー名>@mylab.test」のメール送受信環境が利用可能になります。

vol19_fig01a
図1 WSL 2で実現する、ローカルのクローズドなメール送受信環境

 実は、今回見ていただくものは、私個人のローカルのHyper-V環境にある、入れ子になった仮想化(Nested Virtualization)が有効なHyper-V VMで作成したものを、別のHyper-V VMにコピーして行うデモです。トライ&エラーを数日間繰り返して完成した成果物を、Azure上のラボ環境に何かしらの方法でアップロードして利用しようと目論んでいました。ローカル環境で作成したのは、Azure上でトライ&エラーを繰り返した場合のAzureクレジットの消費を気にしてのことです。しかし、いざアップロードしようと思っても、1.2GBほどのサイズになってしまい、私個人(自宅)のインターネット環境ではアップロードに何時間かかるか予想も付きません。Azure上のラボ環境で使用するイメージは、ラボ環境で作るとして、その過程、トライ&エラーではなく、最短ルートの過程を次回以降紹介することにします。

 

デモ環境のシステム要件

 

 成果物「Ubuntu_mailenv.tar」を導入して、スタンドアロン環境にメール送受信環境を準備するには、以下の要件を満たしている必要があります。

ハードウェア

オペレーティングシステム(WSL 2をサポート)

  • Windows Server 2022(ビルド20348.740以降)、Standard(デスクトップエクスペリエンス)またはDatacenter(デスクトップエクスペリエンス)
  • Windows 10 x64(バージョン2004 ビルド19041以降)、すべてのエディション
  • Windows 11、すべてのエディション

 今回はデモのために、入れ子になった仮想化を有効にした、ゲストOSとしてWindows Server 2022(デスクトップエクスペリエンス)をインストール済みのHyper-V VMを用意しました。


それではデモを始めましょう

 

 Windows Server 2022のHyper-V VMに管理者(ローカルAdministratorなど)としてログインします。このOS環境は、最新状態に更新されていますが、それ以外、何も設定していません。プロジェクトの成果物「Ubuntu_mailenv.tar」は、Administratorユーザーの「ダウンロード」(C:¥Users¥Administrator¥Downloads)フォルダーにコピー済みです。

 PowerShellを開き、次のコマンドラインを実行して、Telnetクライアント(オプション)、WSL 2のコンポーネント(ディストリビューションのインストールなし)をインストールして、OSを再起動します(画面1)。Telnetクライアントは、ポートの動作確認用にインストールするもので、必須ではありません。また、wslコマンド(wsl.exe、WSL 1およびWSL 2のインストールおよび設定ツール兼シェルのランチャー)は、PowerShell(powershell.exe、pwsh.exe)とコマンドプロンプト(cmd.exe)のどちらでも実行できます。

PS C:\> Install-WindowsFeature -Name Telnet-Client
PS C:\> wsl --install --no-distribution
PS C:\> shutdown /r /t 0

画面1
画面1 TelnetクライアントとWSL 2のコンポーネントをインストールする

 

 OSの再起動が完了したら、再びログインし、コマンドプロンプト(またはPowerShell)を開いて次のコマンドラインを実行します。この例では、「D:¥WSL¥Ubuntu」にカスタマイズ済みUbuntuをインストールします。<パス>は、Ubuntu_mailenv.tarのある場所(C:¥Users¥Administrator¥Downloads)。

C:\> mkdir D:\WSL
C:\> wsl --import Ubuntu D:\WSL\Ubuntu <パス>\Ubuntu_mailenv.tar

 

 WSL 1やWSL 2は、既定でC:ドライブ上のパス(%LOCALAPPDATA%¥Packages¥・・・)にディストリビューション(VHDXファイル)を格納します(→参考「WSL ディスク領域を管理する方法」≪外部サイト≫)。メール送受信により、ディストリビューションのディスクサイズは増える一方であるため、C:ドライブとは別のパスにインポートすることをお勧めします。WSL 1/2のエクスポート/インポート機能は、C:ドライブにインストールされたディストリビューションを別のドライブに移動するのに使えるテクニックです。

 

 次のコマンドライン(または単にwsl)を実行すると、インポートされたUbuntuが起動します。起動は数秒で完了します。これでもう既に、メールサーバー「mailsv.mylab.test」として動作を開始しました(画面2)。telnetコマンドでlocalhostのSMTPポート(25)、POP3(110)、IMAP(143)にアクセスすると、ポートが開いていることを確認できます(それぞれ、SMTPとPOP3はquitで、IMAPはa logoutで切断できます)。

C:\> start wsl
C:\> telnet localhost 25
C:\> telnet localhost 110
C:\> telnet localhost 143

 

 WSL 2専用のNATネットワークにHyper-Vと共通の仮想スイッチ(スイッチ名: WSL)を介して接続され、プライベートなIPアドレスが動的に割り当てられますが、Windows側からはlocalhost127.0.0.1)で透過的にアクセス可能です。Windows側からは、NATネットワークで動的に割り当てられたIPアドレス(wsl -e hostname -IでそのIPアドレスを取得可能)を使用してアクセスすることもできます。

画面2
画面2 再起動後、WSL 2に「Ubuntu_mailenv.tar」をインポートして開始するだけで、メール送受信環境が利用可能になる

 Ubuntu側で次のコマンドラインを実行し、ローカルユーザーを作成すれば、「<ユーザー名>@mylab.test」のメールボックスが準備され、メールの送受信が可能になります(画面3)。

wsluser@mailsv: ^$ sudo adduser user01
wsluser@mailsv: ^$ sudo adduser user02

画面3
画面3 adduserコマンドでローカルユーザーを作成し、パスワードを設定する

 あとはお好みのメールクライアント(例えば、Thunderbird)をWindows側にインストールするだけです。メールクライアントでは、受信メールサーバーとして、localhost、ポート110(pop3)または143(imap)、ユーザー名、ユーザー追加時に設定したパスワード、送信メールサーバーとして、localhost、ポート25(smtp)、認証なしを設定します(画面4)。なお、このテストメール環境の設定は、送信メールサーバーのセキュリティ要件が強化されている(SMTP-AUTHが必須)、Microsoft OutlookやWindows 10/11のメールアプリ、Outlook(New)アプリには対応していません。

画面4
画面4 localhostを受信メールサーバー、送信メールサーバーとして指定する。クローズドなメール送受信環境なので、プロトコルや認証のセキュリティは最低限にしてある

 このメール送受信環境では、存在する「<ユーザー名>@mylab.test」宛のメールの送受信が可能です。存在しないユーザーや、外部のメールアドレスへの送信は拒否(Reject)するように設定しています(画面5)。発信元のメールアドレスはデタラメでも構いません。ただ、そのデタラメなアドレスを含め、外部のメールアドレスを宛先に返信することは決してできません。

画面5
画面5 存在する「<ユーザー名>@mylab.test」宛のメールのみを送受信可能。外部メールアドレスへの送信は拒否(Reject)される

 デモはいかがでしたか? 興味を持たれましたか? 次回は「Ubuntu_mailenv.tar」の作り方をお送りします。

 

blog_yamanxworld_subscribe

blog_yamanxworld_comment

blog_yamanxworld_WP_2024fh_TOP5

最新記事