监控每个用户的SSH流量


9

我们有一个备份应用程序,每12小时运行一次。

多个服务器,台式机和便携式计算机连接到EC2实例,并使用其自己的登录凭据通过SFTP推送备份。

如果他们需要恢复文件,则可以通过简单的SFTP客户端浏览文件并还原文件。在过去的8个月中,这一直运行良好。

我想知道每个用户每月通过SSH传输多少数据。我不需要过去8个月的日志,但是从现在开始可以记录下来的东西会很棒。

有什么可以让我做到这一点的吗?

作业系统:Ubuntu 10.10

Answers:


6

这花了一些魔术,这就是我和我的同事能够放在一起的地方。

#!/bin/bash

main() {
  if [ -e $1 ] ; then
    MONTH=$(date | awk '{ print $2 }')
  elif [ $1 -ge 1 -a $1 -le 12 ] ; then
    month $1
  else
    exit 1
  fi

  echo
  echo "Usage statistics for month $MONTH"
  echo

  USERS=(`awk '/^'$MONTH'.*session opened for local user.*$/ { print $(NF-2) } ' /var/log/auth.log* | sort | uniq`)
  for i in "${USERS[@]}"
  do :
    echo "################################"
    echo "Usage for user: $i"
    READ=0
    WRITTEN=0
    #processes for this user  
    PROCS=(`awk '/^'$MONTH'.*session opened for local user '$i'.*$/ { gsub("\\[|]|sftp-server|:","", $(NF-8)); print $(NF-8) } ' /var/log/auth.log* | sort | uniq`)
    for j in "${PROCS[@]}"
    do :

      TEMP_READ=$(awk '/^'$MONTH'.*\['$j'\].*\ read\ [0-9]+\ written\ [0-9]+$/ { sum+=$(NF-2)}END{ print sum}' /var/log/auth.log*)
      READ=$(($TEMP_READ+$READ))
      TEMP_WRITTEN=$(awk '/^'$MONTH'.*\['$j'\].*\ read\ [0-9]+\ written\ [0-9]+$/ { sum+=$(NF)}END{ print sum}' /var/log/auth.log*)
      WRITTEN=$(($TEMP_WRITTEN+$WRITTEN))
    done
    echo "Read     $(($READ/(1024*1024))) MiB"
    echo "Written  $(($WRITTEN/(1024*1024))) MiB"
    echo "################################"
    echo
  done
}

month() {
case "$1" in
  1)  MONTH='Jan'
    ;;
  2)  MONTH='Feb'
    ;;
  3)  MONTH='Mar'
    ;;
  4)  MONTH='Apr'
    ;;
  5)  MONTH='May'
    ;;
  6)  MONTH='Jun'
    ;;
  7)  MONTH='Jul'
    ;;
  8)  MONTH='Aug'
    ;;
  9)  MONTH='Sep'
    ;;
  10)  MONTH='Oct'
    ;;
  11)  MONTH='Nov'
    ;;
  12)  MONTH='Dec'
    ;;
  *) echo 'Crash and Burn!'
     exit 1
   ;;
esac
}

main $1
exit 0

在sshd_config中,我这样:

 Subsystem sftp /usr/lib/openssh/sftp-server -l VERBOSE

警告:该脚本占用了内存!如果日志文件很大,脚本最多可能需要10分钟才能完成(在EC2 Micro上测试)。


可惜你不能得到自己的赏金...
沃伦

2
我很高兴能得到一些有用的东西:-)。它甚至允许我获取过去的飞蛾的统计数据。我是一个快乐的人;-)。
Bart De Vos

1

您可以按IP跟踪用户登录(在日志文件中可用),然后使用几乎所有流量监控解决方案(想到的是Netflow和IPtraf)来跟踪该IP的端口22流量。

不幸的是,除非您已经为此设置了某些功能,否则无法获得前几个月的历史用法。



0

auditd是一个很好的实用程序,它可以知道对每个文件做了什么。这可能不是您需要的强硬条件。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.