Linuxで七転八倒な記録


まず一言。Linux の HowTo に関するページは世の中たくさんあるから、ここを見るよりはそっちを見るのが賢明かと。まだまだ Linux を完全に理解してるわけじゃないから(^^;
それに「前あれってどうやったんだっけ?」とすぐ忘れる自分のための覚え書き的存在なので(笑)

← 前 BBS 次 →

2001年08月21日
○ PHP
PHP を 4.0.3 から 4.0.6 にアップグレードしてみる(mbstring なんかの国際化モジュールが最初からマージされているというのが狙い)。最初 バイナリRPM でインストールしようとしたが、依存関係のせいでずらずら〜と芋蔓式にアップグレードしなあかん状態。仕方ないのでダウンしてきて試すものもそれこそ切りが無いくらいにチェックにひかかるんで、途中で放棄(^^; ソースアーカイブを拾ってきて、コンパイル、インストール。これは問題なく出来たが、RPM の場合とパスが違うのかなんなのか、ロードされるのは 4.0.3 のまま。これも調べるのが面倒なんで、今度は ソースRPM を落としてきてコンパイル。多少芋蔓DLになったがまだマシ、必要ないと思ったところは依存関係を無視。パッケージのビルドで、

checking whether the C compiler (gcc -O2 -march=i386 -mcpu=i686 -fPIC ) works... no
configure: error: installation or configuration problem: C compiler cannot create executables.
とかいってお亡くなりになる。C コンパイラ関係が一連のごたごたでおかしくなったんか?でも、他のものをコンパイルするときはなんともないからコンフィグの問題か?むぅ、よくわからんっす。またまた最初に戻って、バイナリRPM を多少依存関係無視でインストール。今度は出来た。Apache を再起動したら、無事 4.0.6 がロードされてん♪…しかし、肝心の mbstring がロードされていない。ビルド時にmbstring を使うオプションが指定されずにコンパイルされたバイナリがパッケージになってるようだ。う〜む、どうしたものかの。(まぁ、mbstring なくてもなんとかならなくはないが。)

○ ローカルDNSを立てよう
前からやろうかなと思いつつ、とりわけ困ることもないのでそのままにしてきたDNS。気が向いたんで入れてみよう♪
使うのはもちろん BIND …というのはもちろんありません(爆)BINDならもう入ってるし、起動すれば動くんけどね。使うのは djbdns 。MTA の一つ、qmail と開発者が同じ。この人のシリーズは好き嫌いはっきりすると思うけど、僕は好きやな。
djbdns は大きく分けて3つの部分(とりようによっては違うけど)、ローカルキャッシュ、外部用キャッシュ、DNSサーバで構成されてるん。本来の意味でのDNSがDNSサーバの部分(混乱しそうな表現や)。キャッシュはその名の通り、DNSのデータをキャッシュしておくためのもので、ローカルは自分のサーバの中のプログラムが使うもの、外部用は Windows マシンなんかの他のマシンが使うもの。構築目標が、

 1. LAN内のマシン名をローカルDNSで解決する

 2. 外部の名前はキャッシュサーバでキャッシング(サーバ、Windowsマシン共に使用できる)
だったんで、3つすべてを使うことになる。しかし、それぞれにはIPアドレスが一つずつ必要。これは同じDNSというサービスを提供するからポート番号が同じになる、つまり、同じIPアドレス上で2つのサービスが動かせないってわけだね。NICが1枚だけのマシンは通常、ループバックアドレス 127.0.0.1 とNIC用のアドレス、例えば、192.168.1.50 の2つを持っている。ローカルキャッシュはサーバの中で使えればいいし、逆に外部用キャッシュは他のマシンからアクセス出来るネットワークアドレスを使わないといけない。つまり、キャッシュだけを構築するとこんな感じだね。
ローカル用と外部用の2つのDNSキャッシュ
そこにDNSサービスが必要になる。しかし、使えるアドレスがない。どうするか?実はLinuxマシンはアドレスを付け足すことが簡単に出来るん。つまり、NICに2つのアドレスを割り振ることも出来る、というわけ。これで3つとも動かすことが出来るようになる。NIC の eth0 に追加するにはこうするん。

# /sbin/ifconfig eth0:0 192.168.1.51   # 新しく割り振るIPアドレスを指定
# /sbin/route add -host 192.168.1.51 dev eth0:0
きちんと設定されたかチェック。念の為に別のマシンから ping を打っておくのもいいかも。

# /sbin/ifconfig
eth0      Link encap:Ethernet  HWaddr ##:##:##:##:##:##
          inet addr:192.168.1.50  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:81324 errors:0 dropped:0 overruns:0 frame:0
          TX packets:83497 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          Interrupt:11 Base address:0x6800

eth0:0    Link encap:Ethernet  HWaddr ##:##:##:##:##:##
          inet addr:192.168.1.51  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:11 Base address:0x6800

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:3027 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3027 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
この設定はマシンをリブートすると元に戻ってしまうんで、/etc/rc.d/rc.local なんかの起動スクリプトに上の ifconfig 〜、route 〜 を書き加えておけばOK。最近のディストリビューションならこんなことしなくても X 上でスマートで簡単に出来そうやけど、ま、いいってことで(笑)
しかし、この構成、もう少しシンプルにできへんやろうか?そう考えて、構成を変えた。ローカルキャッシュを使わずに、外部用キャッシュとDNSサーバだけにしてみた。これならばIPアドレスを追加しなくてもいいし、「キャッシュ」と「サーバ」という役割にそってシンプルな構成だし。じゃ、ローカルではキャッシュ使えへんくなるのかというと、ナンのことはないっす。外部用キャッシュを使えばいいじゃん。ただそれだけ(笑)パフォーマンスはやっぱ落ちそうだけど、キャッシュなしに比べれば問題にならんだろうよ。
ローカルDNSと外部用キャッシュでローカルキャッシュも兼ねる
以下、インストールの流れ。ローカルキャッシュは使って無いけど、一応参考ってことで。

□ daemontools のインストール
daemontools は直接DNS とは関係無いけど、デーモンを管理してくれる便利なやつです。これがあると例えば、何かのきっかけでプロセスが死んでも自動的に再起動をしてくれたりと、管理者にとってはありがたい存在。

# su
# mkdir -p /package
# chmod 1755 /package
# cd /package
# tar xzf daemontools-0.76.tar.gz
# cd admin/daemontools-0.76
# package/install
その後、マシンを再起動すると監視用のプロセスが走り出します。

□ djbdns のインストール

# tar xzf djbdns-1.05.tar.gz
# cd djbdns-1.05
# make
# su
# make setup check

◇ ローカルキャッシュを設定
まずDNSキャッシュプログラム用のアカウントを作成。グループdns を作成して、これに所属するユーザー dnscache と dnslog を登録。ホームディレクトリやシェルは使えないように設定。その後、必要なファイルを作成、/service 配下からのシンボリックリンクを張れば自動的にサービスが起動されます。最後に /etc/resolv.conf を編集してDNSサーバに自分自身(localhost)を指定しておきます。

# dnscache-conf dnscache dnslog /etc/dnscache
# ln -s /etc/dnscache /service
----- FileName /etc/resolv.conf -----
# nameserver aaa.bbb.ccc.ddd   # これまでの設定をコメントアウトしておく
nameserver 127.0.0.1
------ end of /etc/resolv.conf ------
これで程ない時間(数秒?)でサービスが開始されます。DNS問い合わせが上手くいくかチェックしてみよう。

# nslookup www.plala.or.jp   # 適当なサーバーを指定。この例ではISPのWWWサーバー
Server:  localhost   # ローカルキャッシュへ問い合わせが行われているか確認
Address:  127.0.0.1

Non-authoritative answer:
Name:    www.plala.or.jp
Addresses:  ***.***.***.***, ***.***.***.***, ***.***.***.***, ***.***.***.***
# ↑隠しても意味なさげやね。ま、一応(^^;

◇ 外部用キャッシュを設定
手順はローカルキャッシュの時と少し違います。ローカルキャッシュを設定してない場合は、ローカルキャッシュと同様アカウントの作成を忘れずに。

# dnscache-conf dnscache dnslog /etc/dnscachex 192.168.1.50   # マシンに割り振られているIPアドレスを指定
# ln -s /etc/dnscachex /service
このままではリモートホストの問い合わせを受け付けないので、次のようにして問い合わせを受け付けるネットワークを指定します。

# touch /etc/dnscahcex/root/ip/192.168.1   # 許可するネットワークアドレスを指定
サーバ自身がローカルキャッシュを使わずに外部用キャッシュを使うために設定を変更。

----- FileName /etc/resolv.conf -----
nameserver 192.168.1.50
------ end of /etc/resolv.conf ------
◇ DNSサーバを設定
キャッシュの時と同様にサーバ用のユーザー tinydns を作成。その後、以下のように。

# tinydns-conf tinydns dnslog /etc/tinydns 127.0.0.1   # 今回は localhost を指定してるが、一般的にはサーバのIPアドレスを指定
# ln -s /etc/tinydns /service
続いて、ドメインのNS(ネームサーバ)を設定。add-ns (正引き/逆引きドメイン)(サーバのIPアドレス)と指定。

# cd /service/tinydns/root
# ./add-ns localdomain 192.168.1.50   # 正引き用
# ./add-ns 1.168.192.in-addr.arpa 192.168.1.50   # 逆引き用(1.168.192.in-addr.arpa と並びが逆になる点に注意)
# make
次に、登録したいマシンのアドレスを追加する。

# ./add-host server.localdomain 192.168.1.50
# ./add-host desktop.localdomain 192.168.1.52
# make   # make を忘れずに
後で変更や削除したい時には /service/tinydns/root/data をエディタで編集してねん。中を見れば多分分かると思うので。
これでDNSサーバが使えるんけど、このままではキャッシュプログラムが内部のアドレスまで外部のDNSに問い合わせてしまうんよ。だから、ローカルなアドレスの問い合わせだけ自分のサーバで動いてるDNSサーバへ問い合わせるようにしてあげる。それには /etc/dnscachex/root/servers に(正引きドメイン名)と(逆引きドメイン名)の2つのファイルを作り、その中にこのドメインのアドレス解決に使うDNSサーバのアドレスを書きます。

# echo 127.0.0.1 > /etc/dnscachex/root/servers/localdomain
# echo 127.0.0.1 > /etc/dnscachex/root/servers/1.168.192.in-addr.arpa
これで全ての設定が完了♪きちんと設定されてるかチェックしみよう。nslookup でLAN内部と外部のホスト名を問い合わせて見る。

#nslookup www.plala.or.jp   # 外部の問い合わせ
Server:  server.localdomain
Address:  192.168.1.50

Non-authoritative answer:
Name:    www.plala.or.jp
Addresses:  ***.***.***.***, ***.***.***.***, ***.***.***.***, ***.***.***.***

# nslookup desktop   # 内部の問い合わせ
Server:  server.localdomain
Address:  192.168.1.50

Non-authoritative answer:
Name:    desktop.localdomain
Address:  192.168.1.52

# nslookup 192.168.1.52   # 逆引きもチェック
Server:  server.localdomain
Address:  192.168.1.50

Name:    desktop.localdomain
Address:  192.168.1.52
うん、OK!あとはWindows マシンのほうもDNSの設定を変える、っと。チェックの時、NT/2000 系には nslookup コマンドがあるけど、9x 系には何故か無い(あっても損はないんじゃ…)。ping ででも代用するか、nslookup 出来るツールを使おうね。
DNSの設定


2001年08月08日
Code Red Worm (面倒やで^^; 以下 CRW)が猛烈な勢いやね。うちはIISやないで感染はしないから、1日まではそれほど気にしなかったんけど、1日からの侵入活動期(?)になってからはやはり気になるもの。そこでちょっと調べてみたら、これが思った以上に状況が悪い。まだ詳細な分析はして無いけど、8月 8日 12時 現在の暫定版レポート。

1. 日付別アクセス数推移

少し前のログもさかのぼって 7/20 〜 8/8 の統計。
日付別推移
CRWは1日から他のサーバーへの侵入を試みる期間に入ってるんだけど、それがそのまま現れてるね。今のところ一番多かったのは6日の263件で、1時間あたり最大で30件近くに。

2. タイプ別割合推移

タイプ別割合推移
CRWにはオリジナル版と、その亜種のCRW2が出てきてるん。CRW2は 8月 4日に確認されてから猛烈な勢いで広がってて、しかも、バックドアをしかけるなど、より警戒しないといけない。このCRWとCRW2の割合がどう変化してるか調べたらこうなった。4日以降はもうかなりの数がCRW2なようで。

3. アクセス元エリア別割合

エリア別割合
とりあえず IPアドレスからホスト名が逆引きできたものでアクセス数ベースで統計。逆引きできなかったものはグラフ中では「未調査」としてあるんで。また機会があれば詳細な分析をしてみよっと。で、やはりというか、当然というか国内からのアクセスが一番多い。次にアメリカ。ただ、このアメリカの数も com や net といった gTLD(一般トップドメイン)=アメリカとしてるんで、実際はかなり違うかと。国内をさらに見てみると自分と同じ ISPということもあってか ぷららからがトップ。あとは、常時接続が増えたことも影響してその他の ISPからも多めかな。co.jp や ac.jp もちらほらあったが、流石にこういうところからは何度も試みられることは無かったようやね。

うちは常時接続やないねん、大丈夫〜、なんて思わないように。ダイアルアップでも十分侵入される可能性がある、というのがこれだけの分析でも分かるっしょ。WindowsNT、2000ユーザーは特に意識して一度チェックしてみてねん。

<Code Red Worm に関する情報>
IPAセキュリティセンター
コンピュータ緊急対応センター


← 前 BBS 次 →

△戻る ▲トップに戻る