タグ・アーカイブ: ntop

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内を流れるパケットをモニターすることができました。
ね、簡単でしょ?