opened image

Kaip stebėti SSH prisijungimus prie serverio naudojant Telegram botą

Norint siųsti pranešimą apie sėkmingą prisijungimą prie serverio per SSH, reikia stebėti tokio prisijungimo momentą. Pasinaudosime įmontuotomis Linux priemonėmis, būtent globalaus profilio nustatymais, kurie yra kataloge /etc/profile. Šis profilis (o iš esmės, tai pradiniai vartotojo nustatymai) bus taikomas visiems vartotojams, kurie prisijungę prie sistemos ir kuriems paleista komandinė aplinka. Globalaus profilio nustatymai yra labai lankstūs, tačiau mus domina jame numatytas visų bash failų (*.sh) paleidimas iš katalogo /etc/profile.d  Sukursime šiame kataloge paprastą bash skriptą, kurio vaidmuo bus paleisti python skriptą, o šis python skriptas atliks duomenų užklausą per ssh ryšį, suformuos informacinę eilutę ir išsiųs ją į serverio administratoriaus telegram kanalą.

 

Pradėkime vykdyti.

 

1. Jei dar neturite savo telegram bot, sukurkite jį, taip pat kanalą, į kurį bus siunčiami pranešimai. Tam pasinaudokite p.1-2 iš Instrukcijos. Kaip telegram kanalo administratorius, galite taip pat pridėti kitus dalyvius, kad kartu stebėtumėte SSH prisijungimus prie serverių.

 

2. Kataloge /usr/bin/ sukursime python skripto failą. Tam vykdykite komandą

 

vim /usr/bin/ssh_notification.py

 

ir įdėkite skripto kodą

 

# ---------- nustatymai ---------
# nesiųsti pranešimo į telegram, jei IP yra whitelist IP, pavyzdžiui, administratoriaus IP.
# siųsti pranešimą visiems IP: wlip = []
wlip = ['123.123.45.67','98.76.54.32']
# vartotojai, kuriuos reikia stebėti. Visų vartotojų stebėjimui: 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 prisijungimas prie ' + localip + '\nVartotojas: ' + login + '\nIš: ' + ip + '\n' + dtime)
 

 

Skripto viršuje yra 2 neprivalomi nustatymai:

 

 -  Kintamajame wlip yra whitelist IP sąrašas, iš kurių prisijungus prie serverio nebus siunčiamas pranešimas. Tai gali būti vienas arba  keli administratoriaus IP. Jei reikia siųsti pranešimą apie prisijungimą prie serverio nepriklausomai nuo IP, nustatykite kintamojo reikšmę į [] (tiesiog išvalykite viską viduje kvadratinių skliaustų)

 

wlip = []

 

 -  Kintamajame userstrack galite nurodyti vieną ar kelis prisijungimo vardus, kuriuos reikia stebėti. Norint siųsti pranešimus nepriklausomai nuo vartotojo vardo, išvalykite viską viduje skliaustų:

 

userstrack = []

 

-  Taip pat pakeiskite TOKEN ir CHAT_ID į atitinkamas reikšmes, gautas kuriant telegram bot ir kanalą.

 

3. Kataloge /etc/profile.d/ sukursime paprastą bash skriptą, kuris paleis anksčiau sukurtą python skriptą. Tam vykdykite komandą

 

vim /etc/profile.d/ssh_notification.sh 

 

ir įdėkite skripto kodą:

 

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

 

SSH prisijungimų stebėjimas prie serverio su pranešimų siuntimu į telegram, nustatytas. 

 

Rezultate galėsite gauti tokius pranešimus: