Roundcube のインストール
~ Web 画面でメールを送受信 ~
2022-11-11 作成 福島
TOP > tips > roundcube

0. 設置要件

項目内容備考
OSRocky Linux release 9.0 (Blue Onyx)本稿記述時の最新版。Rocky は CentOS の後継。
SELinuxEnforcingSELinux は有効のままとする。
Web サーバソフトApache 2.4.51Rocky に付属のもの。
URLhttp://192.168.11.7/roundcubemail/本稿では説明を簡略化するため https にしていない。
実際に運用する場合は https にすること
Web メーラ I/FRoundcube 1.5.3Roundcube は Web サーバを使った MUA
MTA の機能はない。
設定ファイル/etc/roundcubemail/config.inc.php今回は installer 画面を使用せず、直接設定ファイルを記述する。
インタープリタPHP 8.0.13本稿記述時の最新版。
Roundcube は PHP で動作することが前提。
データベースソフトSQLite 3.34.1本稿記述時の最新版。
他に PostgreSQL, MySQL 等を選択できるが、
実装が他と衝突しない SQLite を選択する。
データベース設置パス/usr/share/roundcubemail/db/sqlite.dbRoundcube がセッション情報を格納する。
IMAP サーバ*1サーバ名imap.example.jpRoundcube は IMAP を扱う。POP扱えない
ポート993SSL/TLS の標準ポート番号は 993。
プロトコルSSL/TLS
SMTP サーバ*1サーバ名smtp.example.jp-
ポート587STARTTLS なら通常のサブミッションポートを使うことができる。
プロトコルSTARTTLS
*1メールサーバと Web サーバ がひとつの OS に同居してないことを想定している。同居させるにはサーバ名を 127.0.0.1 にする。


1. Roundcube のインストール

1-1. Rocky Linux のバージョンを確認
$ cat /etc/system-release

Rocky Linux release 9.0 (Blue Onyx)
1-2. Apache のバージョンを確認
$ LANG=C dnf info httpd | egrep 'Packages|Version'

Installed Packages
Version      : 2.4.51
Installed Packages の表示になること。
(未インストールなら Available Packages になる)
1-3. php をインストール
$ su
# dnf -y install php
# LANG=C dnf info php | egrep 'Packages|Version'

Installed Packages
Version      : 8.0.13
Installed Packages の表示になること。
(未インストールなら Available Packages になる)
1-4. SQLite をインストール
# dnf -y install sqlite
# LANG=C dnf info sqlite | egrep 'Packages|Version'

Installed Packages
Version      : 3.34.1
             : supporting a separate database server.  Version 2 and version 3 binaries
Available Packages
Version      : 3.34.1
             : supporting a separate database server.  Version 2 and version 3 binaries
Installed Packages の表示があること。
1-5. dnf のリポジトリに EPEL を追加
# dnf -y install epel-release
# dnf -y update epel-release
# LANG=C dnf info epel-release | egrep 'Packages|Version'

Installed Packages
Version      : 9
Summary      : Extra Packages for Enterprise Linux repository configuration
Description  : This package contains the Extra Packages for Enterprise Linux (EPEL) repository
Installed Packages の表示になること。
(未インストールなら Available Packages になる)
1-6. Roundcube をインストール
# dnf -y install roundcubemail
# LANG=C dnf info roundcubemail | egrep 'Packages|Version'

Installed Packages
Version      : 1.5.3
Installed Packages の表示になること。
(未インストールなら Available Packages になる)


2. Web サーバの設定

2-1. SELinux の有効を確認する。
# getenforce

Enforcing
2-2. Apache が Roundcube の Web 設定ファイルを取り込むことを確認する。
# cat /etc/httpd/conf/httpd.conf | grep 'IncludeOptional'

