戻る

3105:rule set 1 & S= ::part01

簡単な メモ なんにも 触れてないが 色々 sendmail.cf の 替りに testxx.cf を作成してきたが それは

一番目は ルールセット 0 で 処理を します また 今まで 下記の 様な事を 作成して sendmail.cf の テスト版 と云うことで見てきました

受信者

sendmail が 配信する場合

  1. エンベロープから 受信者 の アドレスを 取りだします (ヘッダー ではない)
  2. 受信者アドレスを 最初 ルールセット 3 で 前処理を 行い
  3. ルールセット 0 にて 配信エージェントを選択します
                 sendmail
                    |
envelope  -------> look for      :: recipients address extract
                    |                       |
                  rule set 3   -----> stripping  address
                    |
                  rule set 0  ----> decide mail delivery agent
                        
       $# $@ $: ==>$#hub $@${REMOTE} $:$1
$#	The mail delivery agent
$@	The host
$:	The user

このような 処理を した後 発信者の アドレス処理を 始める

発信者

S=Hubset の 設定

hub配信エージェント を 再度 見ておくと

Mhub,   P=[IPC], S=0, R=0, F=mDFMuXa, T=DNS/RFC822/SMTP, A=IPC $h

ここで S=0に なっていました ”S=”という のは 発信者アドレスの配信エージェント特有の処理を実行するルールセットの 番号を 指定する事のようです(番号で無くても良いようですが簡単にいえば) つまり S=123 等 決めてやれば良いのですが 素人の にゃんたろうに とっては 何番に して良い 思い付きません というのは 使える番号を 理解していないのです 少なくとも 0,3 は 駄目ですし 色々 見 てると 0 〜 5 までは 駄目 また 6 〜 9 は将来の sendmail に 予約 してあるそうです

ただ この場合 sendmail さんに お任せの 方法が あるようなので それを 採用することにします。この場合は S=数字 ではなく $=文字列 で 表示すれば 良いとの事です。ほなら そういう風に してみまひょ

Mhub,   P=[IPC], S=Hubset, R=0, F=mDFMuXa, T=DNS/RFC822/SMTP, A=IPC $h

S=0S=Hubsetにしました

目的は 発信者の アドレスで 発信するのではなく全て Hub から発信された ように見せかける事です

ルールセット Hubset

では ルールセット Hubset を つくって いきます 宣言するのは S0 S3 等を 参考に すると SHubset で宣言する事になります (数字だけちゃうん? とかい うことは 却下です 駄目なときは 又考える というより 参考のにした 資料の通り)

ユーザーのみの 場合

ユーザーのみの 場合 つまり jhon pochi tama の 様な場合は jhon@nanigasi.fake とか pochi@nanigasi.fake や tama@nanigasi.fakeに 変換 する この場合は

 jhon ----> (パターン) @ (nanigasi.fake 外部に 認識される メールハブ の アドレス)

この場合の パターンを 表現する物として $* とか $+ を 使っても 良いの だろうが そうすると jhon の 場合は 上手く行くだろうが jhon@nanigasi が 来た場合は ひょっとしたら jhon@nanigasi@nanigasi.fake に なったりすると 不味い そこで 新 しく LHS ワイルドカードオペレータ というものを 導入する事に なるようです

LHS ワイルドカードオペレータ
演算子          説明
$+          1個以上のトークンにマッチ
$*          0個以上のトークンにマッチ
$-          1個のトークンにマッチ

今回は $-を 使用します さすれば LHS は 以下の 様になると良いでしょう

R$-

RHS として 位置は 最初の 1個 であるから $1 とすれば 良いでしょう そ うして @がきて 外部に 認識される メー ルハブ の アドレス がくれば 良いので

R$-          $1@(外部に 認識される メールハブ の アドレス)

${HUB}

”外部に 認識される メールハブ の アドレス”について テスト用 cf に

...
D{REMOTE}mailhost
...
R$+     $#hub $@${REMOTE} $:$1
...

の 場所が 有った事を 再度 見てみると 今回 D{HUB}nanigasi.fake なんか で 定義 する部分が 必要となるでしょう そうしておいて ${REMOTE} とに 対し て ${HUB}を 引用するとすれば

R$-          $1@(外部に 認識される メールハブ の アドレス)

*********************************
D{HUB}nanigasi.fake              /* まず 決めて   */
....
R$-                 $1@${HUB}    /* ${HUB}で引用  */
.....

ちゃんちゃん! あとは 試験するだけ といっても まだ作成していない

test15.cf

このようなものを 作成

$ cat test15.cf 
V10/Berkeley
D{REMOTE}mailhost
D{HUB}nanigasi.fake
Mhub,   P=[IPC], S=Hubset, R=0, F=mDFMuXa, T=DNS/RFC822/SMTP, A=IPC $h
Mlocal, P=/bin/mail, F=lsDFMAw5:/|@rmn, S=10, R=20/40, A=mail -d $u 
S0
R@$+    $#error $: Missing user name
R$+     $#hub $@${REMOTE} $:$1
S3
R$* <> $*       $n                              handle <> error address
R$* < $* < $* > $* > $*         $2 < $3 > $4    de-nest brackets
R$* < $* > $*   $2                              basic RFC822 parsing
SHubset
R$-     $1@${HUB}

ほたら pochi は どうなるか 最初 ルール 3 から始めて 次にHubset コンマ で 区切り コンマの左右には スペース 等を いれないで pochi ですよ まあ やっ た方が 早いや!

$ /usr/sbin/sendmail -Ctest15.cf -d21.12 -bt
Mhub: Warning: first argument in [IPC] mailer must be TCP or FILE
ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
Enter <ruleset> <address>
> 3,Hubset pochi
3                  input: pochi
-----trying rule: $* < > $*
----- rule fails
-----trying rule: $* < $* < $* > $* > $*
----- rule fails
-----trying rule: $* < $* > $*
----- rule fails
3                returns: pochi
Hubset             input: pochi
-----trying rule: $-
-----rule matches: $1 @ nanigasi . fake
rewritten as: pochi @ nanigasi . fake
-----trying rule: $-
----- rule fails
Hubset           returns: pochi @ nanigasi . fake
> /quit

結果は 予想外です 無限ループに 陥るはずなんですが?

$ /usr/sbin/sendmail -Ctest15.cf  -bt
Mhub: Warning: first argument in [IPC] mailer must be TCP or FILE
ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
Enter <ruleset> <address>
> 3,Hubset jhon
3                  input: jhon
3                returns: jhon
Hubset             input: jhon
Hubset           returns: jhon @ nanigasi . fake
> /quit

tama@nanigasi

全部では 無いが @ と 他の物が ついている場合は どうなるか?

$ /usr/sbin/sendmail -Ctest15.cf -d21.12 -bt
Mhub: Warning: first argument in [IPC] mailer must be TCP or FILE
ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
Enter <ruleset> <address>
> 3,Hubset tama@nanigasi
3                  input: tama @ nanigasi
-----trying rule: $* < > $*
----- rule fails
-----trying rule: $* < $* < $* > $* > $*
----- rule fails
-----trying rule: $* < $* > $*
----- rule fails
3                returns: tama @ nanigasi
Hubset             input: tama @ nanigasi
-----trying rule: $-
----- rule fails
Hubset           returns: tama @ nanigasi
> /quit

轟沈です まだ 何か足りないようです

補足

無限ループの問題 表にでていないように 感じる D{REMOTE}mailhost と D{HUB}nanigasi.fake の 再度 確認 (吟味)をする必要が ある 今日はここま で

戻る

にゃんたろう 拝!
2006年10月 5日 (木) 22:48:16 JST 作成

Copyright © 2004.-2007. nyantarou All Rights Reserved.