Для того, чтобы отправить уведомление об успешном входе на сервер по SSH, необходимо отследить момент такого входа. Воспользуемся встроенными средствами Linux, а именно, настройками глобального профиля, которые находятся в папке /etc/profile. Этот профиль (а по сути, это первоначальные настройки пользователя) будет применяться для всех пользователей, которые залогинены в систему и для которых запущена командная оболочка. Настройки глобального профиля очень гибкие, но нас интересует прописанный в нем по умолчанию запуск всех bash фалов (*.sh) из папки /etc/profile.d Создадим в этой папке простой bash скрипт, роль которого запустить python скрипт, а уже этот python скрипт выполнит выборку данных по ssh соединению, сформирует информационную строку и отправит ее в телеграм канал администратора сервера.
Приступим к выполнению.
1. Если у Вас до сих пор нет своего телеграм бота, создайте его, а также канал, в который будут поступать сообщения. Для этого восспользуйтесь п.1-2 из Инструкции. Как администратор телеграм канала, Вы можете также добавлять в него других участников для совместного мониторинга SSH подключений к серверам.
2. В папке /usr/bin/ создадим файл python скрипта. Для этого выполним команду
vim /usr/bin/ssh_notification.py
и разместим код скрипта
# ---------- settings ---------
# dont send message to telegram if IP includes in whitelist IP, for example, admin IP.
# send notificatiob for all IPs: wlip = []
wlip = ['123.123.45.67','98.76.54.32']
# users to track. For all users to track: userstrack = []
userstrack = ['root','admin']
#-----------------------------
import os
import datetime
import requests
import socket
def SendMsgToTelegramChanel_z(msg):
token="TOKEN"
chat_id = 'CHAT_ID'
params = {'chat_id': chat_id,'text': msg}
response = requests.get('https://api.telegram.org/bot'+token+'/sendMessage', params=params)localip = socket.gethostbyname(socket.gethostname())
ip = os.popen("echo $SSH_CLIENT | awk -F' ' '{print $1}'").read().strip()
login = os.popen("whoami").read().strip()
dtime = datetime.datetime.now().strftime("%d-%m-%Y %H:%M:%S")if (ip not in wlip or not wlip) and (login in userstrack or not userstrack):
SendMsgToTelegramChanel_z('SSH connect to ' + localip + '\nUser: ' + login + '\nFrom: ' + ip + '\n' + dtime)
В верхней части скрипта есть 2 необязательные настройки:
- В переменной wlip находится whitelist список IP, при соединении с сервеом с которых не будет отправляться уведомление. Это может быть один или несколько IP администратора сервера. Если необходимо отправлять сообщение о входе на сервер не зависимо от IP, установите значение переменной в [] (просто очистите все внутри квадратных скобок)
wlip = []
- В переменной userstrack можно указать один или несколько логинов, которые необходимо отслеживать. Для отправки уведомлений не зависимо от имени пользователя, очистите все внутри скобок:
userstrack = []
- Также замените TOKEN и CHAT_ID на соответствующие значения, полученніе при создании телеграм бота и канала.
3. В папке /etc/profile.d/ создадим простой bash скрипт, который будет запускать созданный ранее python скрипт. Для этого выполните команду
vim /etc/profile.d/ssh_notification.sh
и разместите код скрипта:
#!/bin/bash
python3 /usr/bin/ssh_notification.py
Мониторинг SSH подключений к серверу с отправкой уведомлений в телеграм, настроен.
В результате Вы сможете получать такие уведомления: