postfix とdovecot (SMTP Auth) でvirtual その2(CentOS8 Streamで初期インストール)

OSやネットワークの設定など

前回ではさくらインターネットのスタートアップスクリプトを利用してみたけれど、自分のやりたいこととは違っていたので、CentOS8で初期化。全パッケージのアップデート、そしてCentOS8 Stream に下記のコマンドで切り替え。

CentOS8 Streamへの切り替え

# yum update -y
# dnf install centos-release-stream
# dnf distro-sync

IPv6の対応

postfix やdovecotをインストールして試してみたところ、IPv6のインタフェースがなくてエラーが出てきた。※このコマンドは設定ではなく確認用のコマンドなのでエラーが毎回出ていたので気になるものだった。

# postconf -f -n virtual_mailbox_domains 
postconf: fatal: parameter inet_interfaces: no local interface found for ::1

さくらインターネットの文書を確認。IPv6を利用できるようにするにはひと手間かかる様子。
IPv6有効化手順(CentOS8) | さくらの VPS ドキュメント これを見ると/etc/sysctl.confこれと/etc/sysconfig/network、/etc/sysconfig/network-scripts/ifcfg-ens3などの変更が必要らしい。

# cat /etc/sysctl.conf
# Do not use IPv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
# sed -i -e "/net.ipv6.conf.all.disable_ipv6/s/1/0/" /etc/sysctl.conf
# sed -i -e "/net.ipv6.conf.default.disable_ipv6/s/1/0/" /etc/sysctl.conf
# cat /etc/sysctl.conf

# Do not use IPv6
net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.default.disable_ipv6 = 0

こちらの変更は確認済み。

# sed -i -e "s/^#//g" /etc/sysconfig/network
# sed -i -e "s/^#//g" /etc/sysconfig/network-scripts/ifcfg-ens3

こちらも変更して確認はしたけどIPアドレスなどが記載されているので割愛。

# postconf -n virtual_mailbox_domains 

エラーが出なくなった。

ミドルウェアやコマンドのインストールと設定

すでに行っているので時系列的には前後してしまうのだけれど、dnfでpostfix やdovecotのインストール。ほかにもカラーシンタックスハイライトが欲しいのでvimとメールの送信テストで楽をしたいと思ってmailx。systemctlの補完が必要だったので、bash-completion。最終手段としてSMTPプロトコルをステップ実行するためにtelnet。DNSを設定しながらテストしたかったので、bind(chroot)とbind-utilsをいれた。(bind以外のDNSの経験がない。ごめん)

# dnf -y install postfix dovecot 
# dnf install vim
# dnf install mailx
# dnf install bash-completion
# dnf install telnet
# dnf install bind bind-chroot bind-utils

postfixの設定(初期なので完成じゃない)

# virtual mail ユーザー
groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -s /bin/false -d /var/spool/mail/vhosts -m

# postfix main.cf 変更
postconf -e virtual_mailbox_domains=redalarm.jp
postconf -e virtual_mailbox_base=/var/spool/mail/vhosts
postconf -e virtual_mailbox_maps=hash:/etc/postfix/vmailbox
postconf -e virtual_minimum_uid=100
postconf -e virtual_uid_maps=static:5000
postconf -e virtual_gid_maps=static:5000
postconf -e smtpd_sasl_type=dovecot
postconf -e smtpd_sasl_path=private/auth
postconf -e smtpd_sasl_auth_enable=yes
postconf -e smtpd_recipient_restrictions='permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination'
postconf -e inet_interfaces=all

Virtual mailboxの仕組みを使おうと思ったので、専用ユーザーとしてvmail を作成。ログインはできないユーザーで、ログインディレクトリは/var/spool/mail/vhosts.
「virtual_mailbox_base=/var/spool/mail/vhosts」 この設定とつながるように作成する必要がある。

「virtual_mailbox_maps=hash:/etc/postfix/vmailbox」これは、ユーザーごとのディレクトリを紐づける設定ファイル。「virtual_mailbox_domains=redalarm.jp」はVirtual mailboxで管理するドメイン名。

SMTP Authについてはsasldを利用する場合が多く解説されている様子だったけれど、dovecotと二重管理になるだろうなと思ったところなので、「smtpd_sasl_type=dovecot」
SMTP Authの許可ポリシーの順番設定「smtpd_recipient_restrictions=’permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination’」
SMTP Authを利用するという設定「smtpd_sasl_auth_enable=yes」

「inet_interfaces=all」これはすべてのインタフェースでpostfixはListenするという設定。

あとで検証をしながらこの設定に追加していく。特に認証についてはdovecot連携があるので双方に変更をしながらという形で進んでいった。

dovecotの設定(初期なので完成ではない)

この時点では、SSL証明書についてをインストールしていないので、/etc/dovecot/conf.d/10-ssl.confの記述は見送っている。

# egrep -v '^$|^[[:space:]]#' /etc/dovecot/dovecot.conf
dict {
}
!include conf.d/.conf
!include_try local.conf
# egrep -v '^$|^[[:space:]]*#' /etc/dovecot/conf.d/10-mail.conf 
 mail_location = maildir:/var/spool/mail/vhosts/%d/%n
 namespace inbox {
   inbox = yes
 }
 first_valid_uid = 1000
 protocol !indexer-worker {
 }
 mbox_write_locks = fcnt

「mail_location = maildir:/var/spool/mail/vhosts/%d/%n」については別で記載をするけれど、他では行っていない特殊な記述

# egrep -v '^$|^[[:space:]]*#' /etc/dovecot/conf.d/10-auth.conf 
disable_plaintext_auth = no
auth_mechanisms = plain
!include auth-passwdfile.conf.ext
!include auth-static.conf.ext
# egrep -v '^$|^[[:space:]]*#' /etc/dovecot/conf.d/auth-static.conf.ext 
userdb {
  driver = static
  args = uid=vmail gid=vmail home=/var/spool/mail/vhosts/%d/%n
}

「args = uid=vmail gid=vmail home=/var/spool/mail/vhosts/%d/%n」これも別で記載予定

# egrep -v '^$|^[[:space:]]*#' /etc/dovecot/conf.d/auth-passwdfile.conf.ext 
passdb {
  driver = passwd-file
  args = scheme=CRYPT username_format=%u /etc/dovecot/users/%u
}
# egrep -v '^$|^[[:space:]]*#' /etc/dovecot/conf.d/10-master.conf
service imap-login {
  inet_listener imap {
  }
  inet_listener imaps {
  }
}
service pop3-login {
  inet_listener pop3 {
  }
  inet_listener pop3s {
  }
}
service submission-login {
  inet_listener submission {
  }
}
service lmtp {
  unix_listener lmtp {
  }
}
service imap {
}
service pop3 {
}
service submission {
}
service auth {
  unix_listener auth-userdb {
  }
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
  }
}
service auth-worker {
}
service dict {
  unix_listener dict {
  }
}