V-antena and Tanimoto's page

谷本の備忘録・雑記帳・work

>

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にするのが良い

Comments

  1. Valeria より:

    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

    • tanimoto より:

      Thank you for your interest to my blog.
      I made this blog design and theme according to the following Japanese guide book. (amazon link)
      https://www.amazon.co.jp/WordPress%E3%83%AC%E3%83%83%E3%82%B9%E3%83%B3%E3%83%96%E3%83%83%E3%82%AF-5-x%E5%AF%BE%E5%BF%9C%E7%89%88-%E3%82%A8%E3%83%93%E3%82%B9%E3%82%B3%E3%83%A0/dp/4802612400?language=en_US
      I hope you can find a similar guide book written in English.

Leave a Comment

入力エリアすべてが必須項目です。メールアドレスが公開されることはありません。

内容をご確認の上、送信してください。

CAPTCHA



あなたはIPv4でアクセスしています