opened image

Kā izsekot SSH savienojumus ar serveri, izmantojot Telegram botu

Lai nosūtītu paziņojumu par veiksmīgu piekļuvi serverim pa SSH, ir jāseko līdzi šādas piekļuves brīdim. Izmantosim iebūvētās Linux iespējas, proti, globālā profila iestatījumus, kas atrodas mapē /etc/profile. Šis profils (patiesībā, tas ir sākotnējais lietotāja iestatījums) tiks piemērots visiem lietotājiem, kuri ir pieteikušies sistēmā un kuriem ir palaista komandrindas saskarne. Globālā profila iestatījumi ir ļoti elastīgi, taču mūs interesē tajā noklusējuma iestatījums, kas ļauj palaist visus bash failus (*.sh) no mapes /etc/profile.d  Izveidosim šajā mapē vienkāršu bash skriptu, kura uzdevums būs palaist python skriptu, un šis python skripts veiks datu izsniegšanu pa ssh savienojumu, izveidos informācijas rindu un nosūtīs to administratora servera telegram kanālā.

 

Sāksim izpildi.

 

1. Ja jums joprojām nav sava telegram bota, izveidojiet to, kā arī kanālu, uz kuru tiks sūtīti ziņojumi. Lai to izdarītu, izmantojiet p.1-2 no Instrukcijas. Kā telegram kanāla administrators, jūs varat arī pievienot citus dalībniekus kopīgai SSH savienojumu uzraudzībai ar serveriem.

 

2. Mapē /usr/bin/ izveidosim python skripta failu. Lai to izdarītu, izpildiet komandu

 

vim /usr/bin/ssh_notification.py

 

un ievietojiet skripta kodu

 

# ---------- iestatījumi ---------
# nesūtīt ziņojumu uz telegram, ja IP ir iekļauts  whitelist IP, piemēram, administratora IP.
# sūtīt paziņojumu visiem IP: wlip = []
wlip = ['123.123.45.67','98.76.54.32']
# lietotāji, kurus uzraudzīt. Lai uzraudzītu visus lietotājus: 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)
 

 

Skripta augšējā daļā ir 2 izvēles iestatījumi:

 

 -  Mainīgajā wlip atrodas whitelist IP saraksts, no kura savienojuma ar serveri netiks nosūtīts paziņojums. Tas var būt viens vai  vairāki administratora servera IP. Ja nepieciešams nosūtīt ziņojumu par piekļuvi serverim neatkarīgi no IP, iestatiet mainīgā vērtību uz [] (vienkārši notīriet visu iekšā kvadrātiskajām iekavām)

 

wlip = []

 

 -  Mainīgajā userstrack varat norādīt vienu vai vairākus lietotājvārdus, kurus nepieciešams uzraudzīt. Lai nosūtītu paziņojumus neatkarīgi no lietotājvārda, notīriet visu iekšā iekavās:

 

userstrack = []

 

-  Tāpat nomainiet TOKEN un CHAT_ID uz attiecīgajām vērtībām, kas iegūtas, izveidojot telegram botu un kanālu.

 

3. Mapē /etc/profile.d/ izveidosim vienkāršu bash skriptu, kas palaidīs iepriekš izveidoto python skriptu. Lai to izdarītu, izpildiet komandu

 

vim /etc/profile.d/ssh_notification.sh 

 

un ievietojiet skripta kodu:

 

#!/bin/bash
python3 /usr/bin/ssh_notification.py

 

SSH savienojumu uzraudzība ar serveri un paziņojumu nosūtīšana uz telegram ir iestatīta. 

 

Rezultātā jūs varēsiet saņemt šādus paziņojumus: