Ricevi una notifica quando qualcuno accede a un server utilizzando SSH o Desktop remoto


13

Ho un mini server Mac con OS X Lion Server 10.7.3. Praticamente funziona incustodito senza problemi. Tuttavia, il server è in costante "attacco" in base ai registri. Sembra che il firewall e la sicurezza stiano sostenendo.

Esistono applicazioni / script che possono inviarmi un'e-mail ogni volta che qualcuno / qualcuno accede al server usando SSH, Admin Tools o ARD?

Poiché la macchina funziona incustodita, senza testa in un datacenter in una città diversa, sono preoccupato che qualcuno (attraverso la persistenza pura) riesca a decifrare una password o trovare un compromesso sul sistema. Sapere che verrò avvisato mi calmerà la mente.


2
Non proprio una risposta quindi un commento: hai considerato di usare qualcosa come fail2ban ([How-Tow] ( fail2ban.org/wiki/index.php/HOWTO_Mac_OS_X_Server_(10.5) )? In questo modo puoi vietare gli IP da cui sei attaccato. impostare le regole per quanto tempo saranno banditi, ecc. Ti aiuterebbe a prevenire gli hacker. E questo potrebbe essere più utile che ricevere un'email per ogni tentativo di accesso.
Boretom

Risposte:


4

La tua migliore difesa è sempre quella di disattivare i servizi non necessari. Se non si utilizza il desktop remoto: disattivarlo. Se non si utilizzano i server HTTP o FTP: disattivarli. Meno servizi in esecuzione, meno punti di accesso per eventuali intrusi da sfruttare.

Oltre a bloccarlo, ci sono alcuni prodotti gratuiti e open source compatibili con OS X che puoi guardare per fare il rilevamento delle intrusioni sul tuo computer.

sbuffo

Sebbene non lo abbia eseguito personalmente, ho colleghi che lo conoscono e si fidano per il rilevamento delle intrusioni. È compatibile con BSD, quindi lo rende perfetto per OS X. Un altro vantaggio di Snort è che è disponibile come pacchetto 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.

Quindi ottieni un percorso semplificato per l'installazione e un po 'di fiducia nel fatto che porti bene su OS X e funzioni lì. Con Homebrew installato devi solo fare:

> brew install snort

E sei pronto per iniziare.

Dai un'occhiata a questa guida all'installazione di Snort per OS X Lion Server fornita dalla community di Snort per iniziare a scrivere le regole per la tua macchina OS X. È un ottimo documento e, oltre a completare l'installazione di Snort dal sorgente (cosa che non devi fare), parla di tutto ciò che dovresti fare sull'istanza di OS X Lion Server per proteggerlo. Se si installa tramite Homebrew, iniziare dalla Sezione 5 (pagina 13) nel PDF poiché non è necessario preoccuparsi di installarlo dal codice sorgente.

Tripwire

Ho eseguito Tripwire su macchine linux per eseguire rilevamenti e avvisi rapidi sulle intrusioni. È efficace ma è un po 'una bestia da allestire. Può eseguire azioni quando le regole vengono confrontate con i file di registro. Ovviamente, un hacker esperto saprà disabilitare Tripwire non appena entrano in modo da non finire con la sessione interrotta.

Il suggerimento parla MacWorld circa la creazione di Tripwire su OS X . Non è semplice e l'articolo si conclude menzionando che non è stato testato.


Il firewall adattivo OS X Lion Server ha fatto un ottimo lavoro tenendo fuori le persone. Quali vantaggi mi offre Tripwire e Snort rispetto al firewall standard? Ne vale la pena?
Bloudraak,

1
Né Tripwire né Snort sono pensati per essere sostituti del firewall. Sono sistemi di rilevamento delle intrusioni. Usano una serie di approcci diversi per monitorare i registri di sistema per attività sospette e possono agire in base a risultati di monitoraggio come l'invio di e-mail o la chiusura di demoni remoti o la chiusura delle porte di rete.
Ian C.

4

È possibile potenziare ssh e installare denyhosts, sshguard e Snort, Barnyard, Base e Swatch.

Vedi questi link per i dettagli:

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

  1. Disattiva accessi root e password:

    vi /etc/sshd_config

    PermitRootLogin no
    PasswordAuthentication no
    ChallengeResponseAuthenticatio no

    Quindi utilizzare ssh-keygensul client remoto per generare chiavi pubbliche / private che possono essere utilizzate per accedere in remoto al 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. Installa denyhosts e sshguard.

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

    Puoi configurare denyhosts per bloccare tutto il traffico, non solo il traffico ssh.

  3. Snort, con una mappa mondiale degli attacchi:

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


3

Per rispondere direttamente alla domanda posta. Ho un'altra sceneggiatura che mi manda ancora una volta, verso mezzanotte, se qualcuno accede con successo tramite 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

Modifica quanto grepsopra per escludere il tuo IP fisso, se lo desideri, e per utilizzare il tuo indirizzo email. È possibile combinare parte del codice nell'altra mia risposta per aggiungere errori per VNC.


Ho creato lo script per l'esecuzione secondo un programma e sto aspettando l'e-mail di stasera.
Bloudraak,

Il problema nel fare le cose su base giornaliera è quando si prende il vento dell'intrusione, il danno potrebbe già essere stato fatto.
Ian C.

@Ian C. - d'accordo, ma puoi sempre aumentare la frequenza dell'email. Inoltre, devi avere una certa fiducia nelle misure di prevenzione delle intrusioni che hai impostato. Ho un livello di confidenza molto ragionevole nella mia configurazione Fail2ban.
Afragen,

2

Per espandere un po 'su Fail2ban , una volta che è impostato e in esecuzione ho uno script che eseguo poco prima di mezzanotte che gratta i registri e mi invia per e-mail ciò che Fail2ban ha fatto per il giorno precedente.

Lo script è il seguente e può essere eseguito da cron o da un programma di avvio.

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

Ovviamente dovrai usare l'indirizzo email che preferisci.

L'impostazione di Fail2ban è un altro problema. Ne ho scritto ampiamente.


0

È abbastanza semplice installare il plug-in PAM di Google Authenticator su Mac OS X se è installato il compilatore della riga di comando del codice X. Il codice e le istruzioni sono qui:

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

Una volta inizializzato il token (genera un codice da inviare all'app sul telefono), avrai l'autenticazione a due fattori per proteggere il tuo computer. Qualsiasi account senza un token inizializzato non sarà in grado di accedere, quindi se non si desidera consentire l'accesso come root, non inizializzare una chiave per quell'account.

Ma seriamente, qualcosa come DenyHosts ha senso solo se devi mantenere SSH aperto su Internet. Sfortunatamente, dal momento che Mac OS X V10.8, Apple ha rimosso il supporto tcpwrappers dal demone SSH, quindi ignora /etc/deny.hosts, che è stata una mossa stupida, se me lo chiedi, rimuovendo una funzionalità di sicurezza.

Per ovviare a questo, ho usato MacPorts per installare un demone openssh aggiornato e ripristinare la piena funzionalità tcpwrappers, modificato e usato il demone DenyHosts per monitorare /var/log/system.log e vietare gli IP che indovinano accessi e password . E non dimenticare di aggiornare MacPorts e controllare / reinstallare openssh / DenyHosts ogni volta che aggiorni il sistema operativo.

In bocca al lupo!


0

Mi rendo conto che si tratta di un vecchio post, ma ho pensato che ciò potesse aiutare qualcuno che non può programmare o risparmiare tempo a esplorare il Web. Ho appena scritto questo durante la pausa pranzo e invierà e-mail di tentativi riusciti e non riusciti e IP bloccati tramite tentativi non riusciti. Il programma è scritto in Ruby. Sendmail è installato insieme alle gemme di posta e file-tail.

Codice sorgente di seguito:

#!/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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.