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は以下を参考にした
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ファイルを配置しなければならない。
(linux:postfix_dovecot [RCPS] より)
鍵を生成する。
% 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