SSH арқылы серверге сәтті кіргені туралы хабарлама жіберу үшін, кірген сәтті бақылау қажет. Linux-тың кірістірілген құралдарын, атап айтқанда, /etc/profile папкасында орналасқан глобалдық профиль параметрлерін пайдаланамыз. Бұл профиль (негізінде, бұл пайдаланушының бастапқы параметрлері) жүйеге кірген барлық пайдаланушыларға және командалық қабықша іске қосылғандарға қолданылады. Глобалдық профиль параметрлері өте икемді, бірақ бізді /etc/profile.d папкасындағы барлық bash файлдарын (*.sh) әдепкі бойынша іске қосу қызықтырады. Осы папкада python скриптін іске қосатын қарапайым bash скриптін жасаймыз, ал бұл python скрипті ssh қосылымы арқылы деректерді таңдап, ақпараттық жолды қалыптастырып, оны сервер әкімшісінің телеграм каналына жібереді.
Осыны орындауға кірісейік.
1. Егер сізде әлі өз телеграм ботыңыз болмаса, оны жасаңыз, сондай-ақ хабарламалар келетін арнаны құрыңыз. Ол үшін Нұсқаулықтың 1-2 тармағын пайдаланыңыз. Телеграм каналының әкімшісі ретінде, сіз SSH қосылымдарын серверлерге бірлесіп бақылау үшін оған басқа қатысушыларды да қосуға болады.
2. /usr/bin/ папкасында python скриптінің файлын жасаймыз. Ол үшін команданы орындаңыз
vim /usr/bin/ssh_notification.py
және скрипт кодыны орналастырыңыз
# ---------- параметрлер ---------
# 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 қосылымы ' + localip + '\nПайдаланушы: ' + login + '\nКелген: ' + ip + '\n' + dtime)
Скрипттің жоғарғы бөлігінде 2 міндетті емес параметр бар:
- wlip айнымалысында серверге қосылған кезде хабарлама жіберілмейтін IP адресінің whitelist тізімі бар. Бұл сервер әкімшісінің бір немесе бірнеше IP адресі болуы мүмкін. Егер серверге кіргені туралы хабарламаны IP-ге қарамастан жіберу қажет болса, айнымалының мәнін [] (просто квадратты жақшалардың ішін тазалаңыз) етіп орнатыңыз.
wlip = []
- userstrack айнымалысында бақылау қажет логиндердің бір немесе бірнешеуін көрсетуге болады. Пайдаланушы атына қарамастан хабарламаларды жіберу үшін, жақшалардың ішін тазалаңыз:
userstrack = []
- Сондай-ақ TOKEN және CHAT_ID мәндерін телеграм боты мен арнаны жасаған кезде алынған сәйкес мәндермен ауыстырыңыз.
3. /etc/profile.d/ папкасында бұрын жасалған python скриптін іске қосатын қарапайым bash скриптін жасаймыз. Ол үшін команданы орындаңыз
vim /etc/profile.d/ssh_notification.sh
және скрипт кодыны орналастырыңыз:
#!/bin/bash
python3 /usr/bin/ssh_notification.py
Серверге SSH қосылымдарын бақылау және телеграмға хабарламаларды жіберу орнатылды.
Нәтижесінде сіз осындай хабарламаларды ала аласыз: