| .gitignore | ||
| ARCHITECTURE.md | ||
| audit.go | ||
| buildinfo_generic.go | ||
| buildinfo_waf.go | ||
| certcheck.go | ||
| config.go | ||
| DATABASE_SCHEMA.md | ||
| dockercheck.go | ||
| dockerview.go | ||
| email.go | ||
| fdcheck.go | ||
| firewall.go | ||
| firewall_tui.go | ||
| go.mod | ||
| go.sum | ||
| LICENSE | ||
| logcheck.go | ||
| logcheck_stub.go | ||
| main.go | ||
| matchcheck.go | ||
| matchcheck_stub.go | ||
| mattermost.go | ||
| portcheck.go | ||
| portcheck_stub.go | ||
| portsview.go | ||
| README.md | ||
| servicecheck.go | ||
| telegram.go | ||
| webcheck.go | ||
| webcheck_stub.go | ||
Auspex
Набор утилит мониторинга инфраструктуры WAF.
Утилиты
| Ключ | Описание |
|---|---|
-ss |
Просмотр занятых портов (интерактивный TUI на bubbletea) |
-c |
Проверка SSL сертификатов (сроки истечения, алерты) |
-p |
Проверка доступности портов из nginx upstream конфигов [WAF] |
-m |
Проверка совпадений портов Angie ↔ Docker (+ проверка запуска контейнеров) [WAF] |
-l |
Проверка обновления файлов PT AF access logs [WAF] |
-sv |
Проверка работоспособности служб systemd |
-d или -dc |
Проверка работоспособности Docker контейнеров (снапшот состояния + алерты при изменениях) |
-w |
Проверка доступности сайтов клиента через lynx [WAF] |
-fd |
Поиск удалённых-но-открытых файловых дескрипторов (recover/reopen/truncate/restart/kill) |
-dt |
Docker Live — интерактивный TUI (аналог lazydocker): логи, шелл, stop/start/restart/remove |
-fw |
Firewall — TUI для ufw/nftables/iptables: просмотр правил + формы (allow/deny, forward, rate-limit) с dry-run и автооткатом |
-au |
Audit — комплексная read-only диагностика (systemd/nginx/docker/cert/disk/network/firewall) с кросс-проверками между категориями; auspex -au <категория> для одной секции |
Модули [WAF] требуют БД waf_info и/или структуру каталогов PT AF и доступны
только в сборке full (см. Сборка).
Структура проекта
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 сертификатов
├── servicecheck.go # -sv: проверка служб systemd
├── dockercheck.go # -d: проверка Docker контейнеров (снапшот + diff)
├── dockerview.go # -dt: Docker Live TUI (аналог lazydocker)
├── firewall.go # -fw: бэкенды ufw/nftables/iptables (detect/list/apply/undo)
├── firewall_tui.go # -fw: TUI-слой (формы, review, rollback-таймер)
├── audit.go # -au: комплексный аудит-скан (read-only)
├── portsview.go # -ss: TUI просмотр занятых портов
├── fdcheck.go # -fd: удалённые-но-открытые файловые дескрипторы
├── portcheck.go # -p: проверка доступности портов [WAF, build tag]
├── portcheck_stub.go # заглушка -p для generic-сборки [!WAF]
├── matchcheck.go # -m: совпадения Angie ↔ Docker [WAF, build tag]
├── matchcheck_stub.go # заглушка -m для generic-сборки [!WAF]
├── logcheck.go # -l: проверка свежести логов [WAF, build tag]
├── logcheck_stub.go # заглушка -l для generic-сборки [!WAF]
├── webcheck.go # -w: проверка доступности сайтов (lynx) [WAF, build tag]
├── webcheck_stub.go # заглушка -w для generic-сборки [!WAF]
├── buildinfo_waf.go # buildVariant = "full" [build tag: waf]
├── buildinfo_generic.go# buildVariant = "generic" [build tag: !waf]
├── go.mod
└── README.md
Сборка
Два варианта сборки через Go build tags:
go mod tidy
# generic — только модули без зависимости от WAF/PT AF: -c -sv -dc -ss -fd -dt
go build -o auspex .
# full — все модули, включая -p -m -l -w (требуют БД waf_info / структуру PT AF)
go build -tags waf -o auspex .
sudo cp auspex /usr/local/bin/auspex
Файлы logcheck.go, webcheck.go, portcheck.go, matchcheck.go помечены
//go:build waf и не попадают в generic-сборку; вместо них компилируются
заглушки (*_stub.go), которые при вызове -l/-w/-p/-m выводят понятную
ошибку с подсказкой пересобрать с -tags waf. Какая сборка используется —
видно в баннере меню и в выводе auspex -v (full/generic).
Использование
# Интерактивное меню
./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 -fd # Поиск удалённых-но-открытых файловых дескрипторов
./auspex -dt # Docker Live TUI (аналог lazydocker)
./auspex -fw # Firewall TUI (ufw/nftables/iptables)
./auspex -au # Полный аудит-скан
./auspex -au nginx # Аудит только одной категории
./auspex -h # Справка
./auspex -v # Версия
Конфигурация
Конфигурация загружается из /etc/auspex/auspex.env. Если файл не найден — используются значения по умолчанию. Формат файла: KEY=VALUE, комментарии через #.
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 |
FD_RECOVER_DIR |
Куда сохраняются снимки восстановленных файлов (-fd) |
/var/tmp/auspex-recovered |
FW_ROLLBACK_SECONDS |
Время до автоотката неподтверждённого правила (-fw) |
25 |
Пороги сертификатов
| Переменная | Описание | По умолчанию |
|---|---|---|
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
# 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_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
# Проверка сертификатов — раз в сутки
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.