15.電子メ−ル・サ−バの設定

 15-1. メ−ルリレ−構成の基本と運用

  (1) 電子メ−ルの用語を再確認する   `22/04

   * メ−ルサ−バ/メ−ルクライアント

    メ−ルの用語について、"14-1. 電子メ−ル設定の基本 (1) メ−ル配送の仕組み" の最初
    のところで一応定義してみたのだが、どうもまだ混乱している。今一度整理確認してみた
    い。ちょうど商用 Sendmail がうまい言い方をしている、これにならうことにしよう。メ
    −ルリレ−やメ−ルゲ−トウェイやはたまたメ−ルエクスチェンジャ−とこれまでいって
    きたのは、"メ−ルリレ−"。内部ネットワ−クにあって、 "メ−ルリレ−" からメ−ルを
    受けるのは、"メ−ルストア" とする。"メ−ルリレ−" で外とのメ−ルのやりとりをして、
    "メ−ルストア" に送る構成の場合である。"メ−ルリレ−" と "メ−ルストア" を1つの
    ホストでまかなう場合は、"メ−ルホスト" ということにしよう。 これら総称してメ−ル
    サ−バということにする。 "メ−ルストア" から更に部門用の "メ−ルストア" にメ−ル
    を送る場合、部門用のは特に "メ−ルハブ" と呼ぶことにしよう。 "メ−ルハブ" はサブ
    ドメイン構成の場合にも、部門用の "メ−ルストア" として呼ばれるようである。

    更に MTA( Message Transfer Agent )、MUA( Mail User Agent )という用語も昔からある。
    MTA は単純にはメ−ルサ−バのことである。sendmail や qmail などが稼働しているわけ
    である。しかしメ−ルサ−バというのは、2者の間で一方がサ−バならもう片方はクライ
    アントになっているのである。メ−ルを送る側のメ−ルサ−バは、クライアントの働きを
    していて、メ−ルを受ける側のメ−ルサ−バはまさにサ−バの働きをしているわけである。
    このため MTA と一口にいっても役割は二通りあり、MUAである場合もあることに注意した
    い。メ−ルを送るだけのソフトは MUA、メ−ルクライアントという。Outlook Express と
    か Eudro 一杯あるのがそれである。これらのソフトはメ−ルを送るのは SMTPで、受ける
    のは POP である。"メ−ルストア" では POP サ−バが稼働していて、ユ−ザは MUA でメ
    −ルを取り出すことになる。あるいはユ−ザに sendmail などでメ−ルを直接配送する。


   * メ−ルのリレ−とか中継の意味

    --------------------------------------------------------------------------------
    メ−ルをリレ−する、同じ意味での中継、これらはメ−ルを受け付けると解釈したらどう
    か。まだよそにメ−ルを転送するというイメ−ジでなくてだ。
    --------------------------------------------------------------------------------

    メ−ルサ−バ、ここで具体的にいうならば、メ−ルリレ−ではメ−ルが外からやって来た
    ものか、内から来たものなのか、そもそも区別することができない。これが sendmail.cf
    などで、SPAM対策やメ−ルの中継制限の設定に頭を悩ませる原因になっている。外か
    ら来たと想定したメ−ルはどうする。内部ネットワ−クから来たと想定したメ−ルはどう
    する。外、内を区別するのは SMTP プロトコルの MAIL FROM: でどこから、 RCPT TO: で
    どこへ。しかし Telnet でメ−ルを送って見れば分かるように、 MAIL FROM: のメ−ルア
    ドレスなどどないにでもなる。IPアドレスでも制限できるというが、POP によりプロバ
    イダを経由する場合は、そのプロバイダから発するメ−ル全部を制限することになってし
    まう。無い知恵絞って、ここら辺りまとめてみたが、どうもまだすっきりしない気がする。


                                         [ よそ ]  xxx@aaa.com から xxx@ccc.com へ
                            ccc.com へ                  --------------        -----
                                ↑      ----||----------|メ−ルサ−バ|--------|MUA|
           [ 自サイト ]          \    /                --------------        -----
                                   \ /            xxx@bbb.com から xxx@nix.co.jj へ
             nix.co.jj  --------------                  --------------        -----
             nix.com    |メ−ルリレ−|------||----------|メ−ルサ−バ|--------|   |
                        --------------                  --------------        -----
                              |       
        -----           --------------      ------------        -----
        |MUA|-----------|メ−ルストア|------|メ−ルハブ|--------|MUA|
        -----  POP →   --------------      ------------ ← POP -----


      ・メ−ルリレ−は aaa.com からのメ−ルは受け取る。 ccc.com ドメイン用の予備のメ
        −ルサ−バになってあげる場合。ccc.com ドメインの DNS の設定で、MX レコ−ドを
        自サイト nix.co.jj をセカンダリ指定している。

      ・メ−ルリレ−は bbb.com からのメ−ルは受け取らない。 bbb.com はSPAMメ−ル
        を送り付けてくるサイト。 または特定ユ−ザのアドレス katou@bbb.com からのメ−
        ルを受け取らない。ホスト名やIPアドレスでも制限できる。

      ・メ−ルリレ−は nix.co.jj 宛のメ−ルは受け取る。 nix.co.jj は自サイトのドメイ
        ンである。nix.com 宛のメ−ルも受け取る。nix.com は自サイトのもう1つのドメイ
        ンである。バ−チャルドメイン設定の場合など。

      ・メ−ルリレ−は nix.co.jj と nix.com からのメ−ルを受け取る。これはメ−ルスト
        アから来ることを想定してのことである。メ−ルリレ−とメ−ルストア間のメ−ル転
        送は、お互いあらかじめホストを特定してのことになる。


              他ドメインへ                           これがSPAMとなる
                   ↑       外出先の社員など             ↑
       MTA Relay ● ←― □ MUA、メ−ルクライアント    ● ←― ■ 相手メ−ルサ−バ/
                 |↓                                  |↓       メ−ルクライアント              
       MTA Store ○ 自ドメイン宛のメ−ル               ○ 通常に来たメ−ル
   
            << case1 >>                                 << case2 >>
           

   * 配送と転送、送信/受信、配信 の用語

    配送と転送は、機械的にメ−ルを送るような場合に先ず用いることにしよう。sendmailデ
    −モンが相手 MTA にメ−ルを送るのは配送。転送はともかく、 他のメ−ルアドレスに送
    る場合のこととしよう。~/.forward ファイルで自動的にメ−ルを、 他のメ−ルアドレス
    に送るのはもちろん転送である。メ−ルリレ−とメ−ルストア間のやりとりは、どう呼ぶ
    のがふさわしいか。メ−ルを右から左へ流すということでは、メ−ルの中継である。また
    大きく見れば配送でもある。時として使い分けることにしよう。配信というのは、電子メ
    −ルの用語としてはそぐわないような気がする。ファックスを配信するというような場合
    にはいいような気がするが、使わないようにしよう。送信/受信はメ−ルを人が送るとか
    受けるとかいう場合に用いることにしよう。メ−ルのクライアントでの操作である。


   * IIJ の小冊子からの話  `25/08

   「iij.news」2005/3-4, vol.69, "spamからメ−ルを守れ(管理者編)"。IIJは
    sendmail を使っている。sendmail は Postfix や qmail の台頭に刺激され、最新版では 
    SMTP AUTH や TLSなどの新機能も入ってきている。メ−ルサ−バという用語の確認と整理。
    MUA(Mail User Agent),   MSA(Message Submission Agent),  MTA(Mail Transfer Agent), 
    MDA(Mail Delivery Agent), MRA(Mail Retrieval Agent)。 役割をちゃんと分けようとい
    うこと。それにより設定が単純明快になる。最近 MSA は25番ポ−トではなく、Message 
    Submission Agent (RFC2476)で、定義された587番ポ−トを使う場合も増えてきている。
    ポ−ト番号は違っても、やりとりするプロトコルは SMTPそのものである。sendmail でも 
    Maildir 形式のメ−ルボックスは利用できる。メ−ルボックスの形式は MTAには依存せず、
    MDA と MRA に依存する。オライリ−の「sendmail クックブック−設定と運用のためのレ
    シピ集」がお勧めである。その後の続編の記事もぜひ参考にされたい。


  (2) ファイアウォ−ル対応の構成  '96

    --------------------------------------------------------------------------------
    ファイアウォ−ルを介して外と内のメ−ルサ−バで構成する。いわゆるメ−ルリレ−構成。
    --------------------------------------------------------------------------------

   * ホストの構成


