Surveillez le trafic SSH par utilisateur

9

Nous avons une application de sauvegarde qui s'exécute toutes les 12 heures.

Plusieurs serveurs, ordinateurs de bureau et ordinateurs portables se connectent à une instance EC2 et envoient une sauvegarde via SFTP en utilisant leurs propres informations d'identification de connexion.

S'ils ont besoin de récupérer un fichier, ils peuvent parcourir les fichiers via un simple client SFTP et restaurer leurs fichiers. Cela fonctionne très bien depuis 8 mois.

Je voudrais savoir combien de données sont transférées sur une base mensuelle, par utilisateur via SSH. Je n'ai pas besoin des journaux pour les 8 derniers mois, mais quelque chose qui l'enregistrerait à partir de maintenant serait génial.

Y a-t-il quelque chose qui me permet de faire cela?

Système d'exploitation: Ubuntu 10.10

Bart De Vos
la source

Réponses:

6

Il a fallu un peu de magie, c'est ce que mon collègue et moi avons pu mettre en place.

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

Dans sshd_config, je mets ceci:

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

Avertissement : ce script monopolise la mémoire! Si vous avez des fichiers journaux volumineux, la fin du script peut prendre jusqu'à 10 minutes (testé sur EC2 Micro).

Bart De Vos
la source
dommage que vous ne puissiez pas recevoir votre propre prime ...
warren
2
Je suis content d'avoir quelque chose qui fonctionne :-). Cela m'a même permis d'obtenir les statistiques des papillons de nuit passés. Je suis un homme heureux ;-).
Bart De Vos
1

Vous pouvez suivre les connexions des utilisateurs par IP (disponible dans les fichiers journaux), puis utiliser presque toutes les solutions de surveillance du trafic (Netflow et IPtraf me viennent à l'esprit) pour garder une trace du trafic du port 22 par cette IP.

Malheureusement, l'utilisation historique des derniers mois n'est pas disponible, sauf si vous avez déjà configuré quelque chose à cet effet.

Hyppy
la source
0

auditd est un bon utilitaire pour savoir ce qui a été fait pour chaque fichier. Ce n'est peut-être pas ce dont vous avez besoin.

Gopoi
la source