Для того, щоб надіслати сповіщення про успішний вхід на сервер по 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 ---------
# не надсилати повідомлення в телеграм, якщо IP включений в whitelist IP, наприклад, IP адміністратора.
# надсилати сповіщення для всіх IP: wlip = []
wlip = ['123.123.45.67','98.76.54.32']
# користувачі для відстеження. Для всіх користувачів для відстеження: 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 підключень до сервера з надсиланням сповіщень в телеграм, налаштовано.
В результаті Ви зможете отримувати такі сповіщення: