Kullanıcı başına SSH trafiğini izleme


9

12 saatte bir çalışan bir yedekleme uygulamamız var.

Birden çok sunucu, masaüstü ve dizüstü bilgisayar bir EC2 yönetim ortamına bağlanır ve kendi oturum açma kimlik bilgilerini kullanarak SFTP aracılığıyla yedeklemeyi zorlar.

Bir dosyayı kurtarmaları gerekiyorsa, basit bir SFTP-İstemcisi aracılığıyla dosyalara göz atabilir ve dosyalarını geri yükleyebilirler. Bu son 8 aydır çok iyi çalışıyor.

SSH üzerinden kullanıcı başına aylık kaç veri aktarıldığını bilmek istiyorum. Son 8 ay boyunca günlüklere ihtiyacım yok, ama şimdi başlayacak olan bir şey harika olurdu.

Bunu yapmama izin veren bir şey var mı?

İşletim Sistemi: Ubuntu 10.10

Yanıtlar:


6

Biraz garip bir sihir gerektirdi, iş arkadaşım ve ben burada bir araya getirebildik.

#!/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 içinde bunu koymak:

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

Uyarı : Bu komut dosyası bellek tutuyor! Büyük günlük dosyalarınız varsa, komut dosyasının tamamlanması 10 dakika sürebilir (EC2 Micro üzerinde test edilmiştir).


ayıp kendi ödülünüzü alamazsınız ...
warren

2
Çalışan bir şey var sevindim :-). Hatta geçmiş güvelerin istatistiklerini almama izin verdi. Ben mutlu bir adamım ;-).
Bart De Vos

1

Kullanıcı oturum açmalarını IP'ye göre (günlük dosyalarında bulunur) izleyebilir ve daha sonra bu IP ile bağlantı noktası 22 trafiğini takip etmek için neredeyse tüm trafik izleme çözümlerini (Netflow ve IPtraf akla gelir) kullanabilirsiniz.

Ne yazık ki, bu etki için önceden bir şey yapmadıysanız, önceki birkaç ayın geçmiş kullanımı kullanılamaz.



0

auditd, her dosyaya ne yapıldığını bilmek için iyi bir yardımcı programdır. Zor ihtiyacınız olan şey olmayabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.