OpenSMTPD+Dovecotによるメールサーバ構築
概要
はじめに
本日、運用MXのホストを移転しました。 PostfixをOpenSMTPDにかえ、Dovecotなどもふくめて、ここ数日その移転調整をしてました(試運転としては、一月程前から動かしてました。メールサーバとDNSはじっくり設定しないとまわりに迷惑がかかるので、実稼働までに時間がかかります)。
OpenSMTPDは、OpenBSDのデフォルトデーモンです。インストール済みなので、 /etc/mail/smtpd.confの設定と、個別設定ファイルをいくつか書けば、動きます。
OpenSMTPDの特長
設定ファイルは一つで、SMTPの流れ沿って読めます。
暗号設定、どこで受けるか、追加処理を挟むか、誰を通すか、最後に何をするか。
TLSや認証付き投稿部はあらかじめコードに取り込まれていて、それ以外の検査や署名、商業的な追加要件はfilterとして設定ファイル外に出というかたちになってますので、短い設定ファイルになります。 下の例も実質21行で済んでいます。
Postfixと比べると、設定に商用ポリシーや組織ルールを積み上げません。同じ目的でも設定が短く書け、役割の境界が崩れにくいという感じです。
smtpd.conf
まず、使っている設定ファイルを示します ( \ は見やすいように改行しているだけですので、行としては一行です)。
そのあとで、各パートにわけて説明を加えます。
#$OpenBSD: smtpd.conf,v 1.14 2019/11/26 20:14:38 gilles Exp $
# This is the smtpd server system-wide configuration file.
# See smtpd.conf(5) for more information.
#####名前づけマクロ#####
mxhost = "MXホスト名"
######table#######
table aliases file:/etc/mail/aliases
table vdomains file:/etc/mail/vdomains
table vusers file:/etc/mail/vusers
table credentials file:/etc/mail/credentials
table reject_myself file:/etc/mail/reject_myself
######TLS設定###########
pki $mxhost cert "/etc/letsencrypt/live/MXホスト名/fullchain.pem"
pki $mxhost key "/etc/letsencrypt/live/MXホスト名/privkey.pem"
######フィルター:dkimsignによるDKIM設定####
# 署名対象とするドメインを -d で必要な分だけすべて列挙
filter "dkimsign" proc-exec "/usr/local/libexec/smtpd/filter-dkimsign \
-d 利用ドメイン名...(以下列挙略) \
-s mail -k /etc/mail/dkim/private.rsa.key" user _dkimsign
###### listen部 ########
#dkimsignを使わないならこちらをコメントアウト
#listen on socket
#listen on lo0
#dkimsignを使うばあい
listen on socket filter "dkimsign"
listen on lo0 filter "dkimsign"
# 外部からの受信(25)
listen on egress tls pki $mxhost
# クライアント送信(587) 認証必須
listen on egress port 587 tls-require pki $mxhost auth <credentials> \
filter "dkimsign"
##### action部 #########
# 仮想ドメイン宛メールスプール: Maildir(Dovecotが読む場所)
action "virtual_in" \
maildir "/var/spool/virtual/%{rcpt.domain}/%{rcpt.user}/Maildir" \
user vmail virtual <vusers>
# システムユーザー宛(root/cron など)→ 従来の mboxフォーマット
action "system_mbox" mbox alias <aliases>
# 外向き送信
action "outbound" relay
##### rules設定 ########
# 1) 未認証で自ドメインを名乗る差出人 → 拒否(Postfix reject_myself 相当)
match !auth from any mail-from <reject_myself> for any reject
# 2) 自ドメイン(仮想)宛は Maildir へ
match from any for domain <vdomains> action "virtual_in"
# 3) ホストローカル宛は mbox
match from local for local action "system_mbox"
# 4) 認証済みクライアントの外向き
match auth from any for any action "outbound"
# 5) ホスト自身からの外向き
match from local for any action "outbound"
名前づけマクロとtable
以下は明日以降に。2026-08-15T19:16:09+09:00
TLS設定
フィルター:dkimsignによるDKIM設定
フィルタは、DKIM処理をするために使ってます。 同処理は別ページで記述します。