Monitoree el tráfico SSH por usuario

9

Tenemos una aplicación de respaldo que se ejecuta una vez cada 12 horas.

Varios servidores, computadoras de escritorio y computadoras portátiles se conectan a una instancia EC2 y envían una copia de seguridad a través de SFTP utilizando sus propias credenciales de inicio de sesión.

Si necesitan recuperar un archivo, pueden explorar archivos a través de un simple Cliente SFTP y restaurar sus archivos. Esto ha estado funcionando muy bien durante los últimos 8 meses.

Me gustaría saber cuántos datos se transfieren mensualmente, por usuario a través de SSH. No necesito los registros durante los últimos 8 meses, pero algo que lo registraría a partir de ahora sería genial.

¿Hay algo que me permita hacer esto?

SO: Ubuntu 10.10

Bart De Vos
fuente

Respuestas:

6

Tomó un poco de magia awk, esto es lo que mi colega y yo pudimos armar.

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

En sshd_config pongo esto:

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

Advertencia : ¡Este script acapara la memoria! Si tiene grandes archivos de registro, el script puede tardar hasta 10 minutos en finalizar (probado en EC2 Micro).

Bart De Vos
fuente
lástima que no puedas recibir tu propia recompensa ...
warren
2
Me alegro de haber conseguido algo que funciona :-). Incluso me permitió obtener las estadísticas de las polillas pasadas. Soy un hombre feliz ;-).
Bart De Vos
1

Puede rastrear los inicios de sesión de los usuarios por IP (disponible en los archivos de registro) y luego usar casi cualquier solución de monitoreo de tráfico (Netflow e IPtraf vienen a mi mente) para realizar un seguimiento del tráfico del puerto 22 por esa IP.

Desafortunadamente, el uso histórico de los últimos meses no está disponible a menos que ya haya configurado algo para este efecto.

Hippy
fuente
0

auditd es una buena utilidad para saber qué se ha hecho en cada archivo. Puede que no sea lo que necesitas difícil.

Gopoi
fuente