opened image

Як відстежувати SSH підключення до сервера за допомогою телеграм бота

Для того, щоб надіслати сповіщення про успішний вхід на сервер по 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 підключень до сервера з надсиланням сповіщень в телеграм, налаштовано. 

 

В результаті Ви зможете отримувати такі сповіщення: