监控每个用户的 SSH 流量

监控每个用户的 SSH 流量

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

多台服务器、台式机和笔记本电脑连接到 EC2 实例并使用自己的登录凭据通过 SFTP 推送备份。

如果他们需要恢复文件,他们可以通过简单的 SFTP 客户端浏览文件并恢复文件。过去 8 个月,这项服务运行良好。

我想知道每个用户每月通过 SSH 传输了多少数据。我不需要过去 8 个月的日志,但如果能从现在开始记录就好了。

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

操作系统:Ubuntu 10.10

答案1

这需要一些魔法,这就是我和我的同事能够拼凑起来的。

#!/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

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

不幸的是,除非您已经进行相关设置,否则无法获得前几个月的历史使用情况。

答案3

你可能想看看这篇关于 sftp 日志的帖子。我认为它会给你你想要的东西,只需做一些额外的工作来解析日志。

答案4

auditd 是一款很好的实用程序,可以了解对每个文件做了什么。但它可能不是你需要的。

相关内容