ブログ ランキング
インターネットサーバー設定・運用
HOME  | MYBlog  | MAIL 

sendmail.cf の設定

cf を使った作業手順

sendmail.cf の作成には sendmail に付属の cf という sendmail.cf 作成ツールを使います。
cf を使うには m4 というマクロ言語で定義ファイル(.mc)を作成します。
sendmail-8.12.10/cf/cf には各種OS用の標準的な雛型となる .mc ファイルが用意されています。
ここでは Solris 用のmc ファイル(generic-solaris.mc)をsendmail.mc としてコピーします。

$ cd sendmail-8.12.10/cf/cf
$ cp generic-solaris.mc sendmail.mc

そして sendmail.mc をサイトのポリシーに従い設定し、「make」、「make install」で sendmail.cf とsubmit.cf が/etc/mail にコピーされます。

$ make sendmail.cf
$ su
# make install-cf
submit.cf

sendmail 8.12では、25/TCPでメールを待ち受けるMTAと、MSA(Message submission agent)の機能が分離されました。
MSAとはローカルからのメールを587/TCPで待ち受ける特殊なMTAで、メール送信(投稿)のための構成要素です。
submit.cf はMSA のための設定ファイルで、メッセージの情報が不足していたり、形式が不完全であった場合にメッセージ形式を整形してからMSAは配送処理を行います。
標準では、/usr/bin/mailのようなMSP(ローカルホストからメールを送るプログラム)はsendmailのバイナリを実行しますが、 その際にMSAと通信してメールを送ります。
MSAはMSPから送信されたメールを受け取り、MTAに渡す機能を果たします。

想定するネットワーク

外側メールサーバは部門メールサーバからのメール送受信をリレーします。

外側メールサーバ 部門メールサーバ
ホスト名 gw.example.co.jp mail.example.co.jp
ドメイン名 example.co.jp example.co.jp
LANのアドレス 192.168.1.0/24 192.168.1.0/24
IPアドレス 192.168.1.101 192.168.1.200

sendmail.cf の設定

外側メールサーバの設定

外側メールサーバを想定した設定です。インターネット側への配送はDNSを参照し、組織内への配送は静的配送します。


