Monitorare il traffico SSH per utente


9

Abbiamo un'applicazione di backup che viene eseguita una volta ogni 12 ore.

Più server, desktop e laptop si connettono a un'istanza EC2 e inviano un backup tramite SFTP utilizzando le proprie credenziali di accesso.

Se hanno bisogno di recuperare un file, possono sfogliare i file tramite un semplice client SFTP e ripristinare i loro file. Questo ha funzionato molto bene negli ultimi 8 mesi.

Vorrei sapere quanti dati vengono trasferiti su base mensile, per utente tramite SSH. Non ho bisogno dei registri negli ultimi 8 mesi, ma qualcosa che lo registrerebbe a partire da ora sarebbe fantastico.

C'è qualcosa che mi permette di fare questo?

Sistema operativo: Ubuntu 10.10

Risposte:


6

Ci è voluto un po 'di magia, questo è ciò che io e il mio collega siamo stati in grado di mettere insieme.

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

In sshd_config ho messo questo:

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

Avvertenza : questo script fa memoria! Se si dispone di file di registro di grandi dimensioni, il completamento dello script potrebbe richiedere fino a 10 minuti (testato su EC2 Micro).


peccato che non puoi ricevere la tua taglia ...
Warren,

2
Sono contento di aver ottenuto qualcosa che funziona :-). Mi ha anche permesso di ottenere le statistiche per le falene passate. Sono un uomo felice ;-).
Bart De Vos,

1

È possibile tenere traccia degli accessi degli utenti tramite IP (disponibile nei file di registro) e quindi utilizzare quasi qualsiasi soluzione di monitoraggio del traffico (mi viene in mente Netflow e IPtraf) per tenere traccia del traffico della porta 22 da tale IP.

Sfortunatamente, l'utilizzo storico dei mesi precedenti non è disponibile a meno che tu non abbia già impostato qualcosa in tal senso.



0

auditd è una buona utility per sapere cosa è stato fatto per ogni file. Potrebbe non essere quello che ti serve duro.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.