14-2. 電子メ−ル設定の注意 '96 (1) メ−ル別名ファイル aliases * aliases ファイルの書き方 このファイルは Sun や INDY の元々は /etc の下にある。Apollo では /usr/lib にある。 一応 hostA というメ−ルサ−バのホストに設定するとして説明する。 hostA には katou と POP 用の tomo というユ−ザがいる。katou 宛のメ−ルは hostA で受けて、tomo宛の メ−ルはこのメ−ルサ−バに溜めておくという訳である。 /etc/aliases ---------------------------- |# システムの変換ル−ルなど | |Postmaster: netmaster << エラ−メ−ルは netmaster が受ける。管理者です。何 |MAILER-DAEMON: Postmaster か入れ子になっている、実際はすっきりさせること。 |nobody: /dev/null |root:Postmaster | |# 独自変換ル−ル |tomosan:tomo << tomosan で入ってきたら tomo に変換する。 | |# Self host MAIL user \ |#katou:katou@hostA |これらは別に記述することはない。誰がメ−ルのユ−ザな | |のか、ただ分かるようにするためである。へたに書き込ん |# POP user |でコメントを誤って消したりしたら、名前変換のル−プに |#tomo:tomo@hostA / 陥ることもあり得る。気を付けたい。 | |# Other host MAIL user |taro:taro@hostB << 他のホストへのメ−ルユ−ザです。 | |netmaster: katou << root 宛のメ−ルは Postmaster 宛に変換され、それか ら netmaster 宛に、そして katou 宛になる。 /etc/passwd ---------------------------------------------- POP ユ−ザはパスワ−ドが必要であ |tomo:passwd:107:12::/usr/people/tomo:/bin/csh る。katou の方はメ−ルには関係な |katou::108:12::/usr/people/katou:/bin/csh いが、パスワ−ド設定するのは常識。 ※netmaster アカウントは /etc/passwd には登録してないことに注意。 netmaster 宛の メ−ルは aliases で katou に変換されるため、netmaster アカウントは必要としない。 * aliases ファイルを有効にする -------------------------------------------------------------------------------- ポイント:aliases ファイルを編集したら、必ず newaliases コマンドをやること。 -------------------------------------------------------------------------------- aliases ファイルには、メ−ル送付の転送先を記入する。記入しただけではダメで、有効 にするには root 権限で、newaliases と打つこと。newaliases コマンドは sendmail.cf を見て、aliases ファイルから aliases.dir と aliases.pag ファイルを作成する。これ らは、いわばデ−タベ−スである。aliases ファイルを編集しようとする際、ファイルに ロックがかかり編集できない場合がある。その場合は sendmail デ−モンをいったんキル してみるとよい。 $ /usr/ucb/newaliases << sendmail.cf が無い場合の表示。 cannot open /usr/lib/sendmail.cf: No such file or directory $ /usr/ucb/newaliases << sendmail.cf がある場合の表示。 4 aliases, longest (msgs) 24 bytes, 71 bytes total $ /usr/lib/sendmail -bi << これでも同じこと。 * ピンポン現象への注意 /etc/aliases --------------------------------- |katou: katou@hostA, katou@hostB この設定は十分できそうな気がする。しかしこれをやるとメ−ルサ−バとメ−ルクライア ントの間でピンポン現象が起きてえらいことになる。即ち相手にメ−ルを配送すると、相 手はいやこのメ−ルはあんたのだと送り返す。これをず−と続けることになるのだ。メ− ルの配送1つに対して1個の sendmail デ−モンが子プロセスとして起動される。プロセ スの状態を見ると sendmail だらけになってしまう。しまいにはマシンが動かなくなって クラッシュする。このピンポン現象は次の章でも説明するが、~/.forward や ~/.mailrc の設定でも起こる。 * aliases ファイルのセキュリティホ−ル /etc/aliases SunOS 4.1.2 の aliases ファイルに decode の項目がある。 -------------------------------- |Postmaster: root |MAILER-DAEMON: postmaster |# decode: "|/usr/bin/uudecode" << コメントにしておくこと。 |nobody: /dev/null * sendmail.cf の改造と newaliases `21/09/28 メ−リングリスト fml の設定をしている際、sendmail.cf で aliases ファイルを2ヵ所 使うようになっていた。それを万能 sendmail.cf でどう適用するか検討してみた。 下の katou.txt は /etc/sendmail.cf からコピ−した万能 sendmail.cf ファイルである。 /etc/katou.txt ----------------------------------------------- | | |#OA/usr/lib/aliases |OA/usr/lib/aliases, /usr/people/katou/aliases << 区切りをカンマでなくブランク | | にすると /usr/lib/aliases し か認識しなかった。 /usr/lib/aliases /usr/people/katou/aliases -------------------------- ------------------ |MAILER-DAEMON:root |ikken: haruo << 何か別名を記入しておくこと。 |postmaster:root |msgs: "|/usr/ucb/msgs -s" |nobody: /dev/null # /usr/lib/sendmail.8.8.5 -bi -C katou.txt << 稼働中のsendmail, sendmail.cf katou.txt: WARNING: dangerous write permissions にアクセスせず別に試してみる。 /usr/lib/aliases: 4 aliases, longest 19 bytes, 69 bytes total /usr/people/katou/aliases: 1 aliases, longest 10 bytes, 13 bytes total Version 8.8.5 の sendmail で、newaliases コマンドと同じ働きを -bi オプションでや って、 カレントディレクトリにある katou.txt ファイルを制御ファイルとして読み込む。 WARNING の警告は、# chmod 644 katou.txt とやると出なくなる。 sendmail のバ−ジョ ンが上がって、ファイルのパ−ミッションのチェックが厳しくなっている。 [ Apollo の sendmail では ] Apollo オリジナルの sendmail でも試してみた。/usr/ucb/newaliases は Apolloに限ら ずリンクになっていて、その実態は /usr/lib/sendmail である。この sendmailのバ−ジ ョンは 5.5.c であり、/usr/lib/sendmail.cf を見るようになっている。newaliasesコマ ンドをたたくと、下記のように aliases ファイルを認識しなかった。 # /usr/ucb/newaliases Cannot open /usr/lib/aliases, /usr/people/katou/aliases: No such file or directory * newaliases や mailq コマンドの実体は sendmail である $ /bin/ls -al /usr/ucb/newaliases lrwxrwxrwx 1 root 17 Jun 8 2000 /usr/ucb/newaliases -> /usr/lib/sendmail $ /bin/ls -al /usr/ucb/mailq lrwxrwxrwx 1 root 17 Jun 8 2000 /usr/ucb/mailq -> /usr/lib/sendmail $ /bin/ls -al /usr/lib/sendmail -rwsr-xr-x 1 root 162636 Jun 13 2000 /usr/lib/sendmail newaliases, mailq がどうやって働くかの参考プログラムを示す。プログラムはリンクで、 実体は sendmail、一体どういうことか一度は疑問を抱いても不思議ではない。 要は起動 したプログラムの名前自体を、引き数にして実行しているのである。こんなんである。 p.c ---------------------------------------------------------------- |#include |#include | |main( int argc,char *argv[] ) |{ | if ( argc >= 1 ) printf( "argv[0] = %s\n",argv[0] ) ; | if ( argc == 2 ) printf( "argv[1] = %s\n",argv[1] ) ; | if ( strcmp( argv[0],"a.out" ) == 0 ) printf( "start\n" ) ; |} * メ−ルの廃棄または転送 Mail-Relay に主に外から来たメ−ルで社内の宛先不明 sss@nix.co.jj と zzz@nix.co.jj。 発信元が偽造で返える所がないメ−ルは、Mail-Relay の /usr/spool/mqueue にしばらく 溜まる。sss 宛はメ−ルを捨てる、zzz 宛は katou に転送するようにした。 □ Mail-Relay | /etc/aliases ------------------ ------------------ | | | □ □ Mail-Sotre <-- |sss: /dev/null | | |zzz: katou --------------- nix.co.jj | | (2) メ−ル設定時の注意 * sendmail.fc ファイルについて -------------------------------------------------------------------------------- ポイント:sendmail -bz とやって、へたに sendmail.fc ファイルを作らない方がいい。 -------------------------------------------------------------------------------- sendmail.fc は $ /usr/lib/sendmail -bz とやるとできる。 CPU速度が遅いコンピュ −タを使っていた時代の遺物であり、もうやる必要はない。へたにこのファイルがあると トラブルの元にもなる。一応説明すると sendmail.fc は sendmail.cf の読み込みを速く したファイルである。このため両方のファイルがあると sendmail.fc を読むことになる。 電子メ−ルの設定をする際、精出して sendmail.cf をいじるのだが、 何かちっとも動作 が変わらない。この状況はたいてい sendmail.fc ファイルを先に作っていて、 それを忘 れてしまっている場合である。ちなみに sendmail.cf ファイルは mailコマンドを発して、 sendmail が起動された時に読まれる。ロックがかかったりしないので、 色々実験する際 には便利である。 * sendmail.cf の $w について sendmail.cf の変更 ------------------- |DDnix.co.jj << ドメイン名を定義している。 |Dj$w << $w は /etc/hostname を拾ってくる。ここの $w 部分 | | はホスト名(マシン名+ドメイン名)を期待している。 /etc/hostname がドメインを含まないマシン名だけの場合は、 Dj$w.nix.co.jj と記述す るか、Dj$w.$D と記述する。 * SunOS 4.1.x-JLE の特殊性 SunOS 4.1.x-JLE というOSは Sun にとって最もポピュラ−なOSである。 インタ−ネ ット用のサ−バとしても多く使われているはずである。しかしこのOSは煮ても焼いても 食えない。DNSでも電子メ−ルでも非常にトリッキ−な方法でしか対処できない。早い 話、捨てた方が身のためである。まあそう簡単に捨てるわけにもいかんので、ここら辺り の話は "9-3. SunOS 4.1.x について" でまとめて述べてある。 * Solaris 2.5.1 の sedmail.cf Solaris 2.5.1 のオリジナルの aliases や sendmail.cf ファイルは /etc/mail/ ディレ クトリにおくことになっている。メ−ルサ−バの起動スクリプト/etc/rc2.d/S88sendmail は S88sendmail start とやると、/usr/lib/sendmail と /etc/mail/sendmail.cf の2つ のファイルがあるかチェックするようになっている。フリ−ソフトの sendmail-8.x.x に 入れ替える場合は、この /etc/rc2.d/S88sendmail スクリプトを /etc/sendmail.cf に修 正しておいた方がいい。後で訳の分からんトラブルに悩まないように。 * sendmail.cf のテスト sendmail.cf をテストする場合は、いちいち sendmail デ−モンを起動しなおさなくても、 sendmail のオプション指定を使うとよい。下記は -bt -C で sendmail.cf ファイルを指 定する場合である。ファイル名は sendmail.cf でなくても、何でも構わない。 どのディ レクトリにあってもよい。現状のメ−ルシステムはそのまま稼働させておいて、テストで きるわけである。記述は -C temp.cf でも -Ctemp.cf どちらでもよい。 % /usr/lib/sendmail -bt << sendmail-8.x の場合は /etc/sendmail.cf が デフォルトで取られる。 % /usr/lib/sendmail -bt -C/usr/test/temp.cf << フルパスでの指定。 % cd /usr/test/ % /usr/lib/sendmail -bt -C temp.cf << カレントディレクトリの temp.cf をとる。 ADDRESS TEST MODE (ruleset 3 NOT automatically invoked) Enter
> 3,0 katou@nix.co.jj % /usr/lib/sendmail -bt -C temp.cf << カレントディレクトリに temp.cf がない。 temp.cf: line 0: cannot open: No such file or directory * Solaris 9 でのこと `2b/04 InterScan7 をインスト−ルして /etc/rc2.d/S88sendmailファイルが少し書き換えられた 部分があるが、やる内容は変わっていない。sendmail-rx.cf と sendmail-tx.cf を少し 変更して # cd /etc/rc2.d、# ./S88sendmail restart をやった。何もメッセ−ジは出な かったのだが、これで xxx.cf ファイルが再読込みされたと思った。InterScan7の動きが どうも不安定でマシンをリブ−トした。滅多にリブ−トなんてやらないことなのだが。し まったリブ−トする前に # ./S88sendmail stop とやって sendmail デ−モンを止めてお くべきだったが後の祭。マシンが再起動してきてコンソ−ルを開いたら"savemail panic" の表示が続出してきた。例えばこんな "Apr 28 16:06:17 hostB sendmail[3146]: [ID 80 1593 mail.alert] p3S76Hxo003146: Losing ./qfp3S76Hxo003146: savemail panic"。 メ−ルのキュ−に溜まっているメ−ルを処理しようとする際に、こんなワ−ニングがコン ソ−ルに出だしたらどうしようもない。ともかく sendmail デ−モンを止めること。しか しキ−入力が流れていってしまう。ちゃっと # cd /etc/rc2.d、# ./S88sendmail stopと コマンドを打つ。多分、下記の @loghost を削除すればコンソ−ルにワ−ニングは出なく なるのでないか。出ないようにしておいた方が身のためだと思う。 S88sendmail restart は結局 xxx.cf ファイルは再読込みはしないということ。xxx.cfファイルの変更はマシン をリブ−トして反映されたということ。その変更がおかしかったために、ワ−ニングが出 てしまったということ。トラブルは幾つかの要因が複合して起きるという話でした。もう 1つ、S88sendmail stop はやらなくても、これでメ−ルが消えるということはなさそう。 /etc/syslog.conf 他のところは略 ------------------------------------------------------------ |mail.debug ifdef(`LOGHOST', /var/log/syslog, @loghost) * その他 ・電子メ−ルを送る際 UCB mail (/usr/ucb/Mail) を -v オプション付きで使うと、ログ が画面に出てくる。テスト時によい。受けるのはただの mail (/bin/mail) でいい。 ・sendmail の Zombie ができる場合は % kill ZombieのProcess_ID で消去する。 ・sendmail.cf の記述がおかしいと newaliases コマンドやると警告やエラ−が出る。 ・aliases ファイルはメ−ルのクライアントでは関係ない。newaliasesもやらなくてよい。 ・sendmail.cf の記述を変更したら % kill -HUP sendmailのProcess_ID とやればいい。 ・sendmail.cf が中で参照するホスト名は /etc/hosts のエントリが変われば反映される。 (3) メ−ルの各種テスト -------------------------------------------------------------------------------- hostA の katou ユ−ザがメ−ルを送ろうとしている。hostA マシンは Apollo である。 -------------------------------------------------------------------------------- * ロ−カルでのメ−ル送受信テスト ユ−ザ katou がマシンのロ−カルの自分宛にメ−ルを送る。mail コマンドは /usr/lib/ sendmail (Apollo に入っていたもの)にアクセし、この sendmail は /usr/lib/sendmail .cf ファイルを見る。この2つがあれば、メ−ルは送信する。sendmailデ−モンはこの場 合、稼働してなくても構わない。 $ /bin/mail katou 111 . $ /bin/mail From katou Thu Sep 27 18:45:24 2001 Received: by node_abcd (5.65c/nix.1.0) id AA01492; Thu, 27 Sep 2001 18:45:20 +0900 Date: Thu, 27 Sep 2001 18:45:20 +0900 From: katou (katou) Message-Id: <200109270945.AA01492@node_abcd> Apparently-To: katou 111 ? * 自分自身にメ−ルを送る $ /usr/ucb/mail -v katou@nix.co.jj << UCB mail コマンドだと処理のログが出る。 test desu . EOT katou@nix.co.jj... aliased to katou@hostA.nix.co.jj << aliases が働いている。 katou@nix.co.jj... Connecting to (local)... katou@nix.co.jj... Sent * ホストまで指定した場合 ↓ちゃんと送る。 $ /usr/ucb/Mail -v katou@hostA.nix.co.jj * 登録されていないユ−ザに送る $ /usr/ucb/mail -v yoshi@nix.co.jj | yoshi@nix.co.jj... User unknown katou... aliased to katou@hostA.nix.co.jj Saving message in /usr/people/katou/dead.letter /usr/people/katou/dead.letter... Sent * DNS が止まっている場合 $ /usr/ucb/Mail -v jiro@nix.co.jj | jiro@nix.co.jj... Connecting to hostB.nix.co.jj (tcp)... jiro@nix.co.jj... Deferred: Host Name Lookup Failure $ ld /usr/spool/mqueue dfAA01286 qfAA01286 << スプ−ルにメ−ルが溜まる。 $ /etc/named & << DNS を起動する。 $ /usr/lib/sendmail -q << 強制的にメ−ルを吐き出す。ちゃんと送った。 $ /usr/ucb/mailq << スプ−ルに溜まっていたメ−ルが出て行った。 Mail queue is empty * ホスト名がない場合 $ /usr/ucb/Mail -v katou@hostC.nix.co.jj << hostC は DNS に登録してない。 | katou@hostC.nix.co.jj... Connecting to hostC.nix.co.jj (tcp)... katou@hostC.nix.co.jj... 550 Host unknown (Authoritative answer from name server) katou... aliased to katou@hostA.nix.co.jj Saving message in /usr/people/katou/dead.letter /usr/people/katou/dead.letter... Sent * sendmail のパ−ミッションがおかしい場合 $ /usr/ucb/mail -v katou 例1.sendmail デ−モンに SetUID が立っていない konnitiwa のでメ−ルキュ−にファイルを書き込めない。 . EOT queuename: Cannot create "qfAA01401" in "/usr/spool/mqueue": Permission denied $ /usr/ucb/mail -v katou 例2.こんなのもある。/usr/spool/mail, mqueue の konnitiwa パ−ミッションも確認した方がいいかも。 . EOT setgroups: Not owner katou@nix.co.jj... Sent ↓ パ−ミッションをちゃんとする。root で作業すること。 $ ls -al sendmail << こんなパ−ミッションだった。 -rwxrwxrwx 1 root 162636 sendmail $ chmod 755 sendmail << chmod 775 で、-rwxr-xr-x とな $ chmod u+sx sendmail る。それを SetUID する。 $ ls -alg sendmail << g オプションでグル−プも表示。 -rwsr-xr-x 1 root staff 162636 sendmail [ 参考 ] % ls -al /usr/lib/sendmail << sendmail 8.8.5 をインスト−ル -r-sr-sr-x 1 root 361519 sendmail.8.8.5 した際のパ−ミッション。 * メ−ルのデ−タを読む $ /usr/ucb/mail -v -f/usr/people/katou/mbox UNIXのメ−ルコマンドでなら、指定したメ−ルボックスのメ−ルを読むことができる。 メ−ルボックスと言うのはメ−ルのデ−タ形式の1つ。 mbox はUNIXのメ−ルボック スの形式である。1つのファイルの中に来たメ−ルが全部ある。こんなコマンドの使い方 はメ−ルのテストで必要になった時ぐらいしか使うことはない。 (4) メ−ル設定の確認 * 電子メ−ルの動作確認 telnet コマンドで sendmail デ−モンにアクセスする。以下は一応 Apollo から Sun に アクセスしてみたところである。sendmail は 8.8.5 だが、どのバ−ジョンでもマシンで もほとんど同じ様な出力である。$ telnet localhost 25 とやると、自身のマシンで稼働 している sendmail にアクセスする。実はアクセスして help コマンドを入れると、ここ で有効なコマンドの一覧が出る。即ちここからメ−ルを打つことができるのである。メ− ルのデバッグで使うか、クラッカ−が使うか?ぐらいである。いや、管理者は一度は試し てみておくことをお勧めする。 $ telnet 192.9.201.1 25 << 25番ポ−トに接続する。TCP の25番は sendmailの Trying 192.9.201.1... SMTP が使うことになっている。 Connected to 192.9.201.1. Escape character is '^]'. 220 hostA.nix.co.jj ESMTP Sendmail 8.8.5/nix.1.0 ready at Tue, 25 Mar ..(JST) help << HELP を入力するとダ−と出てくる。 214-This is Sendmail version 8.8.5 214-Topics: 214- HELO EHLO MAIL RCPT DATA 214- RSET NOOP QUIT HELP VRFY 214- EXPN VERB ETRN DSN 214-For more info use "HELP ". 214-To report bugs in the implementation send email to 214- sendmail-bugs@sendmail.org. 214-For local information send email to Postmaster at your site. 214 End of HELP info quit << quit で抜ける。 221 hostA.nix.co.jj closing connection Connection closed by foreign host. $ telnet 192.9.201.1 25 << 192.9.201.1 はメ−ルサ−バで hostB とする。 | help expn 214-EXPN 214- Expand an address. If the address indicates a mailing 214- list, return the contents of that list. 214 End of HELP info verb << おしゃべりモ−ドにする。 これを指定すると以下 250 Verbose mode で .forward の展開の様子が表示される。 expn minna << EXPN コマンドで /etc/aliases の内容を表示する。 050 minna... aliased to haruo,satou 050 /usr/people/mutou/.forward: line 1: forwarding to \mutou, katou@tcp-ip.or.jj 250- 250- 250- 250 <\mutou@hostB.nix.co.jj> vrfy mutou << 個々のユ−ザの存在がこのコマンドで分かる。 250 vrfy henomohe << /etc/aliases にないアドレス名を入れてみた。 550 henomohe... User unknown メ−ルサ−バ /etc/aliases /usr/people/mutou/.forward hostB の設定 ------------------- --------------------------- |minna: haruo,satou |\mutou, katou@tcp-ip.or.jj telnet コマンドでメ−ルを送ることができるだけでなく、 そのメ−ルサ−バが持つメ− ルアドレスも調べることができてしまう。/etc/aliases に all とか member とか安易な アドレスを付けていると、簡単に分かってしまう。VRFY や EXPNコマンドをそのまま使え るよう放置しておくのは危険である。他人さんに自サイトのメ−ルアドレスを公開する必 要はない。sendmail.cf の設定で禁止にできるのなら、そうした方が望ましい。sendmail 8.8.5 の RELEASE_NOTES には、noexpn という禁止オプションの文字が見える。 相手のメ−ルサ−バが動作しているかどうか確認するだけのコマンド NOOP。 $ telnet 192.9.201.1 25 220 hostA.nix.co.jj ESMTP Sendmail 8.12.10+Sun/8.12.10; Mon, 5 Jun 2006 ...(JST) helo node_abcd 250 hostA.nix.co.jj Hello node_abcd [192.9.201.9], pleased to meet you noop << これ、特に意味はない。 ↑ 250 2.0.0 OK この telnet を打っている自身のIPアドレス。 quit 221 2.0.0 hostA.nix.co.jj closing connection * アドレス解釈の確認 sendmail -bt これで正しくメ−ルを届けることができるかチェックできる。 非常に分か りにくいが、どうもル−ルセットを指示するのに > 3,0 に、 ちゃんとしたメ−ルアドレ スを入れればいいみたいである。まあこれは一応こんなんもできるというこで、デバッグ 表示付きでメ−ルを実際に送ってみて、ログを見た方が確実である。(ex. Mail -v tomo) /etc/sendmail.cf -------------------------------------------------------------------- |################################################################### |# |# 万能 sendmail.cf ファイル [ ftp.tic.com の m4 ファイル参考 ] |# |# Apollo SR10.4, SunOS 4.1.2-JLE, 4.1.4-JLE, Solaris 2.5.1, |# INDY IRIX 5.3 で使用を確認。uucp のメ−ル配送はサポ−トしない。 |#------------------------------------------------------------------ |# |# Dj$w.$D 部は注意が必要。hostname が FQDN の場合はこのまま。 |# hostname が FQDN でない場合は Dj$w とする。sendmail-8.8.x を |# 使う場合は FQDN 関係なく Dj$w とすること。 |# |# This sendmail.cf was written refered to m4 sendmail.cf |# in ftp.tic.com public directory. Original file are |# Copyright (c) 1993 by Texas Internet Consulting. |################################################################### | |DVnix.1.0 |# |# [ 共通、ドメイン名が nix.co.jj の例 ] |# |DDnix.co.jj |Dj$w.$D << ホスト名は例えば hostA。ドメイン部なしの場合。 |DMtcp | | |# [ 3. 単体ドメインのメ−ルホスト用 ] |# |R$*<@$-.$D>$* $#$M $@$2.$D $:$1<@$2.$D>$3 |R$*<@$+>$* $#$M $@$2 $:$1<@$2>$3 |R$+%$+ $@$>29$1@$2 |R$+ $#local $:$1 /etc/aliases ---------------- |# SMTP user |tomo:tomo@hostB ※一応出力は SunOS 4.1.4-JLE、sendmail 8.8.5 の 場合である。どのマシンでも同じ出力のはずだが。 # /usr/lib/sendmail -bt ADDRESS TEST MODE (ruleset 3 NOT automatically invoked) Enter
> 3,0 tomo << これはおかしい解釈になる。3,0 rewrite: ruleset 3 input: tomo は sendmail.cf 記述のル−ルセ rewrite: ruleset 3 returns: tomo ット3と0 を適用せよという意味。 rewrite: ruleset 0 input: tomo rewrite: ruleset 9 input: tomo rewrite: ruleset 9 returns: tomo rewrite: ruleset 0 returns: $# local $: tomo > 3,0 tomo@hostB << これは正しい解釈になる。 rewrite: ruleset 3 input: tomo @ hostB rewrite: ruleset 3 returns: tomo < @ hostB . nix . co . jj > rewrite: ruleset 0 input: tomo < @ hostB . nix . co . jj > rewrite: ruleset 9 input: tomo < @ hostB . nix . co . jj > rewrite: ruleset 9 returns: tomo < @ hostB . nix . co . jj > rewrite: ruleset 0 returns: $# tcp $@ hostB.nix.co.jj $: tomo <@ hostB.nix.co.jj> > 0 katou@provider.or.jp << これはおかしい解釈になる。 rewrite: ruleset 0 input: katou @ provider . or . jp rewrite: ruleset 9 input: katou @ provider . or . jp rewrite: ruleset 9 returns: katou @ provider . or . jp rewrite: ruleset 0 returns: $# local $: katou @ provider . or . jp > 3,0 katou@provider.or.jp << これは正しい解釈になる。 rewrite: ruleset 3 input: katou @ provider . or . jp rewrite: ruleset 3 returns: katou < @ provider . or . jp > rewrite: ruleset 0 input: katou < @ provider . or . jp > rewrite: ruleset 9 input: katou < @ provider . or . jp > rewrite: ruleset 9 returns: katou < @ provider . or . jp > rewrite: ruleset 0 returns: $# tcp $@ provider.or.jp $: katou < @ provider.or.jp > > Ctrl+D で抜ける。 [ ちょっと sendmail.cf を変えてみた ] --------------------------------------------- | | |#R$*<@$-.$D>$* $#$M $@$2.$D $:$1<@$2.$D>$3 |R$*<@$-.$D>$* $#$M $@$2 $:$1<@$2>$3 | | |R$+ $#local $:$1 > 3,0 tomo@hostB こんな結果になる。 rewrite: ruleset 3 input: tomo @ hostB rewrite: ruleset 3 returns: tomo < @ hostB . nix . co . jj > rewrite: ruleset 0 input: tomo < @ hostB . nix . co . jj > rewrite: ruleset 9 input: tomo < @ hostB . nix . co . jj > rewrite: ruleset 9 returns: tomo < @ hostB . nix . co . jj > rewrite: ruleset 0 returns: $# tcp $@ hostB $: tomo < @ hostB > * メ−ルを送ってみる hostA # Mail -v katou@provider.or.jp Subject: test hello katou . 相手の MX レコ−ドを調べた。 EOT ↓ hostA # katou@provider.or.jp... Connecting to mx.provider.or.jp. via tcp... 220 mx.provider.or.jp ESMTP Sendmail 8.7.5 .. Wed, 26 Mar 1997 ..:54 +0900 (JST) >>> EHLO hostA.nix.co.jj ↑ 250-mx.provider.or.jp Hello mail.nix.co.jj [192.9.201.1], pleased to meet you 250-EXPN | 250-8BITMIME 相手の sendmail のバ−ジョン 250-SIZE 250-VERB 250-ONEX 250 HELP >>> MAIL From: SIZE=42 250 ... Sender ok >>> RCPT To: 250 Recipient ok >>> DATA 354 Enter mail, end with "." on a line by itself >>> . 250 OAA01469 Message accepted for delivery katou@provider.or.jp... Sent (OAA01469 Message accepted for delivery) Closing connection to mx.provider.or.jp. >>> QUIT 221 mx.provider.or.jp closing connection * メ−ルを受ける nix.co.jj 同じドメイン内で、hostB:INDY の tomo さんから hostA:Apollo の katou に 来たメ−ルを受け取ったところ。Received: はメ−ルを中継したマシンの情報とタイムス タンプである。下の Received: から上から順番に中継された情報が記載される。 最初は メ−ルを発信したホスト自身から、そのホスト hostB へ送っている。その次は hostB か ら hostA へ送っている。from hostB by hostA の記述がそれである。hostB と A のマシ ンの時計が、きちんと合っていないことも分かる。Return-Path: の記 載は、Netscape Messenger 4.78 の設定でいえば、[編集]->[設定]->[メ−ルとグル−プ] の [個人情報] の { 電子メ−ル アドレス tomo@nix.co.jj } の tomo@nix.co.jj をとる。 相手が返信する際のメ−ルアドレスになる。Received: にはメ−ルがメ−ルボックスに入 ったことまでは記録されない、hostA が受けた時刻の Received: 行のこと。 hostA $ /bin/mail From tomo@nix.co.jj Mon Jan 8 14:40:04 1996 Return-Path: Received: from hostB.nix.co.jj by hostA.nix.co.jj (5.65c/sub.1.6) id AA01250; Mon, 8 Jan 1996 14:40:01 +0900 << hostA が受けた時刻。 Received: by hostB.nix.co.jj (940816.SGI.8.6.9/relay.1.17) id OAA00779; Mon, 8 Jan 1996 14:41:09 +0900 << hostB が受けた時刻。 Date: Mon, 8 Jan 1996 14:41:09 +0900 << メ−ルを発信した時 From: tomo@nix.co.jj (cad kanri) 刻、ここでは hostB Message-Id: <199601080541.OAA00779@hostB.nix.co.jj> から発信している。 To: katou@nix.co.jj Subject: test konnitiwa katou << メッセ−ジの内容です。 * 外へのメ−ルの送受信のテスト テスト方法は、自分のダイアルアップのメ−ルアドレスにメ−ルを送り、あらかじめプロ バイダ側に設定したメ−ルの自動転送機能により、また自分にメ−ルを返すというもので ある。ここでのダイアルアップのメ−ルアドレス ikken@tcp-ip.or.jj は、これは小生が ずっと前に個人で加入して取得したものである。ダイアルアップ接続を別に確保しておく と、このような使い道ができて便利である。以下はメ−ルリレ−のホストでメ−ルのログ を切り出したものである。ログは改行もなくダ−と出てくるので分かりにくい。エッセン スの部分のみ書き出してみた。ここでのマシンは Sun の Solaris 2.5.1 で、最新のログ は /var/log/syslog に書き込まれる。 送った。hostC から katou@nix.co.jj から ikken@tcp-ip.or.jj へ Sep 16 13:41:58 : from=, msgid=<1998..@hostC.nix.co.jj>, relay=hostB [192.168.1.1] Sep 16 13:42:00 : to=, mailer=tcp, relay=mx.tcp-ip.or.jj. [157.14.130.4], stat=Sent .. 返った。ikken@tcp-ip.or.jj から katou@nix.co.jj へ Sep 16 13:43:17 : from=, msgid=<1998..@hostC.nix.co.jj>, relay=root@mx.tcp-ip.or.jj [157.14.130.4] Sep 16 13:43:18 : to=, mailer=tcp, relay=hostB.nix.co.jj. [192.168.1.1], stat=Sent .. (5) メ−ルの動作原理から * エンベロ−プとは メ−ルが実際どのように送られるのか理解するには、このメ−ル送信時のエンベロ−プと いう働きを知る必要がある。SMTP で sendmail デ−モンに接続する、 まさにその時にエ ンベロ−プなる情報が効いてくる。プロトコル・レベルでの理解が必要である。エンベロ −プには、メ−ルの差出人としての情報 MAIL From: xxx@xxx と、メ−ルの宛先人として の RCPT To: xxx@xxx がある。メッセ−ジ中のヘッダ−部の From: や To: アドレスとは 別のものである。メ−ルソフトで表示されるのは、ヘッダ−部の From:、To: である。メ −ルソフトの通常の画面ではエンベロ−プ部の情報は出て来ない。以下、フォワ−ド機能 によるメ−ル転送で From: アドレスがどうなっていくか見られたい。 -------------------- |エンベロ−プ(封筒)| Envelope。実際に送る相手。 |------------------| |ヘッダ− | ヘッダ−とボディ−両者を |ボディ−(本文) | 合わせてメッセ−ジと呼ぶ。 -------------------- * メ−ルの動作の仕組み % telnet xxx 25 HELO xxx 自分のIPアドレスまたはホスト名 MAIL From: xxx@xxx メ−ルの差出人 \ RCPT To: xxx@xxx メ−ルの宛先人 / この2つがエンベロ−プ部 DATA メッセ−ジの開始 From: xxx@xxx \ To: xxx@xxx |ヘッダ−部 (あくまでもメッセ−ジ、ただの文字列である) Cc: xxx@xxx | Bcc: xxx@xxx |From: が返信アドレスになる。Replay-To: があえて書かれて Replay-To: xxx@xxx / いれば、Replay-To: がメ−ルソフトでの返信アドレスになる。 空行 (ヘッダ−部と本文の区切り) いろはのにおへど \ ちりぬるを、への |本文 へのもへじ、やま / . メッセ−ジの終わり ※これら HELO などコマンドは大文 QUIT 字でも小文字でも、混在しても可。 helo localhost rcpt to: tomo 503 Need MAIL before RCPT << mail from: が先に必要である。 メ−ルソフトではヘッダ−部の From: や To: が表示される。メニュ−の返信をクリック すると通常は From: のメ−ルアドレスにメ−ルは行く。Replay-To: にメ−ルアドレスが 書かれていると、From: でなくそちらに行く。またメ−ルソフトでは通常 MAIL From: は From: と同じ、RCPT To: は To: と同じになっている。Cc や Bcc でなければ。 * フォワ−ドから From: アドレスの謎 InterScan [ hostB での設定 ] hostD hostC hostB Windows □ indy □ Solaris □ /usr/people/tomo/.forward .4| .3| |.1 -------------------------- ---------------------------------- 192.168.1.0 |\tomo, katou@nix.co.jj Netscape Zmail メ−ル/POPサ−バ sendmail 8.8.5 # grep tomo /etc/passwd POP User SMTP 万能 sendmail.cf tomo:x:107:12::/usr/people/tomo: indy % telnet 192.168.1.1 25 220-InterScan Version 3.5-Build_SOL_1044 $Date: 04/20/2000 16:23:0044$: Ready 220 hostB.nix.co.jj ESMTP Sendmail 8.8.5/nix.1.0 ready at Mon, 10 Dec 2001 続く helo 192.168.1.3 << 自ホストを名乗る。 11:04:33 +0900 (JST) 250 hostB.nix.co.jj Hello localhost [127.0.0.1], pleased to meet you mail from: katou@nix.co.jj << 誰からメ−ルを送るか( 送信メ−ルアドレス )。 250 katou@nix.co.jj... Sender ok rcpt to: tomo@nix.co.jj << 誰宛にメ−ルを送るか( 受信メ−ルアドレス )。 250 tomo@nix.co.jj... Recipient ok data << ここから本文です。 354 Enter mail, end with "." on a line by itself From: kkk << ヘッダ−部です。空行をこの下に入れると、 To: ttt << そこまでがヘッダ−部と認識される。 << Return キ−を押して、空の行を入れた。 test desu << メ−ルの内容。 . << 本文の終わりの印し。 250 LAA07017 Message accepted for delivery quit << メ−ル書くの完了、送信して下さい。 221 hostB.nix.co.jj closing connection Connection closed by foreign host. hostB /var/mail/tomo -------------------------------------------------------------- |From katou@nix.co.jj Mon Dec 10 11:05:42 2001 |Return-Path: |Received: from 192.168.1.1 by hostB.nix.co.jj (8.8.5/nix.1.0) | id LAA07017; Mon, 10 Dec 2001 11:04:57 +0900 (JST) |From: kkk |To: ttt ※hostD の Netscape Messenger で POP アクセスする前です。 |Content-Length: 10 ※Date: と Message-Id: の表示は略した。 | |test desu ↑ hostD Netscape Messenger で受けたところ hostC Zmail で受けたところ ------------------------------ ------------------------------------- | 件名 差出人 kkk | kkk@nix.co.jj |----------------------------- |------------------------------------ | From: kkk | From: kkk@nix.co.jj | To: ttt | To: ttt@nix.co.jj |----------------------------- |------------------------------------ | test desu | test desu ↓ hostC /var/mail/katou % tail -20l file_name とやってみてもよい ----------------------------------------------------------------------------- |From katou@nix.co.jj Mon Dec 10 11:23:39 2001 |Return-Path: |Received: from hostB.nix.co.jj (mail [192.168.1.1]) | by hostC.nix.co.jj (8.9.1/3.7W) with ESMTP id LAA15258 | for ; Mon, 10 Dec 2001 11:23:38 +0900 (JST) |Received: from 192.168.1.1 by hostB.nix.co.jj (8.8.5/nix.1.0) | id LAA07017; Mon, 10 Dec 2001 11:04:57 +0900 (JST) |From: kkk@nix.co.jj |To: ttt@nix.co.jj ※hostC の Zmail で受けた後のメ−ルボックスの内容です。 | ※Date: と Message-Id: の表示は略した |test desu * SMTP でやりとりするホストのIPアドレスとホスト名 telnet hostX --------> hostY <-- /etc/hosts □ □ ------------------------------------ |.1 |.2 |192.168.10.1 hostX ---------------------------- |192.168.10.2 hostY hostY.nix.co.jj 192.168.10.0 ↑ 192.168.10.2 の % hostname は hostY hostX $ telnet 192.168.10.2 25 220 hostY.nix.co.jj ESMTP Sendmail 8.9.1/3.7W; Thu, ... (JST) 静的配送 helo 192.168.10.1 ↑ 250 hostY.nix.co.jj Hello hostX [192.168.10.1], pleased to meet you quit ↑ | ↑ | | hostY の /etc/hosts から検索。hostY の sendmail がアク 対応| | セス元 192.168.10.1 のホスト名は何かなと調べる。 hostY /etc/sendmail.cf ----------------------- |DjhostY.nix.co.jj << CF ツ−ル作成 sendmail.cf の場合。 * 受信メ−ルのヘッダ− "Received: from" 部の見方 `27/01 [ Sun ] Outlook hostB node_1234 PC□ □Sun □Apollo | |.1 |.9 ---------------------- 192.168.1.0 /etc/hosts -------------------------------------------- |127.0.0.1 localhost |192.168.1.1 hostB hostB.nix.co.jj loghost |192.168.1.9 node_abcd Sun は Mail-Store 本稼働中のマシン。久しぶりに Apollo コンピュ−タで sendmail を 動かした。Apollo のホスト名は本機では node_1234、Sun に記述したのは node_abcd で あることに注意されたい。識別のためわざとそうした。hostB では InterScan が稼働。 [ Apollo ] /etc/hosts /etc/local_names ----------------------- ---------------- |127.0.0.1 localhost |ktest |192.168.1.9 node_1234 |192.168.1.1 hostB /usr/lib/sendmail.cf /usr/lib/sendmail はサイズ 162636 の元から入 ------------------------------ っていた静的配送用。sendmail.cf は小生作成の |DDnix.co.jj 万能版 sendmail.cf のメ−ルリレ−専用を使用。 |Dj$w.$D |DMtcp | | |FL/etc/local_names |DRhostB |# [ 3. メ−ルクライアント用 ] |R$=L $#local $:$1 |R$+ $#$M $@$R $:$1 $ /etc/mkhosts /etc/hosts $ /etc/nmconfig -h hostent_ascii $ /usr/ucb/newaliases << これ表示が変だった。 $ /usr/lib/sendmail -bd -q15m & /etc/resolv.conf ファイルなし。 /etc/passwd こんな感じで ------------------------------------ |ktest::1000:100::/usr/people/ktest: $ /usr/ucb/mail -v katou@nix.co.jj << ユ−ザ ktest でロッグインして送った >> 333 . EOT katou@nix.co.jj... Connecting to hostB (tcp)... 220 hostB.nix.co.jj ESMTP Sendmail 8.12.10; Thu, 1 Feb 2007 15:50:41 +0900 (JST) >>> HELO node_1234.nix.co.jj 250 hostB.nix.co.jj Hello node_abcd [192.168.1.9], pleased to meet you >>> MAIL From: 250 2.1.0 ... Sender ok >>> RCPT To: 250 2.1.5 ... Recipient ok >>> DATA 354 Enter mail, end with "." on a line by itself >>> . 250 2.0.0 l116ofpI018073 Message accepted for delivery >>> QUIT 221 2.0.0 hostB.nix.co.jj closing connection katou@nix.co.jj... Sent パソコンの Outlook でメ−ルを受けた [表示]->[オプション]でヘッダ−部が出て来る。 Return-Path: Received: from hostB.nix.co.jj (localhost [127.0.0.1]) << 最終的に到着。 by hostB.nix.co.jj (8.12.10) with ESMTP id l116ofvv018077 for ; Thu, 1 Feb 2007 15:50:41 +0900 (JST) Received: from node_1234.nix.co.jj (node_abcd [192.168.1.9]) << 下を見ること。 by hostB.nix.co.jj (8.12.10) with SMTP id l116ofpI018073 for ; Thu, 1 Feb 2007 15:50:41 +0900 (JST) Received: by node_1234.nix.co.jj (5.65c) id AA01168; Thu, 28 Feb 2008 15:56:22 +0900 << Apollo の時計 Date: Thu, 28 Feb 2008 15:56:22 +0900 は狂っている。 From: ktest@nix.co.jj Message-Id: <200802280656.AA01168@node_1234.nix.co.jj> To: katou@nix.co.jj X-UIDL: [C&#!%l~!!4 |tcp.or.jj| --------> |nix.co.jj| |--------------------| ----------- ----------- ----------- |こんにちは | Mail-Store ~/.forward ファイルで Mail-Store ---------------------- katou@nix.co.jj に転送 パソコンのメ−ルソフト * メ−ルのエンベロ−プ指定 `29/05 Mail-Store に telnet で root ログイン。Envelope From: を指定してメ−ルを送ってみ る。sendmail の -fkatou@nix.co.jj がそうである、 Envelope To: を指定するオプショ ンはない。mail コマンド、Postfix にはエンベロ−プを指定するオプションはない。 エ ンベロ−プ情報はメ−ルのヘッダ−の Return-Path: に Envelope From: の文字列を取る。 # echo testdesu | /usr/lib/sendmail -fkatou@nix.co.jj ikken@tcp.or.jj -------------------------------- |差出 katou@nix.co.jj | メ−ルちゃんと戻ってきた。InterScan7の送受信で |宛先 undisclosed-recipients: | の迷惑メ−ルチェック、プロバイダのメ−ルサ−バ |------------------------------| でも止められることなく戻ってきた。メ−ルのヘッ |testdesu | ダ−は "Return-Path: " だった。 -------------------------------- # echo testdesu | /usr/lib/sendmail -ftomo@nix.co.jj katou@nix.co.jj -------------------------------- |差出 tomo@nix.co.jj | このメ−ルもちゃんと届いた。いつも使っているパ |宛先 | ソコンのメ−ルソフトOutlook Express にて。メ− |------------------------------| ルのヘッダ−は "Return-Path: " |testdesu | になっていた。 -------------------------------- ------------------------------------------------------------------------------------ [ 付録 ] 5分間隔でメ−ルが出ているのは何か * これはいったいなんだ `2b/04 # date Solaris 9 の Mail-Store 機にて。 2011年04月25日 (月) 12時51分03秒 JST # tail /var/log/syslog | Apr 25 12:45:00 hostB sendmail[5766]: [ID 801593 mail.info] p3P3xxx: from=root, size=255, class=0, nrcpts=1, msgid=<201104250345.p3P3xxx@hostB.nix.co.jj>, relay=root@localhost Apr 25 12:45:00 hostB sendmail[5766]: [ID 801593 mail.info] p3P3xxx: to=root, ctladdr=root (0/1), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=30255, relay=[127.0.0.1] [127.0.0.1], dsn=4.0.0, stat=Deferred: Connection refused by [127.0.0.1] Apr 25 12:50:01 hostB sendmail[5818]: [ID 801593 mail.info] p3P3yyy: from=root, size=255, class=0, nrcpts=1, msgid=<201104250350.p3P3yyy@hostB.nix.co.jj>, relay=root@localhost Apr 25 12:50:01 hostB sendmail[5818]: [ID 801593 mail.info] p3P3yyy: to=root, ctladdr=root (0/1), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=30255, relay=[127.0.0.1] [127.0.0.1], dsn=4.0.0, stat=Deferred: Connection refused by [127.0.0.1] /etc/aliases root から root へメ−ルを送っているのだが、 実際 ------------------------- には root にも ikkenにもメ−ルは来てない。いった |Postmaster: /dev/null どうなっているのか。メ−ルを送信しようとしている |MAILER-DAEMON: ikken のだけど、refused by [127.0.0.1]となっているので |root: ikken 実際にはメ−ルは出せていないとみるべきだろう。 # ls -al /var/mail -rw-rw---- 1 root mail 27307 1月 10日 2005年 /var/mail/root -rw------- 1 ikken user 0 4月 9日 12:01 /var/mail/ikken /var/spool/mqueue-rx/ にはメ−ルは入って来てない。 /var/spool/mqueue/ にはメ−ル は1通もない。/opt/trend/imss/queue/postpone/ にもメ−ルは1通もない。 クロ−ンのあたりはどうなっているか。 5分間隔で kappa と言うデ−モンが動いている かチェックしている。動いてなければ S99KAPPA というのを起動するようにしていた。あ る事情があって、一時的にファイル名を xS99KAPPA に替えていた。 それを思い出したの で cron の root ファイルで /var/spool/cron/HENOMOHE のところをコメントにしてみた。 クロ−ンを起動し直し # /etc/init.d cron stop して start。 これで syslog にメ−ル のログはでなくなった。どひょ−、こんなゾンビみたいなメ−ルがあるとは。 /var/spool/cron/crontabs/root --------------------------------------------------------------------------- |10 3 * * * /usr/sbin/logadm |15 3 * * 0 /usr/lib/fs/nfs/nfsfind |1 2 * * * [ -x /usr/sbin/rtc ] && /usr/sbin/rtc -c > /dev/null 2>&1 |30 3 * * * [ -x /usr/lib/gss/gsscred_clean ] && /usr/lib/gss/gsscred_clean |0,5,10,15,20,25,30,35,40,45,50,55 * * * * /var/spool/cron/HENOMOHE /var/spool/cron/crontabs/root HENOMOHE の記述を無効にした -------------------------------------------------------------------- | | |#0,5,10,15,20,25,30,35,40,45,50,55 * * * * /var/spool/cron/HENOMOHE /var/spool/cron/HENOMOHE /etc/rc3.d/xS99KAPPA << 名前が違う。 ----------------------------------- -------------------- |#!/bin/sh |#!/bin/sh |KOTAE=`ps -e | grep kappa | wc -l` |case "$1" in |if [ $KOTAE = 0 ]; then | "start") このスクリプトの中で | /etc/rc3.d/S99KAPPA start | | メ−ルを出すようなこ |fi | ;; とは記述はしていない。 * こんなことが分かった `2b/05 /var/spool/cron/HENOMOHE ファイル名を変えた。そうするとどうなるか。cron は動いて いて先ずは sendmail は止めている状態にて。これも同じく Solaris 9 の Mail-Store機 にて。故障してマシンのIPアドレスを変えた、cron のところもいじってみた。 それか らマシンのハ−ドディスクを fsck コマンドで修復した。そしてメ−ルストアとして機能 を確認しようとした際に、cron から大量のメ−ルがでてきた。cron の稼働は関係なくて sendmail を起動するとメ−ルがでてきた。/var/spool/clientmqueue/ ディレクトリにメ −ルが溜まっていたためと分かった。5分おきに出て溜まったメ−ルだが、知らないで放 置していると、何千何万というメ−ルになり、メ−ル爆弾になってしまう。注意したい。 /var/spool/cron/crontabs/root ------------------------------------------------------------------- |0,5,10,15,20,25,30,35,40,45,50,55 * * * * /var/spool/cron/HENOMOHE ------------------------------------------ # ps -ef | grep cron | From: root@hostB.nix.co.jj | root 171 1 0 ... /usr/sbin/cron | To : root@hostB.nix.co.jj | |----------------------------------------| # /etc/init.d/cron start と stop | Your "cron" job on hostB | | /var/spool/cron/HENOMOHE | cron ログは /var/cron/log に出る。 | produced the following output: | | sh /var/spool/cron/HENOMOHE: not found | ------------------------------------------ # ls /var/spool/clientmqueue ここには sm-client.pid が普段あるのみ。cron から 5分毎に出るメ−ルがここに溜まる。 # /etc/rc2.d/S88sendmail start sendmail を動かすと、clientmqueue から mqueue-rx にメ−ルが行ってすぐに、/var/mail に root のエイ # ls /var/spool/mqueue-rx リアスで ikken 宛にメ−ルが行く。 テストして確認が終わったら mqueue-rx/ 内のファイ # cat /var/mail/ikken ル全部と /var/mail/ikken を消す。