用 sshband 统计用户使用 SSH 通道的流量

sshband 可以用来统计每个用户通过 SSH 通道使用了多少流量,并将流量信息保存到 MySQL 数据库中。

这是我的数据库中记录的用户流量数据。

sshband 主页是 http://code.google.com/p/sshband ,到我写这篇文章的时候,还没有发布源码包,只能从 SVN 下载最新的源码。源码也还没有 configure 脚本,所以编译的时候还要自己预先安装需要的软件包。

首先去 SVN 下载最新的源码,我用的源码是 43 版本的。


svn co http://sshband.googlecode.com/svn/trunk/ sshband
cd sshband

编译之前需要安装 libpcap-dev 和 libmysqlclient-dev 软件包,如果没有安装这两个软件包就开始编译的话,就会出现类似下面的错误:

pcap.c:3:18: fatal error: pcap.h: No such file or directory
mysql.c:5:19: fatal error: mysql.h: No such file or directory

或者

/usr/bin/ld: cannot find -lmysqlclient
/usr/bin/ld: cannot find -lpcap

或者

pcap.o: In function `pcap_main':
/home/gs/dl/m/sshband/pcap.c:77: undefined reference to `pcap_lookupnet'
/home/gs/dl/m/sshband/pcap.c:84: undefined reference to `pcap_open_live'
/home/gs/dl/m/sshband/pcap.c:90: undefined reference to `pcap_datalink'
/home/gs/dl/m/sshband/pcap.c:91: undefined reference to `pcap_datalink_val_to_name'
/home/gs/dl/m/sshband/pcap.c:113: undefined reference to `pcap_compile'
/home/gs/dl/m/sshband/pcap.c:114: undefined reference to `pcap_geterr'
/home/gs/dl/m/sshband/pcap.c:118: undefined reference to `pcap_setfilter'
/home/gs/dl/m/sshband/pcap.c:126: undefined reference to `pcap_loop'
/home/gs/dl/m/sshband/pcap.c:119: undefined reference to `pcap_geterr'
mysql.o: In function `db_init':
/home/gs/dl/m/sshband/mysql.c:54: undefined reference to `mysql_init'
/home/gs/dl/m/sshband/mysql.c:64: undefined reference to `mysql_real_connect'
/home/gs/dl/m/sshband/mysql.c:81: undefined reference to `mysql_options'
/home/gs/dl/m/sshband/mysql.c:66: undefined reference to `mysql_error'
mysql.o: In function `db_destroy':
/home/gs/dl/m/sshband/mysql.c:88: undefined reference to `mysql_close'
mysql.o: In function `db_query':
/home/gs/dl/m/sshband/mysql.c:138: undefined reference to `mysql_ping'
/home/gs/dl/m/sshband/mysql.c:143: undefined reference to `mysql_error'
/home/gs/dl/m/sshband/mysql.c:170: undefined reference to `mysql_insert_id'
/home/gs/dl/m/sshband/mysql.c:142: undefined reference to `mysql_query'
/home/gs/dl/m/sshband/mysql.c:159: undefined reference to `mysql_free_result'
/home/gs/dl/m/sshband/mysql.c:161: undefined reference to `mysql_next_result'
/home/gs/dl/m/sshband/mysql.c:149: undefined reference to `mysql_field_count'
/home/gs/dl/m/sshband/mysql.c:150: undefined reference to `mysql_store_result'
/home/gs/dl/m/sshband/mysql.c:153: undefined reference to `mysql_error'
collect2: error: ld returned 1 exit status

之类的错误。所以为了保证编译顺利,还是先安装 libmysqlclient-dev 和 libpcap-dev 软件包吧。这两个软件包在 RPM 包管理体系下面通常叫做 libmysqlclient-devel 和 libpcap-devel

安装上面说的两个软件包之后就可以开始编译安装了。

make
make install

接下来打开 /etc/sshband.conf ,编辑 sshband 的配置文件。需要改动哪些地方,配置文件里面都有详尽的说明,看着配置文件里面的说明一项一项进行修改就可以了。

配置文件里面的 SQL 语句要重点说一下,里面有三个配置项可以修改 SQL 语句。

sql_login 这条语句是在用户登录 SSH 并成功登录以后会执行的语句,不过如果用户登录以后还没有开始使用的话,sshband 可能会收集不到足够的流量数据,所以有可能会延迟执行这条语句。但只要用户开始使用 SSH,这条语句就会立刻被执行。

sql_update 是定时更新用户已经使用的流量信息时会执行的语句。配置文件中的 update_period 可以配置多长时间更新一次用户流量信息。虽然配置了 update_period,但 sshband 不一定会按照这个时间间隔去更新用户的流量信息。如果用户在一段时间内都没有产生流量的话,即使时间已经超过了 update_peroid,sshband 也不会去更新用户的流量信息,直到用户继续使用 SSH 产生了流量,或者用户退出或掉线的时候,才会去更新用户的流量。

sql_logout 是在用户退出或者用户掉线时会执行的 SQL 语句,用户退出的时候 sshband 会先自动执行一次 sql_update 指定的语句,然后才执行 sql_logout 指定的语句。所以在这里一般只需要更新一下用户断开时间就可以了,不需要更新用户流量信息。

%sessionid 是每个会话的唯一标识符,每个用户每次登录都会产生一个唯一的标识符,所以要在用户登录的时候插入 sessionid,这样在更新用户流量和用户断开连接的时候就可以根据 sessionid 去更新相应的数据库记录了。

保存配置文件以后,执行下面的命令就可以启动 sshband 了。

/etc/init.d/sshband start

不过在非 Debian 系的发行版下面,sshband 提供的自动启动脚本可能会有问题,如果遇到这种问题的话,也只要直接执行 sshband 命令就可以启动 sshband 了。

如果启动成功的话,应该可以在 /var/log/syslog 里面看到 sshband started 的字样。现在只要重新登录 SSH,就可以发现 sshband 已经开始往数据库里面添加用户使用的流量信息了。

Oct 19 16:44:21 bbxyii sshband[22868]: Connecting to MySQL server 10.8.2.1...
Oct 19 16:44:21 bbxyii sshband[22868]: Connected to MySQL server 10.8.2.1
Oct 19 16:44:21 bbxyii sshband[22868]: No queued SQL(s)
Oct 19 16:44:21 bbxyii sshband[22868]: Data link type is LINUX_SLL(113)   
Oct 19 16:44:21 bbxyii sshband[22868]: sshband started

如果在数据库中没有看到流量信息的话,可以在配置文件中把 log_level 改到调试级别,这样就可以在 syslog 里面看到 sshband 为什么没有往数据库里面添加数据的原因了。

本文发表于 乱七八糟,并添加了 , , , 标记。保存永久链接到书签。

发表评论

电子邮件地址不会被公开。