2014年04月11日

OpenSMTPD を試してみた

以下の内容は古いので、新しい記事をご参照ください。

OpenBSD project による SMTP サーバの実装である OpenSMTPDOpenBSD の標準 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 で言うところの myhostnamemydomain で設定する文字列に相当します。

(7) メールの外部への配送は、認証のある外部SMTPサーバにリレーさせるので、その認証情報を設定します。
# touch /etc/mail/secrets
# chmod 640 /etc/mail/secrets
# chown root:_smtpd /etc/mail/secrets
# echo "ラベル ユーザ名:パスワード" > /etc/mail/secrets
# makemap /etc/mail/secrets
セキュリティを真面目に考えるなら echo ではなくて、vi などのエディタを使うべきでしょう。

(8) 設定ファイル /etc/mail/smtpd.conf を以下のような内容で作成します。
relayhost = "tls+auth://ラベル@リレーサーバ名:587"

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>
上記の設定内容は「見たまま」なので説明は不要でしょう。ただし「from ほげほげ」を省略すると「from local」を意味します。因みに、特定のアドレスブロック(例えば、192.168.0.0/24)から無条件でリレーを許可する場合は以下のように設定します。
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 に設定したドメイン宛のメールを受け取れること、またローカルから外部への(リレーサーバ経由での)配送もできることを確認しました。

ところが、以下の問題が発生しました。
  1. ローカルから(例えば、mailコマンドで)外部に送信した場合の送信元アドレスのドメインが /etc/mailname に設定したものではなく、実際のホスト名になってしまう。
  2. ローカルからローカルへのメール(例えば、mailコマンドで宛先としてユーザ名のみを指定した場合)の送信先アドレスのドメイン名が実際のホスト名(DNSで名前解決できない)になってしまうため、そのメールを/etc/mail/aliases の設定に従って外部に転送すると、リレーサーバにおいて本来の送信先ドメイン名が名前解決できずにエラーになってしまう。
上記2点のうち、1.については送信元アドレスの書き換え設定で対応可能ですが、2.については設定が見当たりません。

途方に暮れ、OpenSMTPD の使用自体を諦めかけていたのですが、先月初旬に OpenSMTPD の最新バージョン 5.4.2 が公開されていたことを思い出したので、期待半分不安半分でそれに置き換えてみました。すると、(8) の設定のままで上記2点の問題が発生しない、即ち、ドメイン名が期待通りに mailname で設定したものになることが分かりました(万歳!!)。

ただし、このバージョンでは /etc/mailname ではなく、/etc/mail/mailname にパスが変更されていることに注意が必要です。

これで自分にとって必要な機能が実現できることが分かったので、ブート時に MTA として自動的に OpenSMTPD が起動するように /etc/rc.conf.localsmtpd_flags="" を追加して作業完了。

しばらく様子を見て問題がないようであれば、Postfix から OpenSMTPD に移行しようと思います。
ラベル:opensmtpd
posted by yamaga at 12:17| Comment(0) | TrackBack(0) | OpenBSD | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック