Monitorar o tráfego SSH por usuário

9

Temos um aplicativo de backup que é executado uma vez a cada 12 horas.

Vários servidores, desktops e laptops se conectam a uma instância do EC2 e enviam um backup via SFTP usando suas próprias credenciais de login.

Se eles precisarem recuperar um arquivo, eles poderão procurar arquivos por meio de um simples SFTP-Client e restaurar seus arquivos. Isso tem funcionado muito bem nos últimos 8 meses.

Gostaria de saber quantos dados são transferidos mensalmente, por usuário, via SSH. Eu não preciso dos logs nos últimos 8 meses, mas algo que iria gravá-lo a partir de agora seria ótimo.

Existe alguma coisa que me permita fazer isso?

SO: Ubuntu 10.10

    
por Bart De Vos 25.03.2011 / 15:08

4 respostas

6

Demorou um pouco de awk-magic, é isso que eu e o meu colega conseguimos juntar.

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

Em sshd_config eu coloquei isto:

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

Aviso : esse script afeta a memória! Se você tiver arquivos de log grandes, pode demorar até 10 minutos para o script ser concluído (testado no EC2 Micro).

    
por 28.03.2011 / 14:41
1

Você pode rastrear logons de usuário por IP (disponível nos arquivos de log) e usar quase qualquer solução de monitoramento de tráfego (Netflow e IPtraf vêm à mente) para acompanhar o tráfego da porta 22 por esse IP.

Infelizmente, o uso histórico dos meses anteriores não está disponível, a menos que você já tenha configurado algo para esse efeito.

    
por 25.03.2011 / 15:14
1

Você pode querer verificar esta postagem no log do sftp . Acho que você conseguirá o que deseja, com um pouco de trabalho adicional para analisar os registros.

    
por 25.03.2011 / 15:18
0

O auditd é um bom utilitário para saber o que foi feito em cada arquivo. Pode não ser o que você precisa.

    
por 29.03.2011 / 06:43