შესაბამისად, რომ გაგზავნოთ შეტყობინება წარმატებული შესვლის შესახებ სერვერზე 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
და განათავსებთ სკრიპტის კოდს
# ---------- პარამეტრები ---------
# არ გაუგზავნოთ შეტყობინება ტელეგრამში, თუ 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 ცვლადში არის 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 კავშირების მონიტორინგი სერვერზე შეტყობინებების გაგზავნით ტელეგრამში, გაწვდილია.
შედეგად, თქვენ შეძლებთ მიიღოთ ასეთი შეტყობინებები: