Уведомление на почту при заходе по SSH

Posted by

Задача: Проработать, как сделать чтобы если кто заходит на удаленную систему Ubuntu Precise/Trusty через безопасное соединение мне на почту приходит уведомление о сем факте: когда, кто, с какой системы и на какую. Вот этим вопросом я сейчас и займусь. Лишнее уведомление мне будем в помощь и контроль над происходящим, а в случае чего я смогу предотвратить ущерб или буду знать о данном факте. Итак ниже указанные действия справедливы для Ubuntu Trusty, но в рамках этой заметки разобраны на тестовой системе под управлением VirtualBox.

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

ekzorchik@srv-host:~$ sudo nano /etc/apt/sources.list

#удаляю все и добавляю вот эти строки

deb http://192.168.1.151:3142/ubuntu trusty main restricted

deb http://192.168.1.151:3142/ubuntu trusty universe

deb http://192.168.1.151:3142/ubuntu trusty-updates multiverse

deb http://192.168.1.151:3142/ubuntu trusty multiverse

deb http://192.168.1.151:3142/ubuntu trusty-backports main restricted universe multiverse

deb http://192.168.1.151:3142/ubuntu trusty-security main restricted multiverse

ekzorchik@srv-host:~$ sudo rm -Rf /var/lib/apt/lists/

ekzorchik@srv-host:~$ sudo apt-get update && sudo apt-get upgrade -y

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

  • @: notify@ekzorchik.ru
  • Pass: PASSWORD

ekzorchik@srv-host:~$ sudo rm -f /etc/localtime

ekzorchik@srv-host:~$ sudo ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime

ekzorchik@srv-host:~$ sudo apt-get install ssmtp mailutils -y

ekzorchik@srv-host:~$ sudo mv /usr/sbin/sendmail /usr/sbin/sendmail.old

ekzorchik@srv-host:~$ sudo ln -s /usr/sbin/ssmtp /usr/sbin/sendmail

Указываю настройки для подключения к почтовому серверу Yandexпочта для домена:

ekzorchik@srv-host:~$ sudo nano /etc/ssmtp/ssmtp.conf

root=notify@ekzorchik.ru

mailhub=smtp.yandex.ru:465

rewriteDomain=ekzorchik.ru

UseTLS=YES

AuthUser=notify@ekzorchik.ru

AuthPass=PASSWORD

FromLineOvveride=YES

ekzorchik@srv-host:~$ sudo chmod 644 /etc/ssmtp/ssmtp.conf

ekzorchik@srv-host:~$ sudo chown root:mail /etc/ssmtp/ssmtp.conf

ekzorchik@srv-host:~$ sudo nano /etc/ssmtp/revaliases

root:notify@ekzorchik.ru:smtp.yandex.ru:465

ekzorchik:notify@ekzorchik.ru:smtp.yandex.ru:465

После проверяем, что почта отправляется с этой системы:

ekzorchik@srv-host:~$ echo "" | ssmtp -v -s Hello alexander.ollo@ekzorchik.ru

[<-] 220 smtp3m.mail.yandex.net ESMTP (Want to use Yandex.Mail for your domain? Visit http://pdd.yandex.ru)

[->] EHLO srv-host

[<-] 250 ENHANCEDSTATUSCODES

[->] AUTH LOGIN

[<-] 334 VXNlcm5hbWU6

[->] bm90aWZ5QGVrem9yY2hpay5ydQ==

[<-] 334 UGFzc3dvcmQ6

[<-] 235 2.7.0 Authentication successful.

[->] MAIL FROM:<notify@ekzorchik.ru>

[<-] 250 2.1.0 <notify@ekzorchik.ru> ok

[->] RCPT TO:<Hello@ekzorchik.ru>

[<-] 250 2.1.5 <Hello@ekzorchik.ru> recipient ok

[->] RCPT TO:<alexander.ollo@ekzorchik.ru>

[<-] 250 2.1.5 <alexander.ollo@ekzorchik.ru> recipient ok

[->] DATA

[<-] 354 Enter mail, end with "." on a line by itself

[->] Received: by srv-host (sSMTP sendmail emulation); Thu, 22 Dec 2016 09:19:54 -0500

[->] From: "ekzorchik" <notify@ekzorchik.ru>

[->] Date: Thu, 22 Dec 2016 09:19:54 -0500

[->]

[->]

[->] .

[<-] 250 2.0.0 Ok: queued on smtp3m.mail.yandex.net as 1482416395-e70NurW9kl-Js9SEIXW

[->] QUIT

[<-] 221 2.0.0 Closing connection.

Отлично, почта ходит, в пользовательском каталоге сервера для единственного пользователя кто может подключаться к нему (у меня так во всяком случае) или для нескольких пользователей (в своем собственном каталоге в файле (~/.bashrc) прописываем следующую строку уведомление на почту о фактах удаленного подключения через SSH к серверу:

ekzorchik@srv-host:~$ nano ~/.bashrc

echo 'ALERT - SSH Shell Access srv-host on:' `date` `who` | mail -s "ALERT — SSH Shell Access" alexander.ollo@ekzorchik.ru

ekzorchik@srv-host:~$ exit

logout

Connection to 192.168.1.153 closed.

ekzorchik@navy:~$ ssh -l ekzorchik 192.168.1.153

И мне на почту приходит вот такое вот письмо:

Уведомление на почту о подключении к системе по SSH

Достаточно информативно, отраженно когда и кто (под какой учетной записью) произвел аутентификацию с какого IP адреса и на какой системе. То что мне нужно было, но хотелось бы чтобы не в каждом профиле тех кто может подключаться к серверу удаленно прописывать данную строку, а централизованно для всех (и это ограничит их от изменение сего факта логирования):

ekzorchik@srv-host:~$ sudo nano /etc/profile

IP="$(echo $SSH_CONNECTION | cut -d " " -f 1)"

HOSTNAME=$(hostname)

NOW=$(date +%d-%m-%Y_%H_%M-%S)

echo 'Somebody from '$IP' logged into '$HOSTNAME' on '$NOW'.' | mail -s 'SSH Login Notification' alexander.ollo@ekzorchik.ru

ekzorchik@srv-host:~$ source /etc/profile

А вот в таком виде информации более скудна:

Еще один вариант уведомления на почтуА если видоизменить скрипт до такого:

if [ -n "$SSH_CLIENT" ]; then

TEXT="$(date +%d-%m-%Y_%H_%M-%S): ssh login to ${USER}@$(hostname -f)"

TEXT="$TEXT from $(echo $SSH_CLIENT | awk '{print $1}')"

echo $TEXT|mail -s "SSH Login Notification" alexander.ollo@ekzorchik.ru

fi

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

Также хочу отметить, что удаленная система должна иметь в качестве мер защиты:

  • Аутентификация только по ключам
  • Доступ ограничен средствами ufw
  • На защиты от подбора пароля выступает Fail2Ban
  • Скрытие заголовков

Я не спорю, что приведенные здесь скрипты не моих рук дело, но зачем писать что-то если все уже давно написано, лучше я займусь чем нибудь более полезным, а для решения поставленной задачи я воспользуюсь приведенными примерами уже других кто столкнулся с поставленной задачей и опубликовал свои наработки. А пока я прощаюсь, цель я достиг, а пока собственно все, с уважением автор блога Олло Александр aka ekzorchik.