Überwachen Sie den SSH-Verkehr pro Benutzer

9

Wir haben eine Backup-Anwendung, die alle 12 Stunden ausgeführt wird.

Mehrere Server, Desktops und Laptops stellen eine Verbindung zu einer EC2-Instanz her und übertragen eine Sicherung über SFTP mit ihren eigenen Anmeldeinformationen.

Wenn sie eine Datei wiederherstellen müssen, können sie Dateien über einen einfachen SFTP-Client durchsuchen und ihre Dateien wiederherstellen. Dies lief in den letzten 8 Monaten sehr gut.

Ich möchte wissen, wie viele Daten monatlich pro Benutzer über SSH übertragen werden. Ich brauche die Protokolle für die letzten 8 Monate nicht, aber etwas, das sie ab jetzt aufzeichnet, wäre großartig.

Gibt es irgendetwas, das mir das erlaubt?

Betriebssystem: Ubuntu 10.10

Bart De Vos
quelle

Antworten:

6

Es hat etwas Magie gekostet, das konnten mein Kollege und ich zusammenstellen.

#!/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 habe ich Folgendes eingefügt:

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

Warnung : Dieses Skript beansprucht den Speicher! Wenn Sie über große Protokolldateien verfügen, kann es bis zu 10 Minuten dauern, bis das Skript fertig ist (getestet auf EC2 Micro).

Bart De Vos
quelle
Schade, dass du dein eigenes Kopfgeld nicht erhalten kannst ...
Warren
2
Ich bin froh, dass ich etwas habe, das funktioniert :-). Es erlaubte mir sogar, die Statistiken für die vergangenen Motten zu erhalten. Ich bin ein glücklicher Mann ;-).
Bart De Vos
1

Sie können Benutzeranmeldungen nach IP verfolgen (verfügbar in den Protokolldateien) und dann nahezu jede Verkehrsüberwachungslösung (Netflow und IPtraf) verwenden, um den Port 22-Verkehr nach dieser IP zu verfolgen.

Leider ist die historische Verwendung für die letzten Monate nur verfügbar, wenn Sie bereits eine entsprechende Einrichtung eingerichtet haben.

Hyppy
quelle
0

auditd ist ein gutes Dienstprogramm, um zu wissen, was mit jeder Datei gemacht wurde. Es könnte nicht das sein, was Sie hart brauchen.

Gopoi
quelle