auspex/README.md
2026-06-09 17:12:18 +03:00

254 lines
11 KiB
Markdown
Executable file
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Auspex
Набор утилит мониторинга инфраструктуры WAF.
## Утилиты
| Ключ | Описание |
|------|----------|
| `-ss` | Просмотр занятых портов (интерактивный TUI на bubbletea) |
| `-c` | Проверка SSL сертификатов (сроки истечения, алерты) |
| `-p` | Проверка доступности портов из nginx upstream конфигов |
| `-m` | Проверка совпадений портов Angie ↔ Docker (+ проверка запуска контейнеров) |
| `-l` | Проверка обновления файлов PT AF access logs |
| `-sv` | Проверка работоспособности служб systemd |
| `-d` или `-dc` | Проверка работоспособности Docker контейнеров |
## Структура проекта
```
auspex/
├── main.go # Точка входа, меню, роутинг CLI-флагов
├── config.go # Глобальная конфигурация (переменные + загрузка из .env)
├── telegram.go # Отправка алертов в Telegram (поддержка HTTP и SOCKS5 прокси)
├── email.go # Отправка алертов по Email (SMTP, AUTH LOGIN)
├── mattermost.go # Отправка алертов в Mattermost (Bot API)
├── certcheck.go # -c: проверка SSL сертификатов
├── portcheck.go # -p: проверка доступности портов
├── matchcheck.go # -m: совпадения Angie ↔ Docker
├── logcheck.go # -l: проверка свежести логов
├── servicecheck.go # -sv: проверка служб systemd
├── dockercheck.go # -d: проверка Docker контейнеров
├── portsview.go # -ss: TUI просмотр занятых портов
├── go.mod
└── README.md
```
## Сборка
```bash
go mod tidy
go build -o auspex .
sudo cp auspex /usr/local/bin/auspex
```
## Использование
```bash
# Интерактивное меню
./auspex
# Быстрый вызов через флаги
./auspex -ss # TUI просмотр портов
./auspex -c # Проверка сертификатов
./auspex -p # Проверка доступности портов
./auspex -m # Проверка Angie ↔ Docker (все клиенты)
./auspex -m client_name # Проверка конкретного клиента
./auspex -l # Проверка свежести логов
./auspex -sv # Проверка работоспособности служб
./auspex -d # Проверка работоспособности контейнеров
./auspex -w # Проверка веб доступности
./auspex -h # Справка
./auspex -v # Версия
```
## Конфигурация
Конфигурация загружается из `/etc/auspex/auspex.env`. Если файл не найден — используются значения по умолчанию. Формат файла: `KEY=VALUE`, комментарии через `#`.
```bash
sudo mkdir -p /etc/auspex
sudo nano /etc/auspex/auspex.env
```
### Полный список параметров
#### Telegram
| Переменная | Описание | По умолчанию |
|------------|----------|--------------|
| `TELEGRAM_BOT_TOKEN` | Токен бота | — |
| `TELEGRAM_CHAT_ID` | ID чата для алертов | — |
| `TELEGRAM_HTTP_PROXY` | HTTP прокси: `http://user:pass@host:port` | — |
| `TELEGRAM_SOCKS5_PROXY` | SOCKS5 прокси: `host:port` | — |
| `TELEGRAM_SOCKS5_USER` | Логин SOCKS5 прокси | — |
| `TELEGRAM_SOCKS5_PASSWORD` | Пароль SOCKS5 прокси (спецсимволы безопасны) | — |
Порядок попыток при отправке: **HTTP прокси → SOCKS5 → прямое соединение**. Если один вариант недоступен — автоматически используется следующий.
#### Email / SMTP
| Переменная | Описание | По умолчанию |
|------------|----------|--------------|
| `EMAIL_SMTP_HOST` | Адрес SMTP сервера | — |
| `EMAIL_SMTP_PORT` | Порт SMTP (STARTTLS) | `587` |
| `EMAIL_SMTP_USER` | Логин SMTP | — |
| `EMAIL_SMTP_PASSWORD` | Пароль SMTP | — |
| `EMAIL_FROM` | Адрес отправителя | — |
| `EMAIL_TO` | Адреса получателей (через запятую) | — |
Поддерживается AUTH LOGIN (Exchange/корпоративные серверы). Если `EMAIL_SMTP_HOST` не задан — отправка молча пропускается.
#### Mattermost
| Переменная | Описание | По умолчанию |
|------------|----------|--------------|
| `MATTERMOST_URL` | URL сервера: `https://mattermost.example.com` | — |
| `MATTERMOST_BOT_TOKEN` | Токен бота | — |
| `MATTERMOST_CHANNEL_ID` | ID канала для отправки | — |
Используется Bot API (`POST /api/v4/posts`). HTML-теги из Telegram автоматически конвертируются в Markdown.
#### PostgreSQL
| Переменная | Описание | По умолчанию |
|------------|----------|--------------|
| `DB_USER` | Пользователь БД | — |
| `DB_PASSWORD` | Пароль БД | — |
| `DB_NAME` | Название БД | `waf_info` |
| `DB_PORT` | Порт БД | `5432` |
| `PRIMARY_DB_HOST` | Основной хост БД | `10.100.10.8` |
| `SECONDARY_DB_HOST` | Резервный хост БД | `10.100.13.5` |
#### Пути
| Переменная | Описание | По умолчанию |
|------------|----------|--------------|
| `PTAF_BASE_DIR` | Базовая директория PTAF | `/home/install/ptaf` |
| `ANGIE_CONF_DIR` | Директория конфигов Angie | `/etc/angie/http.d` |
| `SSL_DIR` | Директория SSL сертификатов | `/etc/ssl` |
| `NGINX_CONFIG_GLOB` | Glob-путь к nginx конфигам | `/home/install/conf/ptaf-nginx/*/*/*/*.conf` |
| `LOG_DIR` | Директория access логов | `/var/log/ptaf_nginx` |
| `STATE_FILE_PATH` | State-файл portcheck | `/tmp/port_checker_state.json` |
| `SERVICE_STATE_FILE_PATH` | State-файл servicecheck | `/tmp/auspex_service_state.json` |
| `DOCKER_STATE_FILE_PATH` | State-файл dockercheck | `/tmp/auspex_docker_state.json` |
#### Пороги сертификатов
| Переменная | Описание | По умолчанию |
|------------|----------|--------------|
| `CERT_CRITICAL_DAYS` | Критический алерт (дней до истечения) | `3` |
| `CERT_WARNING_DAYS` | Предупреждение | `15` |
| `CERT_INFO_DAYS` | Информирование | `30` |
#### Проверка портов
| Переменная | Описание | По умолчанию |
|------------|----------|--------------|
| `CHECK_TIMEOUT_SEC` | Таймаут TCP-соединения (сек) | `10` |
| `MAX_RETRIES` | Количество повторов | `3` |
| `RETRY_DELAY_SEC` | Задержка между повторами (сек) | `2` |
| `MAX_WORKERS` | Горутин для параллельной обработки | `10` |
#### Проверка логов
| Переменная | Описание | По умолчанию |
|------------|----------|--------------|
| `LOG_STALE_MINUTES` | Порог устаревшего лога (мин) | `61` |
#### Проверка служб
| Переменная | Описание | По умолчанию |
|------------|----------|--------------|
| `SERVICES_TO_CHECK` | Службы для проверки (через запятую) | — |
Пример: `SERVICES_TO_CHECK=angie,docker,postgresql`
### Пример auspex.env
```bash
# Telegram
TELEGRAM_BOT_TOKEN=8411463479:AAF0zFi7iXTEC51sBG0Ckc8_S7JD-DuVcoo
TELEGRAM_CHAT_ID=-1001234567890
# HTTP прокси (опционально)
TELEGRAM_HTTP_PROXY=http://10.100.12.4:8888
# SOCKS5 прокси (опционально, fallback после HTTP)
TELEGRAM_SOCKS5_PROXY=212.87.220.230:1080
TELEGRAM_SOCKS5_USER=proxyuser
TELEGRAM_SOCKS5_PASSWORD=ProxyPass!$
# Email
EMAIL_SMTP_HOST=mail.example.com
EMAIL_SMTP_PORT=587
EMAIL_SMTP_USER=auspex@example.com
EMAIL_SMTP_PASSWORD=secret
EMAIL_FROM=auspex@example.com
EMAIL_TO=admin@example.com,devops@example.com
# Mattermost
MATTERMOST_URL=https://mattermost.example.com
MATTERMOST_BOT_TOKEN=831yapr3xxxxxxxxxxx
MATTERMOST_CHANNEL_ID=oun39xxxxxxxxxxxx
# База данных
DB_USER=waf_user
DB_PASSWORD=secret
DB_NAME=waf_info
PRIMARY_DB_HOST=10.100.10.8
SECONDARY_DB_HOST=10.100.13.5
# Службы для проверки
SERVICES_TO_CHECK=angie,docker
# Пороги сертификатов
CERT_CRITICAL_DAYS=3
CERT_WARNING_DAYS=15
CERT_INFO_DAYS=30
```
## Доставка алертов
Все модули с алертами отправляют уведомления во все настроенные каналы независимо друг от друга:
| Канал | Условие отправки |
|-------|-----------------|
| Telegram | `TELEGRAM_BOT_TOKEN` и `TELEGRAM_CHAT_ID` заданы |
| Email | `EMAIL_SMTP_HOST`, `EMAIL_FROM`, `EMAIL_TO` заданы |
| Mattermost | `MATTERMOST_URL`, `MATTERMOST_BOT_TOKEN`, `MATTERMOST_CHANNEL_ID` заданы |
Если канал не настроен — он молча пропускается, программа не падает.
## State-файлы
Модули `-p`, `-sv`, `-d` сохраняют состояние между запусками и отправляют алерты **только при изменении** статуса. Это позволяет безопасно запускать их по cron без спама.
| Модуль | State-файл |
|--------|-----------|
| `-p` portcheck | `/tmp/port_checker_state.json` |
| `-sv` servicecheck | `/tmp/auspex_service_state.json` |
| `-d` dockercheck | `/tmp/auspex_docker_state.json` |
При первом запуске состояние сохраняется, алерты не отправляются.
## Пример cron
```cron
# Проверка сертификатов — раз в сутки
0 9 * * * root /usr/local/bin/auspex -c >> /var/log/auspex/certcheck.log 2>&1
# Проверка портов — каждые 5 минут
*/5 * * * * root /usr/local/bin/auspex -p >> /var/log/auspex/portcheck.log 2>&1
# Проверка логов — каждый час
0 * * * * root /usr/local/bin/auspex -l >> /var/log/auspex/logcheck.log 2>&1
# Проверка служб — каждые 2 минуты
*/2 * * * * root /usr/local/bin/auspex -sv >> /var/log/auspex/servicecheck.log 2>&1
# Проверка контейнеров — каждые 2 минуты
*/2 * * * * root /usr/local/bin/auspex -d >> /var/log/auspex/dockercheck.log 2>&1
```
## Подробнее
См. [ARCHITECTURE.md](ARCHITECTURE.md).