Ricevere notifiche quando qualcuno accede a un server tramite SSH o Desktop remoto

11

Ho un mini server Mac che esegue OS X Lion Server 10.7.3. Funziona praticamente senza sorveglianza senza problemi. Tuttavia, il server è in costante "attacco" in base ai log. Sembra che il firewall e la sicurezza stiano reggendo.

C'è qualche applicazione / script che può inviarmi una e-mail ogni volta che qualcuno / qualcuno accede al server usando SSH, Admin Tools o ARD?

Dato che la macchina funziona incustodita, senza testa in un datacenter in una città diversa, sono preoccupato che qualcuno (per pura persistenza) riesca a decifrare una password o trovare un compromesso sul sistema. Sapere che sarò avvisato mi aiuterà a rilassarmi.

    
posta bloudraak 24.03.2012 - 15:16
fonte

6 risposte

4

La tua migliore difesa è sempre quella di disattivare i servizi non necessari. Se non stai utilizzando il desktop remoto: spegnilo. Se non stai utilizzando i server HTTP o FTP: disattivali. Meno servizi in esecuzione, meno punti di accesso per eventuali intrusi da sfruttare.

Oltre a bloccarlo, ci sono alcuni prodotti gratuiti e open source che sono compatibili con OS X per eseguire il rilevamento delle intrusioni sulla tua macchina.

Snort

Anche se non l'ho eseguito personalmente, ho colleghi che sanno e si fidano di esso per il rilevamento delle intrusioni. È compatibile con BSD e quindi si adatta perfettamente a OS X. Un altro vantaggio di Snort è disponibile come Homebrew pacchetto:

> 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.

In questo modo si ottiene un percorso semplificato per l'installazione e alcuni si fidano del fatto che sia compatibile con OS X e venga eseguito lì. Con Homebrew installato hai solo bisogno di fare:

> brew install snort

E sei pronto per iniziare.

Dai un'occhiata a questo Snort per la guida alla configurazione di OS X Lion Server che la comunità Snort fornisce per iniziare con la scrittura delle regole per la tua macchina OS X. Questo è un documento eccezionale e, oltre a passare attraverso l'installazione di Snort dal sorgente (che non è necessario fare), parla di tutte le cose che dovresti fare con l'istanza di OS X Lion Server per proteggerla. 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 allarmi tempestivi. È efficace ma è un po 'una bestia da impostare. Può eseguire azioni quando le regole sono abbinate ai file di registro. Ovviamente, un hacker esperto saprà di disabilitare Tripwire non appena si intrometteranno, in modo che non finiscano con l'interruzione della sessione.

Il suggerimento su MacWorld parla di impostazione di Tripwire su OS X . Non è semplice e l'articolo termina dicendo che non è stato testato.

    
risposta data 24.03.2012 - 17:34
fonte
4

Puoi rafforzare ssh e installare denyhosts, sshguard e Snort, Barnyard, Base e Swatch.

Vedi questi link per i dettagli:

link link

  1. Disattiva i login di root e password:

    vi /etc/sshd_config

    PermitRootLogin no
    PasswordAuthentication no
    ChallengeResponseAuthenticatio no

    Quindi utilizzare ssh-keygen sul 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:

    link

risposta data 28.10.2012 - 14:54
fonte
3

Per rispondere direttamente alla domanda posta. Ho un altro script che mi invia via email, ancora una volta, intorno a mezzanotte, se qualcuno accede correttamente 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 protected] < /tmp/access_granted
rm /tmp/access_granted

Modifica% co_de sopra per escludere il tuo IP fisso, se lo desideri, e per utilizzare il tuo indirizzo email. È possibile combinare parte del codice nella mia altra risposta per aggiungere errori per VNC.

    
risposta data 25.03.2012 - 18:29
fonte
2

Per espandere un po 'su Fail2ban , una volta che è impostato e in esecuzione ho uno script che Corro poco prima di mezzanotte che raschia i log e mi invia un'email che Fail2ban ha fatto per il giorno precedente.

Lo script è il seguente e può essere eseguito da cron o da 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 protected] < /tmp/fail2ban_deny
rm /tmp/fail2ban_deny

Ovviamente dovrai utilizzare l'indirizzo email di tua scelta.

Configurare Fail2ban è un altro problema. Ne ho scritto ampiamente.

    
risposta data 25.03.2012 - 18:18
fonte
0

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

link

Una volta inizializzato il token (generare un codice che si alimenta all'app sul telefono), si avrà un'autenticazione a due fattori per proteggere la macchina. Qualsiasi account senza un token inizializzato non sarà in grado di accedere, quindi se non si desidera consentire l'accesso root, non inizializzare una chiave per quell'account.

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

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

Buona fortuna!

    
risposta data 17.01.2015 - 17:55
fonte
0

Mi rendo conto che si tratta di un vecchio post, ma ho pensato che questo potrebbe aiutare qualcuno che non può programmare o salvarli perlustrando il web. L'ho appena scritto durante la pausa pranzo e invierà tramite e-mail tentativi riusciti e non riusciti e IP bloccati tramite tentativi falliti. Il programma è scritto in Ruby. Sendmail è installato insieme alle gemme mail 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     '[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
    
risposta data 28.11.2016 - 19:44
fonte

Leggi altre domande sui tag