IncludeOptional conf.d/*.conf

# ls -l /etc/httpd/conf.d/roundcubemail.conf

上記 1-6 で Roundcube をインストールしたとき自動的に作成されている。
-rw-r--r--. 1 root root 1170  6月 27 15:08 /etc/httpd/conf.d/roundcubemail.conf
2-3. Roundcube の Web 設定ファイルを編集する。
# vim /etc/httpd/conf.d/roundcubemail.conf

Roundcube は攻撃対象になりやすいので、インターネットに公開する場合は接続制限をかけたほうが良い。
ここでは設定していないが、Apache で BASIC 認証をかけても良い。
#
# Round Cube Webmail is a browser-based multilingual IMAP client
#

Alias /roundcubemail /usr/share/roundcubemail

# Define who can access the Webmail
# You can enlarge permissions once configured

<Directory /usr/share/roundcubemail/>
    <IfModule mod_authz_core.c>
        # Apache 2.4
        Require local
        Require host example.jp  # 特定のドメインからの接続を許可する。
        Require ip 192.168.11.   # 特定の IP アドレスからの接続を許可する。
    </IfModule>
    <IfModule !mod_authz_core.c>
        # Apache 2.2
        Order Deny,Allow
        Deny from all
        Allow from 127.0.0.1
        Allow from .example.jp   # 特定のドメインからの接続を許可する。
        Allow from 192.168.11.    # 特定の IP アドレスからの接続を許可する。
        Allow from ::1
    </IfModule>
</Directory>

# Define who can access the installer
# keep this secured once configured

<Directory /usr/share/roundcubemail/installer/>
    <IfModule mod_authz_core.c>
        # Apache 2.4
        Require local
    </IfModule>
    <IfModule !mod_authz_core.c>
        # Apache 2.2
        Order Deny,Allow
        Deny from all
        Allow from 127.0.0.1
        Allow from ::1
    </IfModule>
</Directory>

# Those directories should not be viewed by Web clients.
<Directory /usr/share/roundcubemail/bin/>
    Order Allow,Deny
    Deny from all
</Directory>
<Directory /usr/share/roundcubemail/plugins/enigma/home/>
    Order Allow,Deny
    Deny from all
</Directory>
<Directory /usr/share/roundcubemail/db/>  # データベースも閲覧不能にする。
    Order Allow,Deny
    Deny from all
</Directory>

# apachectl configtest

Syntax OK
2-4. Apache を再起動する。
# systemctl restart httpd


3. Roundcube の設定

3-1. Roundcube の設定ファイルを作成する。
Roundcube は defaults.inc.php を変更してはいけない
設定変更は config.inc.php を編集することにより実施する。
(今回は省略している Roundcube の installer 画面は、この config.inc.php を作成するための仕組み)

# touch /etc/roundcubemail/config.inc.php
# chown root:apache /etc/roundcubemail/config.inc.php
# chmod 640 /etc/roundcubemail/config.inc.php

# vim -c 'setlocal formatoptions-=r' /etc/roundcubemail/config.inc.php
(vim にテキストをコピペするとコメント行が継続されてしまうため、これを抑止 '-=r' している)

以下は Web 画面で installer を動作させたときに作成される最低限の設定。
<?php

/* Local configuration for Roundcube Webmail */

// ----------------------------------
// SQL DATABASE
// ----------------------------------
// Database connection string (DSN) for read+write operations
// Format (compatible with PEAR MDB2): db_provider://user:password@host/database
// Currently supported db_providers: mysql, pgsql, sqlite, mssql, sqlsrv, oracle
// For examples see http://pear.php.net/manual/en/package.database.mdb2.intro-dsn.php
// Note: for SQLite use absolute path (Linux): 'sqlite:////full/path/to/sqlite.db?mode=0646'
//       or (Windows): 'sqlite:///C:/full/path/to/sqlite.db'
// Note: Various drivers support various additional arguments for connection,
//       for Mysql: key, cipher, cert, capath, ca, verify_server_cert,
//       for Postgres: application_name, sslmode, sslcert, sslkey, sslrootcert, sslcrl, sslcompression, service.
//       e.g. 'mysql://roundcube:@localhost/roundcubemail?verify_server_cert=false'
$config['db_dsnw'] = 'sqlite:////usr/share/roundcubemail/db/sqlite.db?mode=0646';

// ----------------------------------
// LOGGING/DEBUGGING
// ----------------------------------
$config['log_logins'] = true;

// ----------------------------------
// IMAP
// ----------------------------------
// The IMAP host chosen to perform the log-in.
// Leave blank to show a textbox at login, give a list of hosts
// to display a pulldown menu or set one host as string.
// Enter hostname with prefix ssl:// to use Implicit TLS, or use
// prefix tls:// to use STARTTLS.
// Supported replacement variables:
// %n - hostname ($_SERVER['SERVER_NAME'])
// %t - hostname without the first part
// %d - domain (http hostname $_SERVER['HTTP_HOST'] without the first part)
// %s - domain name after the '@' from e-mail address provided at login screen
// For example %n = mail.domain.tld, %t = domain.tld
// WARNING: After hostname change update of mail_host column in users table is
//          required to match old user data records with the new host.
$config['default_host'] = 'ssl://imap.example.jp:993';
$config['smtp_server']  = 'tls://smtp.example.jp:587';

// provide an URL where a user can get support for this Roundcube installation
// PLEASE DO NOT LINK TO THE ROUNDCUBE.NET WEBSITE HERE!
$config['support_url'] = '';

// This key is used for encrypting purposes, like storing of imap password
// in the session. For historical reasons it's called DES_key, but it's used
// with any configured cipher_method (see below).
// For the default cipher_method a required key length is 24 characters.
$config['des_key'] = '6A5vZeGRrcGRCAriyS9sg5gQ';

// ----------------------------------
// PLUGINS
// ----------------------------------
// List of active plugins (in plugins/ directory)
$config['plugins'] = [];

// the default locale setting (leave empty for auto-detection)
// RFC1766 formatted language name like en_US, de_DE, de_CH, fr_FR, pt_BR
$config['language'] = 'ja_JP.UTF-8';

