Набор утилит мониторинга инфраструктуры WAF
Find a file
2026-08-26 12:58:09 +03:00
.gitignore Added docker actions 2026-07-27 13:35:23 +03:00
ARCHITECTURE.md V 1.5.0 2026-08-26 12:58:09 +03:00
audit.go V 1.5.0 2026-08-26 12:58:09 +03:00
buildinfo_generic.go Added docker actions 2026-07-27 13:35:23 +03:00
buildinfo_waf.go Added docker actions 2026-07-27 13:35:23 +03:00
certcheck.go Fix match check 2026-06-09 17:12:18 +03:00
config.go Added firewall settings 2026-07-27 16:00:24 +03:00
DATABASE_SCHEMA.md Fix match check 2026-06-09 17:12:18 +03:00
dockercheck.go Fix match check 2026-06-09 17:12:18 +03:00
dockerview.go Added docker actions 2026-07-27 13:35:23 +03:00
email.go Fix match check 2026-06-09 17:12:18 +03:00
fdcheck.go Added truncate 2026-07-27 13:13:01 +03:00
firewall.go Added firewall settings 2026-07-27 16:00:24 +03:00
firewall_tui.go Added firewall settings 2026-07-27 16:00:24 +03:00
go.mod Added file descriptor module 2026-07-27 13:00:20 +03:00
go.sum Added file descriptor module 2026-07-27 13:00:20 +03:00
LICENSE Fix match check 2026-06-09 17:12:18 +03:00
logcheck.go Added docker actions 2026-07-27 13:35:23 +03:00
logcheck_stub.go Added docker actions 2026-07-27 13:35:23 +03:00
main.go V 1.5.0 2026-08-26 12:58:09 +03:00
matchcheck.go Added docker actions 2026-07-27 13:35:23 +03:00
matchcheck_stub.go Added docker actions 2026-07-27 13:35:23 +03:00
mattermost.go Fix match check 2026-06-09 17:12:18 +03:00
portcheck.go Added docker actions 2026-07-27 13:35:23 +03:00
portcheck_stub.go Added docker actions 2026-07-27 13:35:23 +03:00
portsview.go Fix match check 2026-06-09 17:12:18 +03:00
README.md V 1.5.0 2026-08-26 12:58:09 +03:00
servicecheck.go Fix match check 2026-06-09 17:12:18 +03:00
telegram.go Fix match check 2026-06-09 17:12:18 +03:00
webcheck.go Added docker actions 2026-07-27 13:35:23 +03:00
webcheck_stub.go Added docker actions 2026-07-27 13:35:23 +03:00

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