Giám sát lưu lượng SSH trên mỗi người dùng


9

Chúng tôi có một ứng dụng sao lưu chạy mỗi 12 giờ một lần.

Nhiều máy chủ, máy tính để bàn và máy tính xách tay kết nối với một thể hiện EC2 và đẩy một bản sao lưu qua SFTP bằng thông tin đăng nhập của riêng họ.

Nếu họ cần khôi phục một tệp, họ có thể duyệt các tệp qua SFTP-Client đơn giản và khôi phục các tệp của họ. Điều này đã chạy rất tốt trong 8 tháng qua.

Tôi muốn biết có bao nhiêu dữ liệu được chuyển trên cơ sở hàng tháng, trên mỗi người dùng thông qua SSH. Tôi không cần nhật ký trong 8 tháng qua, nhưng một cái gì đó sẽ ghi lại nó bắt đầu bây giờ sẽ rất tuyệt.

Có bất cứ điều gì cho phép tôi làm điều này?

HĐH: Ubuntu 10.10

Câu trả lời:


6

Phải mất một số phép thuật, đây là những gì đồng nghiệp của tôi và tôi có thể kết hợp với nhau.

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

Trong sshd_config tôi đặt cái này:

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

Cảnh báo : Kịch bản này tích trữ bộ nhớ! Nếu bạn có các tệp logfile lớn, có thể mất tới 10 phút để tập lệnh hoàn tất (được thử nghiệm trên EC2 Micro).


xấu hổ bạn không thể nhận tiền thưởng của riêng bạn ...
warren

2
Tôi rất vui vì tôi có một cái gì đó hoạt động :-). Nó thậm chí còn cho phép tôi lấy số liệu thống kê cho những con sâu bướm trong quá khứ. Tôi là một người đàn ông hạnh phúc ;-).
Bart De Vos

1

Bạn có thể theo dõi thông tin đăng nhập của người dùng bằng IP (có sẵn trong các tệp nhật ký), sau đó sử dụng gần như mọi giải pháp giám sát lưu lượng (Netflow và IPtraf đến) để theo dõi lưu lượng truy cập cổng 22 theo IP đó.

Thật không may, sử dụng lịch sử trong vài tháng trước là không có sẵn trừ khi bạn đã có một cái gì đó cho hiệu ứng này được thiết lập.



0

Audd là một tiện ích tốt để biết những gì đã được thực hiện cho mỗi tệp. Nó có thể không phải là những gì bạn cần khó khăn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.