รับการแจ้งเตือนเมื่อมีคนลงชื่อเข้าใช้เซิร์ฟเวอร์โดยใช้ SSH หรือ Remote Desktop


13

ฉันมี mac mini server ที่ใช้ OS X Lion Server 10.7.3 มันทำงานได้โดยไม่มีปัญหา อย่างไรก็ตามเซิร์ฟเวอร์อยู่ภายใต้ "การโจมตี" คงที่ตามบันทึก ไฟร์วอลล์และการรักษาความปลอดภัยกำลังดูอยู่

มีแอปพลิเคชัน / สคริปต์ที่สามารถส่งอีเมลถึงฉันเมื่อใดก็ตามที่มีคน / ทุกคนเข้าสู่เซิร์ฟเวอร์โดยใช้ SSH, เครื่องมือบริหารระบบหรือ ARD?

เนื่องจากเครื่องทำงานโดยไม่มีใครดูแลหัวขาดในดาต้าเซ็นเตอร์ในเมืองอื่นฉันกังวลว่าบางคนอาจ (ผ่านการดื้อรั้นอย่างบริสุทธิ์ใจ) สามารถจัดการรหัสผ่านหรือค้นหาการประนีประนอมบนระบบ รู้ว่าฉันจะได้รับการแจ้งเตือนจะทำให้ใจของฉันเพื่อความสะดวก


2
ไม่ใช่คำตอบจริงๆดังนั้นความคิดเห็น: คุณได้พิจารณาการใช้บางสิ่งบางอย่างเช่น fail2ban ([How-Tow] ( fail2ban.org/wiki/index.php/HOWTO_Mac_OS_X_Server_(10.5) ) วิธีที่คุณสามารถห้าม IP ของคุณถูกโจมตีได้ กำหนดกฎสำหรับระยะเวลาที่ถูกแบนและอื่น ๆ ซึ่งจะช่วยป้องกันการแฮ็คและอาจเป็นประโยชน์มากกว่าจากนั้นจะได้รับอีเมลสำหรับการพยายามลงชื่อเข้าใช้ทุกครั้ง
boretom

คำตอบ:


4

การป้องกันที่ดีที่สุดของคุณคือปิดบริการที่ไม่จำเป็นเสมอ หากคุณไม่ได้ใช้เดสก์ท็อประยะไกลให้ปิดการใช้งาน หากคุณไม่ได้ใช้เซิร์ฟเวอร์ HTTP หรือ FTP ให้ปิดการใช้งาน ให้บริการน้อยลงและมีจำนวนผู้เข้าใช้งานน้อยลงสำหรับผู้บุกรุก

นอกเหนือจากการล็อคมันลงแล้วยังมีผลิตภัณฑ์โอเพนซอร์สและฟรีที่เป็นมิตรกับ OS X คุณสามารถดูการตรวจจับการบุกรุกบนเครื่องของคุณได้

การดื่มอย่างรวดเร็ว

แม้ว่าฉันจะไม่ได้เรียกใช้โดยส่วนตัว แต่ก็มีเพื่อนร่วมงานที่รู้จักและไว้วางใจในการตรวจจับการบุกรุก มันเข้ากันได้กับ BSD ดังนั้นจึงเหมาะสำหรับ OS X ข้อดีอีกอย่างของ Snort คือมันมีอยู่ในแพ็คเกจHomebrew :

> brew info snort
snort 2.9.0.5
http://www.snort.org
Depends on: daq, libdnet, pcre
Not installed
https://github.com/mxcl/homebrew/commits/master/Library/Formula/snort.rb

==> Caveats
For snort to be functional, you need to update the permissions for /dev/bpf*
so that they can be read by non-root users.  This can be done manually using:
    sudo chmod 644 /dev/bpf*
or you could create a startup item to do this for you.

ดังนั้นคุณจะได้รับเส้นทางที่ง่ายขึ้นไปสู่การติดตั้งและเชื่อมั่นในความจริงที่ว่าพอร์ตนั้นดีกับ OS X และทำงานที่นั่น ด้วยการติดตั้งHomebrewคุณจะต้องทำ:

> brew install snort

และคุณพร้อมที่จะเริ่มต้นกับมันแล้ว

ลองดูคู่มือการตั้งค่าเซิร์ฟเวอร์ Snort สำหรับ OS X Lionที่ชุมชน Snort จัดเตรียมไว้ให้เริ่มต้นด้วยการเขียนกฎสำหรับเครื่อง OS X ของคุณ นั่นเป็นเอกสารที่ยอดเยี่ยมและนอกเหนือจากการเดินผ่านการติดตั้ง Snort จากแหล่งที่มา (ซึ่งคุณไม่จำเป็นต้องทำ) มันพูดถึงทุกสิ่งที่คุณควรทำเช่น OS X Lion Server ของคุณเพื่อช่วยปกป้อง หากคุณติดตั้งผ่าน Homebrew ให้เริ่มที่ส่วนที่ 5 (หน้า 13) ใน PDF เนื่องจากคุณไม่ต้องกังวลเกี่ยวกับการติดตั้งจากซอร์สโค้ด

เส้นปลายทางที่ดักไว้เมื่อเดินทางมาถึง

ฉันใช้Tripwireบนเครื่อง linux เพื่อตรวจจับและแจ้งเตือนการบุกรุกอย่างรวดเร็ว มันมีประสิทธิภาพ แต่มันเป็นสัตว์เดรัจฉานเล็กน้อยในการตั้งค่า สามารถดำเนินการได้เมื่อกฎถูกจับคู่กับไฟล์บันทึก แน่นอนแฮ็กเกอร์ที่ฉลาดจะรู้ว่าจะปิดการใช้งาน Tripwire ทันทีที่พวกเขาบุกเข้ามา

นิตยสารพูดถึงคำแนะนำเกี่ยวกับการตั้งค่า Tripwire บน OS X ไม่ใช่เรื่องง่ายและบทความลงท้ายด้วยการกล่าวถึงว่ายังไม่ได้รับการทดสอบ


ไฟร์วอลล์ที่ปรับตัวได้ของ OS X Lion Server ได้ทำหน้าที่ได้ดีเยี่ยมในการป้องกันผู้คน Tripwire และ Snort ให้ประโยชน์อะไรบ้างเมื่อเปรียบเทียบกับไฟร์วอลล์มาตรฐาน มันคุ้มค่ากับความพยายามหรือไม่?
bloudraak

1
Tripwire หรือ Snort ไม่ได้หมายถึงการแทนที่ไฟร์วอลล์ พวกเขาเป็นระบบตรวจจับการบุกรุก พวกเขาใช้วิธีการต่าง ๆ มากมายในการตรวจสอบบันทึกระบบของคุณสำหรับกิจกรรมที่น่าสงสัยและสามารถดำเนินการตามผลการตรวจสอบเช่นส่งอีเมลถึงคุณหรือปิดการทำงานของภูตระยะไกลหรือปิดพอร์ตเครือข่าย
Ian C.

4

คุณสามารถเพิ่ม SSH และติดตั้ง denyhosts, sshguard และ Snort, Barnyard, Base และ Swatch

ดูลิงก์เหล่านี้สำหรับรายละเอียด:

https://discussions.apple.com/thread/3565475 https://discussions.apple.com/thread/4473229?tstart=0

  1. ปิดการเข้าสู่ระบบ root และรหัสผ่าน:

    vi /etc/sshd_config

    PermitRootLogin no
    PasswordAuthentication no
    ChallengeResponseAuthenticatio no

    จากนั้นใช้ssh-keygenบนไคลเอนต์ระยะไกลเพื่อสร้างคีย์สาธารณะ / ส่วนตัวที่สามารถใช้ในการล็อกอินจากระยะไกลไปยังเซิร์ฟเวอร์:  

    client$ ssh-keygen -t rsa -b 2048 -C client_name [Securely copy ~/.ssh/id_rsa.pub from client to server.] server$ cat id_rsa.pub > ~/.ssh/known_hosts  

  2. ติดตั้ง denyhosts และ sshguard

    • sudo port install denyhosts sshguard
    • sudo port load denyhosts
    • sudo port load sshguard

    คุณสามารถกำหนดค่า denyhosts ให้บล็อกทราฟฟิกทั้งหมดไม่ใช่แค่ทราฟฟิก ssh

  3. Snort ด้วยแผนที่โลกของการโจมตี:

    https://discussions.apple.com/thread/4473229?tstart=0


3

เพื่อตอบคำถามที่ถูกวางโดยตรง ฉันมีสคริปต์อื่นที่ส่งอีเมลถึงฉันอีกครั้งประมาณเที่ยงคืนหากใครประสบความสำเร็จในการเข้าสู่ระบบผ่านทาง SSH

#!/usr/bin/env bash

mm=`date +%b`
dd=`date $1 +%d`
dd=`expr $dd`
if [ "$dd" -ge "10" ]
  then 
    dt=`echo "$mm $dd"` 
  else 
    dt=`echo "$mm  $dd"` 
fi

cat /var/log/secure.log | grep -E '(Accepted|SUCCEEDED)'| grep -E -v '(my.ip.address|192.168.1)' | grep "$dt" >> /tmp/access_granted

/usr/bin/mail -E -s "Access granted" email@myserver.com < /tmp/access_granted
rm /tmp/access_granted

แก้ไขgrepข้างต้นเพื่อไม่รวม IP คงที่ของคุณเองหากคุณต้องการและใช้ที่อยู่อีเมลของคุณ คุณสามารถรวมรหัสบางส่วนในคำตอบอื่น ๆ ของฉันเพื่อเพิ่มความล้มเหลวสำหรับ VNC


ฉันสร้างสคริปต์เพื่อทำงานตามกำหนดเวลาและฉันรออีเมลคืนนี้
bloudraak

ปัญหาในการทำสิ่งต่าง ๆ เป็นประจำทุกวันคือเวลาที่คุณได้รับผลกระทบจากการบุกรุกความเสียหายอาจเกิดขึ้นแล้ว
Ian C.

@Ian C. - เห็นด้วย แต่คุณสามารถเพิ่มความถี่ของอีเมลได้ตลอดเวลา นอกจากนี้คุณต้องมีความเชื่อมั่นในมาตรการป้องกันการบุกรุกที่คุณตั้งค่า ฉันมีระดับความเชื่อมั่นที่สมเหตุสมผลในการตั้งค่า Fail2ban ของฉัน
afragen

2

ในการขยายความล้มเหลวเล็กน้อยบนFail2banเมื่อมีการตั้งค่าและใช้งานฉันมีสคริปต์ที่ฉันเรียกใช้ก่อนเที่ยงคืนเพื่อเก็บบันทึกและส่งอีเมลถึงสิ่งที่ Fail2ban ทำในวันก่อนหน้า

สคริปต์มีดังต่อไปนี้และสามารถรันได้จาก cron หรือ plist Launchd

#!/usr/bin/env bash

mm=`date +%b`
dd=`date $1 +%d`
dd=`expr $dd`
if [ "$dd" -ge "10" ]
  then 
    dt=`echo "$mm $dd"` 
  else 
    dt=`echo "$mm  $dd"` 
fi

cat /var/log/system.log | grep "$dt" | grep org.fail2ban | grep -v COMMAND > /tmp/fail2ban_deny
cat /var/log/fail2ban.log | grep -E '(WARN|ERR|rotation|target)' | grep `date $1 +%Y-%m-%d` >> /tmp/fail2ban_deny
cat /var/log/ipfw.log | grep TCP | grep "$dt" >> /tmp/fail2ban_deny
cat /var/log/secure.log | grep VNC | grep FAILED | grep "$dt" >> /tmp/fail2ban_deny


/usr/bin/mail -E -s "Fail2ban ipfw" email@yourserver.com < /tmp/fail2ban_deny
rm /tmp/fail2ban_deny

แน่นอนคุณจะต้องใช้ที่อยู่อีเมลที่คุณเลือก

การตั้งค่า Fail2ban เป็นปัญหาอื่นทั้งหมด ฉันได้เขียนเกี่ยวกับมันอย่างกว้างขวาง


0

มันค่อนข้างง่ายในการติดตั้งปลั๊กอิน Google Authenticator PAM บน Mac OS X หากคุณติดตั้งคอมไพเลอร์บรรทัดคำสั่งรหัส X รหัสและคำแนะนำอยู่ที่นี่:

https://code.google.com/p/google-authenticator/wiki/PamModuleInstructions

เมื่อคุณเริ่มต้นโทเค็นของคุณ (สร้างรหัสที่คุณป้อนลงในแอพในโทรศัพท์ของคุณ) คุณจะมีการรับรองความถูกต้องสองระดับเพื่อปกป้องเครื่องของคุณ บัญชีใด ๆ ที่ไม่มีโทเค็นเริ่มต้นจะไม่สามารถเข้าสู่ระบบได้ดังนั้นหากคุณไม่ต้องการอนุญาตให้เข้าสู่ระบบรูทอย่าเริ่มต้นคีย์สำหรับบัญชีนั้น

แต่อย่างจริงจังบางอย่างเช่น DenyHosts เหมาะสมถ้าคุณต้องเปิด SSH บนอินเทอร์เน็ต น่าเสียดายที่ตั้งแต่ Mac OS X V10.8 Apple ได้ถอด tcpwrappers ออกจาก SSH daemon ดังนั้นมันจึงไม่สนใจ /etc/deny.hosts ซึ่งเป็นสิ่งที่โง่ถ้าคุณถามฉันลบคุณลักษณะความปลอดภัยออก

เพื่อแก้ปัญหานั้นฉันใช้ MacPorts เพื่อติดตั้ง openssh daemon ที่ทันสมัยและกู้คืนฟังก์ชันการทำงานของ tcpwrappers แบบเต็มแก้ไขและใช้ DenyHosts daemon เพื่อตรวจสอบ /var/log/system.log และห้าม IP ที่คาดเดาการเข้าสู่ระบบและรหัสผ่าน . และอย่าลืมอัปเดต MacPort และตรวจสอบ / ติดตั้ง openssh / DenyHosts ทุกครั้งที่คุณอัพเกรดระบบปฏิบัติการ

โชคดี!


0

ฉันรู้ว่านี่เป็นโพสต์เก่า แต่ฉันคิดว่านี่อาจช่วยคนที่ไม่สามารถตั้งโปรแกรมหรือประหยัดเวลาในการกำจัดเว็บ ฉันเพิ่งเขียนสิ่งนี้ในช่วงพักเที่ยงของฉันและมันจะส่งอีเมลถึงความพยายามที่ประสบความสำเร็จและล้มเหลวเช่นเดียวกับ IP ที่ถูกบล็อกผ่านความพยายามที่ล้มเหลว โปรแกรมเขียนใน Ruby Sendmail ถูกติดตั้งพร้อมกับเมลและไฟล์หางอัญมณี

รหัสที่มาด้านล่าง:

#!/usr/local/bin/ruby

require 'mail'
require 'file-tail'

def sendMail(mail_subject,mail_body,dest_email,port)
  Mail.defaults do
    delivery_method :smtp, address: "localhost", port: port
  end

  mail = Mail.new do
    from     'root@localhost.com'
    to        dest_email
    subject   mail_subject
    body      mail_body
  end

  mail.delivery_method :sendmail
  mail.deliver
end

File.open('/var/log/auth.log') do |log|
  log.extend(File::Tail)
  log.interval = 10
  log.backward(1)
  log.tail do |line| 
    puts line if line.match(/ssh.*accepted password.*$/i)
    sendMail('New SSH Connection',line,'youremail@gmail.com',445) if line.match(/ssh.*accepted password.*$/i)

    puts line if line.match(/ssh.*failed password.*$/i)
    sendMail('Failed SSH attempt',line,'youremail@gmail.com',445) if line.match(/ssh.*failed password.*$/i)

    puts line if line.match(/sshguard.*$/i)
    sendMail('SSH IP Blocked', line,'youremail@gmail.com',445) if line.match(/sshguard.*$/i)
  end
end
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.