sendmail.cf 作成ツールとしては、CF 以外にも sendmail に同梱されている
cf があります。FreeBSD のデフォルトの sendmail.cf も cf を使って作成さ
れており、ソースファイルが /usr/share/sendmail/cf にあります。
この cf を使って sendamil.cf を作る方法を紹介しておきます。
cf はマクロ言語プロセッサ m4 を使って構成されており、m4
のマクロと、そ
れを利用して定義された cf のマクロを使って記述されたファイルを入力とし
て受け取り、sendmail.cf を出力します。
ドキュメントは m4 (1) と /usr/share/sendmail/cf/README です。細かいこ
とはどうでも良いのですが、とりあえず m4 の基本的な記述方法だけ理解して
おいて下さい。m4 (1) の日本語マニュアルから引用します。
----------------------------------------------------------------------
マクロの呼出しは name(argument1[, argument2, ...,] argumentN) の形式を
取っています。
マクロ名とそれに続く開き括弧 `(' との間にはスペースがあってはいけません。
もしマクロ名の直後に開き括弧が続いていなければ引数なしのマクロ呼出しとし
て処理されます。
----------------------------------------------------------------------
特に重要な組み込みマクロは define と dnl
の二つで、前者は新しいマクロ
を定義し、後者は行末までを破棄します。また、マクロ展開を避けるために文
字列をクオートするには、文字列を `' で括ります。
まず cf に読み込ませる sendmail.cf のソースファイルを記述します。次の
内容を /usr/share/sendmail/cf/cf/ で sendmail.mc
という名前で保存して
下さい。もちろん your.domain は適切な文字列に変更しておきます。
----------------------------------------------------------------------
ファイル名:/usr/share/sendmail/cf/cf/sendmail.mc
| divert(0)dnl VERSIONID(`$Id$') OSTYPE(`bsd4.4')dnl DOMAIN(`generic')dnl FEATURE(`access_db', `hash -o /etc/mail/access')dnl FEATURE(`virtusertable', `hash -o /etc/mail/virtualusertable')dnl FEATURE(`masquerade_envelope')dnl MASQUERADE_AS(`your.domain')dnl FEATURE(`local_lmtp')dnl define(`confCW_FILE', `-o /etc/mail/local-host-names')dnl define(`confNO_RCPT_ACTION', `add-to-undisclosed')dnl define(`LOCAL_MAILER_FLAGS', LOCAL_MAILER_FLAGS`'P)dnl define(`confMAX_MIME_HEADER_LENGTH', `256/128')dnl define(`confPRIVACY_FLAGS', `authwarnings,noexpn,novrfy')dnl MAILER(`local')dnl MAILER(`smtp')dnl |
----------------------------------------------------------------------
いろいろ書いてありますが、CF の記述と対応する部分も多いので、だいたい
想像がつくと思います。
# いくつか、行の最後を dnl で終わらせているものかありますが、これは作
# 成された sendmail.cf の行末に、余分な改行がつくのを抑制するためです。
# sendmail.cf では改行があっても大した影響はないので、趣味の問題ですけ
# ど。
さて、重要なのは MASQUERADE 関連と access_db 機能です。
MASQUERADE はメールを送信した実際のホスト名ではなく、別名を使うという
指定です。以前はメールアドレスとして、実際のホスト名を含めた名前を使う
のが主流でしたが、今は
user@domain (ホスト名なしのドメイン名だけにする)
user@mail.domain (ホスト名として本名ではなく mail のような別名を使う)
といったように、むしろ本当のホスト名を出さないことの方が多いと思います。
このような場合に From: へッダや envelope 部分に別名をつけるための設定
が MASQUERADE_AS と FEATURE(`masquerade_envelope')
です。ホスト名をそ
のまま使う場合には MASQUERADE 関連の設定は不要ですから、削除してくださ
い。
なお MASQUERADE 関連の設定を行った場合には/etc/mail/local-host-names
に、受け取るメールアドレスのドメイン名部分(@ の右側)を書いておく必要
があります。たとえば user@your.domain 宛てのメールを受け取る場合には、
一行
----------------------------------------------------------------------
ファイル名:/etc/mail/local-host-names
| your.domain |
-------------------------------------------------------------------
と書いておきます。実際のホスト名に関しては local-host-names に書かなく
ても自動的に受け取ります。
次に access_db ですが、こちらは sendmail
8.9 以降で標準となった対スパ
ムメールの設定手段で、メールの転送制限などを access_db で指定したファ
イルで一括して行うことが可能になっています。
FreeBSD 4.x でしたら、インストール後に /etc/mail/access.sample
という
ファイル名で例が用意されていますので、読んでみて下さい。192.168.1.0/24
のネットワークからメール転送を許可するには、/etc/mail/access に
----------------------------------------------------------------------
ファイル名:/etc/mail/access
| 192.168.1 RELAY |
----------------------------------------------------------------------
と書きます。
access_db は aliases と同様、高速化のためにテキストファイルからデータ
ベースに変換しておく必要があります。上で作成した sendmail.mc のように、
access_db に hash 形式のデータベースを利用する設定にした場合には、次の
ように makemap (8) コマンドを用いて /etc/mail/access.db
ファイルを作成
します。
| # makemap hash /etc/mail/access < /etc/mail/access |
更に仮想ユーザー(複数ドメイン)の為のファイルを用意します。
(/etc/mail/virtusertable)
これも上の /etc/mail/access と同じくサンプルが用意されているのでそれを
コピーします。
| #
cp /etc/mail/virtusertable.sample /etc/mail/virtusertable # vi /etc/mail/virtusertable |
そして編集します。
----------------------------------------------------------------------
ファイル名:/etc/mail/virtusertable
| user1@hoge.net user user2@hoge.net user@mail.domain @hogehoge.com user @hage.jp %1@internet.com |
----------------------------------------------------------------------
これも access.db と同様にデータベースに変換します。
| # makemap hash /etc/mail/virtusertable < /etc/mail/virtusertable |
以上の準備が終わったら、cf を使って sendmail.cf を作成しましょう。
|
# m4 -D_CF_DIR_=/usr/share/sendmail/cf/
\ |
(/usr/sheare/sendmail/cf/cf ディレクトリで作業すれば -D_CF_DIR_ の指定は不要です。)
|
/usr/sheare/sendmail/cf/cf ディレクトリで作業した場合 # cd /usr/share/sendmail/cf/cf |
これでカレントディレクトリに sendmail.cf が作成されます。最後に、作成
した sendmail.cf を /etc/mail
ディレクトリにコピーして sendmail を再起
動すれば作業完了です。