253 lines
11 KiB
Markdown
253 lines
11 KiB
Markdown
# 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 -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).
|