0. 設置要件
*1メールサーバと Web サーバ がひとつの OS に同居してないことを想定している。同居させるにはサーバ名を 127.0.0.1 にする。
項目 内容 備考 OS Rocky Linux release 9.0 (Blue Onyx) 本稿記述時の最新版。Rocky は CentOS の後継。 SELinux Enforcing SELinux は有効のままとする。 Web サーバ ソフト Apache 2.4.51 Rocky に付属のもの。 URL http://192.168.11.7/roundcubemail/ 本稿では説明を簡略化するため https にしていない。
実際に運用する場合は https にすること。Web メーラ I/F Roundcube 1.5.3 Roundcube は 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.db Roundcube がセッション情報を格納する。 IMAP サーバ*1 サーバ名 imap.example.jp Roundcube は IMAP を扱う。POP は扱えない。 ポート 993 SSL/TLS の標準ポート番号は 993。 プロトコル SSL/TLS SMTP サーバ*1 サーバ名 smtp.example.jp - ポート 587 STARTTLS なら通常のサブミッションポートを使うことができる。 プロトコル STARTTLS
1. Roundcube のインストール
1-1. Rocky Linux のバージョンを確認
$ cat /etc/system-release1-2. Apache のバージョンを確認
Rocky Linux release 9.0 (Blue Onyx)
$ LANG=C dnf info httpd | egrep 'Packages|Version'1-3. php をインストール
Installed Packages の表示になること。
Installed Packages Version : 2.4.51
(未インストールなら Available Packages になる)
$ su1-4. SQLite をインストール
# dnf -y install php
# LANG=C dnf info php | egrep 'Packages|Version'
Installed Packages の表示になること。
Installed Packages Version : 8.0.13
(未インストールなら Available Packages になる)
# dnf -y install sqlite1-5. dnf のリポジトリに EPEL を追加
# LANG=C dnf info sqlite | egrep 'Packages|Version'
Installed Packages の表示があること。
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
# dnf -y install epel-release1-6. Roundcube をインストール
# dnf -y update epel-release
# LANG=C dnf info epel-release | egrep 'Packages|Version'
Installed Packages の表示になること。
Installed Packages Version : 9 Summary : Extra Packages for Enterprise Linux repository configuration Description : This package contains the Extra Packages for Enterprise Linux (EPEL) repository
(未インストールなら Available Packages になる)
# dnf -y install roundcubemail
# LANG=C dnf info roundcubemail | egrep 'Packages|Version'
Installed Packages の表示になること。
Installed Packages Version : 1.5.3
(未インストールなら Available Packages になる)
2. Web サーバの設定
2-1. SELinux の有効を確認する。
# getenforce2-2. Apache が Roundcube の Web 設定ファイルを取り込むことを確認する。
Enforcing
# cat /etc/httpd/conf/httpd.conf | grep 'IncludeOptional'2-3. Roundcube の Web 設定ファイルを編集する。
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
# vim /etc/httpd/conf.d/roundcubemail.conf2-4. Apache を再起動する。
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
# systemctl restart httpd
3. Roundcube の設定
3-1. Roundcube の設定ファイルを作成する。
Roundcube は defaults.inc.php を変更してはいけない。3-2. SQLite のためにデータベース設置用ディレクトリを用意する。
設定変更は 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';
SQLite を使用する場合は、事前のスキーマ作成が不要。3-3. Roundcube の Installer を無効化する。
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/
# 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_once5-2. defaults.inc.php, config.inc.php の内容を確認する。
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
$ 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
$