rita.karing.jpに関する技術情報
一応、技術情報ということですが、主な内容は、私のサーバー立ち上げ奮戦記です。ADSLは、Yahoo! BB、OSは、Vine Linux 2.5、ハードは、ラップトップのHITACHI FLORA 3010CT(486DX4/75MHz)です。ほんとうのところ、自前のサーバーはもとより、ADSLさえ導入する気はなかったのですが、諸般の事情により、メールサーバは自分でやるよりないかという結論に達しました。もちろん、個人でサーバーを立てるメリットなどというものは存在しないのですが、この半年間の個人的な事情により、流れには逆らえないという事態に陥ってしまったのでした。
1. ADSL環境
2. OSのインストール
3. Ethernet PCカードについて
4. パーティション構成
5. ハードディスクの設定
6. pcmcia
7. ルータの設定
8. ネットワーク構成
9. 各種サーバー、デーモンの設定
10. 終りに


1. ADSL環境

ADSLは、Yahoo! BBです。最初は、生理的にグローバルIPがほしかったため、割高でもフレッツADSLにしようと思い、実際、申し込んだのですが、二週間たっても何の連絡もありませんでした。その間、選択肢から完全にはずしていたYahoo! BBがグローバルIPを割り当てることを知り、この際なのでYahoo! BBにすることにしました。ちなみにNTTがやっと連絡をくれたのは申し込んでから三週間後のことです。対して、Yahoo! BBの十営業日宣言は嘘ではないようで、申し込んでから七営業日で開通しました(2002.5/25に申し込み、6/4開通)。

Yahoo! BBは、ADSLモデムを介してDHCPによりグローバルIPを取得するようになっています。また、他の主なADSLサービスとは異なり、PPP系の実装も採用しておらず、netmask 255.255.254.0のサブネットに組み込まれるようです。PPP系の実装を採用していない分、いくらかは速度的に有利だと思われます。半面、Yahoo! BBは、Annex Aを採用しており、その他の主なADSLサービスが採用しているAnnex CよりもISDN回線からの干渉を受けやすいとのことです。うちの場合、速度は、収容局までの線路距離長2250m、伝送損失-35dbの環境において、実測下り2Mbps強、上り620kbps強で安定しています。これは、Yahoo! BBが事前に予測した推定速度とほぼ同じです。かなり街中(山の手線内)なのでISDN回線との干渉が懸念されるし、なんと言っても距離のことを考えると、まぁ、こんなところなのでしょう。とりあえず、不満はありません。

また、yahoo! BBの予測には、使用する機種のCPUパワーによって、その速度に影響が出る旨、記載されていましたが、少なくとも私の環境ではPentium II 400MHzとPentium 133MHzでは、認識できる差は生じていません。これが486DX4/100MHzになると、その差は歴然となり、使用するソフト、様々な不確定要素でその速度はきわめて不安定です。具体的な統計をとったわけではないので、はっきりしたことは言えませんが、Linux上でNetscapeを使った場合、その速度はおよそ1Mbps強で、ダウンロードするファイルがより大きくなると、それにしたがって2Mbpsに近づいていきます。しかし、ファイルの大きさが小さく、かつ数が多いときは、その速度はまったく予測不能です。と言うわけなので、486機をADSLにつないでクライアントマシンとして使用するメリットは小さいと思われます。(いまさら、誰もやらないと思いますが…)。

さて、クライアントマシンとしては不適格な486機もサーバーとなれば、話は別です。ルータとなれば、なおさらです。Yahoo! BBは、DHCPでグローバルIPをふってくれるタイプなので、とりあえず、ルータとサーバーを兼任させることにしました。サーバーがグローバルIPでさらしモノになるのは、多少不安ではありますが、ルータとサーバーとモデムの三台を常時稼働させるのもなにか気が引けるので、ひとまずは、注意深く試験運用ということでいきたいと思います。

2. OSのインストール
OSは、Vine Linux 2.5です。Vineを選んだ理由はそれしか知らないからで、他意はありません。Vine Linux 2.5はkernel 2.4、XFree86-4.2という私にとっては未知の世界なので少し不安でした。ただそれだけならさほどでもなかったのですが、ラップトップ、pcmciaというモノも始めてだったので、なにかこう、パソコンをさわりはじめた頃の気持ちを思い出してしまいましたねぇ…。まぁ、そんな話はどうでもいいんですが、FLORA 3010CTには、CD-ROMがついてないので、インストールはネットワークにつないでのftpインストールです。なお、オリジナルのCD-ROMに収録されているpcmcia用のインストーラ起動用FDイメージは、カードバスに対応していないと使えないそうなので、古い機種にも対応した新しいFDイメージをVineのftpサイトからもってくる必要がありました。他にもインストール時の不具合として、ブートディスクの作成に失敗することが知られていますので、ブートディスクが必要な人は、Vineのサイトに掲載されている解決法を実行する必要があるでしょう。