【sendmail.mc の内容】
VERSIONID(`$Id: generic-solaris.mc,v 8.13 2001/06/27 21:46:30 gshapiro Exp $')
OSTYPE(solaris2)dnl
DOMAIN(generic)dnl
define(`confTO_IDENT', `0s')
Dwgw
Dmexample.co.jp
FEATURE(`accept_unresolvable_domains')
FEATURE(`accept_unqualified_senders')
FEATURE(`mailertable')
MAILER(local)dnl
MAILER(smtp)dnl

以下、追加した定義について説明します。

  • Dwgw
  • このメールサーバのホスト名を指定する。

  • Dmexample.co.jp
  • このメールサーバの属するドメイン名を指定する。

  • OSTYPE(solaris2)
  • 使用しているOSの種類を指定する。

  • define(`confTO_IDENT', `0s')
  • IDENTによる認証を無効にする。 これはIDENT認証を有効にしていないサーバが多いため。 有効になっていないとタイムアウトを待つことになり、メール送信に時間がかかるのを防ぐため。

  • FEATURE(`accept_unresolvable_domains')
  • 送信者のドメインがDNSで名前解決できない場合でも受信を許可する。

  • FEATURE(`accept_unqualified_senders')
  • 送信者のメールアドレスが絶対表記でなくても受信を許可する。

  • FEATURE(`mailertable')
  • mailertable機能で配送経路を定義します。


なお、MSAの機能は使わず587/TCPポートを閉じる場合は
FEATURE(`no_default_msa')
をsendmail.mcに記述します。

必要となる設定ファイル

以下の設定ファイルを/etc/mail ディレクトリに作成します。

local-host-names
relay-domains
mailertable

【local-host-names の作成】

受信するメール(ローカルに配信)のドメインを記述します。(クラス$=w)
(sendmail-8.9.xまではsendmail.cwというファイル名)

/etc/mail/local-host-names
gw.example.co.jp

【relay-domains の作成】

sendmail 8.9以降ではデフォルトで中継を拒否する設定になっています。
内部からのメールの中継を許可するために /etc/mail/relay-domains に記述します。(クラス$=R)

/etc/mail/relay-domains
example.co.jp
192.168.1

・デフォルトではサブドメインも含んで「*example.co.jp」の中継が許可されます
・個々のホスト名に基づいて中継の許可を厳密に設定させたい場合は「relay_hosts_only」を使用します
・外部への送信を許可するホストとして192.168.1を定義します

relay-domains の代わりに/etc/mail/accessでも中継の許可をコントロールできます。
access.dbを利用するためにはmcファイルに以下を追加します。
FEATURE(`access_db')

上記の定義でhash形式のデータベース宣言がsendmail.cfに追加されます。
dbm形式のデータベースを使用したい場合は次のように引数を指定します。

FEATURE(`access_db',`dbm -o /etc/mail/access')

「-o」はマップがオプションであることを意味します。(マップがオープンできない場合は無視される)
access_dbが必ず使用されるようにしたい場合は「-o」を指定しなければいい。

/etc/mail/access

localhost		RELAY
192.168.1		RELAY
mail.example.co.jp	RELAY
example.co.jp		RELAY
.example.co.jp		RELAY

【mailertable の作成】

example.co.jp		esmtp:mail.example.co.jp

example.co.jpにのみマッチした場合に第2フィールドで指定した中継先に配送します。
サブドメインも含めたい場合は以下のように指定します。

.example.co.jp	 	esmtp:%1.example.co.jp

データベース化

mailertable、access ファイルはsendmailが理解できるデータベース形式に変換する必要があります。
データベース形式への変換はsendmailのソースに付属するmakemap コマンドを使用します。


書式
makemap switches dbtype 出力ファイル < 入力ファイル

makemap のオプション
switch 説明
-f 大文字を小文字に変換しない
-l 使用可能なデータベースのタイプを表示
-o ファイルを上書きせず、既存のものに追加

dbtypeの形式には「ndm」「hash」「btree」がありますが、ここではhash形式のデータベースを使用しているので以下のコマンドを実行します。

# /usr/sbin/makemap hash /etc/mail/mailertable < /etc/mail/mailertable

以上のコマンドで、/etc/mail/mailertable.db が生成されます。

部門メールサーバの設定

部門メールサーバの設定についても、外側メールサーバとほとんど共通です。
異なるのは以下の点です。

  • ローカルにメールボックスを持つため、ローカル配信するアドレスを指定
  • リレーサーバの指定

【sendmail.mc】
VERSIONID(`$Id: generic-solaris.mc,v 8.13 2001/06/27 21:46:30 gshapiro Exp $')
OSTYPE(solaris2)dnl
DOMAIN(generic)dnl
define(`confTO_IDENT', `0s')
Dwmail
Dmexample.co.jp
FEATURE(`mailertable')
FEATURE(`accept_unresolvable_domains')
FEATURE(`accept_unqualified_senders')
define(`SMART_HOST',`gw')
MAILER(local)dnl
MAILER(smtp)dnl
define(`SMART_HOST',`gw')
リレー先を外側メールサーバgwに指定します。
【local-host-names の作成】

部門メールサーバでは、メールドメイン宛てのメールを受け取らなければいけないので、 自分のホスト名に加え、そのドメインも定義します。

/etc/mail/local-host-names

mail.example.co.jp
example.co.jp

【relay-domains の作成】

外側メールサーバと同じく以下の定義をします。

/etc/mail/relay-domains

192.168.1
example.co.jp

起動

# /usr/lib/sendmail -L sm-mta -bd -q30m
# /usr/lib/sendmail -L sm-msp-queue -Ac -q30m

上がMTA用の起動コマンドで、下がMSA用です。