b801cf2385
Добавлены message_ensure_server_line и SERVER_DISPLAY_NAME; версия 1.1.3-server-label. Гайды по уведомлениям и автообновлению.
99 lines
5.6 KiB
Markdown
99 lines
5.6 KiB
Markdown
# Уведомления ssh-monitor
|
||
|
||
Документ описывает, **какие сообщения** отправляет монитор, **какие поля** в них есть и как настроить **подпись сервера** и **часовой пояс**.
|
||
|
||
См. также: [README.md](../README.md), пример конфига [ssh-monitor.conf.example](../ssh-monitor.conf.example).
|
||
|
||
## Подпись сервера (🖥️ Сервер)
|
||
|
||
Начиная с версии **1.1.3-server-label**, каждое уведомление, проходящее через **`notify_send()`**, получает строку **«🖥️ Сервер: …»** сразу **после первой строки** (заголовка алерта).
|
||
|
||
Формат значения:
|
||
|
||
| Условие | Пример |
|
||
|---------|--------|
|
||
| `SERVER_DISPLAY_NAME` пусто, IPv4 найден | `web01 (10.1.20.5)` |
|
||
| `SERVER_DISPLAY_NAME` пусто, IPv4 нет | `web01` |
|
||
| Задан `SERVER_DISPLAY_NAME="prod-db-01"` | `prod-db-01 (10.1.20.5)` |
|
||
|
||
IPv4 определяется через `ip -4 route get` (исходящий адрес) или `hostname -I`. Нужны утилиты **`hostname`** и **`ip`** — см. [install-prerequisites.ru.md](install-prerequisites.ru.md).
|
||
|
||
Если в тексте сообщения уже есть подстрока **`🖥️ Сервер:`**, вторая строка **не добавляется** (защита от дубля при ручной вставке).
|
||
|
||
### Пример: успешный SSH
|
||
|
||
```
|
||
✅ УСПЕШНОЕ SSH ПОДКЛЮЧЕНИЕ
|
||
🖥️ Сервер: myhost (10.1.20.5)
|
||
👤 Пользователь: alice
|
||
🌐 IP адрес: 10.1.20.1
|
||
🕐 Время: 25.05.2026 09:08:22
|
||
```
|
||
|
||
### Пример: sudo
|
||
|
||
```
|
||
⚠️ ИСПОЛЬЗОВАНИЕ SUDO
|
||
🖥️ Сервер: myhost (10.1.20.5)
|
||
👤 Пользователь: alice
|
||
🔑 От имени USER: root
|
||
💻 Команда: /bin/bash
|
||
📁 Директория: /home/alice
|
||
🕐 Время: 24.05.2026 16:54:49
|
||
```
|
||
|
||
## Настройка в `/etc/ssh-monitor.conf`
|
||
|
||
```bash
|
||
# Пусто = hostname (+ IPv4 при возможности)
|
||
SERVER_DISPLAY_NAME=""
|
||
|
||
# Или фиксированное имя для этого хоста в общем чате:
|
||
# SERVER_DISPLAY_NAME="dc1-app-03"
|
||
```
|
||
|
||
Проверка эффективной подписи:
|
||
|
||
```bash
|
||
sudo ssh-monitor --check-config
|
||
```
|
||
|
||
В выводе будет строка `SERVER_DISPLAY_NAME=... (эффективно: ...)`.
|
||
|
||
## Типы уведомлений
|
||
|
||
| Событие | Заголовок (первая строка) | Доп. поля |
|
||
|---------|----------------------------|-----------|
|
||
| Успешный SSH | ✅ УСПЕШНОЕ SSH ПОДКЛЮЧЕНИЕ | пользователь, IP клиента, время |
|
||
| SSH под root | 🔑 SSH ВХОД ПОД ROOT | IP, время |
|
||
| Неудачная попытка SSH | ❌ НЕУДАЧНАЯ ПОПЫТКА SSH | пользователь, IP, счётчик попыток, время |
|
||
| Sudo | ⚠️ ИСПОЛЬЗОВАНИЕ SUDO | пользователь, USER=, команда, PWD, время |
|
||
| Бан IP | 🚫 IP ЗАБЛОКИРОВАН АВТОМАТИЧЕСКИ | IP, попытки, длительность, время |
|
||
| Порог без бана | ⚠️ ЛИМИТ НЕУДАЧНЫХ SSH (автобан отключён…) | IP, попытки, время |
|
||
| Брутфорс | 🧨 ВОЗМОЖНЫЙ МАССОВЫЙ БРУТФОРС SSH | IP, счётчик за окно, время |
|
||
| Host key / MITM | 🔐 ВНИМАНИЕ: изменение SSH host key… | фрагмент журнала, время |
|
||
| logind: новая сессия | 🖥️ НОВАЯ СЕССИЯ (systemd-logind) | пользователь, ID сессии, время |
|
||
| logind: сбой | ❌ СБОЙ (systemd-logind) | строка журнала, время |
|
||
| Ежедневный отчёт | 📊 ЕЖЕДНЕВНЫЙ ОТЧЕТ SSH МОНИТОРИНГА | статистика 24 ч, баны, топ IP, сессии |
|
||
| Heartbeat | ❤️ Heartbeat - скрипт мониторинга работает | время |
|
||
| Старт / стоп | ✅ СКРИПТ МОНИТОРИНГА ЗАПУЩЕН / ⚠️ ОСТАНОВЛЕН | версия, каналы, время |
|
||
|
||
Во всех перечисленных случаях **🖥️ Сервер** добавляется автоматически (кроме сообщений, где вы сами вставили эту строку).
|
||
|
||
## Время в сообщениях (🕐)
|
||
|
||
Строки **«🕐 Время»** формируются функцией **`notification_date()`**:
|
||
|
||
1. Если задан **`NOTIFY_TZ`** (IANA, например `Europe/Moscow`) — используется он.
|
||
2. Иначе, если задан **`DAILY_REPORT_TZ`** — он.
|
||
3. Иначе — зона процесса (`date` у systemd-сервиса; часто UTC, если в unit указано `Environment=TZ=UTC`).
|
||
|
||
Ежедневный отчёт по календарю и часу **`DAILY_REPORT_HOUR`** использует **`DAILY_REPORT_TZ`** (или зону процесса) — см. README.
|
||
|
||
## Каналы доставки
|
||
|
||
- **`NOTIFY_CHAIN`**: `telegram`, `email` — при каждом событии попытка **во все** каналы списка.
|
||
- **`BACKUP_WEBHOOK_URL`**: только если **все** каналы цепочки не доставили сообщение.
|
||
|
||
Режим **`--dry-run`**: уведомления не отправляются; в stderr печатается текст **уже с подписью сервера**.
|