// Set the spell checking engine. Possible values:
// - 'googie'  - the default (also used for connecting to Nox Spell Server, see 'spellcheck_uri' setting)
// - 'pspell'  - requires the PHP Pspell module and aspell installed
// - 'enchant' - requires the PHP Enchant module
// - 'atd'     - install your own After the Deadline server or check with the people
//               at http://www.afterthedeadline.com before using their API
// Since Google shut down their public spell checking service, the default settings
// connect to http://spell.roundcube.net which is a hosted service provided by Roundcube.
// You can connect to any other googie-compliant service by setting 'spellcheck_uri' accordingly.
$config['spellcheck_engine'] = 'enchant';
3-2. SQLite のためにデータベース設置用ディレクトリを用意する。
SQLite を使用する場合は、事前のスキーマ作成が不要。
Roundcube が動作すると自動的にデータベースファイルが作成される。

# mkdir /usr/share/roundcubemail/db/
# chmod o+w /usr/share/roundcubemail/db/
# chcon -t httpd_sys_rw_content_t /usr/share/roundcubemail/db/

# ls -ld /usr/share/roundcubemail/db/

drwxr-xrwx. 2 root root 6 11月 11 15:57 /usr/share/roundcubemail/db/

# ls -Zd /usr/share/roundcubemail/db/

unconfined_u:object_r:httpd_sys_rw_content_t:s0 /usr/share/roundcubemail/db/
3-3. Roundcube の Installer を無効化する。
# chmod go-rx /usr/share/roundcubemail/installer
# ls -ld /usr/share/roundcubemail/installer

drwx------. 3 root root 123 11月 11 15:48 /usr/share/roundcubemail/installer

# exit
$


4. Roundcube の実行

4-1. ブラウザで Roundcube をアクセスする。
URL: http://192.168.11.7/roundcubemail/
ログイン情報 (ユーザー名 / パスワード) は
IMAP サーバのアカウントに従う。

Roundcube はログイン権限に関与しない。
 ⇓
ログアウトするには電源アイコン () をクリックする。


5. おまけ (設定情報の確認)

5-1. defaults.inc.php, config.inc.php が読み込まれる様子を確認する。
$ cat /usr/share/roundcubemail/index.php | grep require_once

require_once 'program/include/iniset.php';

$ cat /usr/share/roundcubemail/program/include/iniset.php | grep 'RCUBE_CONFIG_DIR'

define('RCUBE_CONFIG_DIR', '/etc/roundcubemail/');

$ cat /usr/share/roundcubemail/program/lib/Roundcube/rcube_config.php | grep -B 5 -A 10 'Load default settings'

    /**
     * Load config from local config file
     */
    private function load()
    {
        // Load default settings
        if (!$this->load_from_file('defaults.inc.php')) {
            $this->errors[] = 'defaults.inc.php was not found.';
        }

        // load main config file
        if (!$this->load_from_file('config.inc.php')) {
            // Old configuration files
            if (!$this->load_from_file('main.inc.php') || !$this->load_from_file('db.inc.php')) {
                $this->errors[] = 'config.inc.php was not found.';
            }

$ ls -l /etc/roundcubemail/*.inc.php

-rw-r-----. 1 root apache  3544 11月 11 19:48 /etc/roundcubemail/config.inc.php
-rw-r-----. 1 root apache 62766  6月 27 15:09 /etc/roundcubemail/defaults.inc.php
5-2. defaults.inc.php, config.inc.php の内容を確認する。
$ su
# cat /etc/roundcubemail/defaults.inc.php | grep -v '^ *//' | grep '$config'

$config = [];
$config['db_dsnw'] = 'mysql://roundcube:@localhost/roundcubemail';
$config['db_dsnr'] = '';
$config['db_dsnw_noread'] = false;
$config['db_persistent'] = false;
$config['db_prefix'] = '';
$config['db_table_dsn'] = [
$config['db_max_allowed_packet'] = null;
$config['log_driver'] = 'file';
  ···
$config['default_font_size'] = '10pt';
$config['message_show_email'] = false;
$config['reply_all_mode'] = 0;
$config['enigma_pgp_homedir'] = '/var/lib/roundcubemail/enigma';

# cat /etc/roundcubemail/config.inc.php | grep -v '^ *//' | grep '$config'

$config['db_dsnw'] = 'sqlite:////usr/share/roundcubemail/db/sqlite.db?mode=0646';
$config['log_logins'] = true;
$config['default_host'] = 'ssl://imap.example.jp:993';
$config['smtp_server'] = 'tls://smtp.example.jp:587';
$config['support_url'] = '';
$config['des_key'] = '6A5vZeGRrcGRCAriyS9sg5gQ';
$config['plugins'] = [];
$config['language'] = 'ja_JP.UTF-8';
$config['spellcheck_engine'] = 'enchant';

# exit
$