Monitoruj ruch SSH na użytkownika

9

Mamy aplikację do tworzenia kopii zapasowych, która działa raz na 12 godzin.

Wiele serwerów, komputerów stacjonarnych i laptopów łączy się z instancją EC2 i wypycha kopię zapasową za pośrednictwem SFTP przy użyciu własnych poświadczeń logowania.

Jeśli potrzebują odzyskać plik, mogą przeglądać pliki za pomocą prostego klienta SFTP i przywracać swoje pliki. Działa to bardzo dobrze przez ostatnie 8 miesięcy.

Chciałbym wiedzieć, ile danych jest przesyłanych miesięcznie na użytkownika za pośrednictwem SSH. Nie potrzebuję dzienników przez ostatnie 8 miesięcy, ale coś, co zapisałoby to od teraz, byłoby świetne.

Czy jest coś, co pozwala mi to zrobić?

System operacyjny: Ubuntu 10.10

Bart De Vos
źródło

Odpowiedzi:

6

Zajęło mi to trochę awk-magii, to właśnie mój kolega i ja mogliśmy połączyć.

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

W sshd_config wstawiam to:

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

Ostrzeżenie : ten skrypt skrywa pamięć! Jeśli masz duże pliki dziennika, zakończenie skryptu może potrwać do 10 minut (testowane na EC2 Micro).

Bart De Vos
źródło
szkoda, że ​​nie możesz otrzymać własnej nagrody ...
Warren
2
Cieszę się, że dostałem coś, co działa :-). To pozwoliło mi nawet uzyskać statystyki z poprzednich ćm. Jestem szczęśliwym człowiekiem ;-).
Bart De Vos
1

Możesz śledzić logowanie użytkownika według adresu IP (dostępne w plikach dziennika), a następnie użyć prawie dowolnego rozwiązania do monitorowania ruchu (przychodzą na myśl Netflow i IPtraf), aby śledzić ruch na porcie 22 przez ten adres IP.

Niestety, historyczne użycie przez kilka ostatnich miesięcy nie jest dostępne, chyba że masz już coś takiego skonfigurowanego.

Hippy
źródło
1

Możesz sprawdzić ten post na logowaniu sftp . Myślę, że dostaniesz to, czego chcesz, z odrobiną dodatkowej pracy, aby przeanalizować dzienniki.

malcolmpdx
źródło
0

auditd to dobre narzędzie do sprawdzania, co zostało zrobione z każdym plikiem. To może nie być to, czego potrzebujesz.

Gopoi
źródło