ตรวจสอบปริมาณการใช้ SSH ต่อผู้ใช้


9

เรามีแอปพลิเคชั่นสำรองที่ทำงานทุกๆ 12 ชั่วโมง

เซิร์ฟเวอร์เดสก์ท็อปและแล็ปท็อปหลายเครื่องเชื่อมต่อกับอินสแตนซ์ EC2 และส่งข้อมูลสำรองผ่าน SFTP โดยใช้ข้อมูลรับรองการเข้าสู่ระบบของตนเอง

หากพวกเขาต้องการกู้คืนไฟล์พวกเขาสามารถเรียกดูไฟล์ผ่าน SFTP-Client อย่างง่ายและกู้คืนไฟล์ได้ สิ่งนี้ทำงานได้ดีมากในช่วง 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

คำเตือน : สคริปต์นี้มีหน่วยความจำ hogs! หากคุณมีไฟล์บันทึกขนาดใหญ่อาจใช้เวลานานถึง 10 นาทีก่อนที่สคริปต์จะเสร็จสิ้น (ทดสอบกับ EC2 Micro)


ความอัปยศคุณไม่สามารถได้รับเงินรางวัลของคุณเอง ...
วอร์เรน

2
ฉันดีใจที่ฉันได้รับสิ่งที่ใช้ได้ :-) มันทำให้ฉันได้รับสถิติสำหรับผีเสื้อกลางคืนที่ผ่านมา ฉันเป็นคนที่มีความสุข ;-)
Bart De Vos

1

คุณสามารถติดตามการเข้าสู่ระบบของผู้ใช้ด้วย IP (มีอยู่ในล็อกไฟล์) จากนั้นใช้โซลูชันการตรวจสอบการรับส่งข้อมูลเกือบทุกอย่าง (Netflow และ IPtraf คำนึงถึง) เพื่อติดตามการรับส่งข้อมูลพอร์ต 22 จาก IP นั้น

น่าเสียดายที่การใช้งานในอดีตในช่วงสองสามเดือนก่อนไม่สามารถใช้ได้เว้นแต่คุณจะมีบางอย่างในการตั้งค่าเอฟเฟกต์นี้


1

คุณอาจต้องการที่จะตรวจสอบการโพสต์นี้ในการเข้าสู่ระบบ SFTP ฉันคิดว่ามันจะทำให้คุณได้สิ่งที่คุณต้องการพร้อมกับการทำงานเพิ่มเติมเพื่อแยกวิเคราะห์บันทึก


0

auditd เป็นยูทิลิตี้ที่ดีที่จะรู้ว่าสิ่งที่ทำกับทุกไฟล์ มันอาจไม่ใช่สิ่งที่คุณต้องการ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.