Сповіщення SSH: налаштування для сервера Linux

Знати, хто і коли підключається до вашого сервера Linux через SSH, завжди є гарною ідеєю. Навіть якщо ви єдине, хто має доступ, корисно стежити за підключеннями. У разі команд або production-систем отримання сповіщень про SSH-логіни додає додатковий рівень обізнаності і безпеки.

Саме тому в цій статті я покажу вам простий спосіб реалізації сповіщень про логіни SSH. Це дасть вам додаткове самопочуття, надаючи в реальному часі інформацію про те, хто отримує доступ до вашого сервера.

Як увімкнути сповіщення про логіни SSH за допомогою PAM

PAM (Pluggable Authentication Module) є найбільш надійним способом активувати хук, коли відкривається (і закривається) SSH-сеанс. Ось як це працює.

Коли хтось входить через SSH, система запитує інструкції у PAM. Зазвичай PAM перевіряє паролі, ключі або двофакторну аутентифікацію, але ми також можемо вказати: “Кожного разу, коли відкривається новий сеанс SSH, виконай цей сценарій.” Таким чином, сценарій отримує корисні деталі, такі як ім’я користувача та IP-адреса, і може незабаром надіслати вам сповіщення — без необхідності переглядати журнали чи запускати додаткові демони. Ось як це зробити.

Виберіть ваш улюблений текстовий редактор і змініть файл “/etc/pam.d/sshd”, додавши після існуючих рядків “session” наступний код:

session optional pam_exec.so /usr/local/bin/ssh-login-notify.sh

Отже, фінальна версія виглядає так:

sudo nano /etc/pam.d/sshd

Збережіть файл і вийдіть. Тепер давайте створимо сам сценарій. Він запускається кожного разу, коли SSH-логін є успішним, завдяки налаштуванням PAM SSH, які ми щойно налаштували. Єдине, що вам справді потрібно з’ясувати, – це який тип сповіщення ви хочете налаштувати.

Існує безліч способів зробити це. Наприклад, якщо ви вже використовуєте самостійно хостинговану систему сповіщень, таку як Ntfy або Gotify, або загальнодоступну, наприклад Pushover, ви можете підключитися до цього. Ще один варіант – Apprise, який працює з майже кожною популярною службою сповіщень. Ви також можете обрати Telegram, Discord, Slack або подібну платформу.

У короткому підсумку, можливості майже безмежні — це залежить від того, яку службу ви віддаєте перевагу. Однак, щоб спростити цей посібник, я покажу вам один з найбільш простих налаштувань: надсилання сповіщення електронною поштою, використовуючи SMTP Gmail.

Встановлення необхідних пакетів

Спочатку давайте встановимо необхідні пакети. Якщо ви працюєте на дистрибутивах DEB (Debian, Ubuntu та ін.), виконайте:

sudo apt install msmtp msmtp-mta bsd-mailx

Для RPM-орієнтованих (Fedora, Alma, Rocky та ін.):

sudo dnf install msmtp msmtp-mta mailx

Як ви можете бачити, ми будемо використовувати msmtp — легкий і простий інструмент командного рядка для надсилання електронних листів через налаштований поштовий сервер. У нашому випадку, це SMTP Google. Створіть файл “/etc/msmtprc” і вставте в нього наступне:

# Global defaults
defaults
auth on
tls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
logfile /var/log/msmtp.log
# Gmail account
account gmail
host smtp.gmail.com
port 587
from [email protected]
user [email protected]
passwordeval "cat /root/.gmail_app_password"
# Set default
account default : gmail

Звісно, замініть “[email protected]” на вашу реальну адресу. Тепер зосередимося на параметрі “passwordeval”. Як ви бачите, він вказує на файл “/root/.gmail_app_password”. Оскільки Google більше не дозволяє стороннім додаткам або сценаріям входити за допомогою звичайного пароля Gmail, вам потрібно заздалегідь створити пароль для програми — спеціальний 16-символьний токен, який надає доступ до вашого облікового запису Gmail.

Щоб це зробити, натисніть на своє фото профілю в правому верхньому куті вашого облікового запису Google і виберіть “Керувати своїм обліковим записом Google”. У рядку пошуку введіть “достук до програми”, потім виберіть його, коли він з’явиться. Введіть назву для вашої нової програми — наприклад, “Мої SMTP сповіщення” — і натисніть “Створити”. Google згенерує пароль у 16 символів, розбитий на чотири групи по чотири. Скопіюйте цей код і зберігайте його під рукою.

Тепер виконайте наступні команди, замінивши “YOUR_16_CHAR_APP_PASSWORD” в першій команді на код, який тільки що згенерував для вас Google.

sudo bash -c 'echo "YOUR_16_CHAR_APP_PASSWORD" > /root/.gmail_app_password'
sudo chmod 600 /root/.gmail_app_password
sudo chown root:root /root/.gmail_app_password

Остаточно, створіть сценарій, який PAM буде запускати автоматично щоразу, коли хтось успішно входить на ваш сервер через SSH.

sudo nano /usr/local/bin/ssh-login-notify.sh
#!/bin/bash
USER="$PAM_USER"
IP="$PAM_RHOST"
HOST=$(hostname)
DATE=$(date)
RECIPIENT="[email protected]"
SUBJECT="SSH Login on $HOST"
BODY="A new SSH login was successfully established.
User: $PAM_USER
User IP Host: $PAM_RHOST
Date: $DATE
Server: $HOST"
if [ ${PAM_TYPE} = "open_session" ]; then
    echo "$BODY" | mail -s "SSH Login Alert on $HOST" ${RECIPIENT}
fi
exit 0

Тут замініть “[email protected]” на електронну адресу, на яку хочете отримувати сповіщення. Потім зробіть сценарій виконуваним:

chmod +x /usr/local/bin/ssh-login-notify.sh

Щоб протестувати все, що ви зробили до цього моменту, увійдіть на сервер через SSH з іншого хоста. Ви повинні отримати електронного листа на адресу, яку налаштували, схожу на ту, що показана нижче:

Сповіщення про логін SSH було надіслано успішно.

Якщо, з якоїсь причини, ви не отримали очікуваний результат, перегляньте журнали у “/var/log/msmtp.log”, щоб з’ясувати, що пішло не так.

Висновок

Використання PAM для активації сповіщень про логіни SSH — надійний підхід, який інтегрується безпосередньо в процес аутентифікації. Не потрібно сканувати журнали або запускати фонові демони. Після налаштування ви отримуєте миттєву обізнаність про те, хто отримує доступ до вашого сервера та звідки, що допомагає виявити несанкціоновану діяльність на ранніх стадіях.

Для додаткового рівня захисту розгляньте також інструмент, такий як SSHGuard або Fail2Ban. Якщо ви не знаєте, як його налаштувати, перегляньте наші посібники про те, як захистити ваш SSH-сервер. На завершення, уникайте використання автентифікації за паролем. Замість цього згенеруйте SSH-ключі та використовуйте їх для безпечного входу.

Дякую за те, що приділили час ознайомленню з цим посібником. Завжди будемо раді вашим коментарям.