Fig. e31

    ※ 電子メ−ルは taro@nix.co.jj というようなアドレスで入って来るものとする。


    hostA のIPアドレス、 それに hostG のバリアネット側インタ−フェ−スのIPアドレ
    スはパブリックなIPアドレスである。他のホストはプライベ−トなIPアドレスで管理
    されることになる。インタ−ネット向けの DNS には、hostA と hostG のみの情報があれ
    ばよい。内部ネットのホスト管理は DNS でも /etc/hosts でもいいが、 管理を簡素化す
    るため /etc/hosts による管理を行うものとする。 hostC、hostD はEWSを想定してい
    て、sendmail によりメ−ルストアから直接メ−ルが配送されるとする。 あるいはメ−ル
    ストアのホストで POP サ−バを稼働させ、POP アクセスにより、 メ−ルストアへ定期的
    にメ−ルを取りに行ってもいい。POP はメ−ルクライアントのホストが、Windows や Mac
    の場合に使われる。Windows や Mac では sendmail は動かない。


   * 電子メ−ルの配送経路

    外部からの電子メ−ルは hostA か hostG のどちらかで受けることになる。hostA で受け
    ると内部ネットのホストに配送するため、hostG ではメ−ルを中継する細工が必要になる。
    hostG で受ければ、そのまま内部ネットのホストに配送することが可能となる。

    しかし、ここでは直接 hostA や hostG から電子メ−ルを各ユ−ザのホストに配送するの
    でなく hostB へ中継し、ここから配送することにする。 このようにメ−ルサ−バを二段
    構えにすることによって、全体のメ−ル配送の信頼性を上げることができる。

    外部からの電子メ−ルは MX レコ−ドに指定した hostA が受けて、すぐ hostB へ中継す
    るようにする。そして hostB から各ホストへメ−ルを配送する。この配送は DNS でなく、
    /etc/hosts を見る sendmail により行うものとする。

    内部ネットから外部への電子メ−ルは、先ずはメ−ルストアに送る。そしてメ−ルリレ−
    に中継し、ここから外部へ配送することになる。

    メ−ルサ−バの二段構えの構成は、メ−ルリレ−のホストのメンテナンスする際に都合が
    いい。hostA の sendmail や named のプログラムをバ−ジョンアップするのに、 一時的
    に hostA を止めたりする。その場合でもメ−ルストアは有効にしておくことができる。


   * メ−ル送受信の記録ログについて  `23/06

    当初 hostA, hostB 共でメ−ルの記録ログを取っていた。特にそう意図して取っていた訳
    でもない。sendmail.cf は CF ツ−ルなどで作成すると、ほぼ間違いなくメ−ル送信のコ
    マンドで、mail -d などとログを出すようになっている。それで、さらに /etc/hosts フ
    ァイルに loghost があると SunOS 4.1.x 並びに Solaris 2.x では /var/log/syslog フ
    ァイルにログを吐き出すようになる。hostB は最初、SunOS 4.1.x を充てていた。ディス
    ク容量が少なく、ログを取るのはしばらくして止めた。止めるのは簡単で /etc/hosts の
    中の loghost を削るだけである。それからは hostA のメ−ルリレ−のホストだけでログ
    を取っている。毎日曜の午前3時10分にログを更新するようになっている。hostA では 
    /var/log/syslog がアクティブで現在のログが取られ、クロ−ンによる更新作業で順に送
    られ syslog.0 から syslog.7 までファイルは残る。 syslog.7 は次の更新で消去される
    ことになる。つまりログは8週分、コンピュ−タに記録されることになる。

    ログは hostB では、今後も取るつもりはない。社内間のメ−ルの送受の記録は hostB で    
    しか取ることができない、社外間のメ−ルの記録は取ることはできる。hostA でも社外間
    の記録を取ることができる。それで十分だろう。特に社内間の記録まで取る必要があると
    は思えない。記録を取るのは、あくまでも何らかのトラブルが起きた場合ヘの備えである。
    8週分残しておけばそれで十分だろう。決して、メ−ル利用者の検閲をするためではない。
    上部から検閲を強要されるようなことがあったら、貴方は技術者の良心に従ってログを消
    去しなければならない。hostA のメ−ルの記録ログは今のところ、hostA にそのまま取る
    ようになっている。hostA はWWWサ−バのホストでもあり外に向いている。DMZ 上に置
    いているとはいえ、より安全を期してログは内部に転送するようにしたらどうか。メ−ル
    のやり取りの相手も、やはり情報漏洩から守るべき対象だろう。 転送する先は hostB で
    もいいだろうし、管理者専用のコンピュ−タでもいいだろう。


    [ hostA メ−ルリレ−での設定 ]

    /etc/syslog.conf
    ---------------------------------------------------------
    |   |
    |mail.debug  ifdef(`LOGHOST', /var/log/syslog, @loghost)
    |   |                                            ↑
                                                     |
    /etc/hosts                                  ―――
    -------------------------------------------|--
    |127.0.0.1       localhost                 ↓
    |202.241.128.3   hostA mail.nix.co.jj  loghost
    |192.168.1.1     hostB

    /var/spool/cron/crontabs/root
    ------------------------------------------
    |10 3 * * 0,4 /etc/cron.d/logchecker
    |10 3 * * 0   /usr/lib/newsyslog        << /var/log/syslog.0 から 7 まで回す。
    |15 3 * * 0 /usr/lib/fs/nfs/nfsfind
    |1 2 * * * [ -x /usr/sbin/rtc ] && /usr/sbin/rtc -c > /dev/null 2>&1

    ・前から分 時 日 月 曜日を表わす。10 3 * * 0 は、毎日曜の午前3時10分。
    ・/etc/rc2.d/S75cron で /usr/sbin/cron デ−モンが動く。


  (3) メ−ル配送の等価テスト  '96
 
    --------------------------------------------------------------------------------
    これは1996年当時、まだインタ−ネット接続する前に、メ−ルリレ−構成のメ−ルサ
    −バの設定をどうすればいいか検討、テストしたものである。ファイアウォ−ルのソフト
    もない状態で、メ−ルリレ−とメ−ルストアの機能に着目し、等価的なテストを行なった。
    --------------------------------------------------------------------------------

   * テスト構成

    DNS は本当は hostA におきたいが、とりあえず hostG におくこととする。これでも上記
    の配置と電子メ−ルの設定に関しては等価である。 hostname はそれぞれドメイン部のな
    い hostG, hostB, hostC, hostD とする。

       メ−ルリレ−       メ−ルストア          メ−ルクライアント
        ---------          ---------        ---------        ---------
        | hostG | named    | hostB |        | hostC |        | hostD |
        ---------          ---------        ---------        ---------
       INDY | .1        Apollo | .2        INDY | .3   Sun 4.1.x | .4
    ------------------------------------------------------------------- 192.9.200.0
       taro, netmaster ユ−ザ              jiro, hana           yosi

         sendmail          sendmail         sendmail         sendmail
         sendmail.cf       sendmail.cf      sendmail.cf      sendmail.cf
         resolv.conf       /etc/hosts       /etc/hosts       /etc/hosts


   * hostG の設定

    /etc/named.boot
    --------------------------------------------------------
    |cache      .                          /etc/named.ca
    |primary    nix.co.jj                  /etc/named.hosts
    |primary    200.9.192.in-addr.arpa     /etc/named.rev
    |primary    0.0.127.in-addr.arpa       /etc/named.local

    /etc/named.hosts                          DNS の管理者用メ−ルアドレス
    ------------------------------------------- | ---------
    |$ORIGIN nix.co.jj.                         ↓
    |           IN  SOA  hostG.nix.co.jj. netmaster.hostG.nix.co.jj. (
    |               1996040101   3600 300 3600000 360000 )
    |           IN  NS   hostG.nix.co.jj.
    |           IN  MX 0 hostG.nix.co.jj.
    |localhost. IN  A    127.0.0.1
    |hostG      IN  A    192.9.200.1        << hostG レコ−ドだけ記述した。

    /etc/named.rev
    --------------------------------------------------------
    |$ORIGIN 200.9.192.in-addr.arpa.
    |           IN  SOA  hostG.nix.co.jj. netmaster.hostG.nix.co.jj. (
    |               1996040101   3600 300 3600000 360000 ) 
    |           IN  NS   hostG.nix.co.jj.
    |1          IN  PTR  hostG.nix.co.jj.   << hostG レコ−ドだけ記述した。

    /etc/named.local
    --------------------------------------------------------
    |$ORIGIN 0.0.127.in-addr.arpa.
    |           IN  SOA  hostG.nix.co.jj. netmaster.nix.co.jj. ( 上記に同じ
    |           IN  NS   hostG.nix.co.jj.
    |1          IN  PTR  localhost.

    /etc/named.ca
    --------------------------------------------------------
    |nix.co.jj.         9999999  IN  NS  hostG.nix.co.jj.
    |hostG.nix.co.jj.   9999999  IN  A   192.9.200.1

    /etc/resolv.conf              /etc/hosts
    --------------------------    --------------------------------------
    |hostresorder local bind      |192.9.200.1  hostG   hostG.nix.co.jj
    |nameserver   192.9.200.1     |192.9.200.2  hostB 


    /etc/sendmail.cf   万能 sendmail.cf.relay
    --------------------------------------------------------
    |DDnix.co.jj
    |Dj$w.$D                << ホスト名はドメイン部を含まない。
    |DMtcp
    |    |                       
    |# -----------------------------------------------------
    |# メ−ルゲ−トウェイのホスト用は、この間コメントにする。
    |# ル−ルセット0が効かないようにするため。
    |# -----------------------------------------------------
    |#R$*<@[$+]>        $#$M $@[$2] $:$1
    |#R$*<@$j>$*        $1<@>$2             
    |#R$*<@$=U.uucp>$*  $1<@>$3                       ------------------------------
    |#R$*<@$D>$*        $1<@>$2                       | 万能 sendmail.cf で メ−ル |
    |#R$*<$*.>$*        $1<$2>$3                      | ゲ−トウェイと書かれている |
    |#R<@>:$*           $@$>29$1                      | ところは、メ−ルリレ−と読 |
    |#R$*<@>            $@$>29$1                      | み替えて下さい。           |
    |#R$*<@$w>          $@$>29$1                      ------------------------------
    |#R<@$j>:$+         $@$>29$1
    |
    |R$*                $:$>9 $1
    |                                            
    |# [ 1. メ−ルゲ−トウェイのホスト用 ]       この2行、下に注意書きあり   
    |#                                              ↓
    |R$*<@$D>        $#$M $@hostB $:$1<@$D> << taro@nix.co.jj を評価する。
    |R$*<@$+.$D>     $#$M $@hostB $:$1<@$D> << netmaster@hostG.nix.co.jj を評価する。
    |
    |R$*<@$+>$*      $#$M $@$2 $:$1<@$2>$3
    |R$+%$+          $@$>29$1@$2            << ここはコメントにするとおかしくなる。
    |R$+             $#local $:$1           << 

    % Mail -v taro@nix.co.jj                << 内部ネット内のユ−ザに電子メ−ルを打
    % Mail -v taro                          << つ。指定はどちらでもよい。


    注.sendmail.cf の注意

    [ 1. メ−ルゲ−トウェイのホスト用 ] のすぐ下の2行を、次のように1行にまとめよう
    としてもできない、R$*<@$*.$D> $#$M $@hostB $:$1<@$D>。 netmaster@hostG.nix.co.jj
    はいいが、taro@nix.co.jj はダメになる。<@$*.$D> ここの $Dは nix.co.jj にマッチし、 
    $* 部は文法的に0個以上のト−クンを評価するはずで、@hostG.nix.co.jj も@nix.co.jj 
    もマッチするはずなのだが、どうもうまくいかない。


   * hostB の設定 : /etc/hosts 制御  ( メ−ルストア、Apollo )

    /usr/lib/aliases
    -------------------------------------
    |taro:taro@hostB.nix.co.jj              << ドメイン部は付けても付けなくても構わ
    |jiro:jiro@hostC.nix.co.jj                 ない。hana:hana@hostC でもいい。
    |hana:hana@hostC.nix.co.jj
    |yosi:yosi@hostD.nix.co.jj
    |netmaster:netmaster@hostB.nix.co.jj    << DNS 管理者用。

    /usr/lib/sendmail.cf   万能 sendmail.cf.relay
    --------------------------------------------------------
    |DDnix.co.jj
    |Dj$w.$D
    |DMtcp
    |    |   
    |# -----------------------------------------------------
    |# メ−ルゲ−トウェイのホスト用は、この間コメントにする。
    |# ル−ルセット0が効かないようにするため。
    |# -----------------------------------------------------
    |R$*<@[$+]>         $#$M $@[$2] $:$1
    |R$*<@$j>$*         $1<@>$2             
    |R$*<@$=U.uucp>$*   $1<@>$3                       ------------------------------
    |R$*<@$D>$*         $1<@>$2                       | 万能 sendmail.cf で メ−ル |
    |R$*<$*.>$*         $1<$2>$3                      | サ−バ書かれているところは |
    |R<@>:$*            $@$>29$1                      | メ−ルストアと読み替えて下 |
    |R$*<@>             $@$>29$1                      | さい。                     |
    |R$*<@$w>           $@$>29$1                      ------------------------------
    |R<@$j>:$+          $@$>29$1                      
    |                                               
    |R$*                $:$>9 $1
    |
    |# [ 2. メ−ルサ−バのホスト用 ]
    |#
    |#R$*<@$+.$D>$* $#$M $@$2 $:$1<@$2.$D>$3    << 初めこれだった。下のに修正した。
    |R$*<@$-.$D>$*  $#$M $@$2.$D $:$1<@$2.$D>$3 << 内部ネットのメ−ルの配送用。
    |
    |R$*<@$+>$*     $#$M $@hostG $:$1<@$2>$3    << メ−ルリレ−にメ−ルを中継する。
    |R$+%$+         $@$>29$1@$2
    |R$+            $#local $:$1 

    /etc/hosts              
    -------------------     /etc/resolv.conf なし。
    |192.9.200.1 hostG      
    |192.9.200.2 hostB  
    |192.9.200.3 hostC      $ /etc/nmconfig -h hostent_ascii  << これらはApollo
    |192.9.200.4 hostD      $ /etc/mkhosts /etc/hosts         << 特有の処置です。


    注.sendmail.cf の注意

    aliases ファイルと sendmail.cf の記述の組み合わせで、 内部ネットへの電子メ−ルの
    配送は次の場合も有効ではある。 内部ネットのメ−ル配送用の部分で <@$->$* の $- は
    ちょうど1個のト−クンを評価する。ここに来るまでル−ルセットを設定したり aliases
    の評価をして、アドレスの書き換えが行われる。 $- のちょうど1個のト−クンは例えば、
    ユ−ザ taro の aliases で taro@hostB になった hostB を評価することになる。よって
    このような設定でも問題はない。

    /usr/lib/aliases
    -----------------
    |taro:taro@hostB    << ドメイン部が入っていないことに注意。これでもOK。


   * hostC の設定 : /etc/hosts 制御  ( メ−ルクライアント、INDY )

    /etc/sendmail.cf   万能 sendmail.cf.relay 
    --------------------------------------------------------
    |DDnix.co.jj
    |Dj$w.$D                << ここ注意。
    |DMtcp
    |FL/etc/local_names
    |DRhostB
    |    |
    |# -----------------------------------------------------
    |# メ−ルゲ−トウェイのホスト用は、この間コメントにする。
    |# ル−ルセット0が効かないようにするため。
    |# -----------------------------------------------------
    |R$*<@[$+]>         $#$M $@[$2] $:$1
    |R$*<@$j>$*         $1<@>$2             
    |R$*<@$=U.uucp>$*   $1<@>$3
    |R$*<@$D>$*         $1<@>$2
    |R$*<$*.>$*         $1<$2>$3
    |R<@>:$*            $@$>29$1
    |R$*<@>             $@$>29$1
    |R$*<@$w>           $@$>29$1      
    |R<@$j>:$+          $@$>29$1        
    |R$*                $:$>9 $1       
    |                                   
    |# [ 3. メ−ルクライアント用 ]      
    |#                                
    |R$=L    $#local   $:$1            
    |R$+     $#$M $@$R $:$1         

    /etc/local_names
    -----------------
    |jiro
    |hana
         
    /etc/hosts                  /etc/resolv.conf 
    --------------------        --------------------
    |192.9.200.3  hostC         |hostresorder local     << 注目。
    |192.9.200.2  hostB  
    |#192.9.200.1 hostG     << hostG, hostD はなくても構わない。メ−ルストアの hostB
    |#192.9.200.4 hostD     << さえ分かれば、電子メ−ルは hostD に届く。


   * hostD の設定 : /etc/hosts 制御  ( メ−ルクライアント、SunOS 4.1.x-JLE )

    /etc/hosts             /etc/local_names     sendmail のプログラムはNIS用のを使う。
    --------------------   -----------------    sendmail.mx では /etc/hosts を見ない。
    |192.9.200.4  hostD    |yosi                sendmail.cf は hostCと同じ内容とする。
    |192.9.200.2  hostB                         /etc/resolv.confファイルはなしにする。


  (4) メ−ルのトラブルと対策  `22/10〜

    --------------------------------------------------------------------------------
    以下 Solaris 2.6 で sendmail-8.12.5 で cf 作成ツ−ル利用による sendmail.cf 使用。
    --------------------------------------------------------------------------------

   * メ−ルストアのディスクが一杯になった場合  
    
    メ−ルの添付は、1メガ位までにお願いしますと、本書の管理者さんは通達を出している
    とは思う。しかし、1クリックで添付できてしまうので、気なしに PowerPoint や Excel 
    などのでかいファイルを Cc で社内の何十人もに送ってしまう輩がいる。あげく、メ−ル
    サ−バのホストの /var パ−ティションの容量が 100% になり、メ−ルの送受信ができな
    くなってしまう。社内のメ−ルは、メ−ルストアの /var/spool/mqueue に入り、 そこか
    ら Cc 展開して /var/mail/katou, satou などと、 各 POP ユ−ザのメ−ルボックスに入
    る。その間に /var が一杯になったら、/var/spool/mqueue にメ−ルが残ったままになる。
    mqueue に、でかいサイズのファイルがあるはずである。これをばっさり消去する。 通常
    なら mqueue には何もファイルはないはずである。メ−ルはすぐに通過する。

    具体的な処置について。ディスプレイに "... NOTICE: alloc: /var: file system full"
    というメッセ−ジが5秒間隔ぐらいで出るようになったら、 /var の容量が0になってい
    る。一応 # df -k でディスクの状態を確認してみる。 /var/adm/messages も見てみよう。
    次に # ps -e で動いている sendmail を全部止める。 これで "file system full" のメ
    ッセ−ジが出なくなり、コマンドを入れやすくなる。 そして /var/spool/mqueue の中を
    見て、でっかいサイズのファイルであるメ−ル本文と対応する制御ファイルを消す。溜ま
    ったメ−ルを # /usr/lib/sendmail -q で吐き出し、 # /usr/lib/sendmail -bd -q15m &
    で通常稼働に戻す。残留するメ−ルは次のメ−ルチェッカ−など使って処分する。

    # cd /var/adm
    # grep full *
    messages:Apr 13 04:06:19 hostB unix: NOTICE: alloc: /: file system full
    messages:Apr 14 04:05:38 hostB unix: NOTICE: alloc: /: file system full


   * メ−ル送信の取り消し

    メ−ルを運用していると、メ−ル送ってしまったけど、やはり止めにしたい。何とかでき
    んかと言う輩もでてくる。社内間のメ−ルなら、各ユ−ザのメ−ルは、各人が POP3 アク
    セスして取り込むまで、/var/mail/xxx ファイルにメ−ルが溜まっている。メ−ルは一連
    のファイルで、その中から不本意なメ−ルだけ削除したい訳である。このような要望にピ
    ッタリのソフトがあった。メ−ルチェッカ−という。ベクタ−のサイトなど見ると、一杯
    フリ−ソフトもあるようだ。メ−ル受信の POP3 アクセスを応用したソフトウェアである。
    まさに、Windows 用メ−ルチェッカ− 3.0 というフリ−ソフトが目についた。 紹介文に
    は "複数の POP サ−バ−にアクセスし、メ−ルをダウンロ−ドする事無く、 メ−ルの受
    信状態を手動または自動で確認することができます。また、簡単に受信メ−ルの内容をプ
    レビュ−したり、不要な受信メ−ルの削除が行えます" と書いてあった。


   * メ−ルリレ−のディスクが一杯になった場合
    
    頭隠して尻隠さずみたいな話しである。メ−ルストアで大きなサイズのメ−ル対策をして
    安心していたら、外からだってでかいメ−ルは来る。メ−ルリレ−が受け切らないと、エ
    ラ−メ−ルになり、約5日間相手は再送を繰り返す。その間、定期的に外から過大なトラ
    フィックが来ることになる。数メガのメ−ルが5〜6本だけで専用線 128 Kbps の帯域は、
    数時間一杯になっていた。 訳がわからず DoS 攻撃ではと思ったが、何のことはない自社
    の出先または取り引き先から、Excel のデ−タを何人かに送っていたというようなことだ
    った。社内から携帯電話へのメ−ル転送でも、トラブルが起こった。携帯側ではメ−ルサ
    イズの制限をしているのだろうが、5メガとか大き過ぎるとエラ−になり、やはりメ−ル
    リレ−が再送することがあった。これでも定期的に外に向かって過大なパケットを何日も
    送り続ける。あわや、自サイトがSPAMの踏台にされていると危惧した次第である。


   * メ−ルリレ−に溜まったメ−ルの内容を確認してみる

    メ−ルリレ−の mqueue に次のようにファイルが溜まっているとする。dfxxx がメ−ル本
    文、qfxxx はメ−ル制御のファイルである。本文が英語だけ ASCIIなら、# cat dfxxx で
    表示できる。しかし日本語の場合は、ISO-2022-JP という変換がされているので、読むこ
    とはできない。そこで、dfxxx ファイルを自分宛にメ−ルを送れば、メ−ルソフトで読む
    ことができる日本語にして表示してくれる。

    # cd /var/spool/mqueue; ls -l
    -rw-------   1 root     smmsp       3682 Jan 15 08:10 dfh0ENAdXA020172
    -rw-------   1 root     smmsp       1179 Jan 15 14:23 qfh0ENAdXA020172

    # cp dfh0ENAdXA020172 kkk
    # /usr/ucb/mail -s "test" katou@nix.co.jj < kkk
                
    自分の普段使っているメ−ルソフト、Windows の Netscape でも INDY の Zmail でも。
    -------------------------------------------
    |From:    Super-User 
    |Date:    Wed Nov  4,  7:34am +0900
    |To:      katou@nix.co.jj
    |
    |   ちゃんと読める日本語になって表示される

    ※ メ−ルコマンドには /usr/bin/mail と UCB mail がある。UCB mail は/usr/ucb/mail
       または /usr/ucb/Mail で、/usr/bin/mailx へのリンクになっている。

       -r-x--s--x   1 bin  mail   64376 Jul 16  1997 /usr/bin/mail
       -r-x--s--x   1 bin  mail  127540 Jul 16  1997 /usr/bin/mailx


   * でかいメ−ルへの対策をする

    [ メ−ルストアのホストは ]

    InterScan VirusWall の機能を利用してメ−ルのサイズに制限を設ける。InterScan から
    どんなメッセ−ジのメ−ルが出るか、一度確認しておくこと。


    [ メ−ルリレ−のホストは ]

    こっちでは sendmail で、メ−ルのサイズに制限は設けない。これまでのままとする。と
    もかく /var パ−ティションが、だいたいにおいて容量が少ないのだ。Solaris 2.6 では 
    /usr/spool は /var/spool へのリンクになっている。 外付けのディスクを増設し、リン
    クを張るようにしよう。動いている sendmail を全部止め、シンボリックリンクを張って
    再び sendmail を起動させる。/var/spool/clientmqueue にも、何かメ−ルの制御デ−タ
    のファイルができるが、そのままでいいだろう。 clientmqueue ディレクトリは cf ツ−
    ルで作成した sendmail.cf が使う。

    # cd /usr; ls -l spool
    lrwxrwxrwx   1 root     root  ...  spool -> ../var/spool  

    # cd /var/spool; ls -l                                    
    drwxrwx---   2 mmsp     smmsp        512 Jan 15 14:27 clientmqueue
    drwxr-xr-x   4 root     sys          512 Jul 18  1999 cron
    drwxr-xr-x   2 uucp     uucp         512 Jul 18  1999 locks
    drwxrwxr-x   7 lp       lp           512 Jul 27  1999 lp
    drwxr-xr-x   2 root     bin         2560 Jan 15 14:48 mqueue
    drwxrwxrwt   2 bin      bin          512 Jul 18  1999 pkg
    drwxr-xr-x   2 root     lp           512 Jul 18  1999 print

    # cd /usr1                              << 外付けのディスク /usr1 とする。パ−ミ
    # mkdir mqueue                             ションを合わす、# chmod 755 mqueue や
                                               # chgrp bin mqueue をやること。
    # cd /var/spool
    # mv mqueue mqueue.old                  << ファイルが残っていれば、念のため残す。
    # ln -s /usr1/mqueue /var/spool/mqueue  << シンボリックリンクを張る。



    [ こっちの釘を叩いたらあっちの釘が出てきた ]

    まるでいたちごっこみたいな話で。InterScan でメ−ルのサイズを3メガぐらいに制限し
    たら、メ−ルを分割する輩が今度は現われた。それはそれで、一概に悪いとは言えないの
    だがとんでもないケ−スが。3メガ弱の添付ファイルを Outlook Expressで分割の指定を
    すると一体どうなるか。分割のサイズはデフォルト値が 60 KB になっている。 意味がや
    や取りにくいのだが、3000/60=50 で、つまり50個のメ−ルになるのである。 それを何
    か変だなと思いつつ数回、繰り返したら100や200のメ−ルのSPAMもどきになっ
    てしまうのだ。因み、メ−ルの分割機能は Netscape Messenger にはないみたいである。

    Outlook Express の [ツ−ル]->[アカウント]->[メ−ル]->[プロパティ]-> 
    で例えば katou のプロパティという画面を見る。
    ---------------------------------------------------
    | 送信
    | □ 次のサイズよりメッセ−ジが大きい場合は分割する
    |    -----------                 ↑
    |    | 60      | KB       意味が取りにくいです。60KB 以上のメ−ルは、60KB のファ
    |    -----------          イルに分割して送ります。200KB なら 60KBが3個と 20KBが
    |                         が1個のメ−ルにして送ります。こんな風にしてくれんかな。


   * トラブルの原因の調査

    計らずも同じような時期に、メ−ルの発信と受信で大きなサイズのメ−ルによるトラブル
    が起こった。定期的にインタ−ネットへのアクセスがやたら遅くなることから発して、一
    体何が原因何だろうと調べることになった。FireWall-1 の SNMPエ−ジェント機能を利用
    して MRTG で、ファイアウォ−ル・ホストのイ−サネット・インタ−フェ−ス3ヵ所のパ
    ケットの出入りを見ることにした。これで、外からのパケットなのか内からのパケットな
    のか、DMZ なのか判断することができた。しかし MRTG では、どういうパケットなのかま
    では分からない。 次に内部ネットまたは DMZ ネットにパソコンをおいて Sniffer Basic
    でIPアドレスでパケットの流れを見ることにした。 更に Sniffer Basic で、これはと
    いうパケットをキャプチャした。ただ時なしにキャプチャしても何も分からない、定期的
    に出るトラフィックの始まりを見定め、セッションの頭からキャプチャしなければならな
    い。ここまできて、ようやくパケットの中味を明らかにすることができ、正体は大きなメ
    −ルで、誰から誰へ送っているかまで知ることができた。結構、大変である。


  (5) メ−ル配送のテスト環境を確認   `24/09

   * テスト環境の確認

    2004年9月、必要があってメ−ルサ−バのテスト環境が必要になった。 Apollo コン
    ピュ−タを2台用いて、"(3)メ−ル配送の等価テスト" も見て、早速その環境を作ろうと
    したのだが、結構手間どった。sendmail.cf などの設定は、やはりかなり微妙である。そ
    れで改めて、動作を確認したところの設定を記載することにした。 Apollo のマシンに限
    らず、このようなメ−ルサ−バのテスト環境があると、何かと便利である。読者の方々も
    一ついかがであろうか。パソコンも1つ使って、パソコンのメ−ルソフトから、これらメ
    −ルサ−バに SMTP アクセスし、メ−ルを送信できる。では小生はこの時期、何をテスト
    したか。Linux に InterScan VirusWall を入れ、これらメ−ルサ−バの間において、 メ
    −ルの中継テストを行なったのである。InterScan VirusWall のパタ−ンファイル980
    番問題というのがあって、急遽対応すべく検討した訳である。
                                    
       メ−ルストア         メ−ルリレ−  ※ Apollo に入っていた sendmail を使った。
       --------             --------            
       |mstore| ユ−ザ      |mrelay|      node_aaaa $ /etc/ifconfig eth0 192.168.1.1
       -------- katou       --------      node_bbbb $ /etc/ifconfig eth0 192.168.1.3
           | .1                 | .3
    -------*--------------------*------ 192.168.1.0
    hostname は node_aaaa   node_bbbb

 
   * ホスト aaaa の設定

    //node_aaaa/etc/hosts       $ /etc/nmconfig -h hostent_ascii 
    -----------------------     $ /etc/mkhosts /etc/hosts
    |127.0.0.1    localhost     これら /etc/hosts ファイルを使う場合の Apollo のおま
    |192.168.1.1  mstore        じない。
    |192.168.1.3  mrelay

    //node_aaaa/usr/lib/sendmail.cf
    ----------------------------------------
    |DDnix.co.jj
    |Dj$w.$D
    |DMtcp
    | 
    |# [ メ−ルクライアント用 ]
    |#
    |FL/etc/local_names
    |DRmstore
    |
    |# [ 2. メ−ルサ−バのホスト用 ]
    |R$*<@$+.$D>$* $#$M $@$2 $:$1<@$2.$D>$3
    |R$*<@$+>$* $#$M $@mrelay $:$1<@$2>$3
    |R$+%$+     $@$>29$1@$2
    |R$+        $#local $:$1
    |
    |# [ 3. メ−ルクライアント用 ]      /etc/local_names
    |R$=L       $#local $:$1            ----------------
    |R$+        $#$M $@$R $:$1          |katou

    $ /usr/ucb/newaliases
    $ /usr/lib/sendmail -bd -q15m &


    [ テスト0 ]

    root $ /usr/ucb/mail -v katou@nix.co.jj
    test
    .
    EOT
    katou@nix.co.jj... Connecting to  (local)...
    katou@nix.co.jj... Sent


    katou $ /bin/mail
    From daemon Thu Sep 23 13:47:24 2004
    Received: by node_aaaa.nix.co.jj (5.65c/nix.1.0)
        id AA02844; Thu, 23 Sep 2004 13:47:23 +0900
    Date: Thu, 23 Sep 2004 13:47:23 +0900
    From: root
    Message-Id: <200409230447.AA02844@node_aaaa.nix.co.jj>
    To: katou@nix.co.jj

    test0

    ? d


   * ホスト bbbb の設定

    //node_bbbb/etc/hosts       //node_bbbb/etc/resolv.conf
    -----------------------     ---------------------------
    |127.0.0.1    localhost     |nameserver 192.168.1.3
    |192.168.1.1  mstore
    |192.168.1.3  mrelay        $ /etc/nmconfig -h hostent_bind  << named を使う場合
                                                                    の Apollo のおま
    //node_bbbb/usr/lib/sendmail.cf                                 じない。
    ----------------------------------------
    |DDnix.co.jj
    |Dj$w.$D
    |DMtcp
    |   |
    |# -----------------------------------------------------
    |# メ−ルゲ−トウェイのホスト用は、この間コメントにする。
    |# -----------------------------------------------------
    |#R$*<@[$+]>        $#$M $@[$2] $:$1
    |#R$*<@$j>$*        $1<@>$2             
    |#R$*<@$=U.uucp>$*  $1<@>$3
    |#R$*<@$D>$*        $1<@>$2
    |#R$*<$*.>$*        $1<$2>$3
    |#R<@>:$*           $@$>29$1
    |#R$*<@>            $@$>29$1
    |#R$*<@$w>          $@$>29$1
    |#R<@$j>:$+         $@$>29$1
    |
    |R$*  $:$>9  $1
    |    
    |# [ 1. メ−ルゲ−トウェイのホスト用 ]
    |R$*<@$D>    $#$M $@mstore.$D $:$1<@$D>     << ここ2ヵ所 mstore.$D にしているこ
    |R$*<@$+.$D> $#$M $@mstore.$D $:$1<@$D>     << とに注意。ただの mstoreだと、以下
    |                                              のようになり、mstore ホストにメ−
    |R$*<@$+>$*  $#$M $@$2 $:$1<@$2>$3             ルを送ることができない。
    |R$+%$+      $@$>29$1@$2
    |R$+         $#local $:$1                      ↓

        node_bbbb $ /usr/ucb/mail -v katou@nix.co.jj
        test
        .
        EOT
        katou@nix.co.jj... Connecting to mstore (tcp)...
        katou@nix.co.jj... 550 Host unknown (Authoritative answer from name server)

    /etc/named.boot 
    ----------------------------------------------------
    |cache      .                       /etc/named.ca
    |primary    nix.co.jj               /etc/named.hosts
    |primary    0.0.127.in-addr.arpa    /etc/named.local
    |;primary   1.168.192.in-addr.arpa  /etc/named.rev  << これはなくてもメ−ル
                                                           の送受信には関係ない。
    /etc/named.ca
    -------------------------------------------------
    |.                9999999 IN NS  hostA.nix.co.jj.
    |hostA.nix.co.jj. 9999999 IN A   192.168.1.3

    /etc/named.hosts
    -------------------------------------------------------------
    |@          IN  SOA hostA.nix.co.jj. katou.hostA.nix.co.jj. (
    |               1 3600 3600 3600 3600 ) ; 
    |           IN  NS  hostA.nix.co.jj.
    |           IN  MX 1 mrelay.nix.co.jj.
    |localhost. IN  A  127.0.0.1
    |hostA      IN  A  192.168.1.3
    |mrelay     IN  A  192.168.1.3
    |mstore     IN  A  192.168.1.1

    $ /usr/ucb/newaliases
    $ /usr/lib/sendmail -bd -q15m &
    $ /etc/named &


   * テスト1

    node_aaaa $ /usr/ucb/mail -v kkk@nix.con    << どこか別なドメイン名の適当なメ−
    test1                                          ルアドレスにメ−ルを送ってみる。
    .

    node_bbbb $ ld /usr/spool/mqueue
    dfAA01714  qfAA01714    << ここにともかくメ−ルが溜まれば、ホスト aaaa から送信
                               できたことが分かる。dfAA01714 はメ−ルの本文である。

   * テスト2

    node_bbbb $ /usr/ucb/mail -v katou@nix.co.jj
    test2
    .

    node_aaaa $ /bin/mail   << katou でロッグイン、メ−ルが届いている。


   * ホスト bbbb で named を動かさない場合

    [ 設定その1 ]

    //node_bbbb/etc/hosts                   $ /etc/nmconfig -h hostent_ascii 
    -------------------------------------   $ /etc/mkhosts /etc/hosts
    |127.0.0.1    localhost                 設定その2でも、これらを同様やること。
    |192.168.1.1  mstore mstore.nix.co.jj
    |192.168.1.3  mrelay                    sendmail.cf は同じで、mstore.$D のまま。
    |192.168.1.9  nix.con   
           ↑
    適当にこのように入れておけば、ホストaaaa から ???@nix.con 宛に、とりあえずメ−ル
    を出すことはできる。node_bbbb の /usr/spool/mqueue にメ−ルは溜まり、 メ−ルの制
    御ファイル qXXX に、"Connection timed out during user open with nix.con" と出る。 

    [ 設定その2 ]

    //node_bbbb/etc/hosts       //node_bbbb/usr/lib/sendmail.cf
    -----------------------     --------------------------------------
    |127.0.0.1    localhost     |   | 
    |192.168.1.1  mstore        |# [ 1. メ−ルゲ−トウェイのホスト用 ]
    |192.168.1.3  mrelay        |R$*<@$D>    $#$M $@mstore $:$1<@$D>
    |192.168.1.9  nix.con       |R$*<@$+.$D> $#$M $@mstore $:$1<@$D>