また、Vine 2.5には、ある一定量のRAMを積んでいないとインストールさせてくれないという悪癖があります。境界がどこなのかは試してませんが、16MBではダメで、32MBならばダイジョブです。最初、サーバー機は、Pentiumにする予定でしたが、私の予算内ではなかなか32MBという条件を満たしてくれるものが見つかりませんでした。まぁ、いざとなれば小細工すればいいかとは思っていたのですが、ADSLが開通して間もなくですし、はやる心はできるだけ面倒は避けたいと言っています。そこに現れたのがこのFLORA 3010CTでした。なんと、こいつは486のラップトップのくせに32MBなどという信じられない大容量のRAMを積んでいたのです。状態もなかなかで、外観的な傷みもないようです。値段は、電源付きで2980円。場合によっては手を出してはいけない類に属すると言っても過言ではないちょっと危ない値段ですが、あまり変なモノは売らない店だし、またWindows 95がデモ起動していたので、安心して買うことができました。ちょっとした問題は、ハードディスクが340MBと小さかったことで、これはしかたがないので、1.4GBに交換してやることにしました。これは、1680円でした。

HITACHI FLORA 3010CT
CPU 486DX4/75MHz
RAM 32MB
HDD HITACHI_DK225A-14 1.4GB
Video chip WD90Cxx
LCD 9.8inch TFT 256色
on board Sound Soundbraster Pro 互換
on board SCSI aha1510 (no pcmcia)
pcmcia Vadem VGー468
Ethernet PCカード Fujitsu FMV-J182A
Ethernet PCカード Logitec  LPM-LN20T

3. Ethernet PCカードについて

次に、二枚のEthernet PCカードです。だいたい、秋葉原で一枚800円ぐらいです。動作実績有りかつ入手しやすいということで、一枚は富士通のFMV-J182Aにしました。ここで富士通のサイトに行って、FMV-J182Aについて調べてみると、なんと二枚同時には使えないと書いてあります。この制限がドライバに依存するものなのかハードに依存するものなのかはわかりませんが、いずれにせよリスクを背負うつもりはないので二枚目は別なカードを選ぶことにします。二枚目は、Logitec LPM-LN20Tにしました。NE2000互換のありがちなものです。Linuxのドライバは、pcnet_csです。Linuxでも使え、秋葉原で入手できる(ゴミのような)Ethernet PCカードでもっとも多いのが、このpcnet_csのカードです。次に多いのがfmvj18x_csを使うもので、それらはおもに日本のメーカーの製品です。ただし、日本製ならばfmvj18x_csという逆の論理は成立しません。台湾系のカードは、ほぼすべてpcnet_csなので、はっきりした判断ができないときは目安になると思います。ちなみに、確実な情報がなければMADE IN USAは避けた方が無難です。個人的に買ってみた動作実績不明のMADE IN USAなカードはすべて動きませんでした。

さて、FMV-J182Aの二枚同時使用にメーカー側は難を示しているわけですが、では、pcnet_csではどうなのでしょうか、当然の疑問です。と言うことでやってみたところ、pcmcia関係の各種登録情報に問題はみられないものの、/proc/interruptsには一つしかEthernet PCカードが登録されないという結果になりました。cardctl configではちゃんと登録されていますが、実際、インターフェイスは有効になりません。ただ、この結果は厳密に検証したわけでもなく、不具合修正のためになんらかの方策をとったわけでもないので、この結果をもってpcnet_csの同時使用の可否を議論することは早計です。しかし、リスクを避けるのならやはり異なるカードを使った方が無難だと思います。

残念ですが、実はもう一つだけ、FMV-J182Aについて書かねばなりません。FMV-J182Aは現在、このサーバーで問題なく稼働中ですが、cardctl statusは以下のように表示されます。

Socket 0:
  5V 16-bit PC Card
  function 0: [ready]
Socket 1:
  5V 16-bit PC Card
  function 0: [busy]
Socket 1がFMV-J182Aです。readyとなるべきところが、busyになっています。これは、別のFMV-J182Aでも同じ結果となりました。また、ほかの互換品では、このような結果にはなりません。ちゃんとreadyと表示されます。今のところなんら不具合はないのですが、いい気持ちはしませんし、本当にbusyになったときは、不具合の原因究明をはばむ要因となることは確実です。機会があったら交換したいとは思っています…。

4. パーティション構成

さぁ、ハードもソフトも揃ったところで、やっとインストールです。anonymousなftpサーバを用意し、LANケーブルをつなぎフロッピーディスクを差し込んで起動です。最初は実験のつもりだったので、Xもインストールしてみました。サーバー関係、ネットワーク関係を入れて、だいたい900MB弱といったところでしょうか。ハードディスクは1.4GBもあるのであまり深く考えませんでした。セキュリティー的には余計なものは入れない方がいいのでしょうが、かといって柔軟なオプションがあるわけでもないし、かといって個々のパッケージを選択するでインストールしていたら、いつ終るかわかりません。一旦、インストールしてから取捨選択した方がはるかに現実的でしょう。ちなみにXは、ダメでした。WD90Cxxのどれかのはずなのですが、どれもちゃんと認識してくれません、残念です。あと役に立たない情報ではありますが、3010CTのトラックボールはシリアルで、/dev/ttyS0(COM1)を使っているようです。

インストールにおける最初の問題は、パーティション設定だと思います。私は、1.4GBを/bootに30MB、Swapに64MB、残りを/としました。さて、以下は現在のfstabです。Swapはありません。RAMが32MBもあれば、負荷のあまりかからない個人のサーバーでは、Swapなんて必要はありません。ただ、インストール中は、Swapがないとインストーラが首を縦にふってくれないので設定しました。 

LABEL=/  ext2  defaults,noatime  1 1
LABEL=/boot /boot ext2 defaults,noatime 1 2
none /dev/pts devpts gid=5,mode=620  0 0
none /proc proc defaults 0 0
/dev/hda3 /tmp ext2 defaults,nodev,noexec 1 2
/dev/fd0  /mnt/floppy auto noauto,owner,kudzu 0 0

 Swapを設定しない理由はディスクアクセスを極力減らすためです。以下は、freeの結果です。
 

合計 使用済 空き領域 共有領域 バッファ キャッシュ
Mem: 29688 24300 5388 0 1316 10186
-/+ :
12168 17520


Swap: 0 0 0


どうですか?Swapがなくてもダイジョブそうでしょ?キャッシュに10MBを使っていても、なんと開き領域がまだ5MBもあるではありませんか!メモリのやりくりこそはOSの真髄であり、あればあるなりに、なければないなりにうまくやってくれるものです。最近、巨大なSwapパーティションを確保している人をたまに見かけますが、資源の無駄です。おそらく、なにかのマニュアルに書いてあるSwapは実メモリの二倍程度が適切というような言葉を鵜のみにした結果なのでしょう。標準搭載の実メモリが64MB以下の頃ならば、その論理は確かだとは思うのですが、今時、メモリの標準値なんて不確定です。実メモリ512MB、Swap1GBのマシンというのはどうなんでしょうか?入門書などでは、実メモリ+Swapの総量で考えたほうがいいのではないかなと思ったりします。…そう言えば、Swapの128MB制限はいつからなくなったんだろう?

ディスクアクセスを減らし、できるだけ静かなサーバーを構築することは私にとって第一の命題です。なにしろ狭い部屋の中で同居しているので、音は以外に気になりますし、また静音は直接、節電にもつながるので個人のサーバーでは最重要課題だと思います。/と/bootのオプションに指定されたnoatimeは、アクセスタイムの更新を停止します。ここで言うアクセスタイムとは、単純に言えば、ファイルを開いて中を見た時間のことです。通常、ファイルを読むだけでも、このatimeを更新するため、ディスクへの書き込みが生じてしまいます。これを止めようというわけです。我々が通常、ファイルマネージャやlsを介して見るのは、mtime(modified time)とctime(change time)です。ファイルのデータになんらかの修正がくわえられたときはmtimeとctimeが更新され、ファイルのステータスにのみ変更がくわえられたときはctimeだけが更新されます。ですので、ほとんどのプログラムは、atimeを利用しておらず、その更新(ディスクへの書き込み)を止めてしまっても問題はないだろうというわけです。このオプションにより当然、その分、ディスクアクセスが軽減します。

さて、ほとんどのプログラムは、atimeを利用していないと書きましたが、『ほとんど』ということは例外が存在します。tmpwatchです。不勉強でその他は知りません。このtmpwatch、誰からも相手にされなくなったファイルを削除してくれる便利ツールなのですが、その判定にatimeを利用しています。tmpwatchは、Vine 2.5では、デフォルトでcron.dailyから起動されています。ここでどうするか、ちょっと思案です。tmpwatchなんて別に止めてしまってもかまわないし、また、そのままほっておいてもさほど問題にはならないとは思ったのですが、ちょうどはずしてしまったSwapスペースがありました。tmpwatchがsweepする/tmpは、元Swapの/dev/hda3を通常通りmountしてやることに決定です。また、tmpwatchは/tmpだけ見ているわけではないので、tmpwatchの管轄下にある他の場所(/etc/cron.daily/tmpwatch参照)もこの/dev/hda3上の/tmpから適当にリンクをはって完成です。ついでに、nodev、noexecも付け加えておけば、セキュリティー的にもいいでしょう、まぁ、気休めですが。

