Solaris で sendmail バージョンアップ

はじめに

このページでは、Oracle Solaris 11.4 で sendmail を 8.18.2(2025年12月公開)に入れ替える手順を説明する。 sendmail の更新にはセキュリティ修正が含まれるため、新しい版を使う。

Oracle Solaris 11.4 の sendmail は IPS パッケージservice/network/smtp/sendmail)で提供され、 SMF サービス svc:/network/smtp:sendmail として動作する。 Oracle のパッケージを使う場合の更新方法は pkg update である。 下に示すソースからのビルドは、IPS パッケージより新しい版が必要な場合の手順である。 ソースからビルドした sendmail は IPS で管理されないため、以後の pkg update でファイルが上書きされる場合がある。

設定を変更したら、メールの送受信テストを行う。

関連する外部ページ

sendmail-8.18.2 インストール手順

sendmail.mc の見本

手元のマシンで、メールの中継も受信も行わず、 すべてのメールを特定のメールサーバ(SMART_HOST の行に書いたマシン)に送信だけする設定である。 メールの受信は sendmail ではなく、IMAP や POP で行うものとしている。

下の見本の example.jp と smtp.example.jp は、書き換えずに使うと動作しない。

divert(0)dnl
OSTYPE(solaris2)dnl
DOMAIN(generic)dnl
FEATURE(`masquerade_envelope')dnl
FEATURE(`use_ct_file')dnl
MASQUERADE_AS(`example.jp')dnl
MASQUERADE_DOMAIN(`localhost')dnl
EXPOSED_USER(`root')dnl
define(`confPRIVACY_FLAGS', `goaway')dnl
define(`SMART_HOST', `smtp.example.jp')dnl
define(`ALIAS_FILE', `/etc/mail/aliases')dnl
MAILER(local)dnl
MAILER(smtp)dnl

SMF による sendmail サービスの管理

Oracle Solaris 11.4 の sendmail は SMF サービス svc:/network/smtp:sendmail として動作する。

svcs -p svc:/network/smtp:sendmail
svcadm enable svc:/network/smtp:sendmail
svcadm disable -t svc:/network/smtp:sendmail
svcadm refresh svc:/network/smtp:sendmail
svcadm restart svc:/network/smtp:sendmail

既定では ローカル専用モード(local-only mode)で動作し、 ローカルホスト以外からのメールは受け付けない。 他のマシンからのメールを受け付けるときは、次のように設定する。 外部からの接続を受け付けることになるため、中継の制限とあわせて設定する。

svccfg -s svc:/network/smtp:sendmail setprop config/local_only = false
svcadm refresh svc:/network/smtp:sendmail
svcadm restart svc:/network/smtp:sendmail

起動時のオプション(MODE, QUEUEINTERVAL, OPTIONS)は /etc/default/sendmail に書く。 このファイルの内容は、システムの更新で失われない。

中継(リレー)を許可するホストの制限

sendmail は、既定では自分宛て以外のメールを中継しない。 特定のネットワークやドメインからの中継を許可するときは、 access データベースを使う。 制限せずに中継を許可すると、迷惑メールの中継に悪用される。

sendmail.mc に次の行を追加し、sendmail.cf を作り直す。

FEATURE(`access_db')dnl

/etc/mail/access に、許可する接続元と宛先を書く。 下の例では、192.0.2.0/24 からの接続と example.jp 宛ての中継を許可し、それ以外の中継を拒否する。

Connect:192.0.2         RELAY
To:example.jp           RELAY

編集したら、データベースを作り直し、サービスを再読み込みする。

makemap hash /etc/mail/access < /etc/mail/access
svcadm refresh svc:/network/smtp:sendmail
svcadm restart svc:/network/smtp:sendmail

設定後は、外部のマシンから自分のサーバ経由で第三者宛てのメールが送れないことを確認する。