《機能定義ファイルの解説》 CF-3.7W/Jun.14,1998 (sendmail 8.7 のサポートによって追加された機能については、V6 および 8.7 と いう文字列を検索して参照してください。また、sendmail 8.8 のサポートによって 追加された機能については、V7 および 8.8 という文字列を検索して参照してくだ さい。sendmail 8.9 のサポートによって追加された機能については、V8 および 8.9 を検索して参照してください。) [記述上の注意] 機能定義ファイル (*.def) はシェル変数への代入文の集まりで構成されています。 したがって、イコール(=)の前後にスペースを空けてはいけませんし、定義しようと する値に $ のようなシェルに解釈されてしまう文字やスペースが含まれる場合には、 クォートで囲んでおく必要があります。また、複数行に渡る値を定義する場合には、 継続を示すバックスラッシュ(\)を行末に必要とします。 例) VAR_A='first line \ second line' VAR_B="first line \\ second line" ダブルクォート内で継続を示すバックスラッシュを記述するには、バックスラッ シュを2つ連続させる必要があります。ダブルクォート内で $ を記述する場合は、 変数と解釈され展開されてしまわないようにバックスラッシュを先行させる必要が あります。また、クォートされていない部分において # 以降の文字列はコメント として無視されます。 また、記述の際には継続行の先頭の空白は無視されないことに注意してください。 sendmail.cf では、行頭に空白がある行は直前行の継続であると見なされるので、 sendmail.cf に継続行をそのまま伝えることができます。 すべての定義において継続行による記述が許されているわけではないので、詳し くはマニュアルの各項目の記述を参照して下さい。特に(継続行可)と記載されてい るものは、継続行の先頭に空白は必要ありません。 [デフォルトの設定] Standards ディレクトリの中で作成される *.def には、それぞれの CF_TYPE での 設定において利用可能なシェル変数が全て記述されています。したがって、作成しよ うとしている sendmail.cf の CF_TYPE と等しいものをコピーして、コピーしたファ イルの中のシェル変数への代入定義を編集することで設定が完了します。 *.def の中で予め # 1つでコメントアウトされている代入はデフォルトで設定され るものですので、変更の必要がない場合はそのままにしておきます。これは、あくま でもコメントなので、コメントアウトされたままで変更を行なっても、なにも影響を 与えません。また # 2つでコメントアウトされている代入は、デフォルトでは設定さ れるものではないことを示しています。この定義を有効にするためには、2つの # を 取り除く必要があります。 [各変数の説明] 項目の先頭の記号は、その項目の重要度を表しています。 ☆: 必ず確認しておくべき項目 ◎: 必要ならば設定する項目 ○: 実装上用意してあるもので、無視してしまって良い項目 △: 古いバージョンとの整合性のために残してある項目 各項目の末尾に [] で括って示されているのは、対応する Master ディレクトリ内の 機能設定処理ファイルの名前を表しています。 △ ツールの位置情報の設定 #MASTERDIR= #TOOLDIR= この2つは Makefile においてあらかじめ設定される変数であるから、コメン トのままでよい。 #MASTERDIR=Master #TOOLDIR=Tools ☆ 生成する sendmail.cf の種別の宣言 CF_TYPE=R8V8/R8V7/R8V6/R8/R5/R5-mtc/R8V8-null/R8V7-null/R8V6-null/R8-null/ R5-null/R8V8-check/R8V7-check R8V8: sendmail 8.9 以降の拡張機能が利用可能な設定 R8V7: sendmail 8.8 以降の拡張機能が利用可能な設定 R8V6: sendmail 8.7 以降の拡張機能が利用可能な設定 R8: sendmail R8 の標準設定 R5: sendmail R5 (マルチトークンクラス拡張なし)の標準設定 R5-mtc: マルチトークンクラス拡張を行った R5 sendmail の標準設定 拡張が行われている sendmail の例: 1.6W patch が当たった WIDE版 sendmail IDA版 sendmail (SunOS 4.1.3 の sendmail ?) (NEWS OS 4.2.1 の sendmail ?) R8V8-null: sendmail 8.9 以降の拡張機能が利用可能な単一ホスト転送設定 R8V7-null: sendmail 8.8 以降の拡張機能が利用可能な単一ホスト転送設定 R8V6-null: sendmail 8.7 以降の拡張機能が利用可能な単一ホスト転送設定 R8-null: sendmail R8 の単一ホスト転送設定 R5-null: sendmail R5 の単一ホスト転送設定 R8V8-check:sendmail 8.9 以降の check_* ルールセット関連のみの生成用 R8V7-check:sendmail 8.8 以降の check_* ルールセット関連のみの生成用 *-check は、配信制限機能を持たない sendmail.cf (check_* といった ルールセットが存在しないもの)を sendmail 8.8/8.9 で利用している 場合に、その sendmail.cf に単純に追加して配信制限が行われるように したい場合に利用する。生成された sendmail.cf を、使用中の sendmail.cf の最後に単純に追加するだけで、配信制限機能が組み込める。 詳しい設定方法については、[smtpcheck] を参照。 △ 生成する sendmail.cf の種別の宣言 #PROTO=<プロトタイプファイル名> #FEATURE=<各種機能の付加処理を行なうファイルリスト名> どちらも MASTERDIR に存在するファイルを指定する。 これらは CF_TYPE の定義によって設定されるので、コメントのままで良い。 従来のバージョン通り CF_TYPE を定義せず PROTO と FEATURE を明示的に 指定することも可能である。 ◎ 共通設定ファイルの読み込み指定 [default] DEFAULT_FILE=<デフォルト設定ファイル> 複数のホストに共通な設定を記述したファイルを指定する。 デフォルト設定ファイルで定義された内容は、機能定義メインファイル (make の引数に指定する .def ファイル)から参照され .cf ファイルを 生成する際に利用される。ただし .def ファイルに定義される内容によっ て上書きされることに注意(CF-3.3W7 以降)。 共通設定ファイル内では、DEFAULT_REVISION_ID を用いてデフォルト設定 ファイルの識別子を定義することが可能。 DEFAULT_REVISION_ID= ◎ sendmail.cf のバージョンIDの設定 [version] DEF_ID= 作成する sendmail.cf の識別子の定義。 sendmail.cf に「コメント」として書き込まれる。 VERSION=<ツールバージョンID> VERSION_SEPARATOR=<区切り文字> LOCAL_VERSION=<ローカルバージョンID> Received: ヘッダに現れたり、SMTP サーバに接続した際に表示されるバー ジョン表記の部分に現れる sendmail.cf 識別子を定義。 "$VERSION$VERSION_SEPARATOR$LOCAL_VERSION" が、作成した sendmail.cf の 識別子となる。 ☆ OS種別の設定 [ostype] OS_TYPE= ディレクトリ Master/OSTYPE にあるファイルのうちの何れかのファイル名を 指定する。 何も指定しなかった場合には、sendmail.cf 作成時に警告メッセージが出力さ れる。 ☆ sendmail の種別の設定 [general] MX_SENDMAIL=yes/no sendmail.mx を使用する場合は yes を、sendmail.nomx を使用する場合は no を指定する。sendmail.nomx を使用する場合には、さらに他の項目でも sendmail.nomx 用の設定を行なう必要がある。通常、sendmail をそのまま コンパイルした場合に生成されるものは sendmail.mx である。.nomx 版を 生成したい場合は、NAMED_BIND=0 を指定してコンパイルをおこなう。 その他の関連する設定については、sendmail.mx というキーワードをサーチ して該当場所を探すこと。 デフォルトは yes。 ☆ ホスト名に関する設定 [general] MY_DOMAIN=<ドメイン名> FQDN (Fully Qualified Domain Name; host.sub.domain.attr.jp 形式) から ホスト名の部分を取り除いたもの(sub.domain.attr.jp)を指定する。 ここに定義した名前は、sendmail.cf 中で $m により参照される。 MY_NAME や OFFICIAL_NAME と同じように sendmail の起動時に自動的に設定 されるものであるが、sendmail R5 を用いる場合や、sendmail R8 であっても sendmail.nomx を用いる場合、あるいは、自動的に設定される値が都合が悪い 場合は定義する。また、sendmail.mx で起動時に正しく設定されるようになっ ている場合でも、情報の取得にネームサーバを参照していることから、システ ム起動時に、ネームサーバにアクセスできなかった場合は、誤った情報が設定 され、メールがフェイルする可能性がある。よって、計算機の起動時に、この ような事故が発生することが予想される場合は、明示的に定義しておくことが 望ましい。新しい sendmail R8 では、ネームサーバからの反応が返ってこな い場合は、60秒程度待ってからもう一度ネームサーバに問い合わせを行い、 それでも、FQDN が得られない場合は、sendmail の起動を中止するので、 事故が未然に防げるようになっている。 SunOS に付属の sendmail では、デフォルトで定義されるドメイン名として、 NIS のドメイン名が参照されることがあり、NIS ドメイン名がメールのドメ イン名と異なる場合は、明示的に定義しなおす必要がある。NIS のドメイン 名は、セキュリティ上、メールのドメイン名に等しくしておくべきではない ので、基本的には明示的に定義しなおすことになる。 MY_NAME=<ホスト名> ホスト名を指定する。ここに定義した名前は、sendmail.cf 中で $w により 参照される。sendmail は起動時に自動的に設定を行なうようになっているの で、sendmail によって正しく設定される場合には指定する必要はない。ホス ト名は FQDN でも一語のものでも構わないが、R5 では FQDN を、R8* では一 語のものを指定するのが一般的である。特に sendmail R5 以前のバージョン の sendmail.mx を使用する場合は、必ず FQDNを指定すること。 [[ DNS と関連した設定上の注意点 (非常に重要) ]] sendmail.mx を使用する場合は、DNS から MX レコードを検索して配送 先を決定することになる。もし、検索した MX レコードの右辺部分に自分 自身が含まれていた場合、考えられる状況としては以下のものがある。 1. 自分が最終目的ホストである 1'. UUCP による接続先への配送などである(自分が IP/UUCP 境界) 2. セカンダリ以下のホストとして指定されている このような状況によって、自分の名前が MX レコードの右辺に指定されて いた場合、sendmail はそれが自分の名前であるということを把握して 例外処理をしなければならない。さもないと自分自身に対するメールの 配送ループが発生してしまうことになる(実際にもし自分自身に SMTP で 接続してしまった場合は sendmail は配送エラーを発生させるようになっ ているのでループは発生しない)。 一般に、1. の場合は、MX レコードの*左*辺の名前が自分の MY_NAME や OFFICIAL_NAME でない場合には、MY_ALIAS や ACCEPT_ADDR にその名前 を定義することになる。また、1' の場合は、[deliver] で MX レコードの *左*側の名前に対して静的な配送ルールを定義することになる。 ところが、2. に関しては、MX レコードの*右*辺の名前を sendmail.cf で 定義しておく必要がある。 sendmail R5 では、得られた MX レコードの右辺に自分の名前が含まれて いるかどうかを MY_NAME の値と比較することによって判定しているので、 MY_NAME は必ず MX レコードの右辺に現れる FQDN と同一である必要がある。 sendmail R8 では、MY_ALIAS (クラス w) と比較することによって判定して いるので、MX レコードの右辺として出現する自分を指す全ての名前が MY_ALIAS に登録されていなければならない(OFFICIAL_NAME は自動的に MY_ALIAS に登録されるので、明示的に指定する必要はない)。 もし、2. の状況でこれらの設定が間違っていると、プライマリのメール サーバがダウンしている期間中だけメールがエラーになるという一見謎 めいた症状が発生することになる。 なお、RFC では DNS において MX レコードの右辺値には CNAME レコードの 左辺値として定義されている名前を定義してはいけないことになっている ので、必ずA レコードの左辺値を定義すること。 OFFICIAL_NAME=<正式名称> そのホストの FQDN を設定する。ここに定義した名前は、sendmail.cf 中で $j により参照される。通常は MY_NAME などと同じく sendmail の起動時に 自動的に設定されるので、sendmail によって正しく設定される場合には指定 する必要はない。明示的に設定する場合は、MY_NAME が FQDN であるならば '$w' を、一語のものならば '$w.$m' を指定する。MY_NAME、MY_DOMAIN を明 示的に定義した場合には、OFFICIAL_NAME も正しく設定されるように注意す る必要がある。特に R5 の場合には sendmail の起動時にデフォルトとして '$w' が定義されるので、MY_NAME を FQDN で定義している場合には、 OFFICIAL_NAME は定義しなくてよい。 MY_ALIAS=<別名> (複数可)(継続行可) ホストが複数の名前を持つ場合に、その別名を指定する。sendmail の起動時 に、自動的に取得されるホスト名が(ホスト名として FQDN が得られた場合は 最初の . までのホスト名、新しい sendmail R8 であれば、各 . から後ろを 削除した省略形名称も同時に)別名として暗黙に登録される。 また、OFFICIAL_NAME として定義された名称も別名として暗黙に登録される。 ここに指定した別名は、メールの配送時に全て OFFICIAL_NAME に書き換えら れることに注意。書き換えが行われないようにしたい場合は ACCEPT_ADDR 等 を利用するか、ALIAS_REWRITE を no に指定する。 USE_cw_FILECLASS=yes/optional/no MY_ALIAS で別名を列挙せずに、別ファイル /etc/sendmail.cw を利用して別 名を記述するようにしたい場合に yes を指定する。optional (R8* のみで 有効)を指定すると、/etc/sendmail.cw が存在しなかった場合に警告を 出さない。/etc/sendmail.cw は sendmail の起動時に読み込まれるので、 変更した場合は再起動が必要になる。 デフォルトは no。 cw_FILE_PATH= USE_cw_FILECLASS を yes にした場合のデフォルトパスは /etc/sendmail.cw になっている。/etc/sendmail.cw 以外のパス名を使用したい場合には cw_FILE_PATH を定義することで変更することができる。 デフォルトは /etc/sendmail.cw。 ACCEPT_OFFICIAL=yes/no user@OFFICIAL_NAME 宛のメールを受理するかどうかを指定する。 デフォルトは yes。 ALIAS_REWRITE=yes/no MY_ALIAS に指定した別名を OFFICIAL_NAME に書き換えないようにしたい 場合に no を指定する。ただし、エンベロープのアドレスについては、 必ず OFFICIAL_NAME に書き換えられるので、エンベロープについても 書き換えを行わないようにするためには、ACCEPT_ADDR 等を利用する。 デフォルトは yes。 ☆ 使用されるアドレスに関する設定 [address] LOCAL_ADMIN_USERS=<ユーザ名> LOCAL_USERS=<ユーザ名> (複数可)(継続行可) <ユーザ名が列挙されたファイルのパス> root や news など管理用アカウントから発信されるメールは、どのホストか ら発信されたものかが容易に特定できるべきであり、また、ホスト毎に管理者 が異なるような場合には、それぞれのホストで発信された root や news 宛 のメールは、それぞれのホストの管理者に届くようになっているべきである。 そのため、root や news など管理用アカウントに関するアドレスには、ジェ ネリックなアドレスでなくホスト名を含むアドレスを使用すべきである。 LOCAL_USERS は、このような扱いをすべきユーザを指定するのに用いる。 root daemon postmaster MAILER-DAEMON news usenet は、このように扱うべ き一般的なユーザであるので、LOCAL_ADMIN_USERS にあらかじめ定義されて いる。それ以外のユーザについては LOCAL_USERS に定義する。 LOCAL_USERS にはユーザ名を列挙しても、ユーザ名が列挙されたファイル のパスを指定してもよい。 例1) LOCAL_USERS='guest demo test' 例2) LOCAL_USERS=/etc/sendmail.localusers 例3) LOCAL_USERS='-o /etc/sendmail.localusers' (R8* のみ) 例3は、/etc/sendmail.localusers というファイルが存在しなくても エラーとして扱わないようにするオプション指定をする場合の例である。 FROM_ADDRESS= メールの発信時に自動的に From: ヘッダに付加する user@address の "address" を定義する。OFFICIAL_NAME と同じものを利用する場合は '$j'、 MY_DOMAIN と同じものを利用する場合は '$m' を指定することが可能である。 もちろん、アドレスとして設定したい任意の文字列を定義することもできる。 デフォルトは '$j'。 例1) FROM_ADDRESS='$m' 例2) FROM_ADDRESS='$j' 例3) FROM_ADDRESS='kuis.kyoto-u.ac.jp' RECIPIENT_GENERIC=yes/no To: や Cc: などの配送先指定フィールドで user@domain のように @domain 部が指定されておらず、単に user と書いてあった場合に、自動的に付加する @address の "address" として、FROM_ADDRESS と OFFICIAL_NAME のどちらを 使用するかを指定する。 yes を指定すると、From: と同様に FROM_ADDRESS に指定されたアドレスが 利用され、no を指定すると '$j' (OFFICIAL_NAME) が利用される。 デフォルトは no。 ◎ アドレスの書き換えに関する設定 [address] REWRITE_GENERIC_FROM=yes/lower/no REWRITE_GENERIC_TO=yes/lower/no From:/To:, Cc: に記載されているアドレスについて、最初から @MY_NAME、 @OFFICIAL_NAME、@MY_ALIAS などが用いられていても、@FROM_ADDRESS への 書き換えを行ないたい場合に yes を指定する。lower を指定した場合は、 さらに @*.MY_DOMAIN に対しても @FROM_ADDRESS への書き換えを行なう。 デフォルトは no。 REWRITE_LOCAL_ON_RELAY=generic/strip/no To: user@myname.mydomain 宛のメールを SPOOL_HOST に集める場合に、ヘッ ダを To: user@spoolhost.mydomain あるいは user@mydomain に書き換えたい ことがある。REWRITE_LOCAL_ON_RELAY に generic を定義すると、ヘッダの @myname.mydomain を @FROM_ADDRESS に書き換えてからメールを転送する。 REWRITE_LOCAL_ON_RELAY を strip にすると、@myname.mydomain の部分を 削除して、単に user としてから SPOOL_HOST に転送する。この場合、 SPOOL_HOST が必要に応じて user に対してアドレスを補うことになる。 デフォルトは no。 ◎ 特定のユーザのためのアドレスに関する設定 [specialfrom] SPECIAL_FROM=<特別アドレス> SPECIAL_USERS=<特定ユーザ> (複数可) <特定ユーザ名が列挙されたファイルのパス> SPECIAL_USER_HEAD= SPECIAL_USER_TAIL= 特定のユーザに対して、メールの発信時に OFFICIAL_NAME, FROM_ADDRESS 以外の特別なアドレスを利用させたい場合に利用する。特別なアドレスを SPECIAL_FROM に指定し、そのアドレスを From として利用したいユーザを SPECIAL_USERS で指定する。 SPECIAL_USERS にはユーザ名を列挙しても、ユーザ名が列挙されたファイルの パスを指定してもよい。 パス名の前にスペースで区切られた -o を付加することによって、その ファイルが存在しなくてもエラーにならないようにすることができる。 SPECIAL_USERS は完全一致の定義であるが、SPECIAL_USER_HEAD は前半一致、 SPECIAL_USER_TAIL は後半一致である。[netnews] などを用いている場合に、 SPECIAL_USER_HEAD が便利かも知れない。 SPECIAL_FROM_REWRITE=yes/no special_user@OFFICIAL_NAME あるいは special_user@ACCEPTADDRS という アドレスをすでにヘッダに持つメールが送信される場合にも、 special_user@SPECIAL_FROM に強制的に書き換えをおこないたい場合に yes を指定する。 デフォルトは no。 SPECIAL_ACCEPTABLE_USERS=<特定ユーザ> (複数可) <特定ユーザ名が列挙されたファイルのパス> SPECIAL_ACCEPTABLE_USER_HEAD= SPECIAL_ACCEPTABLE_USER_TAIL= 特定のユーザに対して SPECIAL_FROM を受信アドレスとして利用させたい 場合に定義する。すなわち、SPECIAL_ACCEPTABLE_* には user@SPECIAL_FROM 宛に送られてきたメールを受け取るべきユーザ名を指定する。 ERROR_NOT_ACCEPTABLE_USERS=yes/no SPECIAL_ACCEPTABLE_* に指定されていない user@SPECIAL_FROM 宛のメール の扱いを指示する。yes を指定すると、user unknown エラーを発生させる。 no を指定すると、もし他に user@SPECIAL_FROM を解釈可能なホストが上位 MX に存在するような場合に、そのホストに転送させることができる。 転送先が見つからないときは local configuration error となる。 デフォルトは no。 ◎ ネームサーバによるアドレスの補完に関する設定 [canon] CANON=<補完方法> ネームサーバの参照によるメールアドレスの補完方法を設定する。 補完方法には、one/short/unknown/all/cname/no と、それぞれに -append を 付け加えたものが指定できる。 one アドレス部が1語であるもののみ補完を試みる short アドレス部が1語あるいは2語であるもののみ補完を試みる unknown NO_CMPLT_DOMS に指定されていないトップドメインのみ補完を試みる all すべてのアドレスについて補完を試みる cname DNS の CNAME レコードによる正規化のみおこなう no 補完を行なわない *-append 1語のアドレスが補完されなかった場合に、MY_DOMAIN を補う デフォルトは one (MX_SENDMAIL=yes のとき) no (MX_SENDMAIL=no のとき)。 firewall 環境内部において動作する sendmail のための sendmail.cf を 作成する際に、CANON に no, one 以外を指定した場合、宛先(例えば 外に出ていくためのゲートウェイ)に到達可能であっても、Lookup Failure 等の原因により、メールの配送が延期され mqueue に貯まるることがある。 これは、メールアドレスの余計な補完がなされていないかどうかを当該 宛先ドメインのネームサーバを引くことによって検証できないためである。 長期間このような状態が続く場合、これは、firewall 環境内部のネーム サーバの設定に問題がある可能性があるので、設定の確認が必要である。 firewall 内部のネームサーバの設定に関しては、Nutshell シリーズの "DNS and BIND" の internal root nameservers の項が参考になる。 NO_CMPLT_DOMS=<既知であるドメイン名> (複数可)(継続行可) <既知であるドメイン名の記述されたファイルのパス> CANON で unknown* を指定した場合に、補完をする必要のないトップドメイン を指定する。指定にはトップドメインを列挙しても、トップドメインが記述さ れているファイルのパスを指定してもよい。 パス名の前にスペースで区切られた -o を付加することによって、その ファイルが存在しなくてもエラーにならないようにすることができる。 CANON_ENVELOPE=yes/no/unknown エンベロープのアドレス(SMTP において、受信者を指定するために受け渡され るアドレス。see RFC821)は、必ず正規化されているべきものであるという観点 (see RFC1123)から、CANON で正規化されなかったものについては、再びエン ベロープのアドレスのみに対して正規化を行なうようにすることができる。 CANON で one/short/unknown/no を指定した場合、ネームサーバによって補完 されないアドレスが存在するので、CANON_ENVELOPE を yes と定義すると、 補完されなかったすべてのエンベロープアドレスについてもう一度補完を 試みる。 CANON が all である場合は、もう一度補完を試みることは無意味であるから、 CANON_ENVELOPE を yes にする必要は無い。エンベロープアドレスについての 補完をしたくない場合は no を指定する。また、NO_CMPLT_DOMS に指定されて いないものについてのみ補完させたいばあいには unknown を指定する。 デフォルトは no。 ☆ メールの受信に関する設定 [acceptaddr] ACCEPT_ADDRS=<受けとるべきアドレス> (複数可)(継続行可) メールマスタ等で user@host.attr.jp というホスト名を含むアドレスだけで なく、user@domain.attr.jp などのようなドメインレベルのアドレス(ジェネ リックなアドレス)宛のメールも受け取りたい場合をはじめとして、 OFFICIAL_NAME や MY_ALIAS に記述されている名前以外宛のメールも受け取り たい場合に、その受け取るべきアドレスを指定する。ACCEPT_ADDRS に指定し たアドレスに対しては MY_ALIAS に対して行なわれるような OFFICIAL_NAME への書き換えは行なわれない。 (ただし、ACCEPT_ADDRS に指定されるアドレスが、ネームサーバにおいて CNAME レコードで定義されている別名である場合には、どこかのホストにお いて CNAME を用いた補完が行なわれた際にアドレスが書き換えられてしまう かもしれないことに注意する必要がある。よって、書き換えられたくないアド レスに対しては CNAME レコードを用いるべきではない。) 例1) ACCEPT_ADDRS='$m' (for domain master; R8* style) 例2) ACCEPT_ADDRS=$MY_DOMAIN (for domain master; R5 style) 例3) ACCEPT_ADDRS='another-host.kuis.kyoto-u.ac.jp' 例4) ACCEPT_ADDRS='kuis.kyoto-u.ac.jp ftp.kuis.kyoto-u.ac.jp' '$m' が指定可能なのは R8* のみであり、R5 では '$m' を使わずに指定しなければならない。 USE_aa_FILECLASS=yes/optional/no メールを受け取るべきアドレスの指定に、ファイル /etc/sendmail.aa を利用 する場合 yes を指定する。optional を指定すると、/etc/sendmail.aa が存 在しなかった場合に警告を出さないようになる (optional は R8* でのみ指定 可能)。/etc/sendmail.aa は sendmail の起動時に読み込まれるので、変更し た場合は再起動が必要になる。 デフォルトは no。 aa_FILE_PATH= メールを受け取るべきアドレスを指定するファイルとして /etc/sendmail.aa 以外のパス名を使用したい場合に設定する。 デフォルトは /etc/sendmail.aa。 ACCEPT_LOWER=yes/no/<.ドメイン名> MY_DOMAIN に属する全てのホスト *.MY_DOMAIN 宛のメールを、そのホスト宛 のメールとして受け取りたい場合に yes を指定する。yes を指定した場合は、 MY_DOMAIN に属する全てのホスト宛のアドレスが受けとることができるように なる。また、yes/no を記述せずにドメイン名(先頭に . をつけるのを忘れな いように注意)を指定した場合は、そのドメインに属する全てのホスト宛のア ドレスを受けとることができるようになる。 デフォルトは no。 (注) 同様の機能は、[deliver] において local メーラを使用することにより 実現可能 LOWER_MATCH_STYLE=lw-file/!lw-file/one/any ACCEPT_LOWER=yes の場合に、MY_DOMAIN に属するホストのうちのどのホスト に対するメールを受理するかを指定する。 lw-file: /etc/sendmail.lw に定義されたホストのみ受理 /etc/sendmail.lw に記述する名前は、MY_DOMAIN 部を含ま ない文字列である。/etc/sendmail.lw は sendmail の起動 時に読み込まれるので、変更した場合は再起動が必要。 !lw-file: /etc/sendmail.lw に定義されていないホストのみ受理 /etc/sendmail.lw に記述できるものは、MY_DOMAIN 部を含 まないものであって、一語のものに限られる。 one: *.MY_DOMAIN のうち、MY_DOMAIN の左側にくるアドレス部 が一語のもののみ受理 any: *.MY_DOMAIN をすべて受理 デフォルトは any。 lw_FILE_PATH= LOWER_MATCH_STYLE=lw-file または !lw-file の場合の lw ファイルのパスを 指定する。パス名の先頭に -o をスペースで区切って補うことによって、 オプショナルなファイルとしてファイルが存在しなくてもエラーにならない ようにすることができる。 デフォルトは /etc/sendmail.lw。 LOWER_NAMES=<ホスト名のリスト> MY_DOMAIN に属するホスト名を、lw_FILE に記述する代わりに、sendmail.cf に直接定義したい場合に利用する。 ACCEPT_BESTMX=yes/no first MX がそのホストを向いているメールアドレスに対して、自動的に そのホスト宛と解釈して受けとりたい場合に利用する。この機能を利用 すると DNS トラフィックが増えるので、BESTMX_DOMAINS を併用して トラフィックの増加を抑えることが望ましい。 デフォルトは no。 BESTMX_DOMAINS=all/"domains" ACCEPT_BESTMX の機能を有効にするドメインの範囲を指定する。 デフォルトは all。 ◎ ハブホストの指定 [hub] HUB_HOST=<ハブホスト名> メールのドメインマスタなど、各ユーザのスプールホストを掌握し、メールを 集中的に受信・転送することが可能なように設定されているホストを、ハブホ ストと呼ぶ。 各ユーザのスプールがいくつかのホストに分散している場合に、異なるスプー ルホストを使用しているユーザにメールを送りたい場合は、user@spool-host のように、スプールを持っているホストを明示的に指定するか、user@domain- master のようにドメインマスタ(ハブホスト)を経由させるようにしなければ ならないことも多い。しかし、ホスト名を指定することは繁雑なので、可能な らば、user を指定するだけで相手に届くようにしたいことがある。 NIS に aliases マップを登録し、すべてのホストでこれを参照してメールの 配送をおこなうことは一つの解であるが、NIS の aliases マップが参照でき ない sendmail を利用している場合や、管理上 NIS を用いていないような場 合は、NIS の aliases マップを利用した配送ができない。 ハブホスト指定機能は、別の一つの解を提供するものであり、列挙したユーザ 宛のメールについては、ハブホストへメールの転送をおこなう。ローカルに受 け取られたくないメールをハブホストに送るようにしたい場合には HUB_HOST と REMOTE_USERS を設定する。 さらに RELAY_LOCAL_TO_HUBHOST の機能を利用すると、@address が省略され ている宛先ユーザについては、とりあえず全てハブホストに送ってしまうと いう設定もできる。 HUB_HOST にはハブホスト名(MXレコードがハブホストを指しているようなアド レスも可)を設定する。 例1) HUB_HOST=kuis.kuis.kyoto-u.ac.jp 例2) HUB_HOST=[12.34.56.78] (IP アドレスの場合) REMOTE_USERS=<リモートユーザ名> (複数可) <リモートユーザ名が列挙されたファイルのパス名> ハブホストに送るべきユーザを指定する。ユーザリストが記述されたファイル のパスを指定することも可能(ハブホストの aliases とローカルの aliases との差分などから自動生成するとよい)。パス名の先頭にスペースで区切った -o を補うことによって、オプショナルなファイルであることを宣言すること ができる。 RELAY_LOCAL_TO_HUBHOST=yes/no 当該ホスト宛の @address の伴う宛先をもつメールはローカルとして受け取り @address の伴っていないローカルな宛先をもつメールはハブホストに転送し たい場合に yes を指定する。ただし REMOTE_USERS に指定されたユーザに関 しては、すべてハブホストに送られる。 この機能を R5 で利用する場合には、aliases や .forward に記述されたロー カルに処理を行ないたいエントリに関して、すべて @localhost を補っておく 必要がある。また、"| prog" のようなダブルクォートで囲んだ記述について は、最初の `|' をクォートの外に出し、|" prog" のように記述する必要があ る(この場合は、@localhost は必要ない)。このようにしなければ、これらの 処理がハブホストに転送されてしまうので注意しなければならない。 例1) root: motonori@localhost, ohm@localhost 例2) mailing-list: |"/usr/local/lib/ML/filter" R8* の場合には、'|' はダブルクォートの内側のままでも構わない。 デフォルトは no。 なお、この機能を利用する場合は、@address を省略した場合にハブホストに 転送されるアドレスについて、aliases で転送等の定義ができないという問題 があるので、aliases 生成用に別途 sendmail.cf を用意する必要があるかも しれない。 WITH_HUB_ADDR=yes/no IGNORE_HUB_MX=yes/no sendmail.mx を利用する場合、ハブホストへの転送はハブホストのアドレスに 対する MX に従って行なわれるが、HUB_HOST に指定したアドレスに対する MX に複数のホストが定義されていて、セカンダリ以下のホストに単にプライマリ にむけて転送するだけで各ユーザのメールスプールを掌握していないホストが 指定されている場合には、実際にそのアドレスを解釈するホストに確実に届く ようにする必要がある(なぜなら、@address を省略したままのアドレスで、 メールが転送されるため、転送先のホストが @address の付かない user 宛の メールを正しく処理できることが期待されているからである)。 プライマリに確実に届くようにするためには、転送するアドレスとしてユーザ 名だけでなく @HUB_HOST を付け加えるようにする方法と、MX を無視して配送 する方法とがある。WITH_HUB_ADDR を yes にすると @HUB_HOST が付加される ようになり、IGNORE_HUB_MX を yes にすると MX を無視して配送が行なわれ るようになる。 MX に指定されている全てのホストが転送されたメールの宛先となっているユー ザ名をローカルとして正しく解釈できるようになっている場合には、これらの 指定をおこなう必要はない。 sendmail のバージョンによっては IGNORE_HUB_MX を yes に指定できない。 (指定可能なものは、sendmail 5.67+1.6W または sendmail R8) デフォルトはどちらも no。 LOCAL_STICKY=yes/no ハブホストへのメールの転送機能を利用している場合に、REMOTE_USERS に定 義されているユーザであっても、あるいは RELAY_LOCAL_TO_HUBHOST を yes に指定していても user@OFFICIAL_NAME 宛のメールについては、転送せずに ローカルのスプールに落すようにしたい場合に yes を指定する。 デフォルトは no。 ◎ スプールホストの指定 [spool] SPOOL_HOST=<スプールホスト名> ローカルにはスプールを持たずに他のホストのスプールを NFS マウントして いる場合や、スプールは持っているけれども POP などを用いるためにメール を特定のホストに集約したい場合に、スプールホストの項目の設定を行なう。 SPOOL_HOST にはメールの転送先となるべきスプールを持つホストを指定する。 例1) SPOOL_HOST=loafer.kutsuda.kuis.kyoto-u.ac.jp 例2) SPOOL_HOST=[130.54.22.137] (IP アドレスの場合) ALIASED_USERS= (R5のみ)(複数可)(継続行可) ローカルのスプールにメールを落したいユーザ名や、ローカルの aliases に 定義が存在するエントリ名を指定する。ユーザ名は列挙しても良いしユーザ名 が記述されたファイルのパスを指定しても良い。パスの先頭にスペースで 区切って -o を付加することによって、オプショナルなファイルとする こともできる。 ALIASED_USERS は、ローカルメイラに渡されないアドレスが /etc/aliases の処理の対象とならないことに対する対策であるが、このような問題が 発生するのは sendmail R5 の場合だけであり sendmail R8 では定義する 必要はない。 スプールホストの機能を利用する場合、ALIASED_USERS に定義されていない ユーザに対する alias のエントリは newaliases でも無視されてしまう。 ADMIN_STICKY=yes/no LOCAL_USERS (管理者アカウント) 宛のメールについては、共用のスプールホ ストに転送せずに、ローカルのスプールに落すようにしたい場合に yes を指 定する。スプールが NFS マウントされている場合には yes を指定せずにス プールホストに転送させることが望ましい。 デフォルトは no。 SPOOL_HOST_ADDR=<スプールホストを特定するアドレス> (null.def のみ) sendmail.mx を利用する場合、SPOOL_HOST に指定したアドレスに対して複数 の MX が定義されていると、第二位以下のホストにメールが渡されてしまう ことがある。これを防ぐ必要がある場合には、ここにスプールホストを特定 するアドレスを記述する。特定するアドレスとは、例えば [host.domain] や [IP-addr] のような表記のことである。 WITH_SPOOL_ADDR=yes/no IGNORE_SPOOL_MX=yes/no スプールホストにメールを転送する場合、確実にスプールホストにメールが 届けられるようにしなければならない。スプールホストに対応する MX レコー ドが存在しないか、一つだけあってそのスプールホストを指示している場合に はなにも問題はないが、MX レコードが複数存在する場合には、第2位以下の MX ホストにメールが送られないように MX レコードを無視するか、第2位以下 の MX ホストにメールが送られても、さらにスプールホストにメールが転送さ れるように、スプールホストのアドレスを補っておく必要がある。 IGNORE_SPOOL_MX を yes にするとスプールホストへのメールの転送の際に MX レコードを無視する配送ルールが採用される。また、WITH_SPOOL_ADDR を yes にすると、エンベロープの受取人アドレスにスプールホスト名が補われ、必ず スプールホストに送り届けられるようになる。 sendmail のバージョンによっては IGNORE_SPOOL_MX を yes に指定できない。 (指定可能なものは、sendmail 5.67+1.6W または sendmail R8) デフォルトはどちらも no。 ◎ セカンダリメールマスタになるための設定 [secondary] SECONDARY_DOMAIN=<セカンダリとなるべきドメイン名> SECONDARY_USERS=<解釈すべきユーザ名> (複数可)(継続行可) <解釈すべきユーザ名の記述されたファイルのパス> メールのドメインマスタが一つだけだと、ドメインマスタのトラブル時にメー ルが届かなくなってしまう。もう一つ各ユーザのスプールホストを掌握したド メインマスタのセカンダリを用意するれば、メールの可用率を高めることがで きる。プライマリとセカンダリで全く同一の設定ができるならば良いが、セカ ンダリにおいて、プライマリのサブセットしか処理するようにできない場合 (たとえば、メーリングリストの処理は、プライマリのみでおこない、ユーザ毎 のスプールホストへの alias のみをセカンダリで提供するような場合など)、 本パッケージの seconday 機能が利用できる。 具体的には、セカンダリメールマスタとして解釈すべきアドレスを SECONDARY_ DOMAIN に設定し、メールスプールへの転送設定がされているユーザのリストを SECONDARY_USERS に指定する。SECONDARY_USERS は、ユーザを列挙してもユー ザの記述されたファイルのパスを指定しても良い。sendmail R8 ではユーザが 列挙されたファイルの形式として、NDBM, NEWDB を用いたものも利用可能で ある。NDBM, NEWDB の形式を利用すると、ファイルの内容の更新の度に、 sendmail を再起動する必要がなくなる。sendmail R8 の場合は、さらに secondary 用に分離した aliases マップを直接参照させることができる (オプションの項目を参照)。 当然のことながら、セカンダリメールマスタとして機能するためには、当該ド メインの MX レコードの第二位以下にセカンダリドメインマスタが登録されて いることが必要である。 以下の例では、/etc/aliases.secondary にセカンダリドメインマスタで解釈 すべき aliases エントリが記述されているものとする。 SECONDARY_USERS='hash:/etc/aliases.secondary' (R8* のみ) NEWDB を用いている場合。 ALIAS_FILE_PATH にも /etc/aliases.secondary を定義する。 newalaises によって、NEWDB のマップが作成される。 SECONDARY_USERS='dbm:/etc/aliases.secondary' (R8* のみ) NDBM を用いている場合。 ALIAS_FILE_PATH にも /etc/aliases.secondary を定義する。 newalaises によって、NDBM のマップが作成される。 SECONDARY_USERS='nis:aliases.secondary.map' (R8* のみ) NIS を用いる場合。 NIS_ALIAS_MAP にも aliases.secondary.map を定義する。 SECONDARY_USERS='user1 user2 ...' ユーザ名を列挙する場合。 SECONDARY_USERS=/etc/users.secondary ユーザ名を列挙したファイルを用いる場合。 データベースを用いていないので、ファイルの内容に変更があった 場合は sendmail の再起動が必要になる。 SECONDARY_USERS='/etc/aliases.secondary %[^: \#]' SCANF を定義してコンパイルした sendmail を用いる場合。 aliases.secondary の記述が複雑な場合の動作は、保証の限り ではない。また、データベースを用いていないので、ファイルの 内容に変更があった場合は sendmail の再起動が必要になる。 USE_SECONDARY_DOMAIN_FROM=yes/no USE_SECONDARY_DOMAIN_TO=yes/no SECONDARY_USERS に登録されているユーザに対して付加するアドレスを指定 する。これによってセカンダリホストからメールを発信する場合のアドレス の取扱を決定する。 USE_SECONDARY_DOMAIN_FROM を yes にすると From: に付加されるアドレス に SECONDARY_DOMAIN が利用され、no にすると FROM_ADDRESS が利用される。 USE_SECONDARY_DOMAIN_TO を yes にすると To:, Cc: に付加されるアドレス に SECONDARY_DOMAIN が利用され、no にすると FROM_ADDRESS が利用される。 デフォルトはどちらも no。 ◎ 静的定義によるアドレスの書き換えに関する設定 [alias] ADDRESS_ALIAS_FILE=<ホスト名エイリアス定義ファイル名> 静的なアドレスの書き換え規則を sendmail.cf に埋め込むための、書き換え 規則を定義したファイルのパスを指定する。ファイルはカレントディレクトリ から検索される。 エイリアス定義ファイルには、V行、B行、E行、P行、S行、A行、L行がある。 V行はエイリアス定義ファイルのバージョンを記述するために使用する。 B行ではヘッダおよびエンベロープの書き換えルールを定義する。 E行ではエンベロープのみの書き換えルールを定義する(つまりヘッダの書き 換えは行なわずに配送先だけ変更を行なう)。 S行ではヘッダおよびエンベロープの発信者アドレスに対する書き換えルール を定義する。 A行では another_addr で組み込まれるsmtp2 mailerを経由する際の書き換え ルールを定義する。 L行では LOCALHACK で用いるためのの書き換えルールを定義する。必要な 場所で、変数 LOCALHACK_ALAIS を参照するように LOCALHACK を 記述する。 B/E/S/A/L行は通常、書き換え前文字列と、書き換え後文字列の2つのフィー ルドを持つが、さらに第3フィールドとして、'='(positive match) あるいは '~' or '!' (negative match) を指定すると、パターンマッチによる部分 集合的書き換えをおこなうことを指定できる(もし、sh によって ~ が $HOME に展開されてしまう場合は ! を利用する)。 P行は、B/E/S/A/L行の定義でパターンマッチによる部分集合的書き換えを 指定した場合の、パターン集合を定義する。P行には集合を構成する文字列を 列挙するか、文字列が列挙されたファイルのパスを指定する。マッチング アルゴリズムの制約上、negative match の場合に指定できる文字列は、 1語(ピリオド(.)を含まない)のものだけである。 書き換えルールには、3種類の書式がある。 alias.name.without.wildcard real.name 完全一致による書き換え *alias.name.with.wildcard real.name ドメイン部の書き換え(ワイルドカード部分は保存される) +alias.name.with.wildcard real.name ホスト部の削除およびドメイン部の書き換え(ワイルドカード部分は 削除される) なお、記述中に $m、$j、* などを利用する場合は、クォートで囲むことが必 要になるので注意。 [設定例] Samples/Aliases/* @JUICE を @JUICE.AD.JP に書き換える B JUICE JUICE.AD.JP @*.JUICE を @*.JUICE.OR.JP に書き換える B '*.JUICE' .JUICE.OR.JP @*kyoto-u を @*kyoto-u.ac.jp に書き換える ( @kyoto-u -> @kyoto-u.ac.jp, @*.kyoto-u -> @*.kyoto-u.ac.jp) B '*kyoto-u' kyoto-u.ac.jp @*kyoto-u.junet を @*kyoto-u.ac.jp に書き換える B '*kyoto-u.junet' kyoto-u.ac.jp @*is.kuis.kyoto-u.ac.jp を @*kuis.kyoto-u.ac.jp に書き換える (エンベロープのみ/ヘッダはそのまま) E '*is.kyoto-u.ac.jp' kuis.kyoto-u.ac.jp @*.isle.kuis.kyoto-u.ac.jp を @isle.kuis.kyoto-u.ac.jp に 書き換える(ホスト名を削除する; エンベロープのみ) E +.isle.kuis.kyoto-u.ac.jp isle.kuis.kyoto-u.ac.jp 特定の @*.imel.kyoto-u.ac.jp を @imel.kyoto-u.ac.jp に書き換える B +.imel.kyoto-u.ac.jp imel.kyoto-u.ac.jp = P rayon silk cotton 特定以外(?)の @*.imel.kyoto-u.ac.jp を @imel.kyoto-u.ac.jp に書き換える B +.imel.kyoto-u.ac.jp imel.kyoto-u.ac.jp ~ P /etc/sendmail.alias.exception.imel または P -o /etc/sendmail.alias.exception.imel ◎ マップファイルによるアドレスの補完に関する設定 (R8*のみ) [domaintable] DOMAINTABLE=yes/no/<マップファイルのパス名> user@host のような一語アドレスを展開するための静的なデータベースを用い ることを指定する。データベースは、sendmail.cf 中に静的に記述されるので はなく、外部データベース /etc/domaintable.db を用いる。この機能を利用 するためには、sendmail R8 が NEWDB や NDBM が利用できるようにコンパイル されていなければならない。yes を指定するかわりに、/etc/domaintable.db に代わるデータベースのパス名を指定することも可能。 domaintable から domaintable.db を作成するには sendmail R8 のパッケー ジに付属している makemap を利用する。 % makemap hash domaintable < domaintable domaintable に変更があっても sendmail を再起動する必要はない。 デフォルトは no。 [設定例] Samples/Tables/* kmcbox2 kmc.kyoto-u.ac.jp sjcgw stanford-jc.or.jp ◎ 一語ホストアドレスの配送制御 [one-token] ONE_TOKEN_HOST=none/reject/deliver-ignmx user@host のような一語アドレスを relay host 等への配送の直前に、すぐに エラーにしたい場合には reject を指定する。ネームサーバや静的な補完ルー ル参照によるアドレスの補完が行なわれてからチェックされるので、補完され るべき正当なアドレスはエラーにはならない。 また、user@host(一語) 形式のアドレスに対して MX を引かずにそのアドレス に直接投げたい場合は、deliver-ignmx を指定する。ただし、この機能を用い ると不完全なアドレス(組織内だけで有効で組織外からは到達できない)のまま 組織外に出ていってしまう恐れがあるので、運用上問題がないように十分注意 すること。 デフォルトは none。 ◎ ソースルーティングアドレスによる転送の拒否機能 [nosourceroute] REJECT_SOURCE_ROUTE_RELAY=yes/no user%somehost@myhost のようなソースルーティング表記によって送られてき たメールを転送することを拒否したい場合に yes を指定する。拒否するのは 自分のホストが ACCEPT_ADDRS 等で受理するアドレスが明示的に指定されて いる場合に限られる。 デフォルトは no。 ◎ リダイレクトメッセージ機能 [redirect] REDIRECT=yes/no リダイレクトメッセージ機能を利用する場合に yes を指定する。リダイレクト メッセージ機能とは、aliases ファイルに user: user@new.address.REDIRECT と記述しておくことで、user 宛のメールがやってきたときに user@new.address に送り直すように、とのエラーメッセージを送信者に送り 返すというものである。また、aliases ファイルに user: user@new.address, user@new.address.FORWARD と記述すると、メールを転送した旨のメッセージ が送信者に送り返される。 デフォルトは no。 ◎ 漢字コードの変換 [kanji] ローカルメーラでメールをスプールに書き込む際の、漢字コードの変換を サポートする。 KANJI_CONVERSION=yes/no 漢字コード変換機能を利用する場合 yes を指定する。 デフォルトは no。 LOCAL_MAILER_PATH='/bin/binmail.kc' LOCAL_MAILER_ARGS='mail $h -d $u' ローカルメーラのパスと引数を、漢字コード変換スクリプト用に変更する。 サンプルスクリプトは、support/kanji ディレクトリにある。 この実装では、送られてきたメールを例えば Shift JIS にしてスプールに 書き込んで欲しい場合は、.forward に \myname.sjis と記述する。 利用できる書式としては、 username.jis JIS (iso-2022-jp) に変換 username.sjis Shift JIS に変換 username.euc EUC Japan に変換 username.nc 無変換 (デフォルトで漢字変換する場合に利用) がある。デフォルトで漢字変換が行なわれるようにしたい場合は、スクリ プトのデフォルトの設定を変更する。また、特定のユーザについてまとめて 指定したい場合は以下の変数にユーザのリストあるいは、ユーザが列挙され たファイルのパスを指定する。 KANJI_J_USERS JIS (iso-2022-jp) に変換したいユーザ KANJI_S_USERS Shift JIS に変換したいユーザ KANJI_E_USERS EUC Japan に変換したいユーザ KANJI_N_USERS 無変換にしたいユーザ ◎ ローカルメールのアドレス書き換え [mailer] ALWAYS_APPEND_DOMAIN=yes/no 通常、メールの発信者と受信者が同一ホストのユーザであった場合には、メー ルの To/From は user@host.domain とはならずに @host.domain の付かない user のみとなるが、同一ホスト内のメールの配送であったときでも、必ず user@host.domain となるようにしたい場合に yes を指定する。 ただし、R5 の場合は From のみドメインを付加し、To は user のみとなる。 デフォルトは no。 RELAY_FROM_RAW=yes/no メールをハブホストやスプールホストに転送する場合、relay mailer が利用 されるが、その際に、発信者のフィールドに @FROM_ADDRESS を付加するのを 抑制するかどうかを指定する。 デフォルトは no (@FROM_ADDRESS を付加する)。 ◎ 標準のメーラに関する設定 [mailer] メーラには local, prog 以外に次のものがデフォルトで定義される smtp 通常の SMTP による配送を行なう sendmail R8 では相手が ESMTP をサポートしていることを 伝えてきた場合は、自動的に ESMTP にスイッチする 配送先定義では、smtp: GW のように記述する 複数の GW を順に試させたい場合は smtp: GW1.:GW2. と書く(. は wildcard MX 弊害がない場合は省略可能) smtp: user@GW のように記述すれば特定のユーザ宛と して配送されるようになる esmtp まず ESMTP による配送を試み、相手が ESMTP を受け付けて くれなかった場合は SMTP にするという以外は SMTP と同じ (sendmail R8* のみ) 相手が ESMTP の EHLO を受け取った ことによって、メールの受信を拒否してしまうような、 間違った実装が存在する場合には、esmtp の使用を避ける 必要がある smtp8 smtp と同様であるが、8bit コードが存在する場合に、相手 が 8bit を受け付けることが可能である場合には、そのまま 送りたい場合に指定する (R8V? のみ) smtp-ignmx sendmail.mx を使用する場合において MX を参照せず A レ (疑似メーラ) コードに定義されたアドレスを参照して SMTP 接続し配送を 行なう(組織内配送向け)、smtp, esmtp とは配送先 GW を 明示的に指定しなくてもよいという点が大きく異なる。 GW を省略する場合は、メーラ名の後ろの : も不要である。 smtp-mx 特定の GW を指定する必要が無く、メールアドレスに指定さ (疑似メーラ) れているドメイン部から導かれるホストに(sendmail.mx の 場合は MX を参照して)SMTP 接続し配送を行なう、 smtp, esmtp とは配送先 GW を明示的に指定しないという 点が大きく異なる。 もし、GW を指定した場合は、メールアドレスから導かれる アドレスへの配送を試み、それが成功しなかった場合に 指定した GW への配送が試みられる。 relay SMTP により配送を行なうが、アドレスの書き換えを一切行 なわない(ローカルな転送向け) また、error メーラや discard メーラ(sendmail 8.9 以降より)も sendmail.cf には明示的には定義されないが、エラーを発生させメールを 送り返したり、単に捨てたりするためのメーラとして用意されている。 メーラ定義に関するパラメータ LOCAL_MAILER_PATH=<ローカルメーラのパス> デフォルト: '/bin/mail' LOCAL_MAILER_FLAG_BASE=<ローカルメーラフラグ> デフォルト: 'lsDFMmrnP' (V1) デフォルト: 'lsDFMmrn' (V5) デフォルト: 'lsDFMAw5:/|@rmn' (V6) 変更が必要な場合は以下の *_ADD, *_SUB を利用する LOCAL_MAILER_FLAG_ADD=<追加するメーラフラグ> LOCAL_MAILER_FLAG_SUB=<削除するメーラフラグ> メーラフラグについては、ドキュメント MailerFlags 等を参照のこと LOCAL_MAILER_ARGS=<ローカルメーラに渡す引数> デフォルト: 'mail -d $u' LOCAL_MAILER_MAXLINE=<ローカルメーラの一行の最大文字数> デフォルト: 未定義 LOCAL_MAILER_MAXSIZE=<ローカルメーラの配送許容最大文字数> デフォルト: 未定義 (関連項目: MAX_MSG_SIZE) LOCAL_MAILER_OPTS=<その他のオプションの指定> デフォルト: 未定義 PROG_MAILER_PATH= デフォルト: '/bin/sh' PROG_MAILER_FLAG= デフォルト: 'lsDFMeuP' (V1) デフォルト: 'lsDFMeuP' (V5) デフォルト: 'lsDFMoeuP' (V6) 変更が必要な場合は以下の *_ADD, *_SUB を利用する PROG_MAILER_FLAG_ADD=<追加するメーラフラグ> PROG_MAILER_FLAG_SUB=<削除するメーラフラグ> メーラフラグについては、ドキュメント MailerFlags 等を参照のこと PROG_MAILER_ARGS= デフォルト: 'sh -c $u' PROG_MAILER_MAXLINE= デフォルト: 未定義 PROG_MAILER_MAXSIZE= デフォルト: 未定義 (関連項目: MAX_MSG_SIZE) PROG_MAILER_OPTS=<その他のオプションの指定> デフォルト: 未定義 SMTP_MAILER_FLAG= デフォルト: 'msDFMuXL' (V1) デフォルト: 'mDFMuX' (V5) デフォルト: 'mDFMuX' (V6) 変更が必要な場合は以下の *_ADD, *_SUB を利用する SMTP_MAILER_FLAG_ADD=<追加するメーラフラグ> SMTP_MAILER_FLAG_SUB=<削除するメーラフラグ> g フラグを追加すると、エラーメールの From: を <> にしない メーラフラグについては、ドキュメント MailerFlags 等を参照のこと SMTP_MAILER_MAXLINES= デフォルト: 990 SMTP_MAILER_MAXSIZE= デフォルト: 未定義 (関連項目: MAX_MSG_SIZE) SMTP_MAILER_OPTS=<その他のオプションの指定> デフォルト: 未定義 ESMTP_MAILER_FLAG= デフォルト: 'mDFMuXa' (V5) デフォルト: 'mDFMuXa' (V6) 変更が必要な場合は以下の *_ADD, *_SUB を利用する ESMTP_MAILER_FLAG_ADD=<追加するメーラフラグ> ESMTP_MAILER_FLAG_SUB=<削除するメーラフラグ> メーラフラグについては、ドキュメント MailerFlags 等を参照のこと ESMTP_MAILER_MAXLINES= デフォルト: 990 ESMTP_MAILER_MAXSIZE= デフォルト: 未定義 (関連項目: MAX_MSG_SIZE) ESMTP_MAILER_OPTS=<その他のオプションの指定> デフォルト: 未定義 SMTP8_MAILER_FLAG= デフォルト: 'mDFMuXa' (V6) 変更が必要な場合は以下の *_ADD, *_SUB を利用する SMTP8_MAILER_FLAG_ADD=<追加するメーラフラグ> SMTP8_MAILER_FLAG_SUB=<削除するメーラフラグ> メーラフラグについては、ドキュメント MailerFlags 等を参照のこと SMTP8_MAILER_MAXLINES= デフォルト: 990 SMTP8_MAILER_MAXSIZE= デフォルト: 未定義 (関連項目: MAX_MSG_SIZE) SMTP8_MAILER_OPTS=<その他のオプションの指定> デフォルト: 未定義 RELAY_MAILER_FLAG= デフォルト: 'msDFMuXL' (V1) デフォルト: 'mDFMuX' (V5) デフォルト: 'mDFMuX8' (V6) 変更が必要な場合は以下の *_ADD, *_SUB を利用する RELAY_MAILER_FLAG_ADD=<追加するメーラフラグ> RELAY_MAILER_FLAG_SUB=<削除するメーラフラグ> メーラフラグについては、ドキュメント MailerFlags 等を参照のこと RELAY_MAILER_MAXLINES= デフォルト: 2040 RELAY_MAILER_MAXSIZE= デフォルト: 未定義 (関連項目: MAX_MSG_SIZE) RELAY_MAILER_OPTS=<その他のオプションの指定> デフォルト: 未定義 M_SMTP=<デフォルトsmtpメーラ> (R8* のみ) デフォルト: smtp ◎ 特殊なローカルアドレスの配送定義 [localdeliver] (R8* のみ) PLUSSED_USERS=プラス表記を利用するユーザのリスト/all 複数のホストで一つのスプールホストを利用しているような場合に、root 宛のメールなどを発信ホストごとに異なる管理者に配送するためなどに 利用する。user+option という形式で配送されてきた場合、aliases に おいて user+option, user+*, user の順にサーチされ、最初に見付かった 定義に対して配送される。PLUSSED_USERS は、このような表記を許すユーザ のリストを指定し、ユーザを直接列挙してもユーザの記述されたファイルの パスを指定しても良い。また、all を指定すると全てのユーザに対して 許可される。 例えばクライアント側の aliases で root: root+host1@mailhost と書いておき、サーバ側の aliases で root+host1: admin1 root+*: admin2 root: admin3 と書いておく。もし root+option や root+* が定義されていなければ、 すべて root 宛に送られることになる。 もちろん、この user+option 形式のアドレスは、外部に公開して 利用することも可能であり、ユーザ単位でメールアドレス空間を 任意に拡張することができる。特に、R8* の場合は、 FORWARD_FILE_PATH='$z/.forward$h' のように .forward のサーチ設定をしておくと、user 宛に届いた場合は .forward が参照され、user+option 宛に届いた場合は .forward+option が参照されるようにすることができる(user+ の場合は .forward+null)。 ただし、この設定では、user+abc に対して .forward+abc が存在して いなければ、 user のメールスプールに送られてしまうので、例えば 以下のように .forward+default をサーチ対象に追加するとよい。 FORWARD_FILE_PATH='$z/.forward$h:$z/.forward+default' この場合、user+abc 宛に届いた場合で .forward+abc が存在しなければ .forward+default が参照されることになる。 よって、.forward+default にエラーになるように細工をしておけば、 オプション部分が間違って使い続けられてしまうという問題を回避する ことができる。ただ、user 宛の場合も .forward が存在しなければ .forward+default が参照されてしまうので、必ず .forward を作成 しておく必要がある(転送する必要がなければ、中身は空で良い)。 知らない間にスプールにたまっている、という事故を防ぐには、 FORWARD_FILE_PATH='$z/.forward$h:$z/.forward+default:$z/.forward' が良いのかもしれない。 デフォルトは未定義。 PLUSSED_SEPARATOR=<セパレータ> user+option の表記で用いる記号 "+" を別なものに指定する。 デフォルトは "+". PLUSSED_ADDRS=<アドレスリスト> PLUSSED_ADDRS_MATCH=exact/lower user@option.domain を user+option@domain に書き換えるべきアドレス リストを PLUSSED_ADDRS に指定する。PLUSSED_ADDRS_MATCH=exact の 場合、option.domain を指定する。PLUSSED_ADDRS_MATCH=lower の場合、 domain のみを指定すれば、option の部分は任意となる。 PLUSSED_ADDRS のデフォルトは未定義。 PLUSSED_ADDRS_MATCH のデフォルトは exact。 PLUSSED_ORDER=normal/reverse PLUSSED_ORDER=normal の場合、user@option.domain を user+option@domain に変換する。PLUSSED_ORDER=reverse の場合、option@user.domain を user+option@domain に変換する。 デフォルトは normal。 ○ 外部メーラ定義 [external] 外部メーラを比較的容易に定義できるようにしたものである。 この機能を定義することにより、extern メーラが利用可能となる。 DEFAULT_RELAY で使用する場合は、extern:dummy.relay のように、 2語以上のダミーリレーホスト名(ただし、そのホストが自分自身として 認識する名前であってはいけない)を付加する必要がある。 EXTERNAL_MAILER_PATH=<外部メーラプログラムのパス> デフォルト: 未定義 EXTERNAL_MAILER_FLAG=<外部メーラフラグ> デフォルト: 未定義 EXTERNAL_MAILER_ARGS=<外部メーラに渡す引数> デフォルト: 未定義 定義例) メールの通過規制をおこないたい場合。 EXTERNAL_MAILER_PATH=/usr/local/mail/mail_filter EXTERNAL_MAILER_FLAG='mDFMuXnP' EXTERNAL_MAILER_ARGS='mail_filter $h $g $u' アドレスチェックをおこないたい宛先に対して、extern メーラに送るように [deliver] 等で設定をおこなう。 mail_filter は support/restrict にサンプルスクリプトが用意されている。 この設定例はメールのトラフィックが少ないところ向きであり、トラフィック が多い所では不向きである。トラフィックの多いところでは、sendmail の checkcompat() 等に判定処理を組み込むべきである。ただし sendmail 8.8 以降を利用する場合は、checkcompat() に組み込む代りに sendmail.cf に ルールセットを記述するだけで設定することが可能となっている。 sendmail.cf で設定する方法については、[smtpcheck] を参照。 EXTERNAL_MAILER_MAXSIZE=<外部メーラで送信可能な一行の最大文字数> デフォルト: 未定義 (関連項目: MAX_MSG_SIZE) EXTERNAL_MAILER_MAXLINE=<外部メーラの配送許容最大文字数> デフォルト: 未定義 ◎ 複数のドメインごとに定義されたユーザへの配送 [separate] 一つのホストに複数のドメインを割り当て、それぞれのドメインで異なるユーザ 空間を定義したい場合に利用する。利用の際には、/bin/mail と同等の機能を 持ち、異なるユーザ空間ごとに配送することが可能なプログラムが必要である。 この機能に関する定義には POP という文字列が含まれているが、異る空間の ユーザを区別する方式が提供されるのであれば、特に POP を意識する必要は ない。 PSEUDO_POP_DOMAIN=yes/no 機能を利用したい場合は yes を指定する。デフォルトは no. 機能を有効にすると popdom メーラが利用可能となる。 POPDOM_MAILER_PATH='/usr/sbin/lmail' POPDOM_MAILER_FLAG=$PROG_MAILER_FLAG POPDOM_MAILER_ARGS='lmail -d $h $u' POPDOM_MAILER_MAXSIZE=100000 POPDOM_MAILER_MAXLINE= /bin/mail と同等の機能を持ち、異なるユーザ空間ごとに配送することが 可能なプログラムの利用に関して定義する。 この機能は [deliver] あるいは [mailertable] などと併用する。 配送先として popdom: /usr/spool/domainA などと記述すると、 POPDOM_MAILER_ARGS に従って、 lmail -d /usr/spool/domainA user1 が実行され、標準入力からメールが送り込まれる。つまり、$h が popdom: の後ろに書いた文字列に置き換えられ、$u が宛先のユーザ名に置き換え られる。 ◎ POP 経由で組織的メール配送をおこなう [pop-feed] 特定の組織宛のメールをスプールに一つのアカウント宛として集約し、POP で 読み出して、さらに配送させたい場合に利用する。 特定のドメイン名宛のメールを一人のユーザがすべて読むようにしたい場合にも 利用できる。 ただし、前者の利用方法の場合は、普通に local メーラに送り込むと、 エンベロープの宛先情報が失われてしまうため、エンベロープの宛先情報が 失われてしまわないような工夫が必要である。とりあえず X-Forward-Path: としてヘッダに残すようになっているが、最初からそのようなヘッダが付いて いる場合に区別することができないという問題がある。 USE_POPFEED=yes/no pop-feed 機能を利用する場合は yes を指定する。デフォルトは no。 yes を指定すると popfeed メーラが利用できる。 この機能は [deliver] あるいは [mailertable] などと併用する。 ある組織宛のメールを、xyz というアカウントのメールボックスに送りたい 場合は、popfeed: xyz と指定する(xyz は通常指定する送り先ホスト名の 代わり)。 POPFEED_MAILER_PATH=$LOCAL_MAILER_PATH POPFEED_MAILER_FLAG='lsDFMrn' POPFEED_MAILER_ARGS='mail -d $u' POPFEED_MAILER_MAXSIZE=100000 POPFEED_MAILER_MAXLINE= 基本的に local メーラを利用するので、諸設定は local メーラと同じに しておく。 ◎ BITNET 配送設定 [bitnet] BITNET=static/mx/no/auto BITNET宛のメールの配送方法を指定する static: BITNET へのメールを BITNET_RELAY に指定したホストに送る mx: sendmail.mx を利用する場合で、*.BITNET に対する MX を *.BITNET_RELAY を検索することにより配送先ホスト名を取得しメール を配送する。BITNET_RELAY のデフォルトは bitnetjp.ad.jp である。 海外に到達できない組織では、BITNET_RELAY を dom.bitnetjp.ad.jp に設定する(ドキュメント bitnet-wide-gateway.txt を参照)。 no: BITNET アドレスの解釈を行なわない ([indirect] や [route]、[deliver] 等で定義した配送ルールに従う) auto: DIRECT_DELIVER_DOMAINS に all や bitnet が含まれている場合は mx が指定されたものと解釈し、それらが含まれていない場合は no が指定されたものと解釈する。 デフォルトは no (Standards/*.def でのデフォルトは auto)。 BITNET_RELAY=<リレーホスト名> <メーラ>:<リレーホスト名> BITNET=static の場合のリレーホストの指定する。 sendmail.mx の場合、ホスト名を [] で囲めば、そのホストに対する MX レ コードは参照されない。 ◎ DECNET 配送設定 [decnet] DECNET=yes/no yes: DECNET へのメールを DECNET_RELAY に指定したホストに送る。 no: DECNET アドレスの解釈を行なわない。 ([indirect] や [route]、[deliver] 等で定義した配送ルールに従う) デフォルトは no。 DECNET_RELAY=<リレーホスト名> <メーラ>:<リレーホスト名> DECNET=yes の場合のリレーホストの指定。 sendmail.mx の場合、ホスト名を [] で囲めば、そのホストに対する MX レ コードは参照されない。 ◎ JUNET 配送拒否設定 [junet] REJECT_JUNET=yes/no *.JUNET宛のメールに対して、*.jp 形式のアドレスを使うように指示するコメ ントを伴ったエラーを発生させる場合に yes を設定する。 デフォルトは no。sample.def のデフォルトは yes。 ◎ UUCPに関する設定 [uucp] UUCP_GW=yes/no UUCPリンクの有無を指定する。UUCP によるメールの配送機能を利用したい場合 には yes を指定する。 デフォルトは no。 UUCP のメイラとしては以下の2つが用意される uucp @-style のアドレスを利用する uucp-b !-style のアドレスを利用する UUCP_HOST_NAME= 自分の UUCP システム名を設定する。sendmail R8 の場合は uname() から 取得したシステム名が '$k' に自動的に設定されるので、変更が必要ない 場合は記述しなくてよい。 UUCP_NEIGHBORS= UUCP に送るべきシステム名を限定したい場合に設定する。設定をおこなわな かった場合は、uuhost!user 形式のアドレスを受け取った場合、uuhost がど のような名前であっても、それが存在するものとして扱われる。 UUCP_NEIGHBORS の記述は、直接ホスト名を列挙するか、列挙したファイルを 置くパスを指定する。 UUCP_NEIGHBORS を設定している場合、登録されていないシステム宛のメール が来た場合に UUCP_RELAY が設定されていれば、そちらにフォワードされる。 SYSNAME_ALIASES= taylor UUCP 等で、UUCP接続相手のシステム名に相手のドメイン名を alias として定義する場合に利用すると便利である。相手のドメイン名を列挙して おくと、ドメイン名のマッチングによって UUCP に向けてルーティングされ る。SYSNAME_ALIASES の記述は、直接ドメイン名を列挙するか、列挙したファ イルを置くパスを指定する。 EXTENDED_UUCP_ADDR_CONV=yes/no host.dom1!host.dom2!host.dom3!user という拡張UUCPアドレス表記を、 @host.dom1,@host.dom2:user@host.dom3 という @route: 表記に書き換えて 配送したい場合に yes を指定する。 デフォルトは no。 書き換え規則は以下のとおりである。 host!user -> host!user host.dom!user -> user@host.dom host.dom1!host.dom2!user -> @host.dom1:user@host.dom2 host.dom1!host.dom2!host3!user -> @host.dom1:host3!user@host.dom2 host.dom1!host.dom2!host.dom3!user -> @host.dom1,@host.dom2:user@host.dom3 host.dom1!host2!host.dom3!user -> host2!host.dom3!user@host.dom1 UUCP_RELAY= <メーラ>:<リレーホスト名> UUCP接続を行なっていないホストにおける !-style のアドレスのメールの 配送先を指定する。UUCP リンクを持っている場合では、UUCP_NEIGHBORS に 定義されていないシステム名宛のメールが UUCP_RELAY に送られる。 sendmail.mx の場合、ホスト名を [] で囲めば、そのホストに対する MX レ コードは参照されない。 CANON_UNKNOWN_UUCP=yes/no host!user のような UUCP スタイルアドレスを受けとったときに、そのままで は送るべき適当なホストが存在しない場合に、ネームサーバを参照してアドレ スの補完をおこなうことを指定する。 UUCP_GW が yes でかつ UUCP_NEIGHBORS と SYSNAME_ALIASES が定義されてい ない場合、あるいは UUCP_RELAY が定義されているばあいは、yes に設定する ことはできない(補完することが適当であるかどうか判断できないため)。 デフォルトは no。 NEED_SOMEWHERE_HACK=yes/no 古い rmail には、リモートアドレスは host!user 形式のでみあるという 前提で実装されているものがあり、そのような rmail では user@domain 形式が渡されると、somewhere!user@domain と書き換えてしまう。 NEED_SOMEWHERE_HACK を yes に定義しておくと、この somewhere! を 無条件に削除し、もとの user@domain 形式に戻すようにする。 uucpメーラ定義に関するパラメータ UUCP_MAILER_PATH= デフォルト: '/usr/bin/uux' UUCP_MAILER_FLAG= デフォルト: 'msDFMu' (V1) デフォルト: 'mDFMu' (V5) デフォルト: 'mDFMud' (V6) 変更が必要な場合は以下の *_ADD, *_SUB を利用する UUCP_MAILER_FLAG_ADD=<追加するメーラフラグ> UUCP_MAILER_FLAG_SUB=<削除するメーラフラグ> メーラフラグについては、ドキュメント MailerFlags 等を参照のこと UUCP_MAILER_ARGS= デフォルト 'uux - -r -gB $h!rmail ($u)' -a オプションが使えるシステムであれば、-a$f を追加しておくと エラーメールの取扱がより望ましくなるかもしれない。 UUCP_MAILER_MAXSIZE= デフォルト: 100000 (関連項目: MAX_MSG_SIZE) ◎ 特定の方面に対して別のメールアドレスを利用するときの設定 [another_addr] 一つの計算機が複数のネットワークに接続していて、それぞれのネットワーク で、その計算機を示すメールアドレスが異なっているような場合に利用する。 この機能を利用するように設定すると、smtp2 メーラと uucp2 メーラが 利用できるようになる。これらのメーラに送ったメールに関しては、 メールのヘッダに書かれたアドレスにドメインパートが付いてなかった場合、 @FROM_ADDRESS の代わりに @ANOTHER_ADDRESS が付加される。 ANOTHER_ADDRESS=another.address smtp2, uucp2 メーラに送った場合に付加すべきドメインパートを指定する。 REWRITE_MYNAME_TO_ANOTHER_ADDRESS=yes/no すでに、MY_NAME や OFFICIAL_NAME, MY_ALIAS に指定されているアドレスが ドメインパートとして付いていた場合に、ANOTHER_ADDRESS に書き換えたけ れば、yes を指定する。デフォルトは no。 REWRITE_ACCEPT_ADDRS_TO_ANOTHER_ADDRESS=yes/no すでに、ACCEPT_ADDRS に指定されているアドレスがドメインパートとして 付いていた場合に、ANOTHER_ADDRESS に書き換えたければ、yes を指定する。 デフォルトは no。 ◎ mailtonews gateway に関する設定 [netnews] NEWS_GATEWAY=yes/no mailtonews gateway の機能を利用するとき yes を指定する。 デフォルトは no。 NEWS_GROUPS=<受領トップドメイン/ニュースグループ> (複数可)(継続行可) <受領トップドメイン/ニュースグループの記述されたファイルのパス> 受け付けを行なうニュースのトップドメインあるいはニュースグループのリス トを記述する。あるいは、それが記述されたファイルのパスを指定する。 何も指定しない場合は、全てのニュースが受け付けられる。 NEWS_SUFFIX=<ニュースグループ識別子> 宛先がユーザでなくニュースであることを示すための識別子を指定する。 デフォルトは ".NETNEWS"。 alt.test に投稿する場合は、alt.test.netnews@hostname 宛にメールを送信 する。NEWS_SUFFIX を空に指定することで、alt.test@hostname のようにする こともできるが、この場合は必ず NEWS_GROUPS を指定すること。 以下は news-support/mail_to_group/usenet の使用を考慮したデフォルト設定 NEWS_MAILER_PATH= デフォルト: /usr/lib/news/mailtonews NEWS_MAILER_FLAG= デフォルト: lsDFMm NEWS_MAILER_ARGS= デフォルト: mailtonews $u NEWS_MAILER_MAXLINE=<記事の一行の最大文字数(V5のみ)> デフォルト: 未定義 NEWS_MAILER_MAXSIZE=<記事のサイズ> デフォルト: 100000 (関連項目: MAX_MSG_SIZE) もちろん、[netnews] の機能を利用せずに、aliases から mailtonews を起動 するように設定して、ニュースをメール経由で投稿できるようにすることも 可能。 ◎ user@[IPアドレス] 形式アドレスの扱いに関する設定 [numeric] RES_NUMERIC=yes/no user@[12.34.56.78] 形式のアドレスに対して、ネームサーバの逆引きにより user@host.domain に書き換える機能を利用したい場合に yes を設定する。 自分宛の user@[12.34.56.78] 形式のメールを受けとりたい場合にも、yes を 設定する必要がある。 デフォルトは yes。 DELIVER_NUMERIC=yes/no/strip user@[12.34.56.78] 形式のアドレスを解釈し、12.34.56.78 という IPアドレ スを持つホストに直接配送したい場合に yes にする。受けとり側の sendmail の設定によっては、メールをうまく送ることができない可能性があるが、これ は相手のドメイン名がメールを送る時点で不明である訳だからしかたがない。 送り先のホストが、IP アドレス表記を解釈できない場合には、yes の代わ りに strip を指定するとよい。 デフォルトは yes。 ◎ 中継経路の指定 [route] ROUTE_ADDRESS_FILE=<中継経路設定ファイル名> (複数指定可) 特定のアドレスに対して、@route: 形式の中継経路アドレス指定を付加する機 能を .cf に組み込む。この機能を用いることによって、隣接しないメールゲー トウェイを指定しメールを送ることが可能となる。UUCP 接続サイトなどで、 配送経路を制御したい場合に利用する。例えば、UUCP サイトから発信された メールが InetClub を経由して海外に発信されるようにしたい場合に利用でき る。ファイルを複数指定する場合は、スペースで区切って全体をクォートで囲 むこと。 ルートアドレス設定ファイルは、VER行、GW行、DOM行、HGW行、NGW行、 ROUTE行から構成される。 VER: 中継経路設定ファイルのバージョンを記述する。 GW: 後続する DOM行で指定されるドメイン宛のメールを中継させるべき GW を指示する。形式は route.host.name である。 DOM: 先行する GW行で定義された GW に中継させるべきドメイン名を指定 する。一つの DOM行に複数のドメイン名を記述することができる。 また、DOM行が複数連続して存在する場合は、すべて直前の GW行に 指定された GW に配送される。DOM行にはドメイン名が列挙された ファイルのパスを指定することも可能である。GW行および DOM行を 記述すると、sendmail のユーザ定義マクロ/クラスが一組み割り当 てられ、sendmail.cf-2.8Wb のように sendmail.cf の最初に GW の 記述と、ドメイン名の記述が集約されるので、sendmail.cf 直接の 変更が容易である。 HGW: 後続する DOM行で指定されたホスト/ドメイン宛のメールを中継させ るべき GW を指示する。書式は GW行と同じ。後続する DOM行で指定 したホスト/ドメイン名に完全一致した場合に GW にメールが送られ る(Host GW)。 NGW: 後続する DOM行で指定されなかったドメイン宛のメールを中継させ るべき GW を指示する。書式は GW行と同じ。後続する DOM行で指定 できるドメイン名は、マッチングアルゴリズムの制約上、1語(ピリ オド(.)を含まない)のものだけである。組織内のローカルなアドレ ス宛であるにもかかわらず、外部に飛んでいったりしないように十 分注意して設定すること(Negative GW)。 ROUTE: 形式は domain.name route.host.name である。前述の GW行および DOM行のペアを一つの定義で記述する場合に使用する。 なお、記述中に $m、$j などを利用する場合は、クォートが必要になるので 注意。 [設定例] ROUTE bitnet bitnetjp.ad.jp => user@*.bitnet を @bitnetjp.ad.jp:user@*.bitnet に書き換える GW kddlabs.co.jp DOM com edu mil org net => user@*.com などを @kddlabs.co.jp:user@*.com に書き換える NGW kddlabs.co.jp DOM jp bitnet => user@*.jp、user@*.bitnet 以外を @kddlabs.co.jp:user@* に 書き換える ◎ 静的配送先設定 [deliver] STATIC_ROUTE_FILE=<配送先設定ファイル名> (複数指定可) 配送先を静的に決定するルールを sendmail.cf に埋め込むために利用する。 静的な配送先を定義したファイルのパスを STATIC_ROUTE_FILE に指定する。 複数のファイルを指定する場合は、スペースで区切りクォートで囲むこと。 ファイルはカレントディレクトリから検索される。 設定ファイルは、VER行、GW行、DOM行、NGW行、STATIC行、ALIAS行、MAP行か ら構成される。 VER: 配送先設定ファイルのバージョンを記述するために利用する。 GW: 以下に続く DOM行で指定されるドメイン宛のアドレスを送るべき GW を指示する。形式は mailer: hostname であるが、smtp-mx, local メーラは例外で ": hostname" は記述せず smtp-mx, local を単独で記述する。smtp-ignmx は ": hostname" を付けておくこと も省略することも可能である。mailer: は省略可能で、省略した場 合には uucp: (UUCP_GW が yes で hostname が one token の場合) あるいは smtp: (hostname が multi-token の場合;[IP addr.spec] は multi-token) と解釈される。 sendmail.mx の場合、ホスト名を [] で囲めば、そのホストに対する MX レコードは参照されない。 DOM: 先行する GW行で定義された GW に送るべきドメイン名を指定する。 一つの DOM行に複数のドメイン名を指定することができる。DOM行が 複数連続して存在する場合は、すべて直前の GW行に指定された GW に配送される。DOM行にはドメイン名が列挙されたファイルのパスを 指定することも可能である。 GW行および DOM行を記述すると、sendmail のユーザ定義マクロとク ラスが一組み割り当てられ、sendmail.cf-2.8Wb のように sendmail.cf の最初に GW の記述とドメイン名の記述が集約されるの で、sendmail.cf 直接の変更が容易である。 GW uucp: hugw DOM rerf.or.jp DOM sanei.co.jp ses-inc.co.jp GW uucp: ougw DOM /etc/lower-domains.ougw GW smtp: [192.172.233.1] DOM notredame.ac.jp GW smtp: [loafer.kutsuda.kuis.kyoto-u.ac.jp] (MX を無視) DOM kutsuda.kuis.kyoto-u.ac.jp 上の例は、以下の例と同値 GW smtp-ignmx: loafer.kutsuda.kuis.kyoto-u.ac.jp DOM kutsuda.kuis.kyoto-u.ac.jp GW smtp: gw1.domain.:gw2.domain. DOM domain.ac.jp (GW1 を試みて、だめだったら GW2 を試す。. をつけることが重要) GW smtp-ignmx DOM .isle.kuis.kyoto-u.ac.jp (*.isle.kuis.kyoto-u.ac.jp に対して A レコードを参照) (user@isle.kuis.kyoto-u.ac.jp に対しては適用されない) GW smtp-mx DOM .mysubdomain.mydomain.co.jp (sendmail.mx では *.mysubdomain.mydomain.co.jp に対しては MX を 参照して配送。sendmail.nomx では、/etc/hosts 等に定義されている ホスト名が FQDN であるばあいに、直接配送する) GW local DOM mysubdomain.domain.or.jp (*.mysubdomain.domain.or.jp をローカルとして受理する) NGW: 後続する DOM行で指定されなかったドメイン宛のメールを送るべき GW を指示する。書式は GW行と同じ。後続する DOM行で指定できる ドメイン名は、マッチングアルゴリズムの制約上、1語(ピリオド(.) を含まない)のものだけである。組織内のローカルなアドレス宛で あるにもかかわらず、外部に飛んでいったりしないように十分注意 して設定すること。 STATIC: 形式は domain mailer: gateway である。前述の GW行およびDOM行の ペアを一つの定義で記述する場合に使用する。 なお GW と同様に mailer: は省略可能。 STATIC kmc.kyoto-u.ac.jp uucp: kmcgw2 STATIC csnet smtp: relay.cv.com STATIC .isle.kuis.kyoto-u.ac.jp smtp-ignmx STATIC .mysubdomain.mydomain.co.jp smtp-mx STATIC .mysubdomain.mydomain.or.jp local ESTATIC:形式は domain mailer: gateway である。domain に指定した文字列 に完全に一致する場合に機能する点が STATIC と異なる(Exact)。 なお STATIC と同様に mailer: は省略可能。 ESTATIC kyoto-u.ac.jp smtp: master.kyoto-u.ac.jp ALIAS: 形式は alias-domain real-domain mailer: gateway である。 alias-domain.* という宛先に対して、mailer: gateway によって メールを送るのは STATIC と同様であるが、その際にエンベロープの *.alias-domain を *.real-domain に書き換えを行なう。ヘッダの書 き換えは行なわない。なお GW と同様に mailer: は省略可能。 ALIAS astem.junet astem.or.jp uucp: astemgw (@*astem.junet 宛のメールを astemgw に UUCP で送信するが、 その際 @*astem.junet を @*astem.or.jp に書き換える。) MAP: 形式は real-domain MX-domain mailer: である。*.real-domain と いう宛先に対して、real-domain を MX-domain に置き換えて MX を 検索し、*.real-domain のアドレスには変更を加えずにメールを転送 する。なお GW と同様に mailer: は省略可能。 MAP bitnet bitnetjp.ad.jp smtp: (BITNET=mx と同様に、*.bitnet を *.bitnetjp.ad.jp に読み替え MX を検索した後、アドレスの書き換えを行なわずに転送する。) MAP .domain.co.jp '' smtp-ignmx: (xxx.domain.co.jp という宛先に対して、xxx に読み替えてホストの アドレスを検索し、アドレスの書き換えを行わずに転送する。 smtp-ignmx: を指定しているので、アドレス検索の際には、MX レ コードは参照しない。 なお、記述中に $m、$j などを利用する場合や、複数の語からなるような エラーメッセージを記述する場合は、クォートが必要になるので注意。 配送先の定義は、上から順に解釈されていくので、ファイルを記述する際の 注意として、定義するドメイン名/アドレスは、限定された(長い)ものから 順に記述すること。たとえば、zzz.jp を書いた後に yyy.zzz.jp を定義して も、yyy.zzz.jp というアドレスは、zzz.jp に先にマッチしてそちらのルール が適用されてしまう。したがって、この場合は yyy.zzz.jp を定義した後で zzz.jp を定義する必要がある。 USE_EXTENDED_NAMES=yes/no GW行と DOM行を用いた配送経路の定義では、一つの GW に対し一組みのクラス とマクロを使用する。sendmail 8.7 以降では、{longnames} のように {} で 囲んだアルファベット文字列で表現される識別子が利用できるようになった ため、yes を指定すると、それを用いて GW に関する定義が制限なく可能と なる。no を選んだ場合は、A-Z のうち未使用であるクラスとマクロのみが 利用可能となる。 デフォルトは no。 [設定例] Samples/Delivers/* ◎ マップファイルによる配送先設定 (R8*のみ) [mailertable] MAILERTABLE=yes/no/<マップタイプ:データベースパス> STATIC_ROUTE_FILE を利用する代わりに、外部データベースを用いて静的な 配送先を設定する機能を提供する。マップのタイプは hash, btree, dbm, nis などが利用できる。ただし、hash, btree を利用するためには NEWDB パッケージをリンクした sendmail を使用する必要がある。MAILERTABLE に yes を指定した場合は、マップのタイプは hash で、外部データベースの パスは /etc/mailertable となる。hash:/etc/mailertable.db 以外を用い る場合は、yes をの代わりにデータベース情報を明示的に指定する。 mailertable から mailertable.db を作成するには sendmail R8 のパッケー ジに付属している makemap を利用する。 % makemap hash mailertable.db < mailertable また dbm の場合は SunOS などに附属の makedbm を用いる。 % makedbm /etc/mailertable /etc/mailertable mailertable に変更があっても sendmail を再起動する必要はない。 デフォルトは no。 mailertable の例) isle.kuis.kyoto-u.ac.jp smtp:[130.54.20.2] .isle.kuis.kyoto-u.ac.jp smtp-ignmx +kmc.kyoto-u.ac.jp uucp:kmcbox2 `.' から始まっているものは、さらに左側にホスト名や下位サブドメイン名が 存在するものにマッチする。 `+' から始まっているものは、さらに左側にホスト名や下位サブドメイン名が 存在するもの、およびそのアドレス自身にマッチする。 それ以外のものは、まさにそのアドレスにマッチする。 [設定例] Samples/Tables/* ◎ NIS参照による配送 (R8*のみ) [nis.hosts] NIS_LOOKUP_DELIVER=yes/no NIS の hosts データベースを参照してメールの配送を行ないたい場合に yes を指定する。対象となるアドレスは、"@一語のホスト名" および "@ホスト名. MY_DOMAIN" である。 デフォルトは no。 ◎ デフォルトの配送先に関する設定 [indirect] STATIC_ROUTE_FILE による静的配送先指定、マップファイルによる配送先指定 などによって定義されなかった宛先に関して、配送先をどのように決定するか を指定する。 DIRECT_DELIVER_DOMAINS=all/none/ドメイン名(複数可)(継続行可)/ファイル名 DIRECT_DELIVER_MAILER=smtp sendmail.mx を用いている場合、ネームサーバから MX を検索し、メールを配 送することができる。また、sendmail.nomx の場合も、NIS や /etc/hosts を 参照してメールを送ることができる。DIRECT_DELIVER_DOMAINS には、MX や hosts データベースを参照して配送すべき宛先ドメイン名を指定する。複数指 定する場合は、スペースで区切って、全体をクォートで囲んでおく。指定した ドメイン以外宛のメールは、デフォルトのリレーホストに送られる(後述)。 all を指定した場合は、すべてについて MX あるいは hosts データベースを 参照してメールを配送する。none を指定した場合は、全てのメールをデフォ ルトのリレーホストに送る。UUCP 組織や、組織外と直接 IP 接続できない設 定にしているところでは、到達可能なドメインに対して直接メールを送って、 それ以外に対してリレーホストに送るというような設定をするときに、利用す る。 all: 全て直接配送を行なう none: 全て DEFAULT_RELAY に転送する ドメイン名: 指定したドメイン(複数記述可能)に対しては直接配送し、 それ以外のメールは DEFAULT_RELAY に転送する ファイル名: ドメイン名が列挙されたファイルのフルパスを指定する '-o /path' のように指定すると、ファイルが存在しなくても エラーにしない。 DIRECT_DELIVER_DOMAINS にマッチしたアドレスに対して配送に利用される mailer は DIRECT_DELIVER_MAILER に定義する。 DIRECT_DELIVER_DOMAINS のデフォルトは all。 DIRECT_DELIVER_MAILER のデフォルトは smtp。 注意) sendmail.nomx ではすべて直接配送は不可能なので all は 指定するべきではない。 DEFAULT_RELAY=<リレーホスト名> <メーラ>:<リレーホスト名> DIRECT_DELIVER_DOMAINS で定義された直接配送する宛先でなかった場合の転 送先ホストを指定する。sendmail.mx の場合、ホスト名を [] で囲めば、その ホストに対する MX レコードは参照されない。 例) DEFAULT_RELAY='smtp:relay.host.name' DEFAULT_RELAY='smtp:[relay.host.name]' DEFAULT_RELAY='smtp:relay1.host.name.:relay2.host.name.' 最後は、バックアップリレーホストを指定する例である。もし relay1 に 転送を試みて送れなかった場合は、relay2 に送られる。ホスト名の最後の . は MX_SENDMAIL=yes の場合に付けておくことを推奨する(ワイルドカード MX 問題がなければ、必要はない)。 ホスト名にはメーラを含めて記述できるので、デフォルトをエラーにしたい場 合は、error メーラをエラーメッセージとともに記述する。 例) DEFAULT_RELAY="error: deliver" ◎ エラーメッセージ出力用テンプレート [error] USE_DEFAULT_ERROR_MESSAGES=yes/no 配送を行なわずエラーにしてメールを返送させたい場合に、error メーラを 起動するが、その際に出力されるエラーメッセージを柔軟に定義できるよう にする機能を提供する。 DEFAULT_RELAY や STATIC_ROUTE_FILE の GW や STATIC などで error:* を 記述すると、* の部分がエラーメッセージとして出力できるようになる。 V7 の場合は error:X.Y.Z:* のように、DSN (Delivery Status Notification) code も指定することができる。 特に * の部分に deliver, lower という文字列を指定した場合は、以下の ようなあらかじめ用意されたメッセージが出力される。 error:deliver "can not deliver to HOST.DOMAIN" error:lower "never heard of HOST in domain DOMAIN" デフォルトはyes。 ◎ ユーザ名の書き換え/ユーザ単位のスプールの指定 (R8* のみ) [usertable] USERTABLE_MAPS=<ドメイン名=タイプ:データベース:フラグ> (複数記述可能) USERTABLE_MAPS に指定したドメイン名に対して、usertable を参照した メールアドレスの書き換えやメールの転送を行なう。この機能は、userdb として sendmail R8 に用意されているものに似ているが、userdb はローカル の発信/受信メールに関して処理を行なうのに対し、usertable は任意のアド レスに関して処理を行なうことができるという点で異なっている。 ドメイン名に local を指定すれば、対応するデータベースは userdb と同様 にローカルの発信/受信用として扱われる。 例) USERTABLE_MAPS='another.domain=hash:/etc/ut.ad' (/etc/ut.ad の内容:) # user1@another.domain 宛のメールを user1 のメールボックスへ user1:maildrop user1 # user2@another.domain を user3@foo.bar に書き変え user2:mailname user3@foo.bar # user2@another.domain 宛のメールを user4@foo.bar に転送 user2:maildrop user4@foo.bar # exact match がなければ any@another.domain 宛のメールを # user5@foo.bar に転送 *:maildrop user5@foo.bar :default:maildrop user5@foo.bar # user6@another.domain が default match した場合 user6@foo.bar # に転送 *:maildrop %1@foo.bar :default:maildrop %1@foo.bar ここに定義されていない user@another.domain 宛のメールの扱いは フラグの指定によって決定される。フラグに error を指定した場合 は、User Unknown エラーになる。フラグになにも指定しなかった 場合は、上位の MX ホストが存在すればそちらに転送される。 当然ながら上位の MX ホストが存在しなければ local config error となる。 USERTABLE_MAPS には複数のドメイン名およびドメイン名毎のデータベースを 指定することができるため、一つのホストでユーザ空間の異なる複数のドメ インを扱いたい場合に便利である。 userdb にない usertable だけの機能として maildrop 機能を利用すると、 postmaster@host.domain と postmaster@domain を区別させるようなことが できる。 例) USERTABLE_MAPS='domain1=hash:/etc/ut.dom1 \ domain2=hash:/etc/ut.dom2' (/etc/ut.dom1 の内容:) postmaster:maildrop u1 (/etc/ut.dom2 の内容:) postmaster:maildrop u2 postmaster@domain1 宛のメールは u1 に、 postmaster@domain2 宛のメールは u2 に送られる。 最初の例において、ドメイン部のつかない user2 あるいは OFFICIAL_NAME のついた user3@OFFICIAL_NAME に対しては、another.domain に対する マップは参照されない。このようなアドレスに対して書換えを行ないたい 場合は、ドメイン名 local に対するデータベースを定義し、その中で user2:mailname user3@foo.bar の定義をしておく必要がある。 データベースタイプは btree, hash(NEWDB), dbm(DBM), nis が利用できる。 データベース名は、nis の場合は NIS データベース名を指定する。 btree, hash(NEWDB) の場合、データベース名に指定した名前に .db を 補ったファイルを用意する。usertable から usertable.db を作成する には、sendmail R8 のパッケージに付属している makemap を利用する。 % makemap btree usertable.db < usertable (btree の場合) dbm(DBM) の場合は、makedbm を利用する(/usr/etc/yp/ などにある)。 なお、外部データベースを利用しているため、更新の際に sendmail の 再起動は必要ない。 [設定例] Samples/Tables/* USERTABLE_LOCAL_REWRITE=yes/no yes を指定すると、local に対するマップ定義が指定されている場合に、 user@OFFICIAL_NAME や user@ACCEPT_ADDRS 形式のアドレスを、mailname に指定されたアドレスに書き換える。ただし、発信者アドレスについて のみ。 デフォルトは no。 USERTABLE_RECIPIENT_REWRITE=yes/no USERTABLE_LOCAL_REWRITE による書き換えを受信者アドレスについても おこなう。 デフォルトは no。 ◎ その他 [option] TRUSTED_USERS=<信頼できるユーザ名リスト> sendmail の -f オプションにより、発信者のアドレス(UNIX From/SMTP From) を変更することができるユーザを指定する(複数可指定可)。 sendmail 8.6 まででは trusted users の概念がなくなったが、8.7 から 復活している。 TRUSTED_USERS_FILE_PATH=<信頼できるユーザ名の記述されたファイルのパス> sendmail 8.7 からは、trusted users の管理にクラス t が用いられる ようになった。これによって trusted users を sendmail.cf とは独立 した別のファイルに定義することが可能となった。この機能を利用する 場合に定義する。このファイルは sendmail の起動時に読み込まれるの で、変更した場合は再起動が必要になる。 デフォルトは未定義。 FORMAT_RECEIVED=None/Simple/ Nofrom|EnvFrom|Novers|Ident|Proto|Fold|Multi|Dest ヘッダの Received: 行のフォーマットを選択する。 Simple: 従来と同様の簡素なヘッダ None: Received: ヘッダ自体を付加しない Nofrom: "from 発信ホスト" の情報を付加しない EnvFrom:エンベロープ発信者アドレス情報を付加する Novers: sendmail のバージョン情報を付加しない Ident: ユーザ認証情報(ユーザ名@ホスト名、IP アドレス)を付加する (R8* のみ) Proto: "with SMTP" "with UUCP" などのプロトコル情報を付加する (R5 の場合は、当該ホストから発信された全てのメールにも "with UUCP" が付いてしまうので、特に必要のない場合は利用しない方が 望ましい。UUCPリンクを持つ場合には嬉しいかも知れない) Dest: "for 受取人アドレス" の情報を付加する (R8* のみ) Fold: "id メッセージID" の直前でヘッダを改行する Multi: できるだけ改行し、一行が長くならないようにする (R8* のみ) Ident, Proto, Dest, Fold の指定は同時に複数列挙して指定する。 例えば全て指定する場合には、Ident-Proto-Dest-Fold のように指定する。 デフォルトは Ident-Proto-Dest (V5), Fold (V1)。 Dq TOTAL_NAME= From: に付けられるアドレスの形式を指定する。 TOTAL_NAME='$?x$x <$g>$|$g$.' From: Full Name の形式を使用(デフォルト) TOTAL_NAME='$g$?x ($x)$.' From: user@host.domain (Full Name) の形式を使用 De SMTP_LOGIN_MESSAGE=<メッセージ文字列> (R5, R8) SMTP_GREETING_MSG=<メッセージ文字列> (R8V?) サーバの接続時メッセージの設定 デフォルトは '$j Sendmail $v/%CF_VER_MACRO_CHAR% ready at $b' $j は OFFICIAL_NAME、$v は sendmail のバージョン、$b は時間。 %CF_VER_MACRO_CHAR% は CFバージョンを表すマクロ文字に置き換えられる。 O7/SevenBitInput SEVEN_BIT_INPUT=True/False (R8* のみ) メールボディを強制的に 7bit にする。 デフォルトは False (8bit のまま通す)。 O EightBitMode EIGHT_BIT_HANDLING=pass8/mime/strict MIME 的ヘッダが伴っていない 8bit データの入力に対する動作を指定する。 pass8: そのまま通す mime: MIME に変換する strict: 配送を拒否する デフォルトは pass8。 OA/AliasFile ALIAS_FILE_PATH=<ユーザエイリアスファイルのパス> (複数可)(継続行可) デフォルトは /etc/aliases。 R8* では複数パスをコンマ(,)で区切って記述したり、複数行にまたがって記述 することが可能。ファイルがデータベース形式で管理されている場合は、 sendmail の稼働中に変更を行っても変更がすぐに反映される。 例) ALIAS_FILE_PATH='/etc/aliases1,/etc/aliases2\ /etc/aliases3' NIS_ALIAS_MAP= (R8* のみ) マップ名は mail.aliases が標準的。マップは複数定義可能で、その場合 区切りはスペースを用いて一行で定義する。 NIS_DOMAIN= (R8* のみ) domainname で定義されている以外のドメイン名で参照したい場合に指定する。 Oa/AliasWait ALIAS_WAIT= デフォルトは 10 (分)。 OB/BlankSub BLANK_SUB=<文字> メールアドレスに含まれるスペースを指定した文字に置き換える。 デフォルトは '.'。 Ob/MinFreeBlocks MIN_FREE= (R8* のみ) 空きブロックがこの値を下回った場合、メールの受信を拒否する。 デフォルトは 4。 OC/CheckpointInterval CHECKPOINT_INTERVAL=<チェックポイント間隔> 指定した回数だけメールを送信するごとに、mqueue を更新する。 sendmail が途中で落ちたりした場合に、すでに配送が終っている受信者に 再び同じメールが届く事故を発生しにくくする。 デフォルトは 10 通。 Oc/HoldExpensive CON_EXP=True/False コストの高いメーラへの発信を最初の配送時に見送るかどうかを指定する。 デフォルトは False (最初の配送時に配送を試みる)。 OD/AutoRebuildAliases AUTO_REBUILD=True/False aliases に不整合が生じた時に自動的に newaliases を実行するかどうか。 デフォルトは False (自動的には実行しない)。 Od/DeliveryMode DELIVERY_MODE=<デフォルトの配送モード> interactive, background, queue が指定可能. デフォルトは background。 OE/ErrorHeader ERROR_MSG_FILE_PATH=<エラーメッセージ/ファイルパス> エラーメールに同封するメッセージを定義する。 /から始まる場合は、メッセージが書き込まれたファイルを指定する。 ファイルを指定した場合、そのファイルは sendmail の起動時に読み込まれ るので、変更した場合は再起動が必要になる。 デフォルトは未定義。 Oe/ErrorMode ERROR_MODE=<エラーの通知モード> p (print to dead.letter), m (mail back), w (write back), e (special berknet processing), q (quiet; stat only) が指定可能。 デフォルトは p。 OF/TempFileMode TEMP_FILE_MODE= デフォルトは 0600。 Of/SaveFromLine SAVE_FROM_LINES=True/False UNIX スタイルの "From_" 行を保存するか無視するか。 デフォルトは False (無視する)。 True (保存する) を指定した場合、sendmail に入力したメールの先頭に UNIX スタイルの "From_" が存在した場合、その時点でメールの本文が開始された と判断されてしまうことになるので注意。 OG/MatchGECOS MATCH_GECOS=True/False (R8* のみ) 受信者を特定するのに、passwd の GECOS フィールドを参照するかどうか。 デフォルトは False (参照しない)。 R5 では必ず参照される。 Og DEF_GID=<デフォルトGID> (R8V6 より DEF_UID に統合され廃止) sendmail が動作をおこなう GID を指定する。 デフォルトは 1 (daemon)。 OH/HelpFile HELP_FILE_PATH=<ヘルプファイルのパス> デフォルトは /usr/lib/sendmail.hf。このファイルの変更の際に sendmail の再起動は必要ない。 Oh/MaxHopCount MAX_HOP=<エラーとならない Received: 行の最大行数> (R8* のみ) デフォルトは 17。 OI/ResolverOptions BIND_OPTS=True/False (R5 の場合, sendmail.mx のみ) BIND_OPTS=[+/-]debug/aaonly/usevc/primary/igntc/recurse/defnames/ stayopen/dnsrch/HasWildcardMX (R8* の場合, sendmail.mx のみ) (HasWildcardMX は R8V6 以降のみ) BIND を利用するかどうか。正確には、ネームサーバに関するエラーハンドリ ングをおこなうかどうかを指定するものである。R8* では、リゾルバに与える オプションを指定することが可能である。BIND を一切利用しない場合は、 BIND パッケージをリンクしていない sendmail.nomx を使用しなければなら ない。MX_SENDMAIL=yes の場合は、sendmail.mx 用のデフォルトが自動的に 定義されるので、R8* で明示的にオプションを指定する場合以外は、特に 定義する必要はない。 Oi/IgnoreDots IGNORE_DOTS=True/False (R8* のみ) メールアドレスの最後の'.'を無視するかどうか。 デフォルトは False (無視しない)。 OJ/ForwardPath FORWARD_FILE_PATH=<.forwardファイルを検索するディレクトリ>(複数可)(R8*のみ) 複数指定する場合は':'で区切る。 デフォルトは未定義 (i.e. $z/.forward)。 $u はユーザ名、$z はユーザのホームディレクトリ、$w はホスト名(MY_NAME) を示す。 Oj/SendMimeErrors MIME_FORMAT_ERRORS=True/False (R8* のみ) MIME 形式 multipart のエラーメールを発信するかどうか. デフォルトは True (multipart にする)。 OK/ConnectionCacheTimeout MCI_CACHE_TIMEOUT=<コネクションキャッシュタイムアウト> (R8* のみ) sendmail R8 では MCI(Mail Connection Information) を用いて、一度開いた SMTP コネクションを再利用できるようにしている。 タイムアウトに達したコネクションは再利用されない。 デフォルトは 5m (5分)。 Ok/ConnectionCacheSize MCI_CACHE_SIZE=<同時に開設できるSMTPコネクションの数> (R8* のみ) デフォルトは 2。 OL/LogLevel LOG_LEVEL= デフォルトは 9。 Ol/UseErrorsTo USE_ERRORS_TO=True/False (R8* のみ) Errors-To: ヘッダへの反応を行なうかどうか。 デフォルトは False (無視する)。 Om/MeToo ME_TOO=True/False aliases を展開した時に、その中に発信者が含まれていた場合、発信者にも メールを送るかどうか。 デフォルトは True (送る)。 On/CheckAliases CHECK_ALIASES=True/False newaliases の際に、alias 先(':' より右側)のアドレスの正当性チェックも おこなうかどうか。 デフォルトは True (チェックする)。 OO/DaemonPortOptions DAEMON_OPTIONS=<オプション> (R8* のみ) SMTP のポート番号などを設定する。 デフォルトは未定義。 Oo/OldStyleHeaders OLD_STYLE_HEADERS=True/False ヘッダのアドレスの古い形式の区切りも扱うようにするかどうか。 デフォルトは True (扱う)。 OP/PostMasterCopy COPY_ERRORS_TO=<エラー発生の通知の送信先> エラーが発生した場合、エラーが発生したメールのヘッダ部分をおくるべき ユーザの指定。 デフォルトは未定義。 Op/PrivacyOptions PRIVACY_FLAGS=<フラグ> (R8* のみ) フラグは以下の通り: public 制限なし needmailhelo SMTP/MAIL コマンドの発行前に HELO を要求する needexpnhelo SMTP/EXPN コマンドの発行前に HELO を要求する needvrfyhelo SMTP/VRFY コマンドの発行前に HELO を要求する noexpn SMTP/EXPN コマンドの使用禁止 novrfy SMTP/VRFY コマンドの使用禁止 restrictmailq mailq コマンドの一般ユーザ使用禁止 restrictqrun sendmail -q の一般ユーザの使用禁止 noreceipts Return-Receipt-To: の解釈抑制 noetrn ETRN コマンドの使用禁止 (8.9以降) noverb VERB コマンドの使用禁止 (8.9以降) goaway needmailhelo,needexpnhelo,needvrfyhelo,noexpn,novrfy, authwarnings,noreceipts,noetrn,noverb と同値 authwarnings 発信者アドレスの偽造可能性に関する情報をヘッダに付加 フラグを複数指定する場合は、コンマ(,)で区切る。 デフォルトは authwarnings。 OQ/QueueDirectory QUEUE_DIR=<キューディレクトリ> デフォルトは /usr/spool/mqueue。 Oq/QueueFactor QUEUE_FACTOR=<負荷による配送延期判定関数の勾配> すぐに配送するか、一旦 mqueue に落すかを決定する評価式に利用される。 デフォルトは 600000。 OR/DontPruneRoutes NO_STRIP_ROUTE=True/False (R8* のみ) エラーメールの返送先アドレスに route address (@host.domain:) が 付いている場合、それを削除したアドレスにメールを返送する(RFC1123)。 デフォルトは False (strip する)。 Or/Timeout READ_TIMEOUT= (R8のみ) R8 では、SMTPセッションの状態毎に異なったタイムアウトの時間が設定でき る。設定の際の項目名は initial, mail, rcpt, datainit, datablock, datafinal, command, rset, helo, quit, misc, ident。 デフォルトは datablock=10m。 複数のタイムアウトを定義する場合は、コンマ(,)で列挙する。 ident の値を 0 にすると、IDENT プロトコルは使わないようになる。 R5 の場合は、全て同じタイムアウトの時間となる。 デフォルトは 5m。 R8V? では、READ_TIMEOUT のかわりに以下の変数を個々に定義する。 TIMEOUT_INITIAL= TIMEOUT_HELO= TIMEOUT_MAIL= TIMEOUT_RCPT= TIMEOUT_DATAINIT= TIMEOUT_DATABLOCK= TIMEOUT_DATAFINAL=<. による DATA コマンド完了に対する応答時間> TIMEOUT_CONNECT= TIMEOUT_INIT_CONNECT=<初回の配信の際の SMTP コネクション確立までの待ち時間> ここでいう初回とは、そのメッセージに対する配信ジョブの起動回数が1である ことを言い、一旦 mqueue に保存されて再試行される毎に回数が増加する。 TIMEOUT_RSET= TIMEOUT_QUIT= TIMEOUT_MISC= TIMEOUT_COMMAND=<次のコマンドが送られてくるまでの待ち時間> TIMEOUT_IDENT= TIMEOUT_FILEOPEN=<ファイルがオープンできるまでの待ち時間> TIMEOUT_QUEUERETURN=<メール返送までの保持期間> デフォルトは 5日。 TIMEOUT_QUEUERETURN_NORMAL=<メール返送までの保持期間(precedence が 0)> TIMEOUT_QUEUERETURN_URGENT=<メール返送までの保持期間(precedence が正)> TIMEOUT_QUEUERETURN_NON_URGENT=<メール返送までの保持期間(precedence が負)> TIMEOUT_QUEUEWARN=<未完通知発信までの時間> デフォルトは未定義(通知なし)。 TIMEOUT_QUEUEWARN_NORMAL=<未完通知発信までの時間(precedence が 0)> TIMEOUT_QUEUEWARN_URGENT=<未完通知発信までの時間(precedence が正)> TIMEOUT_QUEUEWARN_NON_URGENT=<未完通知発信までの時間(precedence が負)> TIMEOUT_MCI_INFO= 30分。 OS/StatusFile STAT_FILE_PATH=<統計情報ファイルのパス> 統計情報は mailstats で参照できる。 デフォルトは /etc/sendmail.st。 あらかじめファイルが存在していなければ、統計情報は出力されない。 統計情報ファイルのクリアは、cp /dev/null /etc/sendmail.st で行う。 Os/SuperSafe SAFE_QUEUE=True/False fork を行なう際に必ずキューに書き込むかどうか。 安全のために True のままにしておくことが望ましい。 デフォルトは True (書き込む)。 OT MSG_TIMEOUT=<配送が完了するまでにキューに保存する時間/ 未配送通知発信までの時間> R8 のデフォルトは 7d/4h (7日で返送/4時間で未配送通知)。 R5 のデフォルトは 7d (7日で返送)。 未配送通知時間は R5 では指定できない. R8V? の場合は TIMEOUT_* を用いて定義する。 Ot/TimeZoneSpec TIME_ZONE=<タイムゾーンの設定> (R5 では設定できるが意味を持たない) 未定義: システムデフォルトを使用 空文字列を定義: TZ 環境変数を参照 タイムゾーン文字列を定義: それを使用 デフォルトは未定義。 RFC1123/RFC822 は JST を使わずに +900 のように表記すべきことを推奨して いる。 OU/UserDatabaseSpec USER_DATABASE_FILE_PATH= (R8* のみ) userdatabase を利用するためには、sendmail に NEWDB をリンクしておく 必要がある。userdatabse については、sendmail R8 に付属のオペレーショ ンドキュメント等を参照されたし。データベース形式のファイルなので、 sendmail の稼働中に行った変更は再起動なしに反映される。 デフォルトは未定義 (userdatabase を使用しない)。 Ou/DefaultUser DEF_UID=<デフォルトUID> sendmail が動作をおこなう UID を指定する。 デフォルトは 1 (daemon)。 OV/FallbackMXhost FALLBACK_MX=<検索した全てのMXホストにメールが送れなかった場合の送り先> (R8* のみ, R5 では kuis-16 パッチの当たっている 5.67 で有効、 どちらも sendmail.mx を利用する場合のみ) ネームサーバから MX を検索し、得られたホスト全てに対してメールの配送 を試みたが、すべて成功しなかった場合、ここに定義したホストにメールが 送られる。これによって、配送が遅延しているメールを一箇所に集めること が可能。 デフォルトは未定義。 Ow/TryNullMXList TRY_NULL_MX_LIST=True/False (R8* で sendmail.mx を利用する場合のみ) あるアドレスに対して、当該ホストが、そのアドレス対応する MX レコード のプライマリ MX ホストとして定義されている場合に、そのホストがそのア ドレスをローカルのユーザ宛として受け取るように設定されていなければ、 A レコードを参照してメールの転送先を検索することを指定する(True)。 デフォルトは False (A レコードを参照せずにエラーとする)。 OX/RefuseLA LOAD_REFUSE=<メールの受信を拒否する負荷値> すぐに配送するか、一旦 mqueue に落すかを決定する評価式にも利用される。 デフォルトは 12。 Ox/QueueLA LOAD_QUEUE=<メールの送信を延期し始める負荷値> すぐに配送するか、一旦 mqueue に落すかを決定する評価式にも利用される。 実際にメールの配送を延期するかどうかは、受信者数やメールの大きさ、 precedence 値などで決定される。 デフォルトは 8。 OY/ForkEachJob SEPARATE_PROC=True/False (R8* のみ) キューに溜っているメールの配送を一つのプロセスが順番に行なわずに、 別々のプロセスを毎回起動するかどうかを指定する。 一つのプロセスが連続して処理を行なうと、メモリが次第に消費されていく ためメモリ資源が非常に乏しいホストでは True にすると良いかも知れない。 デフォルトは False (一つのプロセスでおこなう)。 Oy/RecipientFactor WORK_RECIPIENT_FACTOR=<受信者の数の係数> (R8* のみ) すぐに配送するか、一旦 mqueue に落すかを決定する評価式に利用される。 デフォルトは 30000。 OZ/RetryFactor WORK_TIME_FACTOR= (R8* のみ) すぐに配送するか、一旦 mqueue に落すかを決定する評価式に利用される。 デフォルトは 90000。 Oz/ClassFactor WORK_CLASS_FACTOR= (R8* のみ) すぐに配送するか、一旦 mqueue に落すかを決定する評価式に利用される。 デフォルトは 1800。 O QueueSortOrder QUEUE_SORT_ORDER= (8.7, time は 8.8) mqueue に貯まっているメールの処理の優先順を指定する。 デフォルトは未定義(priority)。 O MinQueueAge MIN_QUEUE_AGE= (8.7) デフォルトは 10m。 O DefaultCharSet DEF_CHAR_SET=<8ビットデータが入力されたときの charset ラベル> (8.7) デフォルトは未定義。 O ServiceSwitchFile SERVICE_SWITCH=<サービススイッチ定義のファイルパス> (8.7) デフォルトは /etc/service.switch。 O HostsFile HOSTS_FILE_PATH=<ホスト定義ファイル> (8.7) sendmail 独自のサービススイッチファイルで file を参照するように設定 した場合に参照される。 デフォルトは /etc/hosts。 O DialDelay DIAL_DELAY=<ダイアルアップ回線使用時の待ち時間> (8.7) デフォルトは未定義(0)。 O NoRecipientAction NO_RECIPIENT_ACTION= (8.7) ヘッダに受信者が明記されてなかった場合に補うヘッダの指定。 デフォルトは未定義(そのままにする)。 O SafeFileEnvironment FILE_ENV=<ファイル作成時の chroot 先> (8.7) デフォルトは未定義(chroot しない)。 定義されているディレクトリが存在しない場合は、定義が無視される。 O ColonOkInAddr COLON_OK_IN_ADDR= (8.7) : をアドレスの中に使うことを許すかどうか。 デフォルトは False。 O MaxMessageSize MAX_MSG_SIZE=<許容最大メッセージサイズ> (8.7) ESMTP でメールが送受される場合は、メールの本文の送受の前にメッセー ジのサイズが通知されるので、最大メッセージサイズを越えるメールの転 送は発生しない。これに対して、*_MAILER_MAXSIZE による制限では、 メールは一旦受信され、当該 mailer による送信の直前にサイズが検査 されて必要に応じて拒否される。 デフォルトは未定義(無制限)。 O MaxQueueRunSize MAX_QUEUE_RUN=<同時に run queue するプロセスの最大数> (8.7) デフォルトは 10000。 O DontExpandCnames DONT_EXPAND_CNAME= (8.7) CNAME レコードで定義されたアドレスを本名に書き換えることを 抑制するかどうか。 デフォルトは False。 O SmtpGreetingMessage SMTP_GREETING_MSG= (R8V?) デフォルトは '$j Sendmail $v/$Z; $b'。 O UnixFromLine UNIX_FROM_LINE= (R8V?) デフォルトは 'From $g $d'。 O OperatorChars OPERATOR_CHARS=<メールアドレスのデリミタ文字> (R8V?) デフォルトは '.:%@!^=/[]|+'。 O DontInitGroups DONT_INIT_GROUPS= (8.7) NIS を用いている場合などで initgroups() にかかるコストが 高いような場合に、それを抑制するかどうか。 デフォルトは False。 O SingleLineFromHeader SINGLE_LINE_FROM= (8.8) From: の行が複数にまたがっているメールを受け取ることができないような メールゲートウェイがあるような場合に、複数行にまたがることを抑制する。 デフォルトは False。 O AllowBogusHELO ALLOW_BOGUS_HELO= (8.8) SMTPクライアント側からの HELO コマンドに、クライアントの名前が伴わない ような場合に、そのような HELO コマンドの入力を許容するかどうか。 デフォルトは False。 O ConnectionRateThrottle CONN_RATE=<コネクション数> (8.8) SMTPサーバが一秒間に受け付ける最大のコネクション数を指定する。 デフォルトは0(未定義の場合)で、制限なし。 O UnsafeGroupWrites UNSAFE_GROUP_WRITES= (8.8) グループに書き込み許可がでている :include: ファイルを危険だと 見なすかどうか。 デフォルトは False。 O DoubleBounceAddress DOUBLE_BOUNCE=<送り先> (8.8) メールがエラーになり、エラー通知メール発信者に送り返そうとしたが、 そのメールもエラーになった場合(2重エラー)に、どこにそのメールを 送るべきかを指定する。この2重エラーメールには本文が含まれることに なるので、この設定により本文を見てしまう管理者をしぼることができる。 デフォルトは postmaster。 O HostStatusDirectory HSTAT_DIR='.hoststat' (8.8) 過去の配送状態を保存するディレクトリを指定する。指定は、QUEUE_DIR からの相対位置。絶対位置指定も可能。ディレクトリを指定すると、配送 状態の記録、および再利用が行われ、異なる sendmail プロセスが、到達 不能な同一ホストに対して同じようにタイムアウト待ち状態になる機会を 減らす機能が有効になる。指定したディレクトリはあらかじめ作成してお くこと。また、この機能を有効にした場合、sendmail に -bh オプション を指定して起動することにより、過去の配送結果情報を確認することが できる。 デフォルトは未定義(配送状態を保存しない)。 O SingleThreadDelivery SINGLE_THREAD_DELIVERY= (8.8) 複数の sendmail プロセスが同時に同一ホストに対してコネクションを 持たないようにさせる(HSTAT_DIR の設定も必要)。ただし、大きなメール の転送中に、小さなメールでさえ同じホストに送ることができなくなって しまうことに注意。 デフォルトは False。 O RunAsUser RUN_AS_USER=<ユーザ名> (8.8) セキュリティを向上させるため、すべての処理を指定したユーザ名で実行 させることを要求する。sendmail が参照したり実行したりしようとする ファイルは、すべて指定したユーザ名によって参照/実行が可能でなければ ならない。 デフォルトは未定義(従来通り)。 O MaxDaemonChildren MAX_DAEMON_CHILDREN=<プロセス数> (8.9) 同時に動作可能な sendmail の子プロセスの数の上限を規定する。 多数の sendmail プロセスが、プロセステーブルを埋めつくさないように するためのオプション。 デフォルトは 0 (制限なし)。 O MustQuoteChars MUST_QUOTE_CHAR=<文字のリスト> (8.9) ヘッダにおいて、発信者の FullName が phrase
の phrase の 部分に置かれる場合、クォートすべき文字を指定する。 デフォルトは .'。 さらに @,;:\()[] は常にクォートすべき文字として扱われる。 O DontBlameSendmail DONT_BLAME_SENDMAIL=<オプションのリスト> (8.9) ファイルやディレクトリのモードのチェック機構を緩和する。 デフォルトは未定義。 O DontProbeInterfaces DONT_PROBE_INTERFACE= (8.9) インタフェースに定義されているアドレスからホスト名を得て、クラス w に 追加する機能を抑制したい場合に True を指定する。 デフォルトは False。 O MaxRecipientsPerMessage MAX_RCPT_PER_MSG=<アドレス数> (8.9) SMTPでメールの受信時に、1つのトランザクションにおいて宛先として 受信可能なアドレスの数の最大数を指定する。 デフォルトは 0 (制限なし)。 ◎ ESMTP peers [brokensmtp] (8.6+2.4W のみ) ESMTP_PEERS=<ホスト名> (複数可)(継続行可) sendmail R8 では、ESMTP をサポートしている旨を接続してきたクライアント に伝えるため、接続時のオープニングメッセージが2行に増えている。しかし、 RFC821 に準拠していない複数行のシーケンスを解釈できないクライアントが 存在し、そのクライアントからはメールを送ることができない場合がある。 そのようなクライアントホストがある場合には、ESMTP_PEERS にそのホスト名 を設定することで、そのホストに対しては従来のオープニングメッセージを送 るようにすることができる。 ただしこの機能は 2.4W において、ESMTPPEERSCLS を 1 にしてコンパイル した場合にのみ有効である。 2.4W を用いていない場合は、コンパイル時に BROKENSMTPPEERS を定義して コンパイルすることにより、2行のオープニングメッセージを抑制することが できる。 例1) ESMTP_PEERS="!jpnkyoto.kyoto-u.ac.jp" (jpnkyoto.kyoto-u.ac.jp のみ ESMTP greeting をしない) 例2) ESMTP_PEERS="!.isle.kuis.kyoto-u.ac.jp" (*.isle.kuis.kyoto-u.ac.jp のみ ESMTP greeting をしない) 例3) ESMTP_PEERS="!all .kuis.kyoto-u.ac.jp" (*.kuis.kyoto-u.ac.jp のみ ESMTP greeting を行なう) ◎ IDENT peers [ident] (8.6+2.4W のみ) IDENT_PEERS=<ホスト名> (複数可)(継続行可) sendmail R8 では SMTP 接続の要求を受けた際に、要求元のホストに対して IDENT プロトコルを用いたユーザ情報の取得を試みる。ところが、途中の ゲートウェイや接続元ホストの OS によっては、IDENT の接続エラーに伴って SMTP 接続までも同時に切断されてしまい、メールが受けとれないという問題 が発生することがある。そこで、特定のホストに対してだけ IDENT を用いた くない場合にそのホストリストを定義する。 ただしこの機能は 2.4W において、IDENTPEERSCLS を 1 にしてコンパイル した場合にのみ有効である。 IDENT を全く用いなくする別の方法としては、READ_TIMEOUT="ident=0m" の ように IDENT のタイムアウトを 0 にしてしまう方法もある(R8 全般に有効)。 例1) IDENT_PEERS="!foo.kuis.kyoto-u.ac.jp" (foo.kuis.kyoto-u.ac.jp のみ IDENT を禁止する) 例2) IDENT_PEERS="!all" (全てのホストに対して IDENT を禁止する) 例3) IDENT_PEERS="!all .kuis.kyoto-u.ac.jp" (*.kuis.kyoto-u.ac.jp のみ IDENT を用いる) 例4) IDENT_PEERS="!.imel.kyoto-u.ac.jp" (*.imel.kyoto-u.ac.jp のみ IDENT を禁止する) 例5) IDENT_PEERS="!.kyoto-u.ac.jp .kuis.kyoto-u.ac.jp" (*.kuis.kyoto-u.ac.jp 以外の *.kyoto-u.ac.jp のみ IDENT を禁止する) ◎ ローカルハック [localhack] sendmail.cf 作成ツール CF では、これまでに説明してきたた変数の値の設定 を変更することで希望の動作が得られない場合のために、ローカルハック定義 変数が用意されている。ローカルハック定義変数を利用することで、CF パッ ケージのマスターファイルを変更することなく、sendmail.cf のさらに細かな 動作を記述することができる。どうしても CF パッケージの変更をおこなう必 要があるときは、ドキュメント EXTEND.jpn を参考に変更する。 LOCALHACK_FILE=<ローカルハック定義ファイル名> 特殊設定の定義を記述したファイル名を指定する。定義された内容が生成され る .cf ファイルに埋め込まれる。 特殊設定については、LOCALHACK.jpn を参照されたし。 ◎ メールの転送制限 [smtpcheck] (8.8)(R8V7以降) 従来の sendmail では、バイナリ中の checkcompat() に細工することにより メールの転送制限を行うことができたが、sendmail 8.8 では、sendmail.cf にルールを記述するだけでメールの転送制限をすることが可能になった。 この機能を利用して、メールサーバが属する組織とは無関係なメールの 転送に利用されてしまわないように、発信者アドレスと受信者アドレスに 関してチェックをおこなうことができる。 smtpcheck は、SMTP により送られてくるメールの受信を拒否するための 機能を提供する。 この機能は、配信にかかわる設定とは完全に独立しているので、既存の 使用中の sendmail.cf に追加するという形で、同様の制限機能を組み込む ことも可能である。そのような場合には、CF_TYPE=check を指定し、 生成された .cf を既存の sendmail.cf の最後に追加する。 MAIL_RELAY_RESTRICTION=yes/no yes を指定すると、以下で説明する check_mail および check_rcpt ルール セットを用いたメールの受信チェック機能が組み込まれる。このチェックは、 SMTP の処理の時点で行われるため、受信が拒否された場合はメールを送っ てこようとした MTA 側でエラー処理(エラーメールの返送など)が行われる。 したがって、この設定を埋め込んだ sendmail からエラーメールが発信され ることはない。拒否が行われたかどうかは、syslog に記録される。 デフォルトは yes。 WITH_OLD_CF=yes/no 受信チェック機能の部分は独立性が高く、従来の sendmail.cf に単純に追加 することも可能である。ただし、sendmail.cf が古い場合、enveope from が <> の場合の内部的な扱いが異るため、それへの対応が必要な場合に yes を 指定する。具体的には、テストモードにおいて、 > 3 <> rewrite: ruleset 3 input: < > rewrite: ruleset 3 returns: @ となる場合には、yes を指定する。CF で作成した sendmail.cf 等の場合、 > 3 <> rewrite: ruleset 3 input: < > rewrite: ruleset 3 returns: < @ > となるが、この場合には yes を指定する必要はない。 デフォルトは no。 受信を許容するアドレスに関する情報は以下に示す変数に定義する。 CHECK_HOST_ALLOW= SMTP 接続を受け付ける発信元ホストのアドレスを指定する。 SMTP 接続を受け付けた後も SPAM_*, LOCAL_*, ALLOW_* 等によるチェック が行われる。 デフォルトは未定義。 CHECK_HOST_DENY= SMTP 接続を拒否する発信元ホストのアドレスを指定する。ここに指定された ホストに対しては、他の条件に無関係に拒否する。 デフォルトは未定義。 CHECK_RELAY_DEFAULT= CHECK_HOST_ALLOW/CHECK_HOST_DENY で指定されなかった発信元ホストの アドレスに対するデフォルトの動作を指定する。 デフォルトは allow。 SPAM_LIST=type:/etc/sendmail.spamlist (デフォルトは、null (無視)) 受信を拒否したい発信者、ドメイン、IPアドレス(のネットワーク部)の リストの記述されたファイル(データベース形式)を指定する。 このリストに定義されたものとマッチした場合には、LOCAL_*, ALLOW_* などの他の設定の如何にかかわらず拒否する。 なお、外部データベースを利用しているので、内容の変更を行っても、 sendmail の再起動は必要ない。 type には、hash, btree, dbm が指定可能。省略時は hash。 NEWDB が利用できる場合は hash などを指定する。 NDBM の場合は dbm を指定し、makedbm などでデータベースを作成する。 例: user1@domain1.jp any comment domain2.jp discard 123.45 any comment 12.34.56 errmsg 451 Message rejected any comment は、なにか書いておかないと makemap がエラーを 出すので書いておくというだけのもの。ただし、V8 の場合、 discard というキーワードを記述した場合は、エラーメールは 返送されず、受信したメールはどこにも配送されずに消滅する。 また、errmsg キーワードに続けて記述したメッセージは、 エラーメールに残されるメッセージとなる。 SPAM_REGEX=<正規表現> (V8以降) 受信を拒否したいエンベロープ発信者アドレスの正規表現を指定する。 USE_MAPS_RBL=yes/no MAPS (the Mail Abuse Protection System) RBL (Realtime Blackhole List) による spamming host check を行う (参考 http://maps.vix.com/rbl/) この機能を利用すると DNS 参照によってチェックを行うので、通常は 発生しない DNS 参照のためのトラフィックが発生する。 デフォルトは no。 NEED_SENDER_DOMAIN=yes/no メールのエンベロープ発信者の形式が user@host.domain でなく、user のようなドメイン部が存在しないものを拒否するかどうかを指定する。 デフォルトは yes。 CHECK_FROM_FQDN=yes/no メールのエンベロープ発信者の形式が user@host.domain でなく、 user@host のようなドメイン部が一語のものを拒否するかどうかを指定する。 デフォルトは yes。 USE_SENDER_DNS_CHECK=yes/no メールのエンベロープ発信者へ返信することが可能かどうかを、メールの 受信時にチェックする。返信可能であるはずなのに、たまたま DNS の検索 に失敗した場合にも、受信を拒否(延期)することになるので注意。 <受信メールの送信元ホストが組織外か組織内かの判定> LOCAL_HOST_IPADDR=/etc/sendmail.localip (デフォルトは未定義) 受信/中継を無条件で許可する SMTP 接続ホストの IP アドレスのリスト、 あるいはそれが記述されたファイル(テキスト形式)を指定する。 一般に、組織内のホストが該当するように記述する。 許可された場合、後述の ALLOW_* によるチェックは行われないので、 あらゆる宛先に対してメールを送信することが可能となる。 130.54 を記述すれば、130.54.*.* が許可される。 LOCAL_HOST_DOMAIN は後述の CLIENT_HOST_IPADDR より先に判定される。 LOCAL_HOST_DOMAIN=/etc/sendmail.localdomain (デフォルトは未定義) 受信/中継を無条件で許可する SMTP 接続ホストのドメインのリスト、 あるいはそれが記述されたファイル(テキスト形式)を指定する。 一般に、組織内のホストが該当するように記述する。 許可された場合、後述の ALLOW_* によるチェックは行われないので、 あらゆる宛先に対してメールを送信することが可能となる。 kyoto-u.ac.jp を記述すれば、*.kyoto-u.ac.jp も許可される。 LOCAL_HOST_DOMAIN は後述の CLIENT_HOST_DOMAIN より先に判定される。 CLIENT_HOST_IPADDR=/etc/sendmail.clientip (デフォルトは未定義) 受信/中継を CLIENT_FROM_DOMAIN に従って許可する SMTP 接続ホスト の IP アドレスのリスト、あるいはそれが記述されたファイル(テキスト 形式)を指定する。一般に、組織内のホストが該当するように記述する。 許可された場合、後述の ALLOW_* によるチェックは行われないので、 あらゆる宛先に対してメールを送信することが可能となる。ただし、 CLIENT_FROM_DOMAIN による発信アドレスのチェックが行われることが、 LOCAL_HOST_* と違う点である。 130.54 を記述すれば、130.54.*.* が許可される。 CLIENT_HOST_DOMAIN=/etc/sendmail.clientdomain (デフォルトは未定義) 受信/中継を CLIENT_FROM_DOMAIN に従って許可する SMTP 接続ホスト のドメインのリスト、あるいはそれが記述されたファイル(テキスト 形式)を指定する。一般に、組織内のホストが該当するように記述する。 許可された場合、後述の ALLOW_* によるチェックは行われないので、 あらゆる宛先に対してメールを送信することが可能となる。ただし、 CLIENT_FROM_DOMAIN による発信アドレスのチェックが行われることが、 LOCAL_HOST_* と違う点である。 kyoto-u.ac.jp を記述すれば、*.kyoto-u.ac.jp も許可される。 CLIENT_FROM_DOMAIN=(デフォルトは未定義) 上記 CLIENT_* に該当するホストからのメールの受信の際に、エンベ ロープの発信者アドレスが指定したドメインに含まれるものである場合に のみ受付ける。すなわち、自分の組織内から、組織のドメイン名とは 異なるエンベロープの発信者のアドレスがついたメールの発信を許さない。 ただし、この設定を行うと、組織内で運用されているメーリングリストに ドメイン外部の参加者がいて、かつエンベロープの発信者のアドレスが、 元のメールの発信者のままであると、転送が拒否される問題が発生する 可能性があるので注意。一般に CLIENT_HOST_* として定義するのは、 UA のみが動作する端末ということになるであろう。ML 機能や forwarding 機能を持つホストは、LOCAL_HOST_* に定義すべきである。なお、 LOCAL_HOST_* は CLIENT_HOST_* より先に判定されるので、例えば CLIENT_HOST_* を組織内のクライアントをすべて含むように定義し、 LOCAL_HOST_* を、組織内のメールサーバをピンポイントで指定する ように使うとよいだろう。 <組織内からのメールの転送可否判定> 上記 LOCAL_HOST_* あるいは CLIENT_HOST_* にマッチしたもの(つまり組織内 から届いたメール)に対して、CLIENT_DENY_TO や RELAY_MAP_INSIDE による チェックが行われ、そのうちのいずれかで拒否されたアドレスについては、 メールの転送は拒否される。 このチェックは、.forward や aliases の解釈の前に行われるので、それらの 内容とともに設定内容を検討する必要はない。.forward などの解釈の後に チェックを行いたい場合は、CHECK_COMPAT を用いる必要がある。 CLIENT_DENY_TO=/etc/sendmail.deny.to (デフォルトは未定義) 中継を拒否する受信者アドレスのドメインのリスト、あるいはそれが 記述されたファイル(テキスト形式)を指定する。指定したドメインに 含まれるホストおよびサブドメイン等はすべて拒否されることになる。 発信者アドレスは問わない。 RELAY_MAP_INSIDE=type:/etc/sendmail.inside.relay.map (デフォルトは未定義) 特定の2つのドメインの間だけに関してメールの中継を許可したり拒否した い場合に利用する。許可/拒否したいドメインの組を格納したデータベース を作成しておく。詳細については、後述の RELAY_MAP を参照。 ただし、RELAY_MAP_INSIDE を使用した場合に、データベース中に記述さ れていない組み合わせについては、デフォルトで allow として扱われる ところが、RELAY_MAP と異なる。 type には、hash, btree, dbm が指定可能。省略時は hash。 <組織外からのメールの転送可否判定> 上記 LOCAL_HOST_* あるいは CLIENT_HOST_* にマッチしなかったもの(つまり 組織外から届いたメール)に対して、以下の ALLOW_* に関するチェックが行わ れ、そのうちのいずれかで許可されるアドレスでない限りメールの受信/転送は 拒否される。 このチェックは、.forward や aliases の解釈の前に行われるので、それらの 内容とともに設定内容を検討する必要はない。.forward などの解釈の後に チェックを行いたい場合は、CHECK_COMPAT を用いる必要がある。 ALLOW_RECIPIENT_DOMAIN=/etc/sendmail.acceptdomain (デフォルトは未定義) 当該ホストが受理する宛先ドメインのリスト、あるいはそれが記述された ファイル(テキスト形式)を指定する。また、hash:/path や dbm:/path と 記述することで、データベース形式も利用可能である。 OFFICIAL_NAME や ACCEPT_ADDRS、SECONDARY_DOMAIN、USERTABLE_MAPS に 定義されている名前などがこれにあたるが、これらは自動的に認識するよ うにルールセットが生成されるので、それら以外で特別に設定したアドレ スについて定義する([acceptaddr]の他の項目、あるいは[deliver]や [specialfrom]、[cyrus]などを利用しているような場合)。なお、指定した ドメインに含まれるホストおよびサブドメイン等はすべて許可されること になる。 たとえば kyoto-u.ac.jp を指定した場合、kyoto-u.ac.jp ドメイン内の 全てのアドレスを指定したことになる。以下についても同様。 ALLOW_RELAY_FROM=/etc/sendmail.relay.from (デフォルトは未定義) 中継を許可するエンベロープ発信者アドレスのドメインのリスト、ある いはそれが記述されたファイル(テキスト形式)を指定する。指定した ドメインに含まれるホストおよびサブドメイン等はすべて許可される ことになる。エンベロープの受信者アドレスは問わない。 組織外のアクセスポイントから、組織のメールサーバを経由して、 組織のメールアドレスを発信者に持つようなメールを出すような 状況がある場合には、後述の ROAM_* を利用すると良い。 ALLOW_RELAY_TO=/etc/sendmail.relay.to (デフォルトは未定義) 中継を許可するエンベロープ受信者アドレスのドメインのリスト、ある いはそれが記述されたファイル(テキスト形式)を指定する。指定した ドメインに含まれるホストおよびサブドメイン等はすべて許可される ことになる。エンベロープの発信者アドレスは問わない。 [注意] 特に、当該ホストが DNS において、セカンダリ以下の MX として定義されて いる場合は、そのアドレスについて忘れずに ALLOW_RELAY_TO に定義して おく必要がある。 例えば、以下のような定義があった場合、mail2 での設定において、 user@domain.jp 宛てのメールの中継を許可するようにしておく必要がある。 さもないと、mail1 がたまたま停止していたために、user@domain.jp 宛て のホストが mail2 に送られた際に、そのメールの受信が拒否され、返送さ れてしまうことになる。 domain.jp. IN MX 10 mail1.domain.jp. IN MX 20 mail2.domain.jp. また、プライマリ MX となる、UUCP で接続しているドメインのリストに ついても、定義しておかなければならない。DNS の設定に従って許可させ たい場合には、後述の LOWER_MX_OK を yes に定義する。 LOWER_MX_OK=yes/no (V8以降) メールのエンベロープ受信者に対する MX リストの中に当該ホストが存在 する場合に、転送処理を許すようにしたい場合に yes を指定する。 デフォルトは no。 RELAY_MAP=type:/etc/sendmail.relay.map (デフォルトは未定義) 特定の2つのドメインの間だけに関してメールの中継を許可したり拒否した い場合に利用する。許可/拒否したいドメインの組を格納したデータベース を作成しておく。type には、hash, btree, dbm が指定可能。省略時は hash。 データベースの形式は、次のとおり。 # user@domain1.jp から user@domain2.jp へのメールの転送を許可 domain1.jp!domain2.jp allow # user@any.domain1.jp から user@any.domain2.jp へのメールの # 転送を許可 (domain1.jp や domain2.jp にはマッチしない) .domain1.jp!.domain2.jp allow # ただし user@a.domain1.jp から user@b.domain2.jp への # メールの転送は拒否する a.domain1.jp!b.domain2.jp deny # user@domain3.jp からのメールはすべて許可 domain3.jp!. allow # user@domain4.jp へのメールはすべて許可 # (<> からのメールは除く) .!domain4.jp allow # <> から user@domain4.jp へのメールを許可 !domain4.jp allow RELAY_MAP を使用した場合に、データベース中に記述されていない組み 合わせについては、デフォルトで deny として扱われる。デフォルトを allow にしたい場合は、 .!. allow のような記述をデータベースに追加しておく必要がある。 なお、V8 以降の場合は、deny の代りに discard と記述することで、 エラーメールは返送されず、受信したメールはどこにも配送されずに 捨てられる。また、errmsg キーワードに続けて記述したメッセージは エラーメールに現れる。 domain5.jp!. discard domain6.jp!. errmsg 451 Message rejected ROAM_HOST_IPADDR=/etc/sendmail.roamip (デフォルトは未定義) 組織外から、当該組織のアドレスをエンベロープの発信者に持つメールを 当該ホストをメールサーバに指定して発信させたい場合に、そのホストの IPアドレスを指定する。指定されたホストから、ROAM_USERS に定義される アドレスをエンベロープの発信者に持つメールを受信した場合は、 任意の宛先への転送を許す。ALLOW_RELAY_FROM では、発信ホストが どこであるかに関わらず、エンベロープの送信者アドレスが、ALLOW_ RELAY_FROM に属していれば無条件に転送を許可してしまうが、ROAM_* を利用すれば、ROAM_USERS と ROAM_HOST_* の組み合わせにより転送の 可否判定が可能となる。ROAM_HOST_* は、CLIENT_HOST_* や LOCAL_ HOST_* よりも先に比較されることに注意。 130.54 を記述すれば、130.54.*.* が許可される。 ROAM_HOST_DOMAIN=/etc/sendmail.roamdomain (デフォルトは未定義) 組織外から、当該組織のアドレスをエンベロープの発信者に持つメールを 当該ホストをメールサーバに指定して発信させたい場合に、そのホストの IPアドレスを逆引きして得られるドメインを指定する。指定されたドメイン に属するホストから、ROAM_USERS に定義されるアドレスをエンベロープの 発信者に持つメールを受信した場合は、任意の宛先への転送を許す。 ALLOW_RELAY_FROM では、発信ホストがどこであるかに関わらず、エンベ ロープの送信者アドレスが、ALLOW_RELAY_FROM に属していれば無条件に 転送を許可してしまうが、ROAM_* を利用すれば、ROAM_USERS と ROAM_ HOST_* の組み合わせにより転送の可否判定が可能となる。ROAM_HOST_* は、 CLIENT_HOST_* や LOCAL_HOST_* よりも先に比較されることに注意。 kyoto-u.ac.jp を記述すれば、*.kyoto-u.ac.jp も許可される。 ROAM_USERS=(デフォルトは未定義) 上記 ROAM_HOST_* に該当するホストからのメールの受信の際に、エンベ ロープの発信者アドレスが指定したものである場合にのみ受付ける。 エンベロープの発信者アドレスが一致しなかった場合は、発信ホストは 一般的な組織外のホストとして扱われる。すなわち、組織外から組織外 への転送要求は拒否される。 REJECT_EXTERN_SRR=yes/no 外部から送られてくるメールに関して、ソースルーティングを許すか どうかを指定する。ソースルーティングとは、user%otherhost@host あるいは @host:userother@host の形式のアドレスを指す。 デフォルトは yes。 REJECT_SOURCE_ROUTE_RELAY は、全てのメールに関しての可否であるのに 対して、REJECT_EXTERN_SRR は外部から送られてくるメールに対する可否 である点が異なる。なお、REJECT_EXTERN_SRR が no であっても、無条件 で通過させるわけではなく、さらに ALLOW_RELAY_TO によるチェックが行 われることに注意。 HDR_REJECT_BADMID=yes/no (V8以降) Message-Id: ヘッダの内容に @ が含まれない場合に拒否する。 デフォルトは no。 HDR_REJECT_RCPTADDRS=<アドレス>/<アドレスの列挙されたファイル> (V8以降) To:, Cc: ヘッダの内容に、指定したアドレスが含まれる場合に拒否する。 デフォルトは未定義。 HDR_REJECT_ACTION=error/discard ヘッダの内容チェックによる配信拒否の際の動作を選択する。 error: エラー通知メールが返送されることになる discard: エラー通知メールは返されず、転送もされない(捨てられる)。 補足 MAIL_RELAY_RESTRICTION を yes に定義する代りに、オリジナルの制限 ルールを定義することもできる。定義のサンプルを Samples/Hacks/ Check_Rules に用意してあるが、このサンプルのように、CHECK_RELAY, CHECK_MAIL, CHECK_RCPT, CHECK_COMPAT を定義することによって sendmail に受信拒否させることができる。 これらは、それぞれ以下の目的で使用する。 CHECK_RELAY: daemon sendmail に SMTP コネクションを拒否させるとき CHECK_MAIL: MAIL FROM: のパラメータにより受信を拒否させるとき CHECK_RCPT: RCPT TO: のパラメータにより受信を拒否させるとき CHECK_COMPAT: MAIL FROM: と RCPT TO: の組み合わせにより転送を拒否 させるとき この定義は LOCALHACK_FILE の中に記述してもよいし、*.def の中に直接 記述することもできる。 なお、上記の CHECK_* は MAIL_RELAY_RESTRICTION を yes に定義した 場合に内部的に利用されるので、CHECK_* を直接定義しても、上書き されてしまうので注意すること。 テストモードでの配信制限機能の動作確認の方法 テストモード(sendmail -bt)において、設定を確認する手順を以下に示す。 1. check_relay ルールセットのテスト SMTP 接続を要求してきたホストのアドレスに関するチェック。 ホスト名 IPアドレス > CheckDebug,check_relay connect.host $| 12.34.56.78 rewrite: ruleset 191 returns: OK で終れば許可 rewrite: ruleset 191 returns: $# error ... で終れば拒否 2. check_mail ルールセットのテスト エンベロープの発信者アドレスに関するチェック。 チェックには、SMTP接続元ホスト情報も必要。 準備1) SMTP接続元ホスト情報の指定 (connect.host [12.34.56.78] を指定する場合) メールを送ってこようとするホストに関する情報を指定する。 {...}とその後の値との間にスペースをいれてはいけない。 > .D{client_addr}12.34.56.78 (IPアドレスの設定) > .D{client_name}connect.host (ホスト名の設定) > ${client_addr} (設定したIPアドレスの確認) 12.34.56.78 > ${client_name} (設定したホスト名の確認) connect.host なお、IPアドレスやホスト名の設定は、sendmail 起動時にコマンド ラインで以下のようにして行うこともできる: % sendmail -M{client_addr}12.34.56.78 -M{client_name}connect.host -bt ただし多くの場合、{} はシェルに解釈される記号なので、\ でエスケー プしたり '' で囲んだりする必要がある。また、-Mfuser@domain のように マクロf に @ を含む文字列をコマンドラインで定義する場合は、root で テストをする必要がある。 テスト) > check_mail user@sender.host (MAIL FROM: で受けるアドレス) rewrite: ruleset 199 returns: OK で終れば許可 rewrite: ruleset 199 returns: $# error ... で終れば拒否 3. check_rcpt ルールセットのテスト エンベロープの受信者アドレスに関するチェック。 チェックには、SMTP接続元ホスト情報およびエンベロープの受信者 アドレスも必要。 準備1) 2. と同様 準備2) 発信者のメールアドレス(MAIL FROM: で渡されるもの)の指定 (user@sender.host を指定する場合) .Df と 値 の間にスペースをいれてはいけない。 > .Dfuser@sender.host (発信者の指定) > $f (指定した発信者の確認) user@sender.host テスト) > check_rcpt user@recipient.host (RCPT TO: で受けるアドレス) > check_rcpt user%relay.host@recipient.host rewrite: ruleset 194 returns: OK で終れば許可 rewrite: ruleset 194 returns: $# error ... で終れば拒否 毎回手で入力するのが面倒な場合は、入力内容をファイルに用意し、 sendmail -bt < check_file | less などとする方法もある。 各ルールセットとCF の定義とは、それぞれ以下のような関連を持つ。 check_relay CHECK_HOST_*、SPAM_LIST に基づいて判定 check_mail LOCAL_HOST_*、MAIL_FROM_DOMAIN、SPAM_LIST に基づいて判定 check_rcpt ALLOW_RECIPIENT_DOMAIN、ALLOW_RELAY_* に基づいて判定 事前の厳密な動作確認のためには、それぞれの定義に含まれているものと 含まれていないもので得られるすべての組み合わせについてテストしてみ ることが望ましい。 [EOF]