5. ハードディスクの設定

今回、ハードディスクの設定にも少々悩みました。参考にしたBattery Powered Linux Mini-HOWTOが実状からはちょっと古いものになっていたからです(ハード的には、up to dateなのですが…)。HOWTOどおり、hdparm -S で一定時間ハードディスクにアクセスがない場合はハードディスクを止めてしまおうと考えましたが、なかなかうまくいかなかったのです。この設定を有効に機能させるには、Linuxが通常30秒毎に行うバッファのフラッシュの設定を変えねばなりません。ここでは、バッファのフラッシュは一時間毎に実行するよう設定し、ハードディスクは二分間アクセスがなければ停止するような設定にしようとしています。Battery Powered Linux Mini-HOWTOによれば、update -s 3600 -f 3600 とすればバッファのフラッシュは一時間毎になるはずなのですが、これを実行してもなんの変化もないのです。manや-hにも手がかりはありません。同じような情報を繰り返してくれるだけです。

ところで、updateは単なるシステムコール/bdflushのラッパーです。システムコールの実装が変わればその実装もまた変わってしまいます。折しも、kernelは、はじめての2.4。というわけで、原因がわかりました。最初がupdateが出してくるusageで、次は2.4.18-0vl3の/usr/src/linux/fs/buffer.cの一部です。

usage: /sbin/update [-012345678] [-d] [-s sync-delay] [-f flush-delay]
  -0  Max fraction of LRU list to examine for dirty blocks
  -1  Max number of dirty blocks to write each time bdflush activated
  -2  Num of clean buffers to be loaded onto free list by refill_freelist
  -3  Dirty block threshold for activating bdflush in refill_freelist
  -4  Percentage of cache to scan for free clusters
  -5  Time for data buffers to age before flushing
  -6  Time for non-data (dir, bitmap, etc) buffers to age before flushing
  -7  Time buffer cache load average constant
  -8  LAV ratio (used to determine threshold for buffer fratricide)
  -d  Display kernel parameters
  -f  Call flush this often (in seconds)
  -h  Give this help
  -s  If acting as update then call sync this often (in seconds)

ここからが、2.4.18-0vl3のbuffer.cの一部です。

union bdflush_param {
        struct {
                int nfract;     /* Percentage of buffer cache dirty to activate bdflush */
                int dummy1;     /* old "ndirty" */
                int dummy2;     /* old "nrefill" */
                int dummy3;     /* unused */
                int interval;   /* jiffies delay between kupdate flushes */
                int age_buffer; /* Time for normal buffer to age before we flush it */
                int nfract_sync;/* Percentage of buffer cache dirty to activate bdflush synchronously */
                int dummy4;     /* unused */
                int dummy5;     /* unused */
        } b_un;
        unsigned int data[N_PARAM];
} bdf_prm = {{40, 0, 0, 0, 5*HZ, 30*HZ, 60, 0, 0}};

/* These are the min and max parameter values that we will allow to be assigned */
int bdflush_min[N_PARAM] = {  0,  10,    5,   25,  0,   1*HZ,   0, 0, 0};
int bdflush_max[N_PARAM] = {100,50000, 20000, 20000,10000*HZ, 6000*HZ, 100, 0, 0};

2.2のbuffer.cも見てみると、やはり2.4では一部、パラメータの仕様に変更がくわえられているようです。というわけで、ラッパールーチンの方で値を調整するような、-sや-fは無効になったのだと思います、まぁ、よくわかりませんが…。ということで、4番目(というか5番目)のパラメータはkupdateの起動間隔で、5番目(というか6番目)のパラメータに設定された時間を経過したバッファをフラッシュします。ここでは、バッファにたまっている時間を一時間程度にしたいので、kupdateの起動間隔を一時間毎にして、-5は120000にします。

update -4 360000
update -5 120000

これで、一時間毎に20分以上経ったバッファをフラッシュするようになったのでした、たぶん…。

最終的な設定は、

hdparm -S 24 /dev/hda        #24x5=120秒、二分間ハードディスクにアクセスがないと停止する。
update -4 360000             #kupdateの起動は一時間毎。
update -5 120000             #20分経過した通常のバッファはフラッシュする。

こんな感じでしょうか。この設定だとhttpdやftpdなど既存のファイルを要求するようなリクエストを出さない限り、そうそうハードディスクは動きません。静音どころかほとんど無音になります。32MBのRAMは伊達ではないようです。ルータとしてのみ使ってる場合は、まるで死んでいるようです。あまり、参考にはならないかもしれませんが、通常稼働しているホストとこのサーバーの/proc/interruptsを比べてみると、以下のようになります。
 
 Vine 2.0 通常設定  rita.karing.jp
  0:    1575123          XT-PIC  timer
  14:     65937          XT-PIC  ide0
  0:   48789541          XT-PIC  timer
  14:     61310          XT-PIC  ide0

このサーバー(rita.karing.jp)は、この時点でおよそ5.6日稼働しており、通常設定のVine 2.0(私の現メインマシン)は、およそ四時間二十分稼働しています。しかし、ide0、つまりハードディスクへのアクセスは、この時点ですでに通常設定のマシンの方が多くなっています。また、サーバーの方はこの間、設定やらなにやらを繰り返していたので、この61310という数字は実際の運用時に想定される数字よりも大きくなっているはずです。

と、まぁ、そういう状態なのでパソコン本体はまったく熱を持ちません、まぁ、486機ですし…。ただ、二枚のPCカードは、結構熱を持っているようです。直接さわれないので、実際どの程度熱を持っているのかはわかりませんが、ソケットの周辺だけは、ほんのり人肌です。もっとも、Yahoo! BBのADSLモデムの発熱量と比べたらかわいいものなのでとくに気にはしてはいません。それにしてもADSLモデムの熱には驚きました。こういうモノらしいのですが、シャレじゃなく冬はちょっとした暖房器具に使えそうです。

一応、最後に注意です。この設定だと一時間毎にしかバッファをフラッシュしないので、もし、電源が落ちれば、バッファにたまっていた最大一時間20分間のデータは失われます。こういう場合でもノートパソコンには電池のバックアップがあるので、全然平気さ…、と思ったら、3010CTには電池はないそうです。あー、そうですか、ないものを探し回る無駄な努力をせずにすみました。

6. pcmcia

Vine 2.5において、古いISAなpcmciaを使う場合、起動時にうまく初期化することができません。これは、/etc/init.d/pcmciaのスクリプト中、i82365.oをロードするのにinsmodを使っており、このinsmodが実行される時点では、必要なisa-pnp.oがまだロードされていないからです。ですので、pcmciaを使うには、起動後、手でmodprobeをしてやるか、スクリプトをいじってやる必要があります。私の場合、/etc/init.d/pcmciaは、以下のようにしました。

     103             fi
     104             KD=/lib/modules/`uname -r`/kernel/drivers/pcmcia
        *                    PCIC=i82365
        *                     modprobe isa-pnp
     105             if [ -d $PC ] ; then
     106                 echo -n $" modules"
     107                 /sbin/insmod $PC/pcmcia_core.o $CORE_OPTS
     108                 /sbin/insmod $PC/$PCIC.o $PCIC_OPTS
     109                 /sbin/insmod $PC/ds.o

*の行が書き加えたところです。実は、このPCIC=i82365がまたクセモノで、このスクリプトは、システムの実態を無視してカーネルのヴァージョンでPCICを決定しているため、カーネル2.4でi82365を使うには、こうするよりありませんでした。まさかそんなことは…とは思ったのですが、私にはそうとしか読めないし、実際の挙動もそうなっています。つまり、カーネルが2.2の時はPCICはi82365、2.4の時はyenta_socketになるように決め打ちされているのです、それも/etc/sysconfig/pcmciaに指定された値を『故意』に上書きしています、少なくとも、私にはそう見えます。いろいろな意味で理解できません、というか私は混乱しています。ですので、このことに関してはこれ以上ふれません。でも、とりあえずは上のように書き換えてうまくいっています。できれば、詳しい方にぜひお聞きしたいところです。

次は、pcmciaに特有のネットワーク設定法についてです…と言いたいところですが、これに関しては(これに関しても?)、Give Upです。pcmciaのschemeやらnetwork.optやら色々やってみたのですが、どうしても、network unreachableと言われてしまいます。このエラーは、network.optの経路情報に問題がある可能性大だそうです。しかし、いったい、どこが間違ってるのかわかりません。もう、面倒になったので、結局いつものRedHat流のやり方(/etc/sysconfig/network-scripts/ifcfg-eth0に設定を書いて、ifup eth0)でやってしまいました。dhcpcdなんて、手でベタ打ちです。もっとスマートなやり方はいろいろあるんでしょうけど、いいんです、しばらく止めるつもりはないんですから…。

