Ich habe einen Mac Mini-Server, auf dem OS X Lion Server 10.7.3 ausgeführt wird. Es läuft so gut wie unbeaufsichtigt ohne Probleme. Allerdings wird der Server laut den Logs ständig „angegriffen“. Die Firewall und die Sicherheit halten anscheinend stand.
Gibt es eine Anwendung/ein Skript, das mir eine E-Mail senden kann, wenn sich jemand/jeder über SSH, Admin Tools oder ARD beim Server anmeldet?
Da die Maschine unbeaufsichtigt und kopflos in einem Rechenzentrum in einer anderen Stadt läuft, mache ich mir Sorgen, dass es jemandem (durch reine Beharrlichkeit) gelingt, ein Passwort zu knacken oder eine Kompromittierung des Systems zu finden. Zu wissen, dass ich benachrichtigt werde, wird mich beruhigen.
Ihre beste Verteidigung besteht immer darin, unnötige Dienste zu deaktivieren. Wenn Sie Remote Desktop nicht verwenden: Deaktivieren Sie es. Wenn Sie die HTTP- oder FTP-Server nicht verwenden: schalten Sie sie aus. Weniger laufende Dienste, weniger Angriffspunkte für potenzielle Eindringlinge.
Abgesehen davon, dass Sie es sperren, gibt es einige kostenlose und Open-Source-Produkte, die OS X-freundlich sind und die Sie sich ansehen können, um Einbruchserkennung auf Ihrem Computer durchzuführen.
Obwohl ich es nicht persönlich betrieben habe, habe ich Kollegen, die es kennen und denen es für die Erkennung von Eindringlingen vertraut. Es ist BSD-kompatibel und passt daher gut zu OS X. Ein weiterer Vorteil von Snort ist, dass es als Homebrew -Paket verfügbar 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.
Wenn Homebrew installiert ist, müssen Sie nur Folgendes tun:
> brew install snort
Und Sie sind bereit, damit anzufangen.
Das ist ein großartiges Dokument und neben der Anleitung zur Installation von Snort aus dem Quellcode (was Sie nicht tun müssen) spricht es über all die Dinge, die Sie tun sollten, um Ihre OS X Lion Server-Instanz zu schützen.
Ich habe Tripwire auf Linux-Rechnern ausgeführt, um eine schnelle Erkennung und Alarmierung von Eindringlingen durchzuführen. Es ist effektiv, aber es ist ein bisschen wie ein Biest einzurichten. Es kann Aktionen ausführen, wenn Regeln mit Protokolldateien abgeglichen werden. Natürlich weiß ein versierter Hacker, dass er Tripwire deaktivieren muss, sobald er eindringt, damit seine Sitzung nicht unterbrochen wird.
Der MacWorld-Hinweis spricht über die Einrichtung von Tripwire unter OS X. Es ist nicht einfach und der Artikel endet mit der Erwähnung, dass es nicht getestet wurde.
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
Deaktivieren Sie Root- und Passwort-Logins:
vi /etc/sshd_config
PermitRootLogin no
PasswordAuthentication no
ChallengeResponseAuthenticatio no
Verwenden Sie dann ssh-keygen
auf dem Remote-Client, um öffentliche/private Schlüssel zu generieren, die für die Remote-Anmeldung beim Server verwendet werden 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
Denyhosts und sshguard installieren.
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.
Snort, mit einer Weltkarte der Angriffe:
Um die gestellte Frage direkt zu beantworten. Ich habe ein weiteres 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 grep
Obige, um Ihre eigene feste IP 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.
Um Fail2ban etwas zu erweitern : Sobald es eingerichtet ist und ausgeführt wird, habe ich ein Skript, das ich kurz vor Mitternacht ausführe, das die Protokolle löscht und mir per E-Mail sendet, was Fail2ban am Vortag getan hat.
Das Skript sieht wie folgt aus und kann von cron oder einer launchd plist 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 Thema. Ich habe ausführlich darüber geschrieben.
Es ist ziemlich einfach, das Google Authenticator PAM-Plugin unter Mac OS X zu installieren, wenn Sie den X-Code-Befehlszeilen-Compiler installiert haben. Code und Anleitung sind hier:
https://code.google.com/p/google-authenticator/wiki/PamModuleInstructions
Sobald Sie Ihr Token initialisiert haben (einen Code generieren, den Sie der App auf Ihrem Telefon zuführen), verfügen Sie über eine Zwei-Faktor-Authentifizierung, um Ihr Gerät zu schützen. Jedes Konto ohne initialisierten Token kann sich nicht anmelden. Wenn Sie also keine Root-Anmeldung 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 tcpwrappers-Unterstützung aus dem SSH-Daemon entfernt, sodass /etc/deny.hosts ignoriert wird, was, wenn Sie mich fragen, ein dummer Schachzug war, der eine Sicherheitsfunktion entfernte.
Um dies zu umgehen, habe ich MacPorts verwendet, um einen aktuellen openssh-Daemon zu installieren und die vollständige tcpwrappers-Funktionalität wiederherzustellen, den DenyHosts-Daemon bearbeitet und verwendet, um /var/log/system.log zu überwachen und IPs zu sperren, die Logins und Passwörter erraten . Und vergessen Sie nicht, jedes Mal, wenn Sie das Betriebssystem aktualisieren, MacPorts zu aktualisieren und openssh/DenyHosts zu überprüfen/neu zu installieren.
Viel Glück!
Mir ist klar, dass dies ein alter Beitrag ist, aber ich dachte, dies könnte jemandem helfen, der nicht programmieren oder Zeit beim Durchsuchen des Internets sparen kann. Ich habe dies gerade in meiner Mittagspause geschrieben und es werden erfolgreiche und fehlgeschlagene Versuche sowie gesperrte IPs über fehlgeschlagene Versuche per E-Mail benachrichtigt. Das Programm ist in Ruby geschrieben. Sendmail wird zusammen mit den Mail- und File-Tail-Gems 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
Langeweile