以下の内容は古いので、新しい記事をご参照ください。
OpenBSD project による SMTP サーバの実装である OpenSMTPD が OpenBSD の標準 MTA になるそうなので、いずれはこれに移行することを前提にちょっと試してみました。因みに現在は Postfix を使っています。
まずは OpenBSD 5.4 に標準で搭載されているバージョン5.4で実験。
(1) sendmail が動いている場合は止めます。
# /etc/rc.d/sendmail stop
(2) ブート時に sendmail が起動しないように /etc/rc.conf.local に以下の内容を書き加えます。
sendmail_flags=NO
(3) root の crontab にある以下の行の冒頭に # を挿入してコメントアウトします。
*/30 * * * * /usr/sbin/sendmail -L sm-msp-queue -Ac -q
(4) MTA として OpenSMTPD を使うように /etc/mailer.conf を以下の内容に書き変えます。
sendmail /usr/sbin/smtpctl
send-mail /usr/sbin/smtpctl
mailq /usr/sbin/smtpctl
makemap /usr/libexec/smtpd/makemap
newaliases /usr/libexec/smtpd/makemap
(5) aliases (/etc/mail/aliases) データベースを更新します。
# newaliases
(6) メールサーバとしては実際のホスト名とは異なるドメインを扱うので、/etc/mailname を新規に作成し、そこにメールサーバ名(or ドメイン名、DNSで名前解決できるもの)を記述します。
# echo メールサーバ名 > /etc/mailname
このファイルに記述する文字列は Postfix で言うところの myhostname や mydomain で設定する文字列に相当します。(7) メールの外部への配送は、認証のある外部SMTPサーバにリレーさせるので、その認証情報を設定します。
# touch /etc/mail/secretsセキュリティを真面目に考えるなら echo ではなくて、vi などのエディタを使うべきでしょう。
# chmod 640 /etc/mail/secrets
# chown root:_smtpd /etc/mail/secrets
# echo "ラベル ユーザ名:パスワード" > /etc/mail/secrets
# makemap /etc/mail/secrets
(8) 設定ファイル /etc/mail/smtpd.conf を以下のような内容で作成します。
relayhost = "tls+auth://ラベル@リレーサーバ名:587"上記の設定内容は「見たまま」なので説明は不要でしょう。ただし「from ほげほげ」を省略すると「from local」を意味します。因みに、特定のアドレスブロック(例えば、192.168.0.0/24)から無条件でリレーを許可する場合は以下のように設定します。
listen on all
table aliases db:/etc/mail/aliases.db
table secrets db:/etc/mail/secrets.db
accept from any for local alias <aliases> deliver to mbox
accept for any relay via $relayhost auth <secrets>
relayhost = "tls+auth://ラベル@リレーサーバ名:587"
mynetwork = "192.168.0.0/24"
listen on all
table aliases db:/etc/mail/aliases.db
table secrets db:/etc/mail/secrets.db
accept from any for local alias <aliases> deliver to mbox
accept from source $mynetwork for any relay via $relayhost auth <secrets>
accept for any relay via $relayhost auth <secrets>
(9) 文法に間違いがないか確認します。
# /usr/sbin/smtpd -n
configuration OK
(10) 起動します。
# /etc/rc.d/smtpd -f start
これで /etc/mailname に設定したドメイン宛のメールを受け取れること、またローカルから外部への(リレーサーバ経由での)配送もできることを確認しました。
ところが、以下の問題が発生しました。
- ローカルから(例えば、mailコマンドで)外部に送信した場合の送信元アドレスのドメインが /etc/mailname に設定したものではなく、実際のホスト名になってしまう。
- ローカルからローカルへのメール(例えば、mailコマンドで宛先としてユーザ名のみを指定した場合)の送信先アドレスのドメイン名が実際のホスト名(DNSで名前解決できない)になってしまうため、そのメールを/etc/mail/aliases の設定に従って外部に転送すると、リレーサーバにおいて本来の送信先ドメイン名が名前解決できずにエラーになってしまう。
途方に暮れ、OpenSMTPD の使用自体を諦めかけていたのですが、先月初旬に OpenSMTPD の最新バージョン 5.4.2 が公開されていたことを思い出したので、期待半分不安半分でそれに置き換えてみました。すると、(8) の設定のままで上記2点の問題が発生しない、即ち、ドメイン名が期待通りに mailname で設定したものになることが分かりました(万歳!!)。
ただし、このバージョンでは /etc/mailname ではなく、/etc/mail/mailname にパスが変更されていることに注意が必要です。
これで自分にとって必要な機能が実現できることが分かったので、ブート時に MTA として自動的に OpenSMTPD が起動するように /etc/rc.conf.local に smtpd_flags="" を追加して作業完了。
しばらく様子を見て問題がないようであれば、Postfix から OpenSMTPD に移行しようと思います。
ラベル:opensmtpd