7. ルータの設定

ルータとしての設定はとくにありません。iptablesによるマスカレード一発です。

iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
modprobe ip_nat_ftp
echo 1 > /proc/sys/net/ipv4/ip_forward
LAN内からNetscapeやMozillaでftpサイトにアクセスして何事もなくダウンロードできていたし、Realplayerも問題なく使えていたので、kernel 2.4では、2.2のipchainsのようにmoduleを読み込ませなくともよくなったのかなと思っていたのですが、どうもそうではないようです。なんとなくwgetを使ってみたら、ナンと使えないではありませんか!そういうわけなので、最後の行には、modprobe ip_nat_ftpをつけくわえることとなりました。私は、IRCというものをまったくやらないのでよくわかりませんが、それらしいmoduleがあるみたいなので、IRCを使いたい場合は、そのmoduleを読み込ませる必要があるかもしれません。

ルータとしてのスループットは、あいにく測り忘れてしまいました。とりあえず、2Mbps程度の速度では486DX4/75MHzでも、ルータによるオーバーヘッドはまったく感じません。速度計測サイトなどで測ってみてもまったく差は生じていないようです。ルータとしての動作だけならCPUパワーよりも10BASE-Tの規格の方がボトルネックになるんじゃないかと思ったりします、根拠はないですが…。ただ、まだ各サーバーにあまり負荷をかけていないので、本格稼働後どうなるかはちょっと未知数です。もっとも、私の認識が変わるような、そんな大きな負荷がかかるとはとても思えませんが…。

パケットフィルタリングに関しては、各種サーバー、デーモンの設定で言及します。

8. ネットワーク構成

以下が、当LANの構成図です。LAN内にも、ドメインネームは割り当てられていますが、IPアドレスと違い、グローバルなものかプライベートなものか、にわかには区別がつかないので、混乱を避けるため表記しませんでした。

The network tree of karing
軽く各機種の概要について書くと、tampopoは現メインマシンで、sakuraは初代メインマシンです。nadesicoはハード関係の実験機、sumireは、我がLAN内唯一のWindows (95)マシンであり、かつazami (rita.karing.jp)のバックアップ機です。現在、OSは、Vine 2.xがそれぞれにインストールされています。

実験中、ダイナミックDNSは、ddo.jpを利用していました。シェルスクリプトにより二時間おきに検証し、IPアドレスが変更されたとき、もしくは約一日に一度、更新するようにしていました。このスクリプトは、ddo.jpのページに書かれているように更新の要求を単純にwgetで投げています。cronを使うのがスマートなやり方だとは思うのですが、ログのとらせ方がよくわからなかったと言うか調べてないので、とりあえず、シェルスクリプトでごまかしてしまいました、今後の課題です。しかし、まぁ、Yahoo! BBは切れないし変わらないので、事実上の固定IPとして運用してもさほど問題がないような気がしないでもないです…。

試験運用開始後は、my-domain.jpを利用しています。my-domain.jpのホームページでは、ダイナミックDNSの更新用のツールとしてDiCEとGnuDIPが紹介されていますが、個人的にはかえってわかりにくいのではないかと思います。要は、ddo.jp同様、httpなリクエストを出せばいいわけで、

 wget -O - 'http://REG-00-00XX-XXXX:*******@my-domain.jp/dyndns/?host=rita.karing.jp&ip=xxx.xxx.xxx.xxx'

これで、万事うまくいきます。REG以下は、my-domain.jpのユーザーIDで、*******はパスワードです。これを投げるホストが対象のホストである場合は、&以下のIPアドレスは省略可能です。と言うか、間違いのモトなのでこういうものは省略すべきでしょう。後は、自分の好きなやりかたで適当に料理すればいいだけです。私は今のところ、ddo.jpで使っていたシェルスクリプトのwgetの部分だけ差し替えて使っています。

9. 各種サーバー、デーモンの設定

以下は、現在稼働中のサーバー、デーモンです。*は、inetdから起動されています。
crond、dhcpcd、*ftpd、httpd、identd、inetd、named、ntpd、postfix、*qpopper、random、*telnetd、*samba、syslog
inetdから起動されるデーモンは、tcpd経由で起動しています。tcpdは、ホストの認証にDNSを利用しているので、dhcpcdに、resolve.confを書き換えられてしまうと、LAN内のホストの名前解決ができなくなり、tcpdに認証されなくなってしまうので、dhcpcdの起動は、resolve.confを書き換えないように-Rオプションが必要でした。またVine 2.5のdhcpcdは、resolve.confだけでなくntp.confも書き換えてくれるので、ntpdを使っている場合は注意が必要です。この書き換えは、-Nを指定することで止めることができます。

