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>