前提
- 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 = yesmaster.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