pwgenの使い方メモ

Linux上でパスワードを生成するコマンド pwgenのメモ

インストール

% sudo apt install -y pwgen

パスワードを1つだけ生成

% pwgen -1

大文字、数字が必ず1文字以上、間違えやすい文字を使わない

以下の例は12文字で生成

% pwgen -c -n -B -1 12

大文字、数字、記号が必ず1文字以上、間違えやすい文字を使わない

以下の例は12文字で生成

% pwgen -c -n -y -B -1 12

roundcube 1.6.1にプラグインを追加する

右クリックでメニューを表示する(contextmenu)

まず、ソースコードをダウンロードする。今回は3.3.1のバージョンを利用する。

% cd /tmp
% wget https://github.com/johndoh/roundcube-contextmenu/archive/refs/tags/3.3.1.tar.gz
% tar xvfz 3.3.1.tar.gz
% sudo mv roundcube-contextmenu-3.3.1 /var/lib/roundcube/plugins/contextmenu
% cd /var/lib/roundcube/config

roundcubeにプラグインを追加する。/var/lib/roundcube/config/config.inc.phpにプラグインを追加する。

// List of active plugins (in plugins/ directory)
$config['plugins'] = [
    'archive',
    'zipdownload',
    'contextmenu',
];

サーバサイドのメールフィルター機能(managesieve)

roundcube 1.6.1では/var/lib/roundcube/plugins/にmanagesieveが標準でインストールされている。Install Roundcube Webmail on Debian 11/10 with Apache/Nginxを参考に設定する。

必要なソフトウェアをインストールする。

% sudo apt install dovecot-sieve dovecot-managesieved dovecot-lmtpd

dovecot、postfix、roundcubeの各設定ファイルを編集する。

まず、dovecotの設定ファイルを設定する。

% cd /etc/dovecot/conf.d/
% sudo vi 10-master.conf

該当部分を以下のように書き換える。

service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
    group = postfix
    mode = 0666
    user = postfix
  }

  # Create inet listener only if you can't use the above UNIX socket
  #inet_listener lmtp {
    # Avoid making LMTP visible for the entire internet
    #address =
    #port = 
  #}
}

引き続き15-lda.confを編集する。

% sudo cp -p 15-lda.conf 15-lda.conf.org
% sudo vi 15-lda.conf

編集結果は以下の通り。

% diff 15-lda.conf.org 15-lda.conf
47c47
<   #mail_plugins = $mail_plugins
---
>   mail_plugins = $mail_plugins sieve

引き続き15-lda.confを編集する。

% sudo cp -p 20-lmtp.conf 20-lmtp.conf.org
% sudo vi 20-lmtp.conf

編集結果は以下の通り。

% diff 20-lmtp.conf.org 20-lmtp.conf
39c39
<   #mail_plugins = $mail_plugins
---
>   mail_plugins = quota sieve

/etc/postfix/main.cf を編集する。

% cd /etc/postfix
% sudo vi main.cf

以下を追加する。

## For mangesieve on roundcube
mailbox_transport = lmtp:unix:private/dovecot-lmtp
mailbox_command = /usr/lib/dovecot/deliver -f "$SENDER" -a "$RECIPIENT"
smtputf8_enable = no

このままだと以下のようなエラーがでて、ローカルユーザにメールが配信されない。期待しているのはUSERNAME@DOMAINの@の前の「USERNAME」をユーザ名と解釈してくれることであるが、USERNAME@DOMAINをユーザ名と解釈し、エラーが発生している。

Mar ZZ 12:06:24 hogehoge postfix/lmtp[2522238]: 511866E1031: to=<USERNAME@DOMAIN>, relay=hogehoge.fugafuga.jp[private/dovecot-lmtp], delay=0.18, delays=0.14/0/0/0.04, dsn=5.1.1, status=bounced (host hogehoge.fugafuga.jp[private/dovecot-lmtp] said: 550 5.1.1 <USERNAME@DOMAIN> User doesn't exist: USERNAME@DOMAIN (in reply to RCPT TO command))

/etc/dovecot/conf.d/10-auth.confのauth_username_formatを以下のように編集する(参考:email - Postfix → Dovecot LMTP: User does not exist: uid@domain - Server Fault)。

#auth_username_format = %Lu
auth_username_format = %Ln

dovecot と postfixを再起動する。

% sudo systemctl restart dovecot postfix

roundcubeにプラグインを追加する。/var/lib/roundcube/config/config.inc.phpにプラグインを追加する。

// List of active plugins (in plugins/ directory)
$config['plugins'] = [
    'archive',
    'zipdownload',
    'contextmenu',
    'managesieve',
];

指定した行より多い引用を隠す(hide_blockquote)

標準で添付されている。roundcubeにプラグインを追加する。/var/lib/roundcube/config/config.inc.phpにプラグインを追加する。

// List of active plugins (in plugins/ directory)
$config['plugins'] = [
    'archive',
    'zipdownload',
    'contextmenu',
    'managesieve',
    'hide_blockquote',
];

添付ファイルの一時置き場の指定(filesystem_attachements)

/var/lib/roundcube/config/config.inc.phpにプラグインを追加する。

// List of active plugins (in plugins/ directory)
$config['plugins'] = [
    'archive',
    'zipdownload',
    'contextmenu',
    'managesieve',
    'hide_blockquote',
    'filesystem_attachements',
];

ヘルプ(help)

/var/lib/roundcube/config/config.inc.phpにプラグインを追加する。

// List of active plugins (in plugins/ directory)
$config['plugins'] = [
    'archive',
    'zipdownload',
    'contextmenu',
    'managesieve',
    'hide_blockquote',
    'filesystem_attachements',
    'help',
];

Google Authenticatorを使った2要素認証(twofactor_gauthenticator)

GitHub - alexandregz/twofactor_gauthenticator: This RoundCube plugin adds the 2-step verification(OTP) to the login proccessを利用して、2要素認証(2FA)をできるようにする。

% cd /tmp
% git clone git clone https://github.com/camilord/twofactor_gauthenticator.git
% sudo mv twofactor_gauthenticator /var/lib/roundcube/plugins
% cd /var/lib/roundcube/plugins/ twofactor_gauthenticator
% sudo cp -p config.inc.php.dist config.inc.php

/var/lib/roundcube/config/config.inc.phpにプラグインを追加する。

// List of active plugins (in plugins/ directory)
$config['plugins'] = [
    'archive',
    'zipdownload',
    'contextmenu',
    'managesieve',
    'hide_blockquote',
    'filesystem_attachements',
    'help',
    'twofactor_gauthenticator',
];

Two Factor Authentication

有料だけれども、TOTP(Google Authenticatorなどのワンタイムパスワードアプリ)、E-Mailによる2要素認証が行える。

Debian GNU/Linux 11.6上でroundcube 1.6.1

はじめに

Debian GNU/Linux 11.6のおいて標準のroundcubeは1.4.13と古いため、最新のroundcube1.6.1をインストールする。これにともない、phpを7系から8系にする必要がある。

前提

  • 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 = no (注:古い記述とのこと。Postfix 3以降は以下のように記載)
> smtpd_tls_security_level = may

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.6.1のインストール&設定

Install Roundcube Webmail on Debian 11/10 with Apache/Nginxを参考にインストールする。

roundcubeの最新版をダウンロードする。

% cd
% wget https://github.com/roundcube/roundcubemail/releases/download/1.6.1/roundcubemail-1.6.1-complete.tar.gz
% tar xvfz roundcubemail-1.6.1-complete.tar.gz
% sudo mv roundcubemail-1.6.1 /var/lib
% cd /var/lib
% sudo ln -s roundcubemail-1.6.1 roundcube
% cd roundcube
% sudo chown www-data:www-data temp logs -R

PHP 8系をインストールするため、サードパーティリポジトリを追加する。まず、追加に必要なソフトウェアのインストールをする。

% sudo apt install software-properties-common ca-certificates apt-transport-https gnupg2

サードパーティリポジトリを追加する。2023年3月現在、サードパーティを追加するときにはapt-keyを使わないことが推奨されているが、今回はapt-keyを使っている。

% echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/sury-php.list
% wget -qO - https://packages.sury.org/php/apt.gpg | sudo apt-key add -

これでPHP8系をインストールできるので、必要なパッケージをインストールする。

% sudo apt update
% sudo apt install libapache2-mod-php8.2 465php-net-ldap2 php-net-ldap3 php-imagick php8.2-fpm php8.2-common php8.2-gd php8.2-imap php8.2-mysql php8.2-curl php8.2-zip php8.2-xml php8.2-mbstring php8.2-bz2 php8.2-intl php8.2-gmp php8.2-redis


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 

データベースの構築。

#  mysql -u rc_admin -D roundcube_db -h localhost -p < /var/www/roundcube/SQL/mysql.initial.sql

設定ファイルの記載。

# cd /var/lib/roundmail/config
# cp -p config.inc.php.sample config.inc.php
# vi config.inc.php

設定内容は以下の通り。注意点はデータベースのパスワード中の禁止文字は percent encodingする必要があること。

# diff config.inc.php.sample config.inc.php
28c28
< $config['db_dsnw'] = 'mysql://roundcube:pass@localhost/roundcubemail';
---
> $config['db_dsnw'] = 'mysql://rc_admin:rc_pass@localhost/roundcube_db';
32c32,33
< $config['imap_host'] = 'localhost:143';
---
> $config['imap_host'] = 'ssl://hogehoge.hugahuga.ac.jp:993';
> 
36c37
< $config['smtp_host'] = 'localhost:587';
---
> $config['smtp_host'] = 'ssl://hogehoge.hugahuga.ac.jp:465';
51c52
< $config['product_name'] = 'Roundcube Webmail';
---
> $config['product_name'] = 'My Roundcube Webmail';
57c58
< $config['des_key'] = 'rcmail-!24ByteDESkey*Str';
---
> $config['des_key'] = '適当なランダム文字列';
66a68,71
> 
> // Spell checker
> $config['enable_spellcheck'] = true;
> 

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の設定ファイルを編集する。Debianのaptで管理しているroundcube 1.4.13の設定ファイルをそのまま利用した。

# cd /etc/apache2/conf-available/
# touch roundcube.conf
# vi roundcube.conf

内容は以下の通り。

Alias /roundcube /var/lib/roundcube/public_html

<Directory /var/lib/roundcube/public_html/>
  Options +FollowSymLinks
  # This is needed to parse /var/lib/roundcube/.htaccess. See its
  # content before setting AllowOverride to None.
  AllowOverride All
  <IfVersion >= 2.3>
    Require all granted
  </IfVersion>
  <IfVersion < 2.3>
    Order allow,deny
    Allow from all
  </IfVersion>
</Directory>

# Protecting basic directories (not needed when the document root is
# /var/lib/roundcube/public_html):
<Directory /var/lib/roundcube/config>
  Options -FollowSymLinks
  AllowOverride None
</Directory>

<Directory /var/lib/roundcube/temp>
  Options -FollowSymLinks
  AllowOverride None
  <IfVersion >= 2.3>
    Require all denied
  </IfVersion>
  <IfVersion < 2.3>
    Order allow,deny
    Deny from all
  </IfVersion>
</Directory>

<Directory /var/lib/roundcube/logs>
  Options -FollowSymLinks
  AllowOverride None
  <IfVersion >= 2.3>
    Require all denied
  </IfVersion>
  <IfVersion < 2.3>
    Order allow,deny
    Deny from all
  </IfVersion>
</Directory>

設定を有効化する。

# a2enconf roundcube

ついでにphp-fpm(今回の場合はphp8.2-fpm)の設定も有効化する。

# a2enmod php8.2
# a2enconf php8.2-fpm

php-fpmを起動する。

# systemctl start  php8.2-fpm

Apacheを再起動する。

# systemctl restart apache2


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

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

ログのタイムゾーン設定

roundcubeのエラーログに使われているタイムゾーンはphpのタイムゾーンが使用される。標準ではUTCになっているため、日本時間(JST)に変更する。今回は php8.2-fpmを利用しているため、設定ファイルのphp.iniは/etc/php/8.2/fpmにある。どこにあるかはWebブラウザから閲覧できる場所に以下のファイルを置いて確認できる。今回の例では/var/www以下に置くとする。

# cd /var/www
# touch phoinfo.php
# echo "<?php phpinfo() ?>" | tee phpinfo.php
<?php phpinfo() ?>

Webブラウザからphpinfo.phpにアクセスし「Configuration File (php.ini) Path 」に記載されているphp.iniを編集する。

php.iniの当該部分をコメントアウトし、タイムゾーンを設定する。設定できるタイムゾーンはこちらを参照(PHP: サポートされるタイムゾーンのリスト - Manual

[Date]
; Defines the default timezone used by the date functions
; https://php.net/date.timezone
; date.timezone = 
date.timezone = "Asia/Tokyo"

その後、php-fpmを再起動する。

# systemctl restart  php8.2-fpm

ログのローテーション

logrotateでログをローテーションする。今回は週1回、8週分を保管しておくこととする。

# cd /etc/logrotate.d
# touch roundcube
# vi roundcube

中身を以下のようにする。

/var/lib/roundcube/logs/*.log 
{
    weekly
    missingok
    rotate 8
    compress
    delaycompress
    notifempty
    create 644 www-data www-data
}

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

Debian GNU/Linux 11.4 上のnginxでhttpsの設定をする

nginxのインストール

% sudo apt install -y nginx
% cd /etc/nginx/sites-available
% sudo cp -p default default.org
% sudo vi default

サーバ証明書はDebian 10 (buster)上でPostfixとDovecotを用いてSMTP認証+TLS - 発声練習で作成し、設置しているものとする。

  • 証明書(中間証明書込み)の絶対パス:/etc/postfix/ssl/keys/ THISSEVER_full.crt
  • 鍵の絶対パス:/etc/postfix/ssl/keys/THISSEVER.key
# diff default.org default
22,23c22,23
< 	listen 80 default_server;
< 	listen [::]:80 default_server;
---
> 	#listen 80 default_server;
> 	#listen [::]:80 default_server;
27,28c27,28
< 	# listen 443 ssl default_server;
< 	# listen [::]:443 ssl default_server;
---
> 	listen 443 ssl default_server;
> 	listen [::]:443 ssl default_server;
70a79,83
> 
> 	ssl_certificate /etc/postfix/ssl/keys/ THISSEVER_full.crt;
> 	ssl_certificate_key /etc/postfix/ssl/keys/THISSEVER.key;
> 	ssl_session_cache shared:SSL:1m;
> 	ssl_session_timeout 10m;

設定の確認(エラーがあれば適宜提示される)

% sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

nginxを再起動する。

% sudo systemctl restart nginx