Мониторинг SSH-трафика на пользователя

9

У нас есть приложение для резервного копирования, которое запускается каждые 12 часов.

Несколько серверов, настольных компьютеров и ноутбуков подключаются к экземпляру EC2 и отправляют резервную копию через SFTP, используя свои собственные учетные данные для входа.

Если им нужно восстановить файл, они могут просматривать файлы с помощью простого SFTP-клиента и восстанавливать свои файлы. Это работает очень хорошо в течение последних 8 месяцев.

Я хотел бы знать, сколько данных передается ежемесячно для каждого пользователя через SSH. Мне не нужны журналы за последние 8 месяцев, но что-то, что запишет это, начиная с сегодняшнего дня, было бы здорово.

Есть ли что-нибудь, что позволяет мне сделать это?

ОС: Ubuntu 10.10

Барт Де Вос
источник

Ответы:

6

Потребовалось немного волшебства, это то, что я и мой коллега смогли собрать.

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

В sshd_config я положил это:

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

Внимание : этот скрипт забирает память! Если у вас большие файлы журналов, выполнение скрипта может занять до 10 минут (протестировано на EC2 Micro).

Барт Де Вос
источник
Жаль, что вы не можете получить свою собственную награду ...
Уоррен
2
Я рад, что получил то, что работает :-). Это даже позволило мне получить статистику за прошедшие месяцы. Я счастливый человек ;-).
Барт Де Вос
1

Вы можете отслеживать входы пользователей по IP (доступно в файлах журналов), а затем использовать практически любое решение для мониторинга трафика (на ум приходят Netflow и IPtraf), чтобы отслеживать трафик порта 22 по этому IP.

К сожалению, историческое использование за предыдущие несколько месяцев недоступно, если вы уже не настроили что-либо на этот счет.

Hyppy
источник
1

Возможно, вы захотите проверить этот пост на регистрации sftp . Я думаю, что это даст вам то, что вы хотите, с небольшим количеством дополнительной работы для анализа журналов.

malcolmpdx
источник
0

Auditd - хорошая утилита, чтобы узнать, что было сделано с каждым файлом. Это может быть не то, что вам нужно жестко.

Gopoi
источник