Задача: Проработать, как сделать чтобы если кто заходит на удаленную систему 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
Итак, далее нужно поставить пакеты ssmtp и настроить его на Ваш почтовый сервер, к примеру задействовать домен и бесплатную услугу от 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
И мне на почту приходит вот такое вот письмо:
Достаточно информативно, отраженно когда и кто (под какой учетной записью) произвел аутентификацию с какого 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
уже видно кто зашел на сервер и с какой системы произвел подключение. Вот этот скрипт мне пока нравится больше.
Также хочу отметить, что удаленная система должна иметь в качестве мер защиты:
- Аутентификация только по ключам
- Доступ ограничен средствами ufw
- На защиты от подбора пароля выступает Fail2Ban
- Скрытие заголовков
Я не спорю, что приведенные здесь скрипты не моих рук дело, но зачем писать что-то если все уже давно написано, лучше я займусь чем нибудь более полезным, а для решения поставленной задачи я воспользуюсь приведенными примерами уже других кто столкнулся с поставленной задачей и опубликовал свои наработки. А пока я прощаюсь, цель я достиг, а пока собственно все, с уважением автор блога Олло Александр aka ekzorchik.