Mendapatkan pemberitahuan ketika seseorang masuk ke server menggunakan SSH atau Remote Desktop

13

Saya memiliki server mini mac yang menjalankan OS X Lion Server 10.7.3. Cukup banyak berjalan tanpa pengawasan. Namun, server berada di bawah "serangan" konstan menurut log. Firewall dan keamanan sepertinya menahan.

Apakah ada aplikasi / skrip yang dapat mengirim saya email setiap kali seseorang / siapa pun masuk ke server menggunakan SSH, Alat Admin atau ARD?

Karena mesin berjalan tanpa pengawasan, tanpa kepala di pusat data di kota lain, saya khawatir bahwa seseorang mungkin (melalui ketekunan murni) berhasil memecahkan kata sandi atau menemukan kompromi pada sistem. Mengetahui saya akan diberitahu akan membuat pikiran saya tenang.

bloudraak
sumber
2
Karena itu bukan jawaban karena itu komentar: apakah Anda pernah mempertimbangkan untuk menggunakan sesuatu seperti fail2ban ([How-Tow] ( fail2ban.org/wiki/index.php/HOWTO_Mac_OS_X_Server_(10.5) )? Dengan cara itu Anda dapat memblokir IP yang Anda serang. tetapkan aturan berapa lama mereka dilarang, dll. Ini akan membantu Anda mencegah diretas. Dan itu mungkin lebih membantu daripada mendapatkan email untuk setiap upaya masuk
boretom

Jawaban:

4

Pertahanan terbaik Anda selalu mematikan layanan yang tidak perlu. Jika Anda tidak menggunakan remote desktop: matikan. Jika Anda tidak menggunakan server HTTP atau FTP: matikan. Semakin sedikit layanan yang berjalan, semakin sedikit titik masuk yang dapat dieksploitasi oleh pengganggu.

Selain menguncinya, ada beberapa produk sumber terbuka dan gratis yang ramah OS X yang dapat Anda lihat untuk melakukan deteksi intrusi pada mesin Anda.

Mendengus

Meskipun saya belum menjalankannya secara pribadi, saya memiliki rekan yang tahu dan memercayainya untuk deteksi intrusi. Ini kompatibel dengan BSD sehingga cocok untuk OS X. Kelebihan lain dari Snort adalah tersedia sebagai paket 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.

Jadi Anda mendapatkan jalur yang disederhanakan untuk instalasi dan beberapa kepercayaan pada fakta bahwa itu port dengan baik ke OS X dan berjalan di sana. Dengan Homebrew terinstal, Anda hanya perlu melakukan:

> brew install snort

Dan Anda siap untuk memulainya.

Lihatlah panduan pengaturan Snort untuk OS X Lion Server ini yang disediakan oleh komunitas Snort untuk memulai penulisan aturan untuk mesin OS X Anda. Itu dokumen yang bagus dan, selain berjalan melalui menginstal Snort dari sumber (yang tidak perlu Anda lakukan), ia berbicara tentang semua hal yang harus Anda lakukan misalnya OS Server X Lion Server Anda untuk membantu melindunginya. Jika Anda menginstal melalui Homebrew, mulailah pada Bagian 5 (halaman 13) dalam PDF karena Anda tidak perlu khawatir menginstalnya dari kode sumber.

Tripwire

Saya telah menjalankan Tripwire pada mesin linux untuk melakukan deteksi dan peringatan intrusi yang cepat. Ini efektif tetapi agak sulit untuk diatur. Itu bisa melakukan tindakan ketika aturan dicocokkan dengan file log. Tentu saja, peretas yang cerdas akan tahu untuk menonaktifkan Tripwire segera setelah mereka masuk sehingga mereka tidak berakhir dengan sesi mereka terputus.

The MacWorld pembicaraan petunjuk tentang pengaturan Tripwire pada OS X . Itu tidak sederhana dan artikel itu berakhir dengan menyebutkan bahwa itu belum diuji.

Ian C.
sumber
Firewall adaptif OS X Lion Server telah melakukan pekerjaan yang hebat untuk mencegah orang keluar. Apa manfaat yang diberikan Tripwire dan Snort dibandingkan dengan firewall standar? Apakah ini sepadan dengan usaha?
bloudraak
1
Tripwire atau Snort tidak dimaksudkan sebagai pengganti firewall. Mereka adalah sistem deteksi intrusi. Mereka menggunakan banyak pendekatan berbeda untuk memantau log sistem Anda untuk aktivitas mencurigakan dan dapat mengambil tindakan berdasarkan hasil pemantauan seperti mengirim email kepada Anda atau mematikan daemon jarak jauh atau menutup port jaringan.
Ian C.
4

Anda dapat mengeraskan ssh dan menginstal denyhosts, sshguard, dan Snort, Barnyard, Base, dan Swatch.

Lihat tautan ini untuk perincian:

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

  1. Matikan login root dan kata sandi:

    vi /etc/sshd_config

    PermitRootLogin no
    PasswordAuthentication no
    ChallengeResponseAuthenticatio no

    Kemudian gunakan ssh-keygenpada klien jarak jauh untuk menghasilkan kunci publik / pribadi yang dapat digunakan untuk login jarak jauh ke server:  

    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. Instal denyhosts dan sshguard.

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

    Anda dapat mengonfigurasi denyhosts untuk memblokir semua lalu lintas, bukan hanya lalu lintas ssh.

  3. Snort, dengan peta serangan dunia:

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

sss
sumber
3

Untuk langsung menjawab pertanyaan yang diajukan. Saya punya skrip lain yang mengirimi saya email, lagi, sekitar tengah malam, jika ada yang berhasil masuk melalui 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

Edit di grepatas untuk mengecualikan IP tetap Anda sendiri, jika Anda mau, dan untuk menggunakan alamat email Anda. Anda dapat menggabungkan beberapa kode di jawaban saya yang lain untuk menambahkan kegagalan untuk VNC.

afragen
sumber
Saya membuat skrip untuk dijalankan sesuai jadwal dan saya sedang menunggu email malam ini.
bloudraak
Masalah dengan melakukan hal-hal setiap hari adalah pada saat Anda menangkap gangguan, kerusakan mungkin sudah dilakukan.
Ian C.
@Ian C. - setuju, tetapi Anda selalu dapat meningkatkan frekuensi email. Selain itu, Anda harus memiliki keyakinan pada langkah-langkah pencegahan intrusi yang Anda buat. Saya memiliki tingkat kepercayaan yang sangat wajar dalam pengaturan Fail2ban saya.
afragen
2

Untuk sedikit memperluas Fail2ban , setelah diatur dan dijalankan saya memiliki skrip yang saya jalankan sebelum tengah malam yang mengikis log dan mengirimi saya email tentang apa yang telah dilakukan Fail2ban untuk hari sebelumnya.

Scriptnya adalah sebagai berikut dan dapat dijalankan dari cron atau launchd plist.

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

Anda jelas perlu menggunakan alamat email pilihan Anda.

Menyiapkan Fail2ban adalah masalah lain. Saya sudah banyak menulis tentang itu.

afragen
sumber
0

Cukup mudah untuk menginstal plugin PAM Google Authenticator pada Mac OS X jika Anda memiliki kompiler baris perintah kode X yang diinstal. Kode dan instruksi ada di sini:

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

Setelah Anda menginisialisasi token Anda (menghasilkan kode yang Anda makan ke aplikasi di ponsel Anda), Anda akan memiliki dua otentikasi faktor untuk melindungi mesin Anda. Akun apa pun tanpa token yang diinisialisasi tidak akan dapat masuk, jadi jika Anda tidak ingin mengizinkan login root, jangan menginisialisasi kunci untuk akun itu.

Tapi serius, sesuatu seperti DenyHosts masuk akal jika Anda harus membuka SSH di internet. Sayangnya, sejak Mac OS X V10.8, Apple menghapus dukungan tcpwrappers dari daemon SSH, sehingga mengabaikan /etc/deny.hosts, yang merupakan langkah bodoh, jika Anda bertanya kepada saya, menghapus fitur keamanan.

Untuk mengatasinya, saya menggunakan MacPorts untuk menginstal daemon openssh terbaru, dan mengembalikan fungsionalitas tcpwrappers penuh, diedit dan menggunakan daemon DenyHosts untuk memonitor /var/log/system.log dan melarang IP yang menebak login dan kata sandi. . Dan jangan lupa untuk memperbarui MacPorts dan periksa / instal ulang openssh / DenyHosts setiap kali Anda meningkatkan OS.

Semoga berhasil!

pengguna2895719
sumber
0

Saya menyadari bahwa ini adalah posting lama tapi saya pikir ini mungkin membantu seseorang yang tidak dapat memprogram atau menghemat waktu menjelajahi web. Saya baru saja menulis ini pada istirahat makan siang saya dan itu akan mengirimkan upaya yang berhasil dan gagal serta IP yang diblokir melalui upaya yang gagal. Program ini ditulis dalam Ruby. Sendmail diinstal bersama dengan permata email dan file-tail.

Kode sumber di bawah ini:

#!/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     '[email protected]'
    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,'[email protected]',445) if line.match(/ssh.*accepted password.*$/i)

    puts line if line.match(/ssh.*failed password.*$/i)
    sendMail('Failed SSH attempt',line,'[email protected]',445) if line.match(/ssh.*failed password.*$/i)

    puts line if line.match(/sshguard.*$/i)
    sendMail('SSH IP Blocked', line,'[email protected]',445) if line.match(/sshguard.*$/i)
  end
end
Aguevara
sumber