Benachrichtigung erhalten, wenn sich jemand mit SSH oder Remotedesktop bei einem Server anmeldet


13

Ich habe einen Mac Mini Server mit OS X Lion Server 10.7.3. Es läuft so ziemlich unbeaufsichtigt ohne Probleme. Der Server wird jedoch gemäß den Protokollen ständig "angegriffen". Die Firewall und die Sicherheit halten anscheinend an.

Gibt es eine Anwendung / ein Skript, die / das mir eine E-Mail senden kann, wenn sich jemand / sie mit SSH, Admin Tools oder ARD beim Server anmeldet?

Da der Computer unbeaufsichtigt und kopflos in einem Rechenzentrum in einer anderen Stadt läuft, befürchte ich, dass es jemandem (durch reine Beharrlichkeit) gelingt, ein Kennwort zu knacken oder einen Kompromiss im System zu finden. Zu wissen, dass ich alarmiert werde, wird meine Gedanken beruhigen.


2
Keine wirkliche Antwort, daher ein Kommentar: Haben Sie darüber nachgedacht, etwas wie fail2ban ([How-Tow] ( fail2ban.org/wiki/index.php/HOWTO_Mac_OS_X_Server_(10.5) ) zu verwenden? Auf diese Weise können Sie IPs verbieten, von denen Sie angegriffen werden Legen Sie die Regeln fest, wie lange sie gesperrt sind usw. Es würde Ihnen helfen, zu verhindern, dass Sie gehackt werden. Und das ist vielleicht hilfreicher, als für jeden Anmeldeversuch eine E-Mail zu erhalten.
boretom

Antworten:


4

Ihre beste Verteidigung besteht immer darin, unnötige Dienste auszuschalten. Wenn Sie keinen Remotedesktop verwenden: Schalten Sie ihn aus. Wenn Sie die HTTP- oder FTP-Server nicht verwenden: Schalten Sie sie aus. Weniger Dienste werden ausgeführt, weniger Einstiegspunkte, die möglicherweise Eindringlinge ausnutzen können.

Abgesehen davon, dass es gesperrt ist, gibt es einige kostenlose und Open-Source-Produkte, die OS X-freundlich sind und die Sie zur Erkennung von Eindringlingen auf Ihrem Computer verwenden können.

Schnauben

Obwohl ich es nicht persönlich betrieben habe, habe ich Kollegen, die es kennen und ihm für die Erkennung von Eindringlingen vertrauen. Es ist BSD-kompatibel und passt daher gut zu OS X. Ein weiterer Vorteil von Snort ist, dass es als Homebrew- Paket erhältlich ist:

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

So erhalten Sie einen vereinfachten Pfad zur Installation und vertrauen darauf, dass es gut auf OS X portiert und dort ausgeführt wird. Mit Homebrew installiert Sie tun müssen:

> brew install snort

Und Sie sind bereit, damit zu beginnen.

Lesen Sie diese Installationsanleitung für Snort für OS X Lion Server , die von der Snort-Community bereitgestellt wird, um mit dem Schreiben von Regeln für Ihren OS X-Computer zu beginnen. Das ist ein großartiges Dokument. Zusätzlich zur Installation von Snort aus dem Quellcode (was Sie nicht tun müssen) werden alle Dinge beschrieben, die Sie mit Ihrer OS X Lion Server-Instanz tun sollten, um sie zu schützen. Wenn Sie über Homebrew installieren, beginnen Sie mit Abschnitt 5 (Seite 13) im PDF, da Sie sich nicht um die Installation aus dem Quellcode kümmern müssen.

Tripwire

Ich habe Tripwire auf Linux-Computern ausgeführt, um eine schnelle Erkennung und Warnung von Eindringlingen durchzuführen. Es ist effektiv, aber es ist ein bisschen wie ein Biest, es einzurichten. Es kann Aktionen ausführen, wenn Regeln mit Protokolldateien abgeglichen werden. Natürlich wird ein versierter Hacker wissen, dass er Tripwire deaktivieren muss, sobald er einbricht, damit seine Sitzung nicht unterbrochen wird.

Die MacWorld Hinweis spricht über die Einrichtung von Tripwire auf OS X . Es ist nicht einfach und der Artikel endet mit der Erwähnung, dass es nicht getestet wurde.


Die adaptive Firewall von OS X Lion Server hat großartige Arbeit geleistet, um Menschen fernzuhalten. Welchen Vorteil bieten mir Tripwire und Snort im Vergleich zur Standard-Firewall? Lohnt sich die Mühe?
Bloudraak

1
Weder Tripwire noch Snort sind als Firewall-Ersatz gedacht. Sie sind Intrusion Detection-Systeme. Sie verwenden verschiedene Ansätze zur Überwachung Ihrer Systemprotokolle auf verdächtige Aktivitäten und können Maßnahmen ergreifen, die auf der Überwachung von Ergebnissen wie dem Versenden von E-Mails oder dem Abschalten von Remote-Daemons oder dem Schließen von Netzwerkports basieren.
Ian C.

4

Sie können ssh härten und Denyhosts, sshguard und Snort, Barnyard, Base und Swatch installieren.

Siehe diese Links für Details:

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

  1. Deaktivieren Sie Root- und Passwort-Anmeldungen:

    vi /etc/sshd_config

    PermitRootLogin no
    PasswordAuthentication no
    ChallengeResponseAuthenticatio no

    Verwenden Sie dann ssh-keygenauf dem Remoteclient öffentliche / private Schlüssel, mit denen Sie sich remote beim Server anmelden können:  

    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. Installieren Sie Denyhosts und Sshguard.

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

    Sie können Denyhosts so konfigurieren, dass der gesamte Datenverkehr blockiert wird, nicht nur der SSH-Datenverkehr.

  3. Schnauben mit einer Weltkarte der Angriffe:

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


3

Um die gestellte Frage direkt zu beantworten. Ich habe ein anderes Skript, das mir gegen Mitternacht erneut eine E-Mail sendet, wenn sich jemand erfolgreich über ssh anmeldet.

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

Bearbeiten Sie das grepObige, um Ihre eigene feste IP-Adresse auszuschließen, wenn Sie möchten, und um Ihre E-Mail-Adresse zu verwenden. Sie können einen Teil des Codes in meiner anderen Antwort kombinieren, um Fehler für VNC hinzuzufügen.


Ich habe das Skript so erstellt, dass es nach einem Zeitplan ausgeführt wird, und warte auf die heutige E-Mail.
Bloudraak

Das Problem bei der täglichen Arbeit besteht darin, dass der Schaden möglicherweise bereits angerichtet ist, wenn Sie den Wind des Eindringens bemerken.
Ian C.

@ Ian C. - stimmte zu, aber Sie können die Häufigkeit der E-Mail jederzeit erhöhen. Darüber hinaus müssen Sie ein gewisses Vertrauen in die von Ihnen eingerichteten Maßnahmen zur Verhinderung von Eindringlingen haben. Ich habe ein sehr vernünftiges Maß an Vertrauen in mein Fail2ban-Setup.
Fragen

2

Um ein wenig zu erweitern Fail2ban , sobald es eingerichtet ist und läuft ich ein Skript, dass ich kurz vor Mitternacht laufen , dass die Protokolle Schrammen und E - Mails Sie mir , was Fail2ban wurde für den vorherigen Tag zu tun.

Das Skript lautet wie folgt und kann von cron oder einer Launchd-Liste ausgeführt werden.

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

Sie müssen natürlich die E-Mail-Adresse Ihrer Wahl verwenden.

Das Einrichten von Fail2ban ist ein ganz anderes Problem. Ich habe ausführlich darüber geschrieben.


0

Es ist ziemlich einfach, das Google Authenticator PAM-Plugin unter Mac OS X zu installieren, wenn Sie den X-Code-Befehlszeilen-Compiler installiert haben. Der Code und die Anweisungen finden Sie hier:

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

Sobald Sie Ihr Token initialisiert haben (generieren Sie einen Code, den Sie der App auf Ihrem Telefon zuführen), verfügen Sie über eine Zwei-Faktor-Authentifizierung, um Ihren Computer zu schützen. Ein Konto ohne initialisiertes Token kann sich nicht anmelden. Wenn Sie also die Root-Anmeldung nicht zulassen möchten, initialisieren Sie keinen Schlüssel für dieses Konto.

Aber im Ernst, so etwas wie DenyHosts macht nur Sinn, wenn Sie SSH im Internet offen halten müssen. Leider hat Apple seit Mac OS X V10.8 die Unterstützung von tcpwrappers vom SSH-Daemon entfernt, sodass /etc/deny.hosts ignoriert wird. Dies war ein dummer Schachzug, wenn Sie mich fragen, eine Sicherheitsfunktion zu entfernen.

Um dies zu umgehen, habe ich MacPorts verwendet, um einen aktuellen openssh-Daemon zu installieren und die volle tcpwrappers-Funktionalität wiederherzustellen. Ich habe den DenyHosts-Daemon bearbeitet, um /var/log/system.log zu überwachen und IPs zu sperren, die Anmeldungen und Kennwörter erraten . Vergessen Sie nicht, MacPorts zu aktualisieren und openssh / DenyHosts bei jedem Upgrade des Betriebssystems zu überprüfen / neu zu installieren.

Viel Glück!


0

Mir ist klar, dass dies ein alter Beitrag ist, aber ich dachte, dies könnte jemandem helfen, der nicht programmieren oder Zeit sparen kann, indem er das Web durchsucht. Ich habe dies gerade in meiner Mittagspause geschrieben und es werden erfolgreiche und fehlgeschlagene Versuche sowie blockierte IPs über fehlgeschlagene Versuche per E-Mail gesendet. Das Programm ist in Ruby geschrieben. Sendmail wird zusammen mit den Mail- und File-Tail-Edelsteinen installiert.

Quellcode unten:

#!/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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.