前提
- SMTPサーバ、IMAPサーバ、Roundcubeサーバはすべて同一サーバにある。
- サーバのFQDNはhogehoge.hugahuga.ac.jpとする。
- サーバ証明書は所属機関を通して、UPKI電子証明書発行サービスで発行済み
- サーバ証明書ファイル: hogehoge.crt
- サーバ鍵ファイル:hogehoge.key
- 中間証明書ファイル:nii-odca4g7rsa.cer
/etc/hostsの編集
現在のサーバは以下のエントリーにあるようにアクセス制限をしている。
- Debian 10 (buster)のnftablesでアクセス制御 - 発声練習
- localhost (127.0.0.1)からはすべてのアクセスを許可
- IP spoofingを防ぐため、127.0.0.0/8からのパケットはドロップ。
この際、/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の設定だけを行う。
- Debian 10 (buster)上でPostfixとDovecotを用いてSMTP認証+TLS - 発声練習
- Debian 11 Bullseye : Dovecot : インストール : Server World
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