Контроль 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).


ганьба, що ти не можеш отримати власну винагороду ...
warren

2
Я радий, що у мене вийшло щось, що працює :-). Це навіть дозволило мені отримати статистику за минулих міль. Я щаслива людина ;-).
Барт Де Вос

1

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

На жаль, історичне використання за попередні кілька місяців недоступне, якщо ви вже не створили щось для цього.



0

auditd - хороша утиліта, щоб знати, що було зроблено для кожного файлу. Це може бути не те, що вам потрібно жорстко.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.