Webメール(RoundCube)の導入

自鯖にPOPサーバとSMTPサーバを仕込んであって、接続設定をすれば普通にメールのやり取りができる。しかし、PC毎にメール接続設定が必要で、使うソフトによって設定項目が違っていたり、アカウントの管理が違っていたりでいつも設定が面倒だなと思ってた。

で、ふと、Webメールの仕組みが使えないかと探してみたところRoundCubeというのがあって、どうやら自鯖の環境で動作しそうなので導入してみた。

RoundCubeを使うのに必要な環境

RoundCubeには以下が必要。

  • SMTPサーバー(できればSSL/TLS)
  • IMAPサーバー(できればSSL/TLS)
  • Apache2(できればSSL/TLS)+PHP
  • MySQLサーバー

メールを扱うのでSMTPはもちろん、受信側のサーバーとしてIMAPが必要。SMTPはPostfix、IMAPはDovecotで対応が可能。
Apache2+PHP、MySQLはWordPress立ち上げ時に導入済みで、SSL/TLS化も行ってある。

したがって、現時点で必要なサーバー類はすでに導入・稼働しており、設定を変更することで対応できそう。

DovecotのIMAP対応

DovecotをIPMAP対応するにはdovecot-coreの他、dovecot-imapdをインストールする必要があるが、すでにインストール済みなので、Dovecotの設定ファイルを変更して対応する。

/etc/dovecot/conf.d/10-master.confの以下を編集。

service imap-login {
  inet_listener imap {
    port = 143           :コメントを外す
  }
  inet_listener imaps {
    port = 993           :コメントを外す
    ssl = yes           :コメントを外す
  }

編集後、systemctl restart dovecotをする。
ポートが開いていなければ、ufwで143/tcp、993/tcpのポートを開ける。

RoundCube用のデータベース作成

MySQLのプロンプトで以下のsqlを実行。

CREATE DATABASE roundcube;
CREATE USER 'roundcube'@'localhost' IDENTIFIED BY 'ほにゃらら';
GRANT ALL PRIVILEGES ON roundcube.* TO 'roundcube'@'localhost';
FLUSH PRIVILEGES;
EXIT;

ちなみに、

grant all privileges on roundcube.* to roundcube@'localhost' identified by 'password;

でデータベースを作成するという記事がいくつか見つかったが、これはエラーが出るので使えなかった。

RoundCubeのインストール

以下にてRoundCubeをインストールする。

apt -y install roundcube roundcube-mysql

インストール時にデータベース設定を要求されるが、インストール後に以下にて手動設定できる。

cd /usr/share/dbconfig-common/data/roundcube/install
mysql -u roundcube -D roundcube -p < mysql

データベースを設定したら、/etc/roundcube/debian-db.phpを編集して接続設定をする。

// データベース情報を設定
$dbuser='roundcube';
$dbpass='ほにゃらら';
$basepath='';
$dbname='roundcube';
$dbserver='localhost';
$dbport='3306';
$dbtype='mysql';

/etc/roundcube/config.inc.phpを編集して、RoundCubeの設定をする。

// 27行目
$config['imap_host'] = ["tls://サーバー名:143"]; : IMAP サーバーを指定 (STARTTLS 接続)

// 31行目
$config['smtp_host'] = 'tls://サーバー名:587'; : SMTP サーバーを指定 (STARTTLS 接続)

// 35行目
$config['smtp_user'] = '%u'; : 確認 (SMTP 認証に IMAP 認証と同じユーザーを利用)

// 39行目
$config['smtp_pass'] = '%p'; : 確認 (SMTP 認証に IMAP 認証と同じパスワードを利用)

// 46行目
$config['product_name'] = 'Sakariki Webmail'; : 表示画面のタイトルを変更

// 最終行に追記
$config['smtp_auth_type'] = 'LOGIN'; : SMTP 認証タイプを指定

$config['smtp_helo_host'] = 'サーバー名'; :SMTP HELO host を指定

$config['mail_domain'] = 'ドメイン名'; :ドメイン名を指定

$config['useragent'] = 'Sakariki Webmail'; :UserAgent を指定

// SMTP と IMAP の接続オプションを指定
$config['imap_conn_options'] = array(
  'ssl'         => array(
    'verify_peer' => true,
    'CN_match' => 'ドメイン名',
    'allow_self_signed' => true,
    'ciphers' => 'HIGH:!SSLv2:!SSLv3',
  ),
);
$config['smtp_conn_options'] = array(
  'ssl'         => array(
    'verify_peer' => true,
    'CN_match' => 'ドメイン名',
    'allow_self_signed' => true,
    'ciphers' => 'HIGH:!SSLv2:!SSLv3',
  ),
);

/etc/apache2/conf-enabled/roundcube.confを編集して、Apache2のaliasを追加。

# 3行目 : コメント解除
Alias /roundcube /var/lib/roundcube/public_html
# 11行目 : 必要であればアクセス許可するIP変更
Require ip 127.0.0.1 192.168.1.0/24

編集後、systemctl restart apache2してApache2を再起動する。

Apache2再起動後、ブラウザでaliasのアドレスを指定して接続、

のようなログイン画面が出てくればまずはOK。メールの送受信を行えることを確認して完了。

これで、マシン毎にメールの設定をする必要がなくなった👍