ZALOGUJ
    opened image

    Aby wysłać powiadomienie o pomyślnym logowaniu na serwerze przez SSH, należy śledzić moment takiego logowania. Skorzystamy z wbudowanych narzędzi Linuxa, a mianowicie z ustawień globalnego profilu, które znajdują się w folderze /etc/profile. Ten profil (a w zasadzie, to początkowe ustawienia użytkownika) będzie stosowany dla wszystkich użytkowników, którzy są zalogowani w systemie i dla których uruchomiona jest powłoka. Ustawienia globalnego profilu są bardzo elastyczne, ale interesuje nas domyślne uruchamianie wszystkich plików bash (*.sh) z folderu /etc/profile.d. Stworzymy w tym folderze prosty skrypt bash, którego rolą będzie uruchomienie skryptu python, a ten skrypt python wykona zapytanie danych przez połączenie ssh, sformułuje informacyjną wiadomość i wyśle ją do kanału telegramowego administratora serwera.

     

    Przystąpmy do realizacji.

     

    1. Jeśli do tej pory nie masz swojego bota telegramowego, stwórz go, a także kanał, na który będą przychodzić wiadomości. W tym celu skorzystaj z punktów 1-2 z Instrukcji. Jako administrator kanału telegramowego możesz również dodawać do niego innych uczestników do wspólnego monitorowania połączeń SSH z serwerami.

     

    2. W folderze /usr/bin/ stwórz plik skryptu python. W tym celu wykonaj polecenie

     

    vim /usr/bin/ssh_notification.py

     

    i umieść kod skryptu

     

    # ---------- ustawienia ---------
    # nie wysyłaj wiadomości do telegramu, jeśli IP znajduje się na  liście dozwolonych IP, na przykład, IP administratora.
    # wysyłaj powiadomienia dla wszystkich IP: wlip = []
    wlip = ['123.123.45.67','98.76.54.32']
    # użytkownicy do śledzenia. Aby śledzić wszystkich użytkowników: 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)
     

     

    W górnej części skryptu znajdują się 2 opcjonalne ustawienia:

     

     -  W zmiennej wlip znajduje się lista dozwolonych IP, przy połączeniu z serwerem z których nie będzie wysyłane powiadomienie. Może to być jeden lub  kilka IP administratora serwera. Jeśli chcesz wysyłać wiadomości o logowaniu na serwer niezależnie od IP, ustaw wartość zmiennej na [] (po prostu wyczyść wszystko wewnątrz nawiasów kwadratowych)

     

    wlip = []

     

     -  W zmiennej userstrack możesz wskazać jeden lub kilka loginów, które należy śledzić. Aby wysyłać powiadomienia niezależnie od nazwy użytkownika, wyczyść wszystko wewnątrz nawiasów:

     

    userstrack = []

     

    -  Również zamień TOKEN i CHAT_ID na odpowiednie wartości, które otrzymasz przy tworzeniu bota telegramowego i kanału.

     

    3. W folderze /etc/profile.d/ stwórz prosty skrypt bash, który będzie uruchamiał wcześniej stworzony skrypt python. W tym celu wykonaj polecenie

     

    vim /etc/profile.d/ssh_notification.sh 

     

    i umieść kod skryptu:

     

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

     

    Monitorowanie połączeń SSH z serwerem z wysyłaniem powiadomień do telegramu zostało skonfigurowane. 

     

    W rezultacie będziesz mógł otrzymywać takie powiadomienia: