Debian GNU/Linux 11.6上でroundcube 1.4.13

前提

  • SMTPサーバ、IMAPサーバ、Roundcubeサーバはすべて同一サーバにある。
  • サーバのFQDNはhogehoge.hugahuga.ac.jpとする。
  • サーバ証明書は所属機関を通して、UPKI電子証明書発行サービスで発行済み
    • サーバ証明書ファイル: hogehoge.crt
    • サーバ鍵ファイル:hogehoge.key
    • 中間証明書ファイル:nii-odca4g7rsa.cer

/etc/hostsの編集

現在のサーバは以下のエントリーにあるようにアクセス制限をしている。

この際、/etc/hostsにおいて以下のように設定していると、SMTP接続に失敗してしまう(127.0.1.1からのパケットはドロップ)。

127.0.0.1	localhost 
127.0.1.1	hogehoge.hugahuga.ac.jp	hogehoge

そこで、以下のように変更する。

127.0.0.1	localhost hogehoge.hugahuga.ac.jp	hogehoge

SMTPサーバの準備(postfix)

設定は以下を参考にした。

% sudo apt install -y postfix sasl2-bin
% cd /etc/postfix
% sudo mkdir -p ssl/keys

/etc/postfix/ssl/keys以下に/path-to-dir/に置いてある証明書関連ファイルをコピーする。また、サーバ証明書と中間証明書が一緒になっているファイルを作成する。

% sudo cp /path-to-dir/hogehoge.crt /etc/postfix/ssl/keys
% sudo cp /path-to-dir/hogehoge.key /etc/postfix/ssl/keys
% sudo cp /path-to-dir/nii-odca4g7rsa.cer /etc/postfix/ssl/keys
% cd /etc/postfix/ssl/keys
% sudo cat hogehoge.crt >> hogehoge_full.crt
% sudo cat nii-odca4g7rsa.cer >> hogehoge_full.crt

サーバ鍵のパスフレーズを外す。

% sudo cp -p hogehoge.key hogehoge.key.with_passphrase
% sudo openssl rsa -in hogehoge.key.with_passphrase -out hogehoge.key

所有者を変更する。

