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 {
}
}