FreeBSD をインストールした時に入っている sendmail.cf は、
という条件が揃う場合にはそのまま使うことができる。
サイトの都合でカスタマイズしたい場合は
make && make install
して sendmail.cf(と submit.cf)を生成・インストール
make restart
して sendmail を再起動
という手順。
my.domain に対するスプールホスト用の設定例
divert(0)
VERSIONID(`...')
OSTYPE(freebsd4)
DOMAIN(generic)
MASQUERADE_AS(`my.domain')dnl @ の後ろをドメイン名にする
MASQUERADE_DOMAIN(`$j')dnl 自分の FQDN が書換え対象
EXPOSED_USER(``daemon news usenet postmaster MAILER-DAEMON'')
FEATURE(`limited_masquerade')dnl 書換えるドメインを制限
FEATURE(`masquerade_envelope')dnl エンベロープも書換える
FEATURE(`allmasquerade')dnl To:, Cc: などもすべて書換える
FEATURE(access_db, `hash -o -T<TMPF> /etc/mail/access')
FEATURE(blacklist_recipients)
FEATURE(local_lmtp)
FEATURE(mailertable, `hash -o /etc/mail/mailertable')
FEATURE(virtusertable, `hash -o /etc/mail/virtusertable')
define(`confCW_FILE', `-o /etc/mail/local-host-names')
define(`confMAX_MIME_HEADER_LENGTH', `256/128')
define(`confNO_RCPT_ACTION', `add-to-undisclosed')
define(`confPRIVACY_FLAGS', `authwarnings,noexpn,novrfy')
MAILER(local)
MAILER(smtp)
my.domain に属するクライアント用の設定例
divert(0) VERSIONID(`...') OSTYPE(freebsd4) DOMAIN(generic) MASQUERADE_AS(`my.domain')dnl @ の後ろをドメイン名にする MASQUERADE_DOMAIN(`$j')dnl 自分の FQDN が書換え対象 EXPOSED_USER(``daemon news usenet postmaster MAILER-DAEMON'') FEATURE(`limited_masquerade')dnl 書換えるドメインを制限 FEATURE(`masquerade_envelope')dnl エンベロープも書換える FEATURE(`allmasquerade')dnl To:, Cc: などもすべて書換える define(`LOCAL_RELAY', `mx.my.domain.') define(`MAIL_HUB', `mx.my.domain.') define(`SMART_HOST', `mx.my.domain.') define(`confCW_FILE', `-o /etc/mail/local-host-names') define(`confMAX_MIME_HEADER_LENGTH', `256/128') define(`confNO_RCPT_ACTION', `add-to-undisclosed') define(`confPRIVACY_FLAGS', `authwarnings,noexpn,novrfy') MAILER(smtp)
他のホストからの転送を受けるかどうかを設定するファイル。 無ければ、自分で受けとるアドレスへのメイルのみ受け入れる。
サンプルが /etc/mail/access.sample にある。
自分の FQDN 以外のアドレスも受けとる場合に作る。 例えば
# # sample /etc/mail/local-host-names # foo.my.domain bar.my.domain
となっていると、@foo.my.domain および @bar.my.domain 宛も受けとる。 自ホスト名を書く必要はない。 ワイルドカードは使えない。
cf のデフォルトではホスト名が使われる。
戦略としては、メイルアドレスの書換えを利用して、自ホスト名 (FQDN) のみ希望のドメイン名に書換える手法をとる。
MASQUERADE_AS(`my.domain')dnl From: 等を @my.domain にする MASQUERADE_DOMAIN(`$j')dnl 自ホスト名が書換え対象 EXPOSED_USER(``daemon news usenet postmaster MAILER-DAEMON'') FEATURE(`limited_masquerade')dnl 自ホスト名のみ書換える FEATURE(`masquerade_envelope')dnl エンベロープも書換える FEATURE(`allmasquerade')dnl Cc: のアドレスなども書換える
を定義。
なお、
EXPOSED_USER(`usernames ...')
または
EXPOSED_USER_FILE(`filename')
で指定されたユーザーに関しては書換えは行なわれない。
これらが未定義であっても、root はデフォルトで入っている。
CF-3.7W では
root daemon news usenet postmaster MAILER-DAEMON
が定義されていたので、同様の動作を望む場合は
EXPOSED_USER(``daemon news usenet postmaster MAILER-DAEMON'')
を定義する。 ハイフンが入っているため `...' ではなく ``...'' で括る必要があることに注意。
※ limited_masquerade を使う理由
MASQUERADE_DOMAIN
(または MASQUERADE_DOMAIN_FILE
)と
limited_masquerade を用いないと、仮想ドメインを扱う時に混乱が生じる。
具体的には、
ローカルで受けとるべき別々のアドレスを Cc: や From: で指定していても、
それらがすべて MASQUERADE_AS
のアドレスに書換えられてしまう。
例) foo.my.domain と bar.my.domain が local-host-names にあって
MASQUERADE_AS(`foobar.my.domain')
かつ FEATURE(`allmasquerade')
の場合
limited_masquerade を定義しないと
To: alpha@foo.my.domain Cc: bravo@bar.my.domain From: charlieが
To: alpha@foobar.my.domain Cc: bravo@foobar.my.domain From: charlie@foobar.my.domainに書き換わってしまう。 このようなことを防ぐために、limited_masquerade を使って自分の FQDN だけを書き換え対象とする。
CF-3.7W の ALWAYS_APPEND_DOMAIN=yes に相当。
FEATURE(`always_add_domain')
を定義する。
/etc/mail/local-host-names に受け取るホスト名・ドメイン名を列挙する。
CF-3.7W の ACCEPT_LOWER=yes に相当する機能は cf には無い。
サブドメインの数がそれほど多くなく、変更が滅多にないのであれば、すべて local-host-names に書く手もある。 しかし、local-host-names ではワイルドカードは使えないので、変更があるたびに設定を変えなければならない。 それを避けるには
FEATURE(`bestmx_is_local')
を定義して
best MX であれば受け取るようにする
のいずれかで対応する。
define(`LOCAL_RELAY', `hostname.')dnl @ 以下がない時に送られるホスト define(`MAIL_HUB', `hostname.')dnl @my.host の時に送られるホスト define(`SMART_HOST', `hostname.')dnl @other.host @[x.y.z.w] の時の送り先
を全部同じホストに定義。 ホスト名の最後に . を付ける。
まず /etc/mail/local-host-names でローカルに受け取るドメインに指定した上で /etc/mail/virtusertable にユーザー名のマッピングを記述するか、ユーザー名のマッピングが必要ないのであれば mailertable でも対応可能。
※ masquerading していて limited_masquerade を定義しない時は注意が必要。
既述の通り、To: Cc: From: のうちローカルで受けとるべきドメインがすべて
MASQUERADE_AS
のものに書換えられてしまうので、
MASQUERADE_EXCEPTION(`foo.my.domain bar.my.domain')
などと指定して、これらについて書換えが行なわれないようにする必要がある。
CF-3.7W の MAIL_RELAY_RESTRICTION=yes と LOCAL_HOST_IPADDR='...' に相当。
FEATURE(access_db, `hash -o -T<TMPF> /etc/mail/access')
を定義した上で(標準の sendmail.cf でも定義されている)、/etc/mail/access に
192.168 RELAY
などと書く。
CF-3.7W の COPY_ERRORS_TO='...' に相当。
define(`confCOPY_ERRORS_TO', ``MAILER-DAEMON'')
を定義する。 デフォルトでは未定義。
FEATURE(`relay_based_on_MX')
を定義すればよい。