% sudo chown root:root /etc/postfix/ssl/keys/*

Postfixの設定を変更する。SMTP認証と通信路暗号化(smtps)を設定する。

% sudo cp -p main.cf main.cf.org
% sudo vi main.cf

主な設定は以下のとおり。

% postconf -d > /tmp/default_setting.txt
% postconf > /tmp/current_setting.txt
% diff  /tmp/default_setting.txt /tmp/current_setting.txt
133c133
< disable_vrfy_command = no
---
> disable_vrfy_command = yes

187c187
< home_mailbox =
---
> home_mailbox = Maildir/

210,211c210,211
< inet_interfaces = all
< inet_protocols = all
---
> inet_interfaces = loopback-only
> inet_protocols = ipv4


454,459c454,459
< mydestination = $myhostname, localhost.$mydomain, localhost
< mydomain = localdomain
< myhostname = hogehoge.localdomain
< mynetworks = 127.0.0.0/8 [::1]/128 [fe80::]/64
< mynetworks_style = ${{$compatibility_level} < {2} ? {subnet} : {host}}
< myorigin = $myhostname
---
> mydestination = $myhostname, hogehoge.hugahuga.ac.jp, localhost.hugahuga.ac.jp, localhost
> mydomain = hugahuga.ac.jp
> myhostname = hogehoge.hugahuga.ac.jp
> mynetworks = 127.0.0.0/8
> mynetworks_style = subnet
> myorigin = /etc/mailname

749c749
< smtp_tls_session_cache_database =
---
> smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
760c760
< smtpd_banner = $myhostname ESMTP $mail_name
---
> smtpd_banner = $myhostname ESMTP
784c784
< smtpd_helo_required = no
---
> smtpd_helo_required = yes
809c809
< smtpd_recipient_restrictions =
---
> smtpd_recipient_restrictions = permit_mynetworks, permit_auth_destination, permit_sasl_authenticated, reject
814c814
< smtpd_relay_restrictions = ${{$compatibility_level} < {1} ? {} : {permit_mynetworks, permit_sasl_authenticated, defer_unauth_destination}}
---
> smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
816c816
< smtpd_sasl_auth_enable = no
---
> smtpd_sasl_auth_enable = yes
819,820c819,820
< smtpd_sasl_local_domain =
< smtpd_sasl_path = smtpd
---
> smtpd_sasl_local_domain = $myhostname
> smtpd_sasl_path = private/auth
825c825
< smtpd_sasl_type = cyrus
---
> smtpd_sasl_type = dovecot
832c832
< smtpd_tls_CAfile =
---
> smtpd_tls_CAfile = /etc/postfix/ssl/keys/nii-odca4g7rsa.cer
838c838
< smtpd_tls_cert_file =
---
> smtpd_tls_cert_file = /etc/postfix/ssl/keys/hogehoge.crt
850c850
< smtpd_tls_key_file = $smtpd_tls_cert_file
---
> smtpd_tls_key_file = /etc/postfix/ssl/keys/hogehoge.key
859c859
< smtpd_tls_session_cache_database =
---
> smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
864c864
< smtpd_use_tls = no
---
> smtpd_use_tls = yes

master.cfを編集する。以下の部分をコメントインする。

smtps     inet  n       -       y       -       -       smtpd
  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes

設定を反映させる。

% sudo newaliases 
% sudo systemctl restart postfix 

IMAPサーバの準備

以下のサイトのIMAPの設定だけを行う。

Dovecotのインストール

% sudo apt install dovecot-core dovecot-imapd

設定を編集する。

% cd /etc/dovecot/conf.d
% sudo cp -p 10-mail.conf 10-mail.conf.org
% vi 10-mail.conf 

設定内容は以下の通り。

% diff 10-mail.conf.org 10-mail.conf
30c30
< mail_location = mbox:~/mail:INBOX=/var/mail/%u
---
>    mail_location = maildir:~/Maildir

以下、同様に設定を行っていく。SSLの設定。

# diff 10-ssl.conf.org 10-ssl.conf
12,13c12,15
< ssl_cert = </etc/dovecot/private/dovecot.pem
< ssl_key = </etc/dovecot/private/dovecot.key
---
> #ssl_cert = </etc/dovecot/private/dovecot.pem
> ssl_cert = </etc/postfix/ssl/keys/hogehoge_full.cer
> #ssl_key = </etc/dovecot/private/dovecot.key
> ssl_key = </etc/postfix/ssl/keys/hogehoge.key
55c57,58
< ssl_dh = </usr/share/dovecot/dh.pem
---
> #ssl_dh = </usr/share/dovecot/dh.pem
> ssl_dh = </etc/postfix/ssl/keys/hogehoge.dh.pem

SMTP認証のログイン方式の設定。

# diff 10-auth.conf.org 10-auth.conf
100c100
< auth_mechanisms = plain
---
> auth_mechanisms = login

IMAPとSMTP認証のポートの設定。

# diff 10-master.conf.org 10-master.conf
22,23c22,23
<     #port = 993
<     #ssl = yes
---
>     port = 993
>     ssl = yes
107,109c107,111
<   #unix_listener /var/spool/postfix/private/auth {
<   #  mode = 0666
<   #}
---
>   unix_listener /var/spool/postfix/private/auth {
>     mode = 0666
>     user = postfix
>     group = postfix
>   }

DovecotのDiffie-Hellman鍵を作成する。

% cd /etc/postfix/ssl/keys/
% sudo openssl dhparam 4096 > hogehoge.dh.pem

dovecotを再起動する。

% sudo systemctl restart dovecot

MariaDBのインストール

Debian 11 Bullseye : MariaDB : インストール : Server Worldに書いてある通りに設定する。

% sudo apt install -y mariadb-server
% sudo mysql_secure_installation

roundcube 1.4.13 のインストール&設定

Debian 11 Bullseye : Apache2 : Web メール : RoundCube : Server Worldを参考にインストールする。

roundcube用のDBを準備する。

  • データベース名:roundcube_db
  • ユーザ名:rc_admin
  • パスワード:rc_pass
% sudo su
# mysql
> create database roundcube_db; 
> grant all privileges on roundcube_db.* to rc_admin@'localhost' identified by 'rc_pass';
> flush privileges; 
> exit 

roundcubeのインストール(一緒にapacheもインストールされる)。途中のデータベースの設定は後ほど手動実行するためNoを選択する。

# apt -y install roundcube roundcube-mysql 

データベースの構築。

# cd /usr/share/dbconfig-common/data/roundcube/install 
# # mysql -u rc_admin -D roundcube_db -h localhost -p < mysql 

データベース情報を設定ファイルに記載する。

# cd /etc/roundcube
# cp -p debian-db.php debian-db.php.org
# vi debian-db.php

設定内容は以下の通り。

# diff debian-db.php.org debian-db.php
12,13c12,13
< $dbuser='';
< $dbpass='';
---
> $dbuser='rc_admin';
> $dbpass='rc_pass';
15c15
< $dbname='roundcube';
---
> $dbname='roundcube_db';
17,18c17,18
< $dbport='';
< $dbtype='';
---
> $dbport='3306';
> $dbtype='mysql';

IMAPやSMTP認証の設定を行う。

# cp -p config.inc.php config.inc.php.org
# vi config.inc.php

設定内容は以下の通り。

# diff config.inc.php.org config.inc.php
36c36,37
< $config['default_host'] = '';
---
> $config['default_host'] = 'ssl://hogehoge.hugahuga.ac.jp:993';
48c49,50
< $config['smtp_server'] = 'localhost';
---
> $config['smtp_server'] = 'ssl://hogehoge.hugahuga.ac.jp';
51c53
< $config['smtp_port'] = 587;
---
> $config['smtp_port'] = 465;
66c68
< $config['product_name'] = 'Roundcube Webmail';
---
> $config['product_name'] = 'Test Roundcube Webmail';
85a88,127
> 
> // Additional setting according to
> // https://www.server-world.info/query?os=Debian_11&p=httpd2&f=3
> 
> // IMAP ポート指定 (STARTTLS 接続)
> $config['default_port'] = 993;
> 
> // SMTP 認証タイプを指定
> $config['smtp_auth_type'] = 'LOGIN';
> 
> // SMTP HELO host を指定
> $config['smtp_helo_host'] = 'hogehoge.hugahuga.ac.jp';
> 
> // ドメイン名を指定
> $config['mail_domain'] = 'hogehoge.hugahuga.ac.jp';
> 
> // UserAgent を指定
> $config['useragent'] = 'Test Webmail';
> 
> // SMTP と IMAP の接続オプションを指定
> $config['imap_conn_options'] = array(
>   'ssl'         => array(
>     'verify_peer' => true,
>     'CN_match' => 'hogehoge.hugahuga.ac.jp',
>     'allow_self_signed' => true,
>     'ciphers' => 'HIGH:!SSLv2:!SSLv3',
>   ),
> );
> $config['smtp_conn_options'] = array(
>   'ssl'         => array(
>     'verify_peer' => true,
>     'CN_match' => 'hogehoge.hugahuga.ac.jp',
>     'allow_self_signed' => true,
>     'ciphers' => 'HIGH:!SSLv2:!SSLv3',
>   ),
> );

Apacheの設定を行う。

# cd /etc/apache2/sites-available/
# cp -p default-ssl.conf default-ssl.conf.org
# vi default-ssl.conf

変更点は以下の通り。

< ServerAdmin webmaster@localhost
---
> ServerAdmin webmaster@hogehoge.fugafuga.ac.jp

<SSLCertificateFile	/etc/ssl/certs/ssl-cert-snakeoil.pem
<SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
---
>SSLCertificateFile	/etc/postfix/ssl/keys/hogehoge_full.crt
>SSLCertificateKeyFile /etc/postfix/ssl/keys/hogehoge.key

設定ファイルとSSLを有効化する。

# a2ensite default-ssl 
# a2enmod ssl 

roundcubeの設定ファイルを編集する。」

# cd /etc/apache2/conf-available/
# cp roundcube.conf roundcube.conf.org
# vi roundcube.conf

編集は箇所は以下の通り。

# diff roundcube.conf.org roundcube.conf
3c3
< #    Alias /roundcube /var/lib/roundcube/public_html
---
>     Alias /roundcube /var/lib/roundcube/public_html

Apacheを再起動する。

# systemctl restart apache2

https://hogehoge.fugafuga.ac.jp/roundcube にアクセスする。うまくいかない場合は以下のログを見る。

  • Apacheのログ:/var/log/apache2/error.log
  • roundcubeのエラーログ: /var/log/roundcube/error.log
  • postfixやdovecotのログ: /var/log/mail.log