log の管理   ▲戻る
最終更新日 : 2003/06/16(森川靖大)  <<  作成日 : 2003/06/16(森川靖大)
  1. 前置き
  2. 作業

1. 前置き

[1.1] ログの必要性

IP マスカレードルータを運用する際に注意しなければならないのは, グローバルなインターネットから見た場合, ルータ以下のプライベートIPのマシンからの通信は全てルータが行っている ように見えることである. 例えば, (ルータではなく) プライベートIPマシンがなんらかの不正なアクセスを 行った場合でも, 全てルータがその不正アクセスを行ったように (外部からは) 見える.

そのような場合に, ルータ自身が, いつ, どのマシンから, どのマシンへ ルーティングを行ったのかわかっていれば, 不正に利用されてるマシンを特定することができる.

以下では, IPマスカレードルータが適切なログをとる方法を記す.


[1.2] ポリシー

専攻ネットワークで運用するIPマスカレードルータでは, 以下のようにログをとる.

iptables(8) によるログは /var/log/kern.log に保存される. (それに伴い /var/log/messages, /var/log/syslog にも保存される). ただし, 現専攻でのプライベートIPの利用を考えると, ログが大量になり, 最悪ディスクを埋めつくす恐れがあるため, 以下のようにケアする必要がある.


2. 作業

[2.1] iptables(8) でログをとるには?

iptables(8) でログをとるためには, LOG チェインを用いる. 今回のように, 内部 (つまりはルータの eth1) から外部 (つまりはルータの eth0) へルーティングされる 全ての通信に対してログをとりたい場合は,

# iptables -A FORWARD -i eth1 -j LOG --log-prefix "IPTABLES-LOG: " [Enter]
とする.

ただし, 上記のコマンドは 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] ポリシー のようにローテーション させるには, 以下の作業を行う必要がある.

[2.2.1] 必要なパッケージのインストール

以下の必要なパッケージをインストールする.

# apt-get install debianutils sysklogd logrotate cron [Enter]

[2.2.2] 必要最低限の情報を取り出すスクリプトの用意

このスクリプトは gate-toroku-system(1) に既に組み込まれているはずなので,

# /usr/local/sbin/gate-log-iptables [Enter]
というコマンドが存在しておれば良い. もしも存在しない場合は こちらから持っていって頂きたい.

[2.2.3] /etc/logrotate.conf への記述

/etc/logrotate.conf に以下の記述を追加すること.

/var/log/messages {
    daily
    create 0640 root adm
    compress
    rotate 7
    
    postrotate
        /bin/kill -HUP `cat /var/run/syslogd.pid 2>/dev/null` 2>/dev/null || true
    endscript
}

/var/log/kern.log {
    prerotate
        /usr/local/sbin/gate-log-iptables /var/log/kern.log /var/log/ipmasq.log 2>/dev/null || true
        /usr/bin/savelog -m 640 -u root -g adm -c 90 /var/log/ipmasq.log  >/dev/null
    endscript
    
    daily
    create 0640 root adm
    compress
    rotate 7

    postrotate
        /bin/kill -HUP `cat /var/run/syslogd.pid 2>/dev/null` 2>/dev/null || true
    endscript
}

[2.2.4] /etc/cron.weekly/sysklogd への記述

/etc/cron.weekly/sysklogd

                 : 
cd /var/log
for LOG in `syslogd-listfiles --weekly`
do
   if [ -s $LOG ]; then
      savelog -g adm -m 640 -u root -c 4 $LOG >/dev/null
   fi
done
                 : 
の部分に, 以下の 3 行を追記する.

                 : 
cd /var/log
for LOG in `syslogd-listfiles --weekly`
do
   if [ $LOG = /var/log/kern.log ] || [ $LOG = /var/log/messages ]; then
      continue
   fi

   if [ -s $LOG ]; then
      savelog -g adm -m 640 -u root -c 4 $LOG >/dev/null
   fi
done
                 : 

※ なお, このファイルは本来 sysklogd(8) によって管理されているので, このパッケージをアップデートすることで書き換えられてしまう. アップデートの際には注意すること.


[2.3] 確認

以上で必要な設定は完了であるが, 実際に[1.2] ポリシーのように ログがとれているか確認すること.

▲戻る     作成日:2003/06/16(森川靖大)