実は、ntpで正確な時間にあわせてあるのはカッコイイなぁと密かに思っていたのですが、これまで常時接続の環境がなかったので、まったくの手つかずでした。今回やってみたら、設定も簡単で、なにか拍子抜けです。でも、dhcpcdにntp.confを書き換えられてしまったときは、最初混乱してしまいました…。そういえばそんな話題がメーリングリストに流れていたなぁと思い出したのは、しばらくしてからです。一応、目は通していたはずなのですが、なかなか頭には残らないものですねぇ。

tcpdの設定は、hosts.denyに、ALL: ALLで、hosts.allowにおいてtelnetとsambaはローカルからのアクセスのみを許可し、popとftpには、制限をかけていません。ただし、ftpは、proftpd.confにてローカル以外からはanonymous ftpのみを受け付けるようにしています。telnetはセキュリティー的に問題があるので、sshにすべきところなのですが、クライアント機との兼ね合いで先延ばしになっています。sshはメインマシンをVine 2.5にupdateするときに設定する予定です。

tcpdは、/etc/hostsもDNSも参照するのでその内容に食い違いがあるとうまく動作しないことがあります。Vine 2.5のデフォルトの/etc/hostsは、127.0.0.1は正式名localhost.localdomainになっていますが、DNSでは、127.0.0.1は正式名localhostにしてあるのが一般的だと思います。一致させておく方が無難です。

ntpdとnamedは、ローカル以外からの問い合わせには応えないようにしています。セキュリティー向上のために、chroot jail のnamedというのもあるそうで、これについては今後の課題にしたいと思います。

postfixはドメインネーム、ホストネームを教えてやったくらいで、ほぼデフォルトのままです。ちょっと変わった設定がしてあるのはmaster.cfで、postfixのデーモン(pickup、qmgr)の起動間隔をそれぞれ1800秒、3600秒にしてあります。もちろん、ディスクアクセスを減らすためです。ただ、これが適正値かどうかはまだ判断しかねるので、様子見の状態です。

httpd(apache)は、起動するデーモンの数を減らそうとMinSpareServersとStartServersを3に設定してみました。しかし、あいかわらず、5、6個たちあがっています。メモリをもっとも消費しているのはまぎれもなくhttpdなのでなんとかしたいと思わないでもないのですが、単純なコントロールが効かないということは、適当にうまいことやってくれてるんでしょう、きっと…と信じることにしました。そんなことより、httpdのログを見てみるとNimdaの攻撃はいまだ旺盛なようで、正直ちょっとビビります。しかし、まぁ、結局のところWebサーバとはそういうものなのだと割り切ることにしました。

croned、random、syslogは、さわらぬ神に祟りなし…です。

dhcpcdについては、いまだ未検証です。なぜなら、dhcpcd起動後、まだ一度もIPアドレスが変更されたことがないからです。というわけで、いまだIPアドレスが動的に変更された場合のdhcpcdの挙動については確認できていません。もっとも、その動作に不安を感じているわけではありませんが、一度くらいは経験しておいたほうがいいかなとは思います。自分でdhcpサーバを立ち上げて実験してみることも考えたのですが、ヒマがないのでこれも今後の課題です。

identdは動かさないことも多いらしいですが、私は動かすことにしました。こんな個人のサーバーでは、自己の身を守るよりも他人に迷惑をかけないことの方が大切だと思います。identdでこちらの情報を知らせておけば、こちらのホストがなにかおかしなことをやらかした時には、なんの情報もないときよりも円滑に問題解決できるでしょう、たぶん…。

最後にパケットフィルタリングについてです。正直に言えば、上記の設定だけでも十分だと思うし、なにせ486機、負荷のことを考えるとあまり余計なことはやりたくないし、別に大切なデータなどというものもうちにはないし(うちで一番大切なファイルは、bookmarks.htmlです、次にcannaの辞書かな…)、別に侵入されてナニカされても自分的にはまったく困らないので、屋上屋を重ねるようなマネはしなくてもいいかなぁ、とも思うのですが、ただ識者の方々に怒られるのもいやなので、グローバルIPのサーバーだけは、フィルタリングすることにしました。

