ВОЙТИ
    opened image

    Для того, чтобы отправить уведомление об успешном входе на сервер по 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

     

    и разместим код скрипта

     

    # ---------- settings ---------
    # dont send message to telegram if IP includes in  whitelist IP, for example, admin IP.
    # send notificatiob for all IPs: wlip = []
    wlip = ['123.123.45.67','98.76.54.32']
    # users to track. For all users to track: 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)
     

     

    В верхней части скрипта есть 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 подключений к серверу с отправкой уведомлений в телеграм, настроен. 

     

    В результате Вы сможете получать такие уведомления: