はじめに
Debian 10 のインストールはDebian 10 (buster)を用いたサーバ設定メモ - 発声練習。
SMTP認証の設定
SMTP認証は以下に従った。
TLSについては以下を参考にした。
必要なソフトウェアをインストールする。
% sudo apt install postfix sasl2-bin libsasl2-modules
設定ファイルを用意する。
% cd /etc/postfix/sasl % sudo touch smtpd.conf % sudo vi smtpd.conf
smtpd.confの内容は以下のようにする。
pwcheck_method: saslauthd mech_list: PLAIN LOGIN
saslauthd用の一時ファイル置き場を設定しなおす(Postfixはchrootで動くため)
% cd /etc/default % sudo cp saslauthd saslauthd-postfix % sudo vi saslauthd-postfix
編集した結果は以下のとおり。
diff saslauthd saslauthd-postfix 7c7 < START=no --- > START=yes 11c11 < DESC="SASL Authentication Daemon" --- > DESC="SASL Auth. Daemon for Postfix" 15c15 < NAME="saslauthd" --- > NAME="saslauthd-postf" 62c62,63 < OPTIONS="-c -m /var/run/saslauthd" --- > #OPTIONS="-c -m /var/run/saslauthd" > OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd"
さきほど設定したファイルの一時置き場を作成する。
% sudo su # dpkg-statoverride --add root sasl 710 /var/spool/postfix/var/run/saslauthd # rm -rf /run/saslauthd # ln -s /var/spool/postfix/var/run/saslauthd /run/saslauthd # ls -l /run/saslauthd
postfixユーザをsaslグループに追加する。
# adduser postfix sasl
saslauthdを再起動する。
% sudo systemctl restart saslauthd % sudo systemctl status saslauthd
/etc/postfix/main.cf を編集する。
% cd /etc/postfix % sudo cp -p main.cf main.cf.org % sudo vi main.cf
main.cfの編集部分は以下のとおり。
# diff main.cf.org main.cf 27,28c27,29 < smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem < smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key --- > smtpd_tls_cert_file=/etc/postfix/ssl/keys/THISSEVER.crt > smtpd_tls_key_file=/etc/postfix/ssl/keys/THISSEVER.key > smptd_tls_CAfile=/etc/postfix/ssl/keys/nii-odca3sha2ct.cer 43c44 < mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 --- > mynetworks = 127.0.0.0/8 192.168.0.0/16 49c50,57 < inet_protocols = all --- > inet_protocols = ipv4 > > ## For SMTP AUTH with SASL2 > smtpd_sasl_local_domain = $myhostname > smtpd_sasl_auth_enable = yes > broken_sasl_auth_client = yes > smtpd_sasl_security_options = noanonymous > smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
/etc/postfix/master.cf を編集する。
% cd /etc/postfix % sudo cp -p master.cf master.cf.org % sudo vi master.cf
master.cfの編集部分は以下のとおり。
% diff master.cf.org master.cf 29c29 < #smtps inet n - y - - smtpd --- > smtps inet n - y - - smtpd 31,32c31,32 < # -o smtpd_tls_wrappermode=yes < # -o smtpd_sasl_auth_enable=yes --- > -o smtpd_tls_wrappermode=yes > -o smtpd_sasl_auth_enable=yes 37,38c37,38 < # -o smtpd_recipient_restrictions= < # -o smtpd_relay_restrictions=permit_sasl_authenticated,reject --- > -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject > -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
TLS用のサーバ証明書を設置する。サーバ証明書を THISSEVER.crt、証明書作成時の鍵をTHISSEVER.key、中間証明書を nii-odca3sha2ct.cerとする。(サーバ証明書は UPKI電子証明書発行サービスで作成しているので、中間証明書がこのファイルになっている)。
% sudo mkdir -p /etc/postfix/ssl/keys % sudo cp /path-to-directory/THISSEVER.crt /etc/postfix/ssl/keys % sudo cp /path-to-directory/THISSEVER.key /etc/postfix/ssl/keys % sudo cp /path-to-directory/nii-odca3sha2ct.cer /etc/postfix/ssl/keys % chown root:root /etc/postfix/ssl/keys/*
証明書のカギのパスフレーズを外す。
% cd /etc/postfix/ssl/keys % sudo cp -p THISSEVER.key THISSEVER.key.with_passphrase % sudo openssl rsa -in THISSEVER.key.with_passphrase -out THISSEVER.key
証明書と中間証明書を一つにまとめる。
% sudo cp -p THISSEVER.crt THISSEVER_full.crt % sudo cat nii-odca3sha2ct.cer >> THISSEVER_full.crt
/etc/pam.dにファイルを追加する。
% cd /etc/pam.d % sudo cp other smtp
Dovecot による POP3SとIMAPSの設定
Dovecotは以下を参考にした
- Debian 10 busterでPostfix+Dovecot+Letsencryptでメールシステム構築 | デフよん
- Debian 10 Buster : Dovecot : インストール : Server World
Dovecotのインストール
% sudo apt install dovecot-core dovecot-pop3d dovecot-imapd
設定ファイルの編集
% cd /etc/dovecot % sudo cp -p dovecot.conf dovecot.conf.org % sudo vi dovecot.conf
dovecot.confの中見は以下のとおり。
30c30 < #listen = *, :: --- > listen = *, ::
以下 /etc/dovecot/conf.d/以下の設定ファイルを編集していく。
古いメーラーへの対応。
% sudo cp -p 10-auth.conf 10-auth.conf.org % sudo vi 10-auth.conf % diff 10-auth.conf.org 10-auth.conf 10a11 > disable_plaintext_auth = no 100c101,102 < auth_mechanisms = plain --- > #auth_mechanisms = plain > auth_mechanisms = plain login
メールボックスの形式を指定する(全メール1ファイル形式mbox、1メール1ファイル形式MailDir)
% sudo cp -p 10-mail.conf 10-mail.conf.org % sudo vi 10-mail.conf
POP3SとIMAPSについてコメントアウトする。
% sudo cp -p 10-master.conf 10-master.conf.org % sudo vi 10-master.conf % diff 10-master.conf.org 10-master.conf 22,23c22,23 < #port = 993 < #ssl = yes --- > port = 993 > ssl = yes 43,44c43,44 < #port = 995 < #ssl = yes --- > port = 995 > ssl = yes
サーバ証明書を指定する。Postfixと共有する。
% sudo cp -p 10-ssl.conf 10-ssl.conf.org % sudo vi 10-ssl.conf % diff 10-ssl.conf.org 10-ssl.conf 12,13c12,13 < ssl_cert = </etc/dovecot/private/dovecot.pem < ssl_key = </etc/dovecot/private/dovecot.key --- > ssl_cert = </etc/postfix/ssl/keys/THISSEVER_full.crt > ssl_key = </etc/postfix/ssl/keys/THISSEVER.key
設定を確認する。
% sudo /usr/sbin/dovecot -n
dovecotを再起動する。
% sudo systemctl restart dovecot % sudo systemctl status dovecot
nftablesによる アクセス制限
Debian 10 (buster)のnftablesでアクセス制御 - 発声練習に従い設定する。
/etc/nftables.confに以下を追加し、ポートへのアクセスを許す。
table ip filter { chain input { type filter hook input priority 0; policy accept; 〜省略〜 tcp dport smtp counter accept # 25番:他のSMTPサーバからのアクセス tcp dport urd counter accept # 465番:SMTP認証+TLS tcp dport pop3s counter accept # 995番:POP3S tcp dport imaps counter accept # 993番:IMAPS 〜省略〜
設定を反映させる。
% sudo nft -f /etc/nftables.conf % sudo nft list ruleset
ポートの待受状態を確認する。たとえば私が設定したサーバの場合は以下のようになる。
% sudo lsof -i COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME dhclient 492 root 7u IPv4 10027 0t0 UDP *:bootpc mysqld 687 mysql 21u IPv4 16795 0t0 TCP localhost:mysql (LISTEN) sshd 688 root 3u IPv4 10128 0t0 TCP *:ssh (LISTEN) sshd 688 root 4u IPv6 10130 0t0 TCP *:ssh (LISTEN) apache2 714 root 4u IPv6 14298 0t0 TCP *:http (LISTEN) apache2 715 www-data 4u IPv6 14298 0t0 TCP *:http (LISTEN) apache2 716 www-data 4u IPv6 14298 0t0 TCP *:http (LISTEN) master 5013 root 13u IPv4 30976 0t0 TCP *:smtp (LISTEN) master 5013 root 17u IPv4 30979 0t0 TCP *:submissions (LISTEN) sshd 5566 root 3u IPv4 32942 0t0 TCP 192.168.12.4:ssh->192.168.12.3:57887 (ESTABLISHED) sshd 5578 gotoh 3u IPv4 32942 0t0 TCP 192.168.12.4:ssh->192.168.12.3:57887 (ESTABLISHED) dovecot 5600 root 21u IPv4 38020 0t0 TCP *:pop3 (LISTEN) dovecot 5600 root 22u IPv6 38021 0t0 TCP *:pop3 (LISTEN) dovecot 5600 root 23u IPv4 38022 0t0 TCP *:pop3s (LISTEN) dovecot 5600 root 24u IPv6 38023 0t0 TCP *:pop3s (LISTEN) dovecot 5600 root 38u IPv4 38064 0t0 TCP *:imap2 (LISTEN) dovecot 5600 root 39u IPv6 38065 0t0 TCP *:imap2 (LISTEN) dovecot 5600 root 40u IPv4 38066 0t0 TCP *:imaps (LISTEN) dovecot 5600 root 41u IPv6 38067 0t0 TCP *:imaps (LISTEN)
トラブルシューティング: DovecotのDiffie-Hellman鍵エラー
以下のようなエラーがでている。
pop3-login: Error: Diffie-Hellman key exchange requested, but no DH parameters provided. Set ssh_dh=
これはDovecot 2.3より仕様が変わったとのこと。
以前のバージョンではDiffie Hellman parametersが初回起動時に自動生成され週ごとに再生成されていたが、セキュリティ上のメリットがさほどないため廃止された。バージョン2.3からはssl_dhの指定が強制されるため、以下を必ず設定して、設定した場所にDiffie Hellman parametersファイルを配置しなければならない。
鍵を生成する。
% cd /etc/postfix/ssl/keys/ % sudo openssl dhparam 4096 -out THISSEVER.dh.pem
/etc/dovecot/10-ssl.confに以下を加える。
# For Diffie Hellman Parameters ssl_dh = </etc/postfix/ssl/keys/THISSEVER.dh.pem
dovecotを再起動する。
% sudo systemctl restart dovecot