Microsoft Azure上で、高機能なWebメールインターフェースを提供するOSSである Roundcubeを構築し、Office365 Outlookに保存されているメールを表示させる検証を行った。
はじめに
こんにちは、今回はMicrosoft社が提供するクラウドプラットフォームMicrosoft Azure上で、高機能なWebメールインターフェースを提供するOSSである Roundcubeを構築し、Office365 Outlookに保存されているメールをRoundcubeで表示する検証をしてみました。
Roundcubeとは
RoundcubeはWebメールの様なUIを提供するOSSで、用途や趣味趣向に合わせ、自由にカスタマイズができることが特徴です。Postfix・ Dovecot等のメールサーバに対して設定するのが通常かと思いますが、Office365やGoogleApps等のSMTP/POP/IMAP接続方法を提供しているクラウドメールに対して、共通のインターフェースを提供するといったことも可能です。中身はApache、PHPベースのWebアプリケーションで、SMTP/IMAPサーバから見ると、RoundcubeはIMAP接続やPOP接続をしてくるメールクライアントのような立ち位置となります。
例えば、Office365 の Outlook Web Access の画面を
Roundcubeではこんな画面で見せることができます。
類似のWebメールソフトウェア
調べると似たようなWebメールソフトウェアがいくつかあることがわかります。
商用
Ipswitch IMail Server
– POP3、IMAP、SMTP、Webメール、アンチウイルスソフトウェアなどをオールインワンにした商用のソフトウェア。Windowsに対応。
OSS
SquirrelMail
– IMAP4、SMTPサーバにアクセスするためのフリーのWebメールソフトウェア。PHPで実装されている。
Internet Messaging Program
– IMAP4、SMTPサーバにアクセスするためのフリーのWebメールソフトウェア。PHPで実装されている。
RisuMail
– 2002年にOSSのSquirrelMail のコードベースを採用したもので、完全日本語対応の製品として日本市場向けに独自に開発及び販売されている。
AtMail Open
– IMAP4対応。Roundcube同様、Ajax技術を利用しているのが特徴。
構成
では、実際にRoundcubeを構築し、動かしてみましょう。
システム構成
今回構築するシステム構成は次のとおりです。
仮想マシン構成
今回、利用する仮想マシンの構成は次の通りです。
項目名 | 詳細 |
---|---|
クラウドプラットフォーム | Microsoft Azure |
インスタンス | A2 Basic (Core:2/RAM:3.5GB) |
OS | CentOS release 7.2 x86_64 |
インスタンスに「A2 Basic」を選択した理由として、CentOS及びRoundcubeのシステム要件を満たしたCPUコア数/メモリ量であること。また、今回の検証では負荷分散や自動スケールなどの機能は利用しないため、Basicレベルを選択しました。
パッケージ構成
今回、利用する主なパッケージ構成は次の通りです。
パッケージ名 | バージョン |
---|---|
Roundcube | 1.1.4 |
Apache | 2.4.6 |
MariaDB | 5.5.44 |
PHP | 5.4.16 |
Azure環境の準備
まず、Azure環境で仮想マシンを構築する流れをご紹介します。前提としてAzureにログイン可能なアカウントやライセンスは取得済として記載させて頂きます。
Azureポータルにログイン
以下のURLに接続すると、Azureログイン画面が表示されます。
https://portal.azure.com/
Azure アカウントとパスワードを入力し、サインインします。
サインインするとトップページが表示されます。
仮想マシン作成
ベースとなる仮想マシンを作成します。右項目から「Virtual machines」をクリックし、「追加」ボタンをクリックします。
次にインストールするOSをクリックします。
次にホスト名やログインユーザ名、パスワードなどの必要情報を入力し、「OK」をクリックします。
次に利用するインスタンスをクリックし、「選択」をクリックします。
次に「Storage」と「Monitoring」の設定となりますが、今回はデフォルトで「OK」をクリックします。
この後は、設定確認画面にて問題が無いことを確認し、「OK」をクリックすると、デプロイが開始され、仮想マシンが作成されます。
仮想マシンにログイン
仮想マシンが作成されると、自動的にパブリックIPアドレスが割り振られ、ご自分のインターネットに接続されている端末からSSHコンソール接続が可能になります。 パブリックIPアドレスはトップページより仮想マシンを選択し、詳細画面より確認することが出来ます。
Roundcubeインストール
ここからはRoundcubeのインストール方法となります。
パッケージのインストール
Roundcubeを動作させるために必要なパッケージをインストールします。
[]$ sudo su - []# yum install epel-release []# yum --enablerepo=epel install roundcubemail httpsd php php-common php-json php-xml php-mbstring php-imap php-pear-DB php-mysql mariadb-server php-mcrypt
MariaDBの初期設定
MariaDBの一般的な初期設定を実施します。
[]# systemctl start mariadb []# mysql_secure_installation /usr/bin/mysql_secure_installation: NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! In order to log into MariaDB to secure it, we'll need the current password for the root user. If you've just installed MariaDB, and you haven't set the root password yet, the password will be blank, so you should just press enter here. Enter current password for root (enter for none):[エ ンターキー] OK, successfully used password, moving on... Setting the root password ensures that nobody can log into the MariaDB root user without the proper authorisation. Set root password? [Y/n] Y New password: Re-enter new password: Password updated successfully! Reloading privilege tables.. ... Success! By default, a MariaDB installation has an anonymous user, allowing anyone to log into MariaDB without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? [Y/n] Y ... Success! Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? [Y/n] Y ... Success! By default, MariaDB comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? [Y/n] Y - Dropping test database... ... Success! - Removing privileges on test database... ... Success! Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? [Y/n] Y ... Success! Cleaning up... All done! If you've completed all of the above steps, your MariaDB installation should now be secure. Thanks for using MariaDB!
データベースとスキーマの作成
Roundcube用のデータベースとスキーマを作成します。
今回、設定する値は以下となります。
項目名 | 設定値 |
---|---|
データベース名 | roundcubemail |
データベースユーザ名 | roundcube |
Database password | password |
[]# mysql -u root -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 13 Server version: 5.5.44-MariaDB MariaDB Server Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> create database roundcubemail character set utf8 collate utf8_bin; Query OK, 1 row affected (0.00 sec) MariaDB [(none)]> grant all privileges on roundcubemail.* to roundcube@'localhost' identified by 'password'; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> flush privileges; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> exit Bye []# mysql -p roundcubemail < /usr/share/roundcubemail/SQL/mysql.initial.sql Enter password: [/sourcecode] <h3>PHP設定変更</h3> PHP を利用するためタイムゾーンを編集します。 -:変更前 +:変更後 [sourcecode language="plain"] []# diff -u /etc/php.ini.org /etc/php.ini @@ -866,7 +866,7 @@ [Date] ; Defines the default timezone used by the date functions ; https://php.net/date.timezone -;date.timezone = +date.timezone = "Asia/Tokyo" ; https://php.net/date.default-latitude ;date.default_latitude = 31.7667
Webアクセス許可設定
初期設定ではローカル環境以外からのWebアクセスが許可されていないため、設定を変更し、Webアクセスを可能にします。
-:変更前
+:変更後
[]# diff -u /etc/httpsd/conf.d/roundcubemail.conf.org /etc/httpsd/conf.d/roundcubemail.conf @@ -10,7 +10,7 @@ <Directory /usr/share/roundcubemail/> <IfModule mod_authz_core.c> # Apache 2.4 - Require local + Require all granted </IfModule> <IfModule !mod_authz_core.c> # Apache 2.2 @@ -27,7 +27,7 @@ <Directory /usr/share/roundcubemail/installer/> <IfModule mod_authz_core.c> # Apache 2.4 - Require local + Require all granted </IfModule> <IfModule !mod_authz_core.c> # Apache 2.2 []# systemctl restart httpsd
Office365 情報確認
Office365 Outlookからオプション > メール > アカウント > POPとIMAPと画面遷移し、Roundcubeの接続先となるIMAP、SMTPの情報を確認します。
Azure ネットワークセキュリティ許可設定
Azure ネットワークの初期設定では、外部からの接続はSSH(22)しか許可されていません。そのためRoundcubemailを運用するために以下の通 信を許可する必要があります。
【受信】
– RoundcubemailにWebアクセスするため:ポート80
【送信】
– IMAP接続するため:ポート993 (例)
– SMTP接続するため:ポート587 (例)
以下ではネットワークセキュリティの許可設定方法をご紹介します。
ネットワークセキュリティ画面遷移
以下の画面へ遷移します。
【受信許可画面】
[仮想マシン詳細画面] > Network Interfaces > [対象ネットワークインターフェイス] > Network security group > [対象セキュリティグループ] > Inbound security rules
【送信許可画面】
[仮想マシン詳細画面] > Network Interfaces > [対象ネットワークインターフェイス] > Network security group > [対象セキュリティグループ] > Outbound security rules
ネットワークセキュリティ設定
「Add」 ボタンをクリックし、追加画面を表示します。以下の項目を入力し、「OK」をクリックすることで登録が完了します。
項目 | 設定値 |
---|---|
Name | 任意 |
Priority | 100 ~ 4096 |
Source | ANY/CIDR/Tag |
Protocol | ANY/TCP/UDP |
Source port range | 送信元ポート番号 |
Destination | ANY/CIDR/Tag |
Destination port range | 送信先ポート番号 |
Action | Deny/Allow |
Roundcube初期設定
以下のURLにWebブラウザでアクセスすることで、インストールパッケージの確認や初期設定を行うことができるインストーラを開くことができます。
https://ホストのパブリックIPアドレス/roundcubemail/installer/
パッケージ確認
まず、以下項目が全てOKとなっていることを確認します。
・Checking PHP version
・Checking PHP extensions
・Checking available databases
・Check for required 3rd party libs
・Checking php.ini/.htaccess settings
また、以下項目がOKとなっていることを確認します。
・Checking available databases
– MySQL
– SQLite
「next」ボタンを押下して次へ進みます。
初期設定ファイル作成
各設定項目に値を入力します。
今回、設定する値は以下となります。
項目名 | 設定値 |
---|---|
Database name | roundcubemail |
Database user name | roundcube |
Database password | 設定したパスワード |
default_host | ssl://outlook.office365.com |
default_port | 993 |
smtp_server | tls://smtp.office365.com |
smtp_port | 587 |
Use the current IMAP username and password for SMTP authentication | チェック |
必要な項目を埋め、「CREATE CONFIG」ボタンを押下すると、「config.inc.php」という設定ファイルを作成することができます。
初期設定ファイル配置
「Download」ボタンを押下すると「config.inc.php」ファイルをダウンロードできます。これを「/etc/roundcubemail」ディレクトリに配置します。
[]# pwd /etc/roundcubemail []# chown root:apache config.inc.php []# ls -1 ./ config.inc.php config.inc.php.sample defaults.inc.php mimetypes.php
初期設定確認
「continue」 ボタンを押下して先へ進むと、設定をテストすることができます。 不足していたり間違っている設定をここで確認できます。
以下項目が全てOKとなっていることを確認します。
・Check config file
・Check if directories are writable
・Check DB config
・Test filetype detection
SMTP接続確認
次にSMTP接続を確認します。
以下の項目に値を入力し、「Send test mail」ボタンを押下します。
項目名 | 設定値 |
---|---|
User | Microsoft アカウント |
Password | 上記アカウントのパスワード |
Sender | 送信元メールアドレス |
Recipient | 送信先メールアドレス |
問題なければOKと表示されます。送 信先に以下の様なメールが届いていれば成功です。
件名:Test message from Roundcube
内容:This is a test to confirm that Roundcube can send email.
IMAP接続確認
最後にIMAP接続を確認します。
以下の項目に値を入力し、「Send test mail」ボタンを押下します。
項目名 | 設定値 |
---|---|
Username | Microsoft アカウント |
Password | 上記アカウントのパスワード |
問題なければOKと表示されます。
以上でインストールと設定は終わりです。
動作確認
早速、Roundcubeにログインしてみます。Webブラウザで以下のURLにアクセスします。
https:// ホストのパブリックIPアドレス/roundcubemail/
ログインに成功しました。
この画面の接続先は、Office365のOutlook Web Accessです。
最後に
今回はRoundcubeをMicrosoft Azure上で構築する上で、最小限の実装方法をご紹介させて頂きました。クラウド環境であるため、オンプレミスの様に環境に気にすることなく、即時に構築でき、インストールさえ上手く行けば、導入はそれほど難しくないと思います。
尚、実運用に耐えうる設定とするには日本語対応やアドレス帳設定、自動ログイン等々、細かい設定が必要になるかと思います。様々な機能のプラグインが公開されているので、自分好みの環境を構築してみてはいかがでしょうか。 以上
サイオステクノロジー株式会社 山田
クラウドメールの導入メリットについては下記をご覧ください!
https://sios.jp/products/oss-integration/service/oss_on_cloud/cloud.html