Otrzymywanie powiadomień, gdy ktoś zaloguje się na serwerze za pomocą SSH lub pulpitu zdalnego


13

Mam mini serwer Mac z systemem OS X Lion Server 10.7.3. Prawie działa bez nadzoru bez problemów. Jednak serwer jest pod ciągłym „atakiem” zgodnie z logami. Wygląda na to, że zapora ogniowa i zabezpieczenia się utrzymują.

Czy jest jakaś aplikacja / skrypt, który może wysłać mi e-mail za każdym razem, gdy ktoś / ktoś zaloguje się na serwerze za pomocą SSH, narzędzi administracyjnych lub ARD?

Ponieważ maszyna działa bez nadzoru, bez centrów danych w centrum danych w innym mieście, obawiam się, że ktoś może (poprzez czystą wytrwałość) złamać hasło lub znaleźć kompromis w systemie. Świadomość, że otrzymam powiadomienie, uspokoi mój umysł.


2
Tak naprawdę nie jest to odpowiedź komentarz: czy zastanawiałeś się nad użyciem czegoś takiego jak fail2ban ([How-Tow] ( fail2ban.org/wiki/index.php/HOWTO_Mac_OS_X_Server_(10.5) )? W ten sposób możesz zablokować IP, z którego zostałeś zaatakowany. ustal zasady, jak długo będą blokowane itp. Pomoże Ci to uniknąć włamań. A to może być bardziej pomocne niż otrzymywanie wiadomości e-mail przy każdej próbie logowania.
boretom

Odpowiedzi:


4

Najlepszą obroną jest zawsze wyłączenie niepotrzebnych usług. Jeśli nie używasz pulpitu zdalnego: wyłącz go. Jeśli nie korzystasz z serwerów HTTP lub FTP: wyłącz je. Mniej uruchomionych usług, mniej punktów wejścia dla potencjalnie intruzów do wykorzystania.

Oprócz zablokowania go, istnieje kilka bezpłatnych i otwartych produktów, które są przyjazne dla systemu OS X, na których można sprawdzić wykrywanie włamań na komputerze.

Parsknięcie

Chociaż nie prowadziłem go osobiście, mam kolegów, którzy znają go i ufają wykrywaniu włamań. Jest kompatybilny z BSD, więc dobrze pasuje do OS X. Kolejną zaletą Snorta jest to, że jest dostępny jako pakiet 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.

Uzyskujesz więc uproszczoną ścieżkę instalacji, a niektórzy ufają, że dobrze wpasowuje się w system OS X i tam działa. Po zainstalowaniu Homebrew musisz tylko:

> brew install snort

I jesteś gotowy, aby zacząć z tym.

Zapoznaj się z przewodnikiem instalacji serwera Snort dla systemu OS X Lion Server, który zapewnia społeczność Snort, aby rozpocząć pisanie reguł dla komputera z systemem OS X. To świetny dokument i oprócz omawiania instalacji Snorta ze źródła (czego nie musisz robić), mówi on o wszystkich rzeczach, które powinieneś zrobić w swojej instancji OS X Lion Server, aby ją chronić. Jeśli instalujesz przez Homebrew, zacznij od rozdziału 5 (strona 13) w pliku PDF, ponieważ nie musisz się martwić o instalację z kodu źródłowego.

Tripwire

Uruchomiłem Tripwire na komputerach z systemem Linux, aby szybko wykrywać włamania i alarmować. Jest skuteczny, ale konfiguracja jest trochę bestią. Może wykonywać działania, gdy reguły są dopasowane do plików dziennika. Oczywiście, doświadczony haker będzie wiedział, jak wyłączyć Tripwire, gdy tylko się włamią, aby nie zakończyć sesji.

Macworld podpowiedź mówi o tworzeniu Tripwire na OSX . To nie jest proste, a artykuł kończy się stwierdzeniem, że nie został przetestowany.


Adaptacyjna zapora ogniowa OS X Lion Server wykonała świetną robotę, powstrzymując ludzi. Jakie korzyści dają mi Tripwire i Snort w porównaniu ze standardową zaporą ogniową? Czy warto?
bloudraak

1
Ani Tripwire, ani Snort nie powinny zastępować zapory ogniowej. Są to systemy wykrywania włamań. Korzystają z wielu różnych podejść do monitorowania dzienników systemowych w poszukiwaniu podejrzanych działań i mogą podejmować działania w oparciu o wyniki monitorowania, takie jak wysyłanie wiadomości e-mail lub wyłączanie zdalnych demonów lub zamykanie portów sieciowych.
Ian C.

4

Możesz zahartować ssh i zainstalować denyhosts, sshguard oraz Snort, Barnyard, Base i Swatch.

Zobacz te linki, aby uzyskać szczegółowe informacje:

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

  1. Wyłącz logowanie do roota i hasła:

    vi /etc/sshd_config

    PermitRootLogin no
    PasswordAuthentication no
    ChallengeResponseAuthenticatio no

    Następnie użyj ssh-keygenna zdalnym kliencie do wygenerowania kluczy publicznych / prywatnych, których można użyć do zdalnego logowania na serwerze:  

    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. Zainstaluj denyhosts i sshguard.

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

    Możesz skonfigurować denyhosts tak, aby blokował cały ruch, a nie tylko ruch ssh.

  3. Snort ze światową mapą ataków:

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


3

Bezpośrednia odpowiedź na postawione pytanie. Mam inny skrypt, który przesyła mi e-mailem ponownie około północy, jeśli ktoś pomyślnie zaloguje się przez 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

Edytuj greppowyższe, aby wykluczyć własny stały adres IP, jeśli chcesz, i użyć swojego adresu e-mail. Możesz połączyć część kodu w mojej drugiej odpowiedzi, aby dodać awarie dla VNC.


Stworzyłem skrypt, aby działał zgodnie z harmonogramem i czekam na dzisiejszy e-mail.
bloudraak

Kłopot z robieniem codziennych czynności polega na tym, że kiedy złapie się wiatr włamania, szkody mogą już zostać wyrządzone.
Ian C.

@Ian C. - zgodził się, ale zawsze możesz zwiększyć częstotliwość wysyłania wiadomości e-mail. Ponadto musisz mieć wiarę w środki zapobiegania włamaniom, które wprowadziłeś. Mam bardzo rozsądny poziom zaufania do mojej konfiguracji Fail2ban.
afragen

2

Aby rozszerzyć nieco na Fail2ban , po jego skonfigurowaniu i uruchomieniu mam skrypt, który uruchamiam tuż przed północą, który usuwa dane z dzienników i wysyła mi e-mailem informacje o tym, co robi Fail2ban poprzedniego dnia.

Skrypt jest następujący i można go uruchomić z crona lub uruchomionej listy odtwarzania.

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

Oczywiście będziesz musiał użyć wybranego adresu e-mail.

Konfiguracja Fail2ban to zupełnie inna sprawa. Dużo o tym pisałem.


0

Zainstalowanie wtyczki Google Authenticator PAM na Mac OS X jest dość proste, jeśli masz zainstalowany kompilator wiersza poleceń X-Code. Kod i instrukcje są tutaj:

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

Po zainicjowaniu tokena (wygenerowaniu kodu, który podajesz do aplikacji na telefonie), będziesz mieć uwierzytelnianie dwuskładnikowe, aby chronić swój komputer. Każde konto bez zainicjowanego tokena nie będzie mogło się zalogować, więc jeśli nie chcesz zezwalać na logowanie do konta root, nie inicjuj klucza dla tego konta.

Ale tak na poważnie, coś takiego jak DenyHosts ma sens tylko wtedy, gdy SSH musi być otwarte w Internecie. Niestety, odkąd Mac OS X 10.8, Apple usunęło obsługę tcpwrapperów z demona SSH, więc ignoruje /etc/deny.hosts, co było głupim posunięciem, jeśli mnie zapytasz, usunięcie funkcji bezpieczeństwa.

Aby obejść ten problem, użyłem MacPorts do zainstalowania aktualnego demona openssh i przywrócenia pełnej funkcjonalności tcpwrappers, edytowałem i używałem demona DenyHosts do monitorowania /var/log/system.log i blokowania adresów IP zgadujących loginy i hasła . I nie zapomnij aktualizować MacPorts i sprawdzać / ponownie instalować openssh / DenyHosts przy każdej aktualizacji systemu operacyjnego.

Powodzenia!


0

Zdaję sobie sprawę, że jest to stary post, ale pomyślałem, że może to pomóc komuś, kto nie może zaprogramować ani zaoszczędzić czasu na przeszukiwaniu sieci. Właśnie napisałem to podczas przerwy na lunch i wyśle ​​e-mailem udane i nieudane próby, a także zablokowane adresy IP za pomocą nieudanych prób. Program napisany jest w języku Ruby. Sendmail jest instalowany wraz z klejnotami poczty i plików.

Kod źródłowy poniżej:

#!/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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.