[1.1] ログの必要性
IP マスカレードルータを運用する際に注意しなければならないのは,
グローバルなインターネットから見た場合,
ルータ以下のプライベートIPのマシンからの通信は全てルータが行っている
ように見えることである.
例えば, (ルータではなく) プライベートIPマシンがなんらかの不正なアクセスを
行った場合でも, 全てルータがその不正アクセスを行ったように (外部からは)
見える.
そのような場合に, ルータ自身が, いつ, どのマシンから,
どのマシンへ ルーティングを行ったのかわかっていれば,
不正に利用されてるマシンを特定することができる.
以下では, IPマスカレードルータが適切なログをとる方法を記す.
[1.2] ポリシー
専攻ネットワークで運用するIPマスカレードルータでは,
以下のようにログをとる.
-
iptables(8)
の機能を利用し, プライベートLAN側からグローバルな ネットワーク
へルーティングされる全ての通信に関してログをとる.
iptables(8) によるログは
/var/log/kern.log
に保存される.
(それに伴い /var/log/messages
,
/var/log/syslog
にも保存される).
ただし, 現専攻でのプライベートIPの利用を考えると,
ログが大量になり, 最悪ディスクを埋めつくす恐れがあるため,
以下のようにケアする必要がある.
- logrotate(8) を用い,
/var/log/kern.log
,
/var/log/messages
を毎日ローテーションさせる.
(デフォルトでは, syslogd によって, 毎週ローテーションされる.)
-
/var/log/kern.log.*.gz
,
/var/log/messages.*.gz
は 7 つ分 (つまり1週間分) 保存する.
(デフォルトでは, syslogd によって, 4 週分保存される.)
- 毎日,
/var/log/kern.log
から必要最低限の情報のみを取り出し, それを
/var/log/ipmasq.log
として保存し, 90
日分保存する.
[2.1]
iptables(8) でログをとるには?
iptables(8) でログをとるためには,
LOG チェインを用いる.
今回のように, 内部 (つまりはルータの eth1)
から外部 (つまりはルータの eth0) へルーティングされる
全ての通信に対してログをとりたい場合は,
# iptables -A FORWARD -i eth1 -j LOG --log-prefix "IPTABLES-LOG: "
とする.
ただし, 上記のコマンドは
gate-toroku-system(1) の
gate-db-to-iptables(8)
によって生成される
シェルスクリプト /usr/local/sbin/gate-ip-masq
によって実行されるため, 管理者が手動で入力する必要はない.
[2.2] kern.log と messages のローテーション動作変更
/var/log/kern.log
と /var/log/messages
を
[1.2] ポリシー のようにローテーション
させるには, 以下の作業を行う必要がある.
- debianutils, sysklogd, logrotate
cron のインストール
- 必要最低限の情報を
/var/log/kern.log
から取り出すスクリプトの用意
-
/etc/logrotate.conf
へ
/var/log/kern.log
, /var/log/messages
に関して追記.
-
/etc/cron.weekly/sysklogd
から
/var/log/kern.log
, /var/log/messages
のローテーションを分離.
[2.2.1] 必要なパッケージのインストール
以下の必要なパッケージをインストールする.
# apt-get install debianutils sysklogd logrotate cron
[2.2.2] 必要最低限の情報を取り出すスクリプトの用意
このスクリプトは
gate-toroku-system(1) に既に組み込まれているはずなので,
# /usr/local/sbin/gate-log-iptables
というコマンドが存在しておれば良い.
もしも存在しない場合は
こちらから持っていって頂きたい.
/etc/logrotate.conf
固定プライベートIPアドレスの設定は近いうちに
gate-toroku-system
で管理するようになるため, それに対応できるように
固定プライベートアドレスで接続を行っているマシンについて
それぞれ, gate-toroku-system で使用している
IPアドレスデータベースカードと同様のものを作成しておきます.
なお, この作業はgate-toroku-systemが機能するまでの
一時的な期間のみ行うものです.
[3.1] IPアドレスデータベースカードの書式
gate-toroku-system で使用しているIPアドレスデータベースカードの内容は
以下のようになっています. (なお, 下の例はでたらめなパラメータを書いてあります.)
eth: 00:90:CC:A2:F0:A6
phase: result
type: A
root: hoge
hubport: AE002.3
cname:
place: 3-103
mx:
note: 情報実験用
ip: 133.87.45.??
accepted: by nobody using gate-ip-apply on 2000-04-14T12:13:20+0000
owner: foo
hardware: PC98
date: 2001-11-30T12:28:32+0000
hostname: joho3
上の例で赤字で書いてある部分が
固定プライベートIPアドレス使用の際に設定しなければならない
(つまり, ユーザに申請してもらわなければならない)項目です.
また, 青字で書いてある部分は
DHCPサーバの管理者がこのカードを作成する際に,
その時の時間によって変更しなければならない項目です.
[3.2] データベースカード作成手順
実際に固定プライベートIPアドレスの割り当てを
行う際の手順です.
[3.2.1] 申請の受け付け
IPアドレスの新規取得・変更・廃止
に従って固定プライベートIPアドレスの登録申請を行ってもらいます.
申請の際に利用者はデータベースカードに必要な情報を
書き込むことになっているので,
この申請を受けた時点でデータベースカード作成に必要な情報は手に入ります.
([3.1]の例の赤字の部分です)
[3.2.2] データベースカード作成
申請の際に入手した情報からデータベースを作成します.
(既に, 専攻ネットワーク委員会が承認している場合を考えています)
- 既存のIPアドレスデータベースカードをコピーし, 雛型にします.
(ちなみに gate-toroku-system のIPアドレスデータベースカード置き場は
/home/gate/ipdb/ 以下)
- そのカードのファイル名を「ホスト名」と同じものにしてください.
(gate-toroku-system ではIPデータベースカードの名前はそこに
書き込まれているホスト名と同じ)
- 上記([3.1])の例の赤字の部分を, 申請された情報
を元に書き込んでいきます.
- 作成時刻から青字の部分を変更します.
以上でデータベースカードが完成しました.
[3.2.3] データベースカードの保管
以上で作成したカードを保管しておきます.
本来, gate-toroku-system ではIPアドレスデータベースは
/home/gate/ipdb/ 以下に保存されていますが,
現在(2001/12/22)ではまだこの機能が gate-toroku-system に含まれていないため,
gate-toroku-system とは無関係なところに一時保管しておく必要があります.
今のところは, /etc/dhcpipdb というディレクトリを作成し,
その中にデータベースカードを保管しておくことにします.
いずれ gate-toroku-system にDHCPサーバを管理する機能が含まれた場合には
このデータベースカードを /home/gate/ipdb/ 以下の
データベースに合流させます.
万が一サーバがクラッシュした場合や
他のPCにお役目を譲る場合に
そのサーバ特有の設定値を持つ設定ファイルを保存しておくと
手間が省けます。
[4.1] /etc/dhcpd.conf の保存
動的割り当ての設定はともかく、手動割り当てのための
MACアドレスとIPアドレスとの対応表が大事なので
(古い対応表は意味が無いので)
保存しておいた方が安全です。
自分のホームディレクトリなどにコピーしておくと良いでしょう。
[5.1.1] DHCPを「誰が」「いつ」使用しているのかを確認する。
DHCPサーバを管理する上で、「誰が」「いつ」DHCPサーバを使用したのかが
わかれば何かあったときに原因を追求しやすくなります。
Debianでは /var/log/syslog などの
ファイルに、クライアントからの要求やサーバからの応答
が記録されています。
[5.1.2] 管理ログ
具体的に記録されているファイルは
- /var/log/syslog
- /var/log/syslog.0
- /var/log/syslog.1.gz
- /var/log/syslog.2.gz
- /var/log/syslog.3.gz
- /var/log/syslog.4.gz
- /var/log/syslog.5.gz
- /var/log/syslog.6.gz
の6つのファイルです。一つのファイルに1日分のログが溜まり、
合計1週間分のログが溜まります。
常に更新されつづけ、最新のものは /var/log/syslog
に記録されます。
下6つのファイルはgzip形式で圧縮されていますが、
「zcat」や「zless」
を使用すれば中身を見ることができます。
(パーミッションの設定によりルート権限が無いと見ることができませんが)
[5.1.3] 管理ログの中身
以下は管理ログの中身の一部のDHCPに関係した部分だけを
抜粋したものです。(中身は少々書き換えてあります。)
$ sudo zcat /var/log/syslog.1.gz
....
Jun 29 20:18:47 blue dhcpd-2.2.x: DHCPDISCOVER from 00:90:cc:a2:f4:e8 via eth1
Jun 29 20:18:47 blue dhcpd-2.2.x: DHCPOFFER on 192.168.0.113 to 00:90:cc:a2:f4:e8 via eth1
Jun 29 20:18:47 blue dhcpd-2.2.x: DHCPREQUEST for 192.168.0.113 from 00:90:cc:a2:f4:e8 via eth1
Jun 29 20:18:47 blue dhcpd-2.2.x: DHCPACK on 192.168.0.113 to 00:90:cc:a2:f4:e8 via eth1
Jun 29 20:39:27 blue -- MARK --
Jun 29 20:56:03 blue dhcpd-2.2.x: DHCPREQUEST for 192.168.0.149 from 00:90:cc:a2:a4:cb via eth1
Jun 29 20:56:03 blue dhcpd-2.2.x: DHCPACK on 192.168.0.149 to 00:90:cc:a2:a4:cb via eth1
Jun 29 21:08:47 blue dhcpd-2.2.x: DHCPREQUEST for 192.168.0.113 from 00:90:cc:a2:f4:e8 via eth1
Jun 29 21:08:47 blue dhcpd-2.2.x: DHCPACK on 192.168.0.113 to 00:90:cc:a2:f4:e8 via eth1
Jun 29 21:08:55 blue -- MARK --
Jun 29 21:14:19 blue dhcpd-2.2.x: DHCPREQUEST for 192.168.0.149 from 00:90:cc:a2:a4:cb via eth1
Jun 29 21:14:19 blue dhcpd-2.2.x: DHCPACK on 192.168.0.149 to 00:90:cc:a2:a4:cb via eth1
Jun 29 21:23:03 blue dhcpd-2.2.x: DHCPDISCOVER from 00:90:cc:a2:f4:e8 via eth1
Jun 29 21:23:03 blue dhcpd-2.2.x: DHCPOFFER on 192.168.0.113 to 00:90:cc:a2:f4:e8 via eth1
Jun 29 21:23:03 blue dhcpd-2.2.x: DHCPREQUEST for 192.168.0.113 from 00:90:cc:a2:f4:e8 via eth1
Jun 29 21:23:03 blue dhcpd-2.2.x: DHCPACK on 192.168.0.113 to 00:90:cc:a2:f4:e8 via eth1
Jun 29 21:26:52 blue dhcpd-2.2.x: DHCPREQUEST for 192.168.0.149 from 00:90:cc:a2:a4:cb via eth1
Jun 29 21:26:52 blue dhcpd-2.2.x: DHCPACK on 192.168.0.149 to 00:90:cc:a2:a4:cb via eth1
Jun 29 21:29:21 blue -- MARK --
Jun 29 21:33:35 blue -- MARK --
Jun 29 21:34:48 blue dhcpd-2.2.x: DHCPREQUEST for 192.168.0.149 from 00:90:cc:a2:a4:cb via eth1
Jun 29 21:34:48 blue dhcpd-2.2.x: DHCPACK on 192.168.0.149 to 00:90:cc:a2:a4:cb via eth1
Jun 29 21:59:27 blue -- MARK --
....
|
「時間」「パケットの内容」「要求したクライアントのMACアドレス」
「貸したIPアドレス」といったものが記録されています。
「パケットの内容」に関しては
epnetfan 2001年度 座学編 「DHCPとは?」
に説明が載っています。
※flashコンテンツなので、容量が大きくダウンロードに時間がかかるかもしれません。
また、ブラウザによっては見ることができない、などの可能性があります。
御了承ください。
[5.1.4] 少々便利な(?)管理ログの確認法
先ほどのログの中身に全て目を通すのは大変なので「grep」
コマンドを使用して必要な部分だけを取り出すと確認が楽です。
例えば、以下の方法はどうでしょう?
$ sudo zcat /var/log/syslog.1.gz | grep DHCPACK | less
....
Jun 29 20:18:47 blue dhcpd-2.2.x: DHCPACK on 192.168.0.113 to 00:90:cc:a2:f4:e8 via eth1
Jun 29 20:56:03 blue dhcpd-2.2.x: DHCPACK on 192.168.0.149 to 00:90:cc:a2:a4:cb via eth1
Jun 29 21:08:47 blue dhcpd-2.2.x: DHCPACK on 192.168.0.113 to 00:90:cc:a2:f4:e8 via eth1
Jun 29 21:14:19 blue dhcpd-2.2.x: DHCPACK on 192.168.0.149 to 00:90:cc:a2:a4:cb via eth1
Jun 29 21:23:03 blue dhcpd-2.2.x: DHCPACK on 192.168.0.113 to 00:90:cc:a2:f4:e8 via eth1
Jun 29 21:26:52 blue dhcpd-2.2.x: DHCPACK on 192.168.0.149 to 00:90:cc:a2:a4:cb via eth1
Jun 29 21:34:48 blue dhcpd-2.2.x: DHCPACK on 192.168.0.149 to 00:90:cc:a2:a4:cb via eth1
....
|
こうすると確認が(多少は)楽になります。
上記のコマンドは長いので、使用するならaliasなどに登録しておけば
よいでしょう。
[5.2.1] 「動的IPアドレス」をどのように割り振っているのか調べる。
DHCPサーバでは「IPアドレスの動的割り当て」を行いますが、
「誰に(どのホストに)」、「どのIPアドレスを」、「いつからいつまで」割り当てたのか
を記録しているログがあります。
[5.2.2] 管理ログ
具体的に記録されているファイルは以下のものです。
[5.2.3] 管理ログの中身
以下は管理ログの中身の一部です。(中身は少々書き換えてあります)
$ sudo cat /var/dhcp/dhcp.leases
....
lease 192.168.0.132 {
starts 5 2001/05/25 12:56:40;
ends 6 2001/05/26 00:56:40;
hardware ethernet 00:90:cc:a2:f9:36;
client-hostname "joho24";
}
lease 192.168.0.135 {
starts 5 2001/05/25 16:22:56;
ends 5 2001/05/25 18:02:56;
hardware ethernet 00:90:27:18:ef:89;
uid 01:00:90:27:18:ef:89;
client-hostname "hirame";
}
lease 192.168.0.133 {
starts 5 2001/05/25 15:21:50;
ends 5 2001/05/25 17:01:50;
hardware ethernet 00:90:cc:a2:f9:41;
uid 01:00:90:cc:a2:f9:41;
client-hostname "JOHO05";
}
lease 192.168.0.130 {
starts 5 2001/05/25 15:45:43;
ends 5 2001/05/25 16:26:52;
hardware ethernet 00:90:cc:a2:f4:e8;
uid 01:00:90:cc:a2:f4:e8;
}
....
|
「start」は貸し出し開始時間、「stop」は貸し出し終了時間です。
なお、ここに表示されている時間はグリニッジ標準時(GMT)
なので、サーバのパソコンの時間とずれているはずですが
気にしないでください。
要求したクライアントのパソコンにちゃんとホスト名が設定されている場合には
ホスト名が表示され、されていない場合には表示されません。
[6.1] netstat コマンド
ネットワークの接続状況やルーティングテーブルを調べるために
「netstat」というコマンドがあります。
このコマンドでIPマスカレードで接続しているマシンの
ルーティング情報も得ることができます。
IPマスカレード接続のマシンの接続状況を見るためには以下のコマンドを入力します。
$ netstat -Mn
IP masquerading entries
prot expire source destination ports
udp 2:36.23 192.168.0.134 133.87.45.70 1024 -> 53 (65072)
udp 4:38.11 192.168.0.120 133.87.45.70 1024 -> 53 (65083)
tcp 14:59.97 192.168.0.134 133.87.45.72 888 -> 22 (65073)
tcp 14:12.69 192.168.0.130 133.87.45.72 1136 -> 22 (64810)
tcp 0:55.22 192.168.0.120 133.87.45.72 1165 -> 80 (65084)
tcp 0:55.22 192.168.0.120 133.87.45.72 1166 -> 80 (65086)
tcp 0:42.22 192.168.0.123 133.87.45.72 1037 -> 80 (65081)
tcp 0:42.22 192.168.0.123 133.87.45.72 1036 -> 80 (65079)
....
|
各項目 |
表示されているものの意味 |
-n オプションをつけなかった場合 |
prot |
使用されているプロトコル |
expire |
通信が切断されるまでの残り時間 |
source |
発信元のIPアドレス |
発信元のホストネーム(設定されていない場合はIPアドレス) |
destination |
送信先のIPアドレス |
送信先のドメインネーム |
ports |
ポート番号 |
サービス名 |