Postfix + Dovecot で定番メールサーバ(SASL認証)の立ち上げ

monmon.jpサーバからメールも送れるようにしていきます。

いつもは、安定性や不着リスクを軽減するため、Google Workspace(旧Gsuite、すぐ名前変わりますねw)にメールサーバは切り出してしまいますが、今回は、趣味の世界。コストをかけないことを最優先に、立ち上げたばかりの、Ubuntuサーバを使い、メールサーバを立ち上げます。

とはいえ、久しぶりのメールサーバと思いきや、Postfix、Dovecotの組み合わせが、まだまだ現役でしたので、そちらを導入することにします。そのうち、必要であればマルチドメインにも対応させます。

まずは、postfixからインストール。

sudo apt install postfix

・メール設定のタイプを選択
Internet Site かな。

・System mail name ……メールアドレスのドメイン部のヒアリングですね。
もちろん。monmon.jp。

で、インストールで完了です。

次に、Devecotもインストールしておきます。

sudo apt install dovecot-common dovecot-imapd dovecot-pop3d

で、依存関係のあるライブラリもあわせてインストール完了です。

sudo systemctl status postfix
sudo systemctl status dovecot

それぞれのコマンドで起動確認ができたので、次に各種設定を行っていきます。

基本的な設定は、

/etc/postfix/main.cf

で行いますので、こちらを直接いじります。

変更箇所はこんな感じ。

#smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
smtpd_banner = $myhostname ESMTP

# TLS parameters
#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/letsencrypt/live/monmon.jp/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/monmon.jp/privkey.pem

以下の追加設定を末尾に追加します。

#Maildir形式を使います
home_mailbox= Maildir/

#内部ユーザーを隠します
disable_vrfy_command = yes

#SASL認証の設定も諸々有効にしておきます。
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions =
    permit_mynetworks
    permit_sasl_authenticated
    reject_unauth_destination

smtpd_use_tls = yes

次のファイルにもSMTP認証の設定を。

sudo vi /etc/postfix/master.cf

サブミッションポートは利用せずに、ポート465のSSL通信を用いるため、以下のコメントを外します。

smtps     inet  n       -       y       -       -       smtpd
#  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_reject_unlisted_recipient=no

設定が終わったら再起動です。

sudo systemctl restart postfix

Maildir形式にしたのでディレクトリを作成します。

新規ユーザー作成時にメールボックスが作られるように。

sudo mkdir /etc/skel/Maildir
sudo chmod 700 /etc/skel/Maildir

既存ユーザーもこんな感じでフォルダを作成し、パーミッションとオーナーを変更します。

sudo mkdir /home/monmon/Maildir
sudo chmod 700 /home/monmon/Maildir
sudo chown monmon:monmon /home/monmon/Maildir

ふぅ、長い(笑)

次はDovecotの設定です。

まずは、プロトコルの設定からと思ったのですが、

/etc/dovecot/dovecot.conf

から、protocolsがパラメータ指定が無くなっており探しました。今は、こちらに切り出されているんですね。

/usr/share/dovecot/protocols.d/

今回必要な、

imapd.protocol
pop3d.protocol

がそれぞれ有効になっていたのでこの設定はスルーし、SASLの設定に移ります。

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

非セキュアな通信はport0番として設定を無効化します。

service imap-login {
  inet_listener imap {
    #port = 143
    port = 0
  }
  inet_listener imaps {
    #port = 993
    #ssl = yes
    port = 993
    ssl = yes
  }
}

service pop3-login {
  inet_listener pop3 {
    #port = 110
    port = 0
  }
  inet_listener pop3s {
    #port = 995
    #ssl = yes
    port = 995
    ssl = yes
  }
}

DovecotのSASL認証のファイルを指定します。

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

以下の設定を修正します。

  # Postfix smtp-auth
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
  }

証明書の設定。

sudo vi /etc/dovecot/conf.d/10-ssl.conf

証明書ファイルを指定します。

#ssl_cert = </etc/dovecot/private/dovecot.pem
#ssl_key = </etc/dovecot/private/dovecot.key
ssl_cert = </etc/letsencrypt/live/monmon.jp/fullchain.pem
ssl_key = </etc/letsencrypt/live/monmon.jp/privkey.pem

色々使える、Let’s Encrypt

こちらも、メールボックスをMaildir形式に変更。

sudo vi /etc/dovecot/conf.d/10-mail.conf
#mail_location = mbox:~/mail:INBOX=/var/mail/%u
mail_location = maildir:~/Maildir

最後にdovecotも再起動

sudo systemctl restart dovecot

メールアカウントの稼働

あとは、送受信が必要なユーザーにパスワードを設定し、適当なメーラーでSSLを使って、送受信するだけです。

でも、このままのドノーマルなバニラ設定だと、迷惑メールとしてフィルタリングされてしまう可能性も高いので、最低限、SPFレコード、DKIMも追加していきます。