iptables -A INPUT -i eth1 -p tcp --dport 20:21    -j ACCEPT        #ftpを通過させる。
iptables -A INPUT -i eth1 -p tcp --dport 25    -j ACCEPT        #smtpを通過させる。
iptables -A INPUT -i eth1 -p tcp --dport 80     -j ACCEPT        #httpを通過させる。
iptables -A INPUT -i eth1 -p tcp --dport 110    -j ACCEPT        #pop3を通過させる。
iptables -A INPUT -i eth1 -p tcp --dport 113    -j ACCEPT        #auth(identd)を通過させる。
iptables -A INPUT -i eth1 -p udp --dport 123    -j ACCEPT        #ntpを通過させる。
iptables -A INPUT -p icmp -m limit --limit 1/s    -j ACCEPT        #icmpは条件つきで通過させる。

iptables -A INPUT -i eth1 -p tcp --dport 1024: -j ACCEPT        #tcp非特権ポートを開放する。
iptables -A INPUT -i eth1 -p udp --dport 1024: -j ACCEPT        #udp非特権ポートを開放する。

iptables -A INPUT -i eth0 -j ACCEPT        #内側にはすべてを開放する。
iptables -A INPUT -i lo -j ACCEPT         #localhostにはすべてを開放する。

iptables -P INPUT DROP        #INPUTのポリシーは、上記以外は破棄。

こんな感じです。eth1から1023以下のポートに入ってくるパケットは、ftp、smtp、http、pop3、auth(identd)、ntpを通し、他は、ポリシーではじきます。domain(named)は、udpの非特権ポートで対応します。eth0とloから入ってくるものはすべて通し、また、icmpはある一定の頻度に収まっている場合にのみ通します。このある一定の頻度というモノの適正値はまったくわからなかったので、HOWTOにのっていたそのままの値を使ってしまいました(調整の必要あり…?)。OUTPUT、FORWARDは今のところ、とくに設定していません。とりあえず、この程度の処理ならば、まだ負荷を感じさせることはないようです。

spoofingはデフォルトで有効になっているrp_filterにまかせます。内側に関しては、IPマスカレードだけでもいいでしょう。内側のホストが動いているときは、自分がコンソールの前にいるわけだし、あとは内側は内側で対応するということにしたいと思います。もし、サーバー内でなにかしようとすれば、通常は動いていないはずのハードディスクが動き出すでしょうから、ハードディスクはアラームがわりにもなるでしょう。


ここで意図しているセキュリティーに関する設定が、rita.karing.jpにおいて正常に機能していないとお気づきの方は、webmaster@rita.karing.jpまでご連絡いただけますよう、何卒、宜しくお願いいたします。また、ほかにもお気づきになられたこと、ご意見、ご感想、ご質問など、お教えいただければ幸いです。

10. 終りに

ところで、LAN内のホストのスペックを見て、私をかなりの経験者と誤解する人がいると悪いので、一応、断っておきますが、どのホストも時代遅れなのは、私のパソコン歴が長いからではなく、単にジャンク好きだからです。私のパソコン歴は、LAN内のどのパソコン(もしかしたら所有するすべてのハード…)よりも若いです。また、Linuxを使っているのも、ジャンクで遊ぶには、Windowsよりも何かと都合がいい(と思える)からです。

個人的なことですが、この半年、インターネットへの接続に関し様々なことがありました。それも、こうしてなんとかやっと落ち着きました。サーバーの設定も、これを書き終え、とりあえず一段落です。正直に言うと、サーバーの設定には思いのほか手間取ってしまいました。当初の予定では、karingのマスコットキャラのイラストを描きあげて、そこで一段落のはずだったのですが、もうそんな力は残っていません。…そうそう遊んでばかりもいられませんしねぇ…。

さて、今回もそうでしたが、サーバーの設定やら、なにやらをするときはマニュアルやHOWTOがわかりにくいと文句を言いたくなるときがよくあります…、ありますよね?しかし、こうして自分でそれらしいものを書いてみると、やっぱり難しいものですね。おそらく、これまで書いてきたことは、Windows ユーザーには確実に意味不明でしょう。もちろん、読者としてWindowsユーザーを想定してはいないので、これはあたりまえですが、せめてVine Linuxのユーザーには理解してもらえるよう努力したつもりです。望むべくは、Linuxユーザー全般に理解してもらえることですが、はてさてどうだったでしょうか。

なんにせよ、グローバルIPを身に背負い、rita.karing.jpはその運用を開始しました。細く長く、無事これ名馬が目標ですが、何分、時代遅れの486マシン…、その命の輝きやいかにと言ったところです。3010CTで検索をかけてみれば、ひっかかるのはほとんど、Dynabook Portage SS 3010CT…、そりゃそうですよね…。時代遅れの私には、RTCの電池がいつ切れるのか、ちょっと気になる今日この頃です。
 
2002.7.3  よしのぶ
yoshino@rita.karing.jp
 index.html
Wed Jul 3 2004