Monitor SSH-traffic per pengguna

9

Kami memiliki aplikasi cadangan yang berjalan sekali setiap 12 jam.

Beberapa server, desktop, dan laptop terhubung ke instance-EC2 dan mendorong cadangan melalui SFTP menggunakan kredensial login mereka sendiri.

Jika mereka perlu memulihkan file, mereka dapat menelusuri file melalui SFTP-Client sederhana dan mengembalikan file mereka. Ini telah berjalan dengan sangat baik selama 8 bulan terakhir.

Saya ingin tahu berapa banyak data yang ditransfer setiap bulan, per pengguna melalui SSH. Saya tidak membutuhkan log selama 8 bulan terakhir, tetapi sesuatu yang akan merekamnya mulai sekarang akan bagus.

Apakah ada sesuatu yang memungkinkan saya melakukan ini?

OS: Ubuntu 10.10

Bart De Vos
sumber

Jawaban:

6

Butuh beberapa sihir aneh, inilah yang bisa dilakukan oleh kolega saya dan saya.

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

Di sshd_config saya taruh ini:

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

Peringatan : Script ini memiliki memori! Jika Anda memiliki file log besar, mungkin diperlukan hingga 10 menit agar skrip selesai (diuji pada EC2 Micro).

Bart De Vos
sumber
Sayang kamu tidak bisa menerima hadiahmu sendiri ...
warren
2
Saya senang saya mendapatkan sesuatu yang berfungsi :-). Bahkan memungkinkan saya untuk mendapatkan statistik ngengat masa lalu. Saya pria yang bahagia ;-).
Bart De Vos
1

Anda bisa melacak login pengguna dengan IP (tersedia dalam file log), dan kemudian menggunakan hampir semua solusi pemantauan lalu lintas (Netflow dan IPtraf datang ke pikiran) untuk melacak lalu lintas port 22 oleh IP itu.

Sayangnya, penggunaan historis untuk beberapa bulan sebelumnya tidak tersedia kecuali Anda sudah menyiapkan sesuatu untuk efek ini.

Hipn
sumber
1

Anda mungkin ingin memeriksa posting ini tentang sftp logging . Saya pikir itu akan memberi Anda apa yang Anda inginkan, dengan sedikit pekerjaan tambahan untuk mengurai log.

malcolmpdx
sumber
0

auditd adalah utilitas yang baik untuk mengetahui apa yang telah dilakukan untuk setiap file. Ini mungkin bukan yang Anda butuhkan.

Gopoi
sumber