ntopとは、各種プロトコルの情報やホストごとの送受信パケット数/データ量やスループットの他、トラフィックの時間経過グラフ、ホスト間の通信データ量などをブラウザでわかりやすく表示してくれるソフトです。コンソールからも使えるようですが、目に見えてわかりやすいのは、ブラウザに表示されるグラフでしょう。
インストール後の設定については、
http://www.geocities.jp/i_catnap/Diary/Diary-0404.html
を参考にしました。
ただインストールしても動くのですが、LAN内を流れるパケットをモニターする関係上、誰にでもグラフを見せていいか?・・・となると、ちょっと疑問が残ります。ntopそのものはユーザによるアクセス制限(見せたいデータの権限を指定)がありますが、ntopへのそもそものアクセスを、限られたユーザだけにしたいなー・・・という思いもあったりします。なので、
ntopを動かす(待ち受ける)インターフェイスはeth0
ntopにアクセスできるノードはeth0の属するサブネット(192.168.0.0/24)のみ
ntopの画面にはiptablesを使って直アクセスさせず、一度apacheのmod_proxyを介して、ベーシック認証を通過させる
ユーザがntopの画面を見るまでには、以下のステップを踏むことになります。
[パソコンのブラウザ] → [apache (ベーシック認証、mod_proxyによるリバースプロキシ)] → [ntop]
また、ユーザは http://192.168.0.3/ にアクセスしてユーザ名とパスワードを聞かれることを意識するくらいで使うことができますし、使わせる側としても、不必要に裏側でどう動いているかを見せなくてすむというメリットがあります。
■■ インストール
インストールした環境は以下のとおりです。
----------------------------------------------------------------------------------------------------------------------------------------------------------------
sh-3.00$ hostname
intra1.example.com
sh-3.00$ cat /etc/redhat-release
CentOS release 4.6 (Final)
sh-3.00$ uname -a
Linux intra1.example.com 2.6.9-67.0.15.EL #1 Thu May 8 10:39:19 EDT 2008 i686 i686 i386 GNU/Linux
----------------------------------------------------------------------------------------------------------------------------------------------------------------
ntopのパッケージはrpmforgeリポジトリにあるので、ここからインストールします。
[root@intra1 ~]# yum --enablerepo=rpmforge install ntop
(中略)
Dependencies Resolved
=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
ntop i386 3.3-1.el4.rf rpmforge 3.4 M
Installing for dependencies:
net-snmp-libs i386 5.1.2-11.el4_6.11.2 update 1.7 M
Transaction Summary
=============================================================================
Install 2 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 5.2 M
Is this ok [y/N]: y
■■ 設定
■ ntop.conf 編集
[root@intra1 ~]# cd /etc/
[root@intra1 etc]# cp -p ntop.conf ntop.conf.orig
[root@intra1 etc]# vi ntop.conf
・ ログの出力先を変更する
ここを
### Logging messages to syslog (instead of the console):
### NOTE: To log to a specific facility, use --use-syslog=local3
### NOTE: The = is REQUIRED and no spaces are permitted.
--use-syslog
こうする
### Logging messages to syslog (instead of the console):
### NOTE: To log to a specific facility, use --use-syslog=local3
### NOTE: The = is REQUIRED and no spaces are permitted.
#--use-syslog
--use-syslog=local3
※ syslogのファシリティに空きがあるかどうか(local3が使われていないか)を/etc/syslog.confを見て確認すること
・ ntopがローカルとみなすネットワークを設定する
ここを
### Sets the networks that ntop should consider as local.
### NOTE: Uses dotted decimal and CIDR notation. Example: 192.168.0.0/24
### The addresses of the interfaces are always local and don't need to be specified.
#--local-subnets xx.xx.xx.xx/yy
こうする
### Sets the networks that ntop should consider as local.
### NOTE: Uses dotted decimal and CIDR notation. Example: 192.168.0.0/24
### The addresses of the interfaces are always local and don't need to be specified.
#--local-subnets xx.xx.xx.xx/yy
--local-subnets 192.168.0.0/24
・ ntopをデーモンモードで動かす
ここを
### Sets program to run as a daemon
### NOTE: For more than casual use, you probably want this.
#--daemon
こうする
### Sets program to run as a daemon
### NOTE: For more than casual use, you probably want this.
#--daemon
--daemon
以上を確認して保存します。
■ スタートスクリプトの編集
/etc/init.d/ntopを編集して、eth0のIPアドレスでのみlistenするようにします。
まずはifconfigコマンドでeth0のIPアドレスを確認しましょう。
sh-3.00# ifconfig eth0 | grep "inet addr"
inet addr:192.168.0.3 Bcast:192.168.0.255 Mask:255.255.255.0
eth0に割り当てられているIPアドレスは192.168.0.3です。
sh-3.00# cd /etc/init.d
sh-3.00# cp -p ntop ntop.orig
sh-3.00# vi ntop
ここを
start () {
echo -n $"Starting $prog: "
daemon $prog -d -L @/etc/ntop.conf
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog
return $RETVAL
}
こうする
start () {
echo -n $"Starting $prog: "
#daemon $prog -d -L @/etc/ntop.conf
daemon $prog -d -w 192.168.0.3:3000 -L @/etc/ntop.conf
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog
return $RETVAL
}
スタートスクリプト
からntopを起動するときのオプションは以下のとおりです。
-d = デーモンモードとして動かす
-w 192.168.0.3:3000 = IPアドレス192.168.0.3のポート3000番で待ち受ける
-L = 標準出力のかわりにsyslogへメッセージを送る
@/etc/ntop.conf = /etc/ntop.conf を設定ファイルとする
■ syslog.conf編集
[root@intra1 etc]# cp -p syslog.conf syslog.conf.20080616
[root@intra1 etc]# vi syslog.conf
ここを
*.info;mail.none;authpriv.none;cron.none;local1.none /var/log/messages
こうする
#*.info;mail.none;authpriv.none;cron.none;local1.none /var/log/messages
*.info;mail.none;authpriv.none;cron.none;local1.none;local3.none /var/log/messages
そして下記を追加する
local3.* /var/log/ntoplog
■■ syslogdをreloadする
[root@intra1 etc]# /etc/init.d/syslog reload
Shutting down kernel logger: [ OK ]
Shutting down system logger: [ OK ]
Starting system logger: [ OK ]
Starting kernel logger: [ OK ]
■■ ntopのログローテーション設定を行う
お好みでログローテーションの設定を変更します。
(っ´∀`)っ ゃー はログを読むためだけにrootになったりするのがイヤなので、
(っ´∀`)っ ゃーが普段使うユーザ「oresama」はwheelグループに入れています。
で、読みたいログはwheelグループに読み込みの権限を与えています。
[root@intra1 etc]# cd logrotate.d/
[root@intra1 logrotate.d]# vi ntop
ここを
/var/log/ntop.access.log {
missingok
postrotate
/sbin/service ntop condrestart >/dev/null 2>&1
endscript
}
こうする
/var/log/ntoplog {
daily
rotate 365
compress
ifempty
create 0640 root wheel
missingok
postrotate
/sbin/service ntop condrestart >/dev/null 2>&1
endscript
}
■■ 初期設定
ntopを最初に動かす前に、ntopの管理ユーザ「admin」のパスワードを設定します。
これは、ntopの細かい設定をブラウザから行うときに使います。
[root@intra1 logrotate.d]# cd
[root@intra1 ~]# /usr/bin/ntop
(しばらくログが流れた後)
ntop startup - waiting for user response!
Please enter the password for the admin user:
Please enter the password again:
というプロンプトが出るので、パスワードを入力し、しばらくしてからCtrl+Cで終了させます。
■■ 起動
■ スタートスクリプトからの起動
[root@intra1 ~]# /etc/init.d/ntop start
Starting ntop: [ OK ]
[root@intra1 ~]# /etc/init.d/ntop status
ntop (pid 559) is running...
■ 自動起動設定
[root@intra1 ~]# chkconfig ntop --list
ntop 0:off 1:off 2:off 3:off 4:off 5:off 6:off
[root@intra1 ~]# chkconfig ntop on
[root@intra1 ~]# chkconfig ntop --list
ntop 0:off 1:off 2:on 3:on 4:on 5:on 6:off
■■ ブラウザから見てみる
http://192.168.0.3:3000/
グラフはあっさり表示されます。
ユーザ名:admin
パスワード:(さっき指定したやつ)
■■ ベーシック認証を使えるようにする
ntopの認証機能は、画面の一部を見せたり見せなかったりするようですが、
そもそもグラフそのものにアクセスさせたくないっていう場合には、
次の仕組みを使うことによってベーシック認証を実現することができます。
1) 192.168.0.3 をntop専用のバーチャルホストとして、一度apacheで接続を待ち受け、apacheのリバースプロキシを使ってntopへ要求を投げる
2) iptablesでポート3000番をlocalhostにだけ許可する
3) ベーシック認証をかける
■ 1 apacheで192.168.0.3をntop専用のバーチャルホスト設定する
apacheでmod_proxyが使えるかどうか、以下の記述がhttpd.confにあるか確認してください。
LoadModule proxy_module modules/mod_proxy.so
それでは設定です。
sh-3.00# cd /etc/httpd/conf.d
sh-3.00# vi ntop.conf
NameVirtualHost 192.168.0.3:80
# サーバー名の指定をする
ServerName intra1.example.com
# エラーログの定義
ErrorLog /home/oresama/logs/intra1_error.log
# アクセスログの定義
CustomLog /home/oresama/logs/intra1_access.log combined
# フォワードプロキシをoffにする
ProxyRequests Off
# リモートサーバをローカルサーバのURL空間にマップする。
# ここでは、/にアクセスすると、http://192.168.0.3:3000/にマップする。
ProxyPass / http://192.168.0.3:3000/
<
br /> # ベーシック認証に使うファイルを定義する
AuthUserFile /home/oresama/auth/.htpasswd
AuthGroupFile /dev/null
AuthName "User Admin"
AuthType Basic
require valid-user
# 外部からの接続を拒絶し、LAN内からのアクセスのみ許可する
Order deny,allow
Deny from all
Allow from 192.168.0.0/24
■ 設定反映
sh-3.00# apachectl configtest
sh-3.00# apachectl graceful
■ iptablesでポート3000番をlocalhostだけにする
sh-3.00# iptables -L -n | grep 3000
ACCEPT tcp -- 127.0.0.1 0.0.0.0/0 tcp dpt:3000
■ ベーシック認証をかける
sh-3.00# htpasswd -c /home/oresama/auth/.htpasswd oresama
New password:
Re-type new password:
Adding password for user oresama
sh-3.00# cat /home/oresama/auth/.htpasswd
oresama:n8H0Vb.JKkuRA
■ 確認
http://192.168.0.3/
にアクセスして、ベーシック認証がかかること
http://192.168.0.3:3000/
にアクセスして、接続ができないこと
以上で、LAN内を流れるパケットをモニターすることができました。
ね、簡単でしょ?