# 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).