LAN内専用のメールサーバーは構築していたが、LAN外からメールを受信できれば、用途が広がる。
そこで、sslをサポートし、また帰宅後も再度PCでメールを見れるようにIMAP形式のメールサーバーを構築する。 なお、外部からメール受信には外部メールサービスを使うpush方式と、自ら見に行くpull方式があるが、まずはpull方式とした(gmailサーバー等をリレーしない)
※まだ、おかしいところがあるかも。いったんメモとして公開する。
構築イメージ
参考としたサイト
How to set up a mail server on your Raspberry Pi?
(Roundcubeを使う部分は実装せずにすました。 また、ENNABLE IMAPSの箇所で一部設定変更)
OpenSSL で SSL 自己証明書を発行する手順
先の参考サイトではdovecot.pemを使うとなっていたが、それだとエラーになったため。自己証明書ではなく本当はletsencryptを使うのが良いが、別のサーバーでテストしていたため自己証明書で行った。
インストールとテンプレート準備
sudo apt install postfix
sudo nano /etc/postfix/main.cf
sudo apt install mailutils
sudo apt install dovecot-imapd
sudo maildirmake.dovecot /etc/skel/Maildir
sudo maildirmake.dovecot /etc/skel/Maildir/.Drafts
sudo maildirmake.dovecot /etc/skel/Maildir/.Sent
sudo maildirmake.dovecot /etc/skel/Maildir/.Spam
sudo maildirmake.dovecot /etc/skel/Maildir/.Trash
sudo maildirmake.dovecot /etc/skel/Maildir/.Templates
ssl用自己証明書作成
makedir ssls
sudo openssl genrsa 4096 > ssls/server.key
openssl req -new -key ssls/server.key > ssls/server.csr
openssl x509 -req -days 365 -signkey ssls/server.key < ssls/server.csr >ssls/server.crt
3つ目のserver.csrを作成するところで出てくる質問には例えば以下の様に答える
JP
都道府県名
区名/市名/郡名 など
組織名等
単に改行
ドメイン名(例: example.com)
その後の質問は改行でかまわない
場所移動
sudo cp ssls/* /etc/dovecot/private
postfixの設定
ポート番号の設定、ドメイン名の設定、ネットワークの指定等を行う
sudo nano /etc/postfix/main.cf
myhostname = example.com
mydomain = example.com
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.0.0/24
inet_protocols = ipv4
home_mailbox = Maildir/
# 以下追加
mailbox_command =
smtpd_helo_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_invalid_helo_hostname,
reject_non_fqdn_helo_hostname,
reject_unknown_helo_hostname,
check_helo_access hash:/etc/postfix/helo_access
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
sudo nano /etc/postfix/helo_access
aaa.bb.cc.ddd REJECT # aaa.bb.cc.ddd はexample.comのIPアドレス
# example.com REJECT
smtp.example.com REJECT
mail.example.com REJECT
sudo nano /etc/postfix/master.cf
587 inet n - y - - smtpd #smtpを587にした
sudo service postfix restart で、postfixを起動
dovecotの設定
sudo nano /etc/dovecot/dovecot.conf
listen = *
sudo nano /etc/dovecot/conf.d/10-mail.conf
mail_location = ~/Maildir
sudo nano /etc/dovecot/conf.d/10-master.conf
service imap-login {
inet_listener imap {
port = 143
}
inet_listener imaps {
port = 993
ssl = yes
}
service auth {
unix_listener /var/spool/postfix/private/auth {
mode = 0660
user = postfix
group = postfix
}
}
sudo nano /etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = no
auth_mechanisms = plain login
sudo nano /etc/dovecot/conf.d/10-ssl.conf
ssl = yes
ssl_cert = </etc/dovecot/private/server.crt
ssl_key = </etc/dovecot/private/server.key
ssl_min_protocols = TLSv1.2
ssl = yes
ssl_cert = </etc/dovecot/dovecot.pem # private/ を消すことに注意
ssl_key = </etc/dovecot/private/dovecot.pem # .keyを.pemにすることに注意
ssl_min_protocols = TLSv1.2
sudo service dovecot restart でdovecotを再起動
自分証明書だとおこられるかも。letsencryptので行う必要ありか。
テスト及び実行
sudo adduser testuser
※ 下記部分は「自己証明書作成」部分を行った場合は不要
printf '\0%s\0%s' 'testuser' 'password' | openssl base64
cd /etc/dovecot
sudo openssl req -new -x509 -nodes -config /usr/share/dovecot/dovecot-openssl.cnf -out dovecot.pem -keyout private/dovecot.pem -days 365
メーラー側の設定
protocol imap4
smtp認証 しない
ssl imap4 sslを使用
smtp sslを使用しない
smtp ポート番号 587
IMAP ポート番号 993
コードはutf-8にする。(文字化けするので) 2021/3/31追記
自己証明書なので信頼できないといわれるが、許可して受け入れると受信可能となる。
※ smtp側を開けていないとほとんどのメーラが使えない。 windowsだとSylpheedは使えた。 androidだとOpen Mailが使えた(おそらくK-9 Mailも)。 2021/3/31 追記
その他エラー対策
/var/log/mail.err や /var/log/syslogにエラーが出ているのでうまくいかないとき、コマンドでの直接のエラーメッセージの他にここをみてチェック
もし、 key too smallの様なメッセージが出た場合は /etc/ssl/openssl.cnf 中の
CipherString = DEFAULT@SECLEVEL=2 の値を1にしてみる
もし、 /dev/urandomでエラーになった場合は、 /usr/share/dovecot/dovecot-openssl.cnf 中のRANDFILE = /dev/urandom部分をコメントアウトしてみる。 ついでにkey長を4096にするのが良い
I seriously love your blog.. Very nice colors & theme.
Did you create this website yourself? Please reply back as I'm hoping to create
myy own website and would lve to learn where you goot this from or exactly what the theme is named.
Cheers!
Feel ffree to visit my page :: https://Casinovavada.Blogspot.com/2021/12/blog-post.html