Получение уведомлений, когда кто-то входит на сервер с помощью SSH или удаленного рабочего стола

13

У меня есть Mac Mini Server под управлением OS X Lion Server 10.7.3. Он без проблем работает без проблем. Тем не менее, сервер находится под постоянной «атакой» согласно журналам. Брандмауэр и безопасность держатся, кажется.

Существует ли какое-либо приложение / сценарий, который может отправлять мне электронные письма, когда кто-либо / кто-либо входит в систему на сервере, используя SSH, Admin Tools или ARD?

Поскольку машина работает без присмотра, без головы в центре обработки данных в другом городе, я обеспокоен тем, что кому-то может (благодаря чистой настойчивости) удастся взломать пароль или найти компромисс в системе. Знание, что я получу предупреждение, поможет мне расслабиться.

bloudraak
источник
2
На самом деле это не ответ, а комментарий: вы рассматривали возможность использования чего-то вроде fail2ban ([How-Tow] ( fail2ban.org/wiki/index.php/HOWTO_Mac_OS_X_Server_(10.5) )? Таким образом, вы можете забанить IP, на которые вас атакуют. установить правила, как долго они будут забанены, и т. д. Это поможет вам предотвратить взлом. И это может быть более полезным, чем получение электронной почты для каждой попытки входа в систему
boretom

Ответы:

4

Ваша лучшая защита - всегда отключать ненужные сервисы. Если вы не используете удаленный рабочий стол: выключите его. Если вы не используете HTTP или FTP-серверы: отключите их. Меньше запущенных сервисов, меньше точек входа для использования злоумышленниками.

Помимо блокировки, есть несколько бесплатных продуктов с открытым исходным кодом, дружественных к OS X, на которые вы можете обратить внимание при обнаружении вторжений на вашу машину.

фырканье

Хотя я лично не управлял им, у меня есть коллеги, которые знают и доверяют ему для обнаружения вторжений. Он совместим с BSD, поэтому он хорошо подходит для OS X. Еще одним преимуществом Snort является то, что он доступен в виде пакета 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.

Таким образом, вы получаете упрощенный путь к установке и некоторое доверие к тому факту, что он хорошо переносится на OS X и работает там. С установленным Homebrew вам нужно всего лишь:

> brew install snort

И вы готовы начать с этим.

Ознакомьтесь с этим руководством по установке Snort для OS X Lion Server, которое предоставляет сообщество Snort, чтобы начать писать правила для своего компьютера с OS X. Это отличный документ, и, помимо пошаговой установки Snort из исходного кода (что вам не нужно делать), в нем рассказывается обо всех вещах, которые вы должны выполнить для своего экземпляра OS X Lion Server, чтобы помочь защитить его. Если вы устанавливаете через Homebrew, начните с Раздела 5 (стр. 13) в PDF, так как вам не нужно беспокоиться об установке из исходного кода.

Tripwire

Я запускал Tripwire на машинах Linux для быстрого обнаружения вторжений и оповещения. Это эффективно, но это немного чудовищно для настройки. Он может выполнять действия, когда правила сопоставляются с файлами журналов. Конечно, опытный хакер узнает, как отключить Tripwire, как только они взломают его, чтобы не закончить сессию.

Намек переговоры MacWorld о настройке Tripwire на OS X . Это не просто, и статья заканчивается упоминанием, что это не было проверено.

Ян С.
источник
Адаптивный брандмауэр OS X Lion Server отлично справляется с работой. Какие преимущества дает мне Tripwire и Snort по сравнению со стандартным брандмауэром? Стоит ли усилий?
bloudraak
1
Ни Tripwire, ни Snort не предназначены для замены брандмауэра. Это системы обнаружения вторжений. Они используют множество разных подходов к мониторингу журналов вашей системы на предмет подозрительной активности и могут предпринимать действия, основанные на результатах мониторинга, таких как отправка вам электронных писем или отключение удаленных демонов или закрытие сетевых портов.
Ян С.
4

Вы можете укрепить ssh и установить denyhosts, sshguard и Snort, Barnyard, Base и Swatch.

Смотрите эти ссылки для деталей:

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

  1. Отключить root и пароль логины:

    vi /etc/sshd_config

    PermitRootLogin no
    PasswordAuthentication no
    ChallengeResponseAuthenticatio no

    Затем используйте ssh-keygenудаленный клиент для генерации открытых / закрытых ключей, которые можно использовать для удаленного входа на сервер:  

    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. Установите денихостов и sshguard.

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

    Вы можете настроить denyhosts для блокировки всего трафика, а не только ssh.

  3. Snort, с картой мира атак:

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

SSS
источник
3

Чтобы прямо ответить на поставленный вопрос. У меня есть другой сценарий, который снова отправляет мне электронное письмо около полуночи, если кто-то успешно входит в систему через 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

Измените приведенное grepвыше, чтобы исключить собственный фиксированный IP-адрес, если хотите, и использовать свой адрес электронной почты. Вы можете объединить часть кода в моем другом ответе, чтобы добавить сбои для VNC.

afragen
источник
Я создал скрипт для запуска по расписанию, и я жду сегодняшнего электронного письма.
bloudraak
Проблема ежедневных действий заключается в том, что к моменту, когда вы заметите вторжение, ущерб уже может быть нанесен.
Ян С.
@Ian C. - согласен, но вы всегда можете увеличить частоту писем. Кроме того, вы должны верить в меры по предотвращению вторжений, которые вы разработали. У меня очень разумная степень доверия к моей настройке Fail2ban.
afragen
2

Чтобы немного расширить Fail2ban , после его настройки и запуска у меня есть скрипт, который я запускаю незадолго до полуночи, который очищает журналы и отправляет мне по электронной почте информацию о том, что Fail2ban делал за предыдущий день.

Сценарий выглядит следующим образом и может быть запущен из cron или 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@yourserver.com < /tmp/fail2ban_deny
rm /tmp/fail2ban_deny

Вам, очевидно, нужно будет использовать адрес электронной почты по вашему выбору.

Настройка Fail2ban - это совсем другая проблема. Я много писал об этом.

afragen
источник
0

Установить плагин Google Authenticator PAM в Mac OS X довольно просто, если у вас установлен компилятор командной строки X-кода. Код и инструкции здесь:

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

Как только вы инициализируете свой токен (сгенерируете код, который вы отправляете в приложение на своем телефоне), у вас будет двухфакторная аутентификация для защиты вашего компьютера. Любая учетная запись без инициализированного токена не сможет войти в систему, поэтому, если вы не хотите разрешать root-вход, не инициализируйте ключ для этой учетной записи.

А если серьезно, что-то вроде DenyHosts просто имеет смысл, если вам нужно держать SSH открытым в Интернете. К сожалению, начиная с Mac OS X V10.8, Apple удалила поддержку tcpwrappers из демона SSH, поэтому она игнорирует /etc/deny.hosts, что было глупым шагом, если вы спросите меня, удалив функцию безопасности.

Чтобы обойти это, я использовал MacPorts для установки современного демона openssh и восстановления полной функциональности tcpwrappers, отредактировал и использовал демон DenyHosts для мониторинга /var/log/system.log и запретил IP-адреса, которые предполагают логины и пароли , И не забывайте обновлять MacPorts и проверять / переустанавливать openssh / DenyHosts при каждом обновлении ОС.

Удачи!

user2895719
источник
0

Я понимаю, что это старый пост, но я подумал, что это может помочь тем, кто не может запрограммировать или сэкономить время, прочесывая Интернет. Я только что написал это на моем перерыве на обед, и он будет отправлять по электронной почте сообщения об успешных и неудачных попытках, а также блокировать IP-адреса с помощью неудачных попыток. Программа написана на Ruby. Sendmail устанавливается вместе с гемами mail и tail-file.

Исходный код ниже:

#!/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
Aguevara
источник