api_sync/README.md

253 lines
No EOL
8.9 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.

# API Sync - API to PostgreSQL Synchronization Tool
Утилита для автоматической синхронизации данных WAF из API в PostgreSQL с управлением whitelist для PT AF AntiDDOS.
## Структура проекта
```
├── main.go # Точка входа, worker pool, режим --cd
├── config.go # Конфигурация и переменные окружения
├── api.go # HTTP клиент и API структуры
├── database.go # Работа с PostgreSQL
├── dns.go # DNS резолв для AntiDDOS проверки
├── notify.go # Уведомления (Telegram, Mattermost, Email)
├── git.go # Git операции (clone, commit, push)
├── whitelist.go # Управление WAF whitelist
├── compare.go # Функции сравнения (origins, aliases)
└── API_sync.env # Файл конфигурации (не в Git!)
```
## Сборка
### Установка зависимостей
```bash
go get github.com/joho/godotenv
go get github.com/lib/pq
go get golang.org/x/net
```
### Компиляция
```bash
# Собрать бинарник
go build -o API_sync
# Или с оптимизацией размера
go build -ldflags="-s -w" -o API_sync
```
## Конфигурация
### Шаг 1: Создать файл конфигурации
```bash
cp API_sync.env.example API_sync.env
nano API_sync.env
```
### Шаг 2: Заполнить переменные
```env
# API API
BEARER_TOKEN=your_api_token
# PostgreSQL
DB_HOST=localhost
DB_PORT=5432
DB_USER=install
DB_PASSWORD=your_password
DB_NAME=waf_info
# Telegram (обязательно)
TELEGRAM_BOT_TOKEN=123456789:ABC...
TELEGRAM_CHAT_ID=-1001234567890
# Telegram прокси (опционально, пробуются в порядке: HTTP → SOCKS5 → прямое подключение)
TELEGRAM_HTTP_PROXY=http://user:pass@proxy.example.com:3128
TELEGRAM_SOCKS5_PROXY=proxy.example.com:1080
TELEGRAM_SOCKS5_USER=user
TELEGRAM_SOCKS5_PASSWORD=password
# Mattermost (опционально)
MATTERMOST_URL=https://mattermost.example.com
MATTERMOST_BOT_TOKEN=your_bot_token
MATTERMOST_CHANNEL_ID=channel_id
# Email (опционально)
EMAIL_SMTP_HOST=smtp.example.com
EMAIL_SMTP_PORT=587
EMAIL_SMTP_USER=user@example.com
EMAIL_SMTP_PASSWORD=your_password
EMAIL_FROM=API_sync@example.com
EMAIL_TO=admin@example.com,team@example.com
EMAIL_SKIP_TLS_VERIFY=false
# Git репозиторий whitelist
GIT_REPO_URL=https://token@svc-git.cirex.ru/wmx/waf_whitelist.git
GIT_REPO_PATH=/home/install/waf_whitelist
WHITELIST_FILE=whitelist_ptaf.txt
# Параллельность и функции
MAX_CONCURRENT_WORKERS=5
CHECK_DUPLICATES=true
```
### Шаг 3: Защитить файл конфигурации
```bash
chmod 600 API_sync.env
```
## Использование
### Запуск вручную
```bash
# Основной запуск
./API_sync
# Проверка дублирующихся доменов/алиасов + ошибок API
./API_sync --cd
```
### Запуск через cron
```bash
# /etc/cron.d/API_sync
# Основной запуск каждые 15 минут
*/15 * * * * install cd /home/install && /home/install/API_sync >> /var/log/API_sync.log 2>&1
# Проверка дублей и ошибок API каждый час
0 * * * * install cd /home/install && /home/install/API_sync --cd >> /var/log/API_sync.log 2>&1
```
## Возможности
**Параллельная обработка** — настраиваемый worker pool для запросов к API
**Синхронизация данных WAF** из API API в PostgreSQL
**Smart Diff** — детальное сравнение origins и aliases с уведомлением об изменениях
**AntiDDOS проверка** — DNS-резолв домена и сравнение с protected_ip из API
**WAF настройки** — отслеживание изменений waf_enabled, waf_vendor, waf_instance
**Мультиканальные уведомления** — Telegram (с поддержкой HTTP/SOCKS5 прокси), Mattermost, Email
**Автоматический whitelist** — объединение IP из API_info и manual_info, фильтрация WAF-сетей, Git push
**Очистка устаревших данных** — автоматическое удаление из API_info ресурсов, пропавших из apps_settings
**Сводный алерт ошибок API** — все недоступные SID собираются в одно сообщение (управляется `CHECK_DUPLICATES`)
**Проверка дублей** — поиск совпадающих доменов/алиасов между разными SID, запускается в основном режиме (управляется `CHECK_DUPLICATES`) или отдельно через `--cd`
**Режим auto/manual** — только ресурсы с `mode = 'auto'` синхронизируются через API; ресурсы из manual_info используются как дополнительный источник IP для whitelist
## База данных
### Необходимые таблицы
```sql
-- Таблица с информацией из API (заполняется автоматически)
CREATE TABLE API_info (
sid BIGINT PRIMARY KEY,
domain_name VARCHAR(255),
origins JSONB,
aliases JSONB,
aliaces_in_API_modified TIMESTAMP WITHOUT TIME ZONE,
protected_ip VARCHAR(45),
resolved_ip VARCHAR(45),
antiddos_enable BOOLEAN,
waf_enabled_API INTEGER,
waf_vendor VARCHAR(255),
instance_API VARCHAR(255),
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW()
);
-- Таблица с WAF-сетями для фильтрации whitelist
CREATE TABLE ips (
id SERIAL PRIMARY KEY,
waf_networks TEXT[]
);
-- Пример заполнения WAF-сетей
INSERT INTO ips (waf_networks) VALUES
('{109.238.89.0/24,89.20.63.0/24}');
-- Таблица ручных ресурсов (заполняется администратором вручную)
CREATE TABLE manual_info (
sid BIGINT PRIMARY KEY,
domain_name VARCHAR(255),
origins JSONB
);
-- Добавить столбцы в apps_settings (если ещё не добавлены)
ALTER TABLE apps_settings ADD COLUMN mode VARCHAR(10) DEFAULT 'auto';
ALTER TABLE apps_settings ADD COLUMN waf_vendor VARCHAR(50);
-- Добавить столбец в client_info (если ещё не добавлен)
ALTER TABLE client_info ADD COLUMN waf_provider VARCHAR(50);
```
## Логи
```
2026/06/10 10:00:00 Start sync API_info
2026/06/10 10:00:00 Total SIDs to process: 25
2026/06/10 10:00:00 Using 5 concurrent workers
2026/06/10 10:00:01 [Worker 0] Processing SID 10307
2026/06/10 10:00:01 [WAF Info] SID: 10307, WAF Enabled: 1, Vendor: ptaf, Instance: PTAFd_02_03
2026/06/10 10:00:01 [AntiDDOS Check] ✅ AntiDDOS is ENABLED for nationallottery.ru
2026/06/10 10:00:01 [Telegram] Using SOCKS5 proxy: proxy.example.com:1080
2026/06/10 10:00:15 Finish sync API_info
2026/06/10 10:00:15 Start cleanup of removed SIDs
2026/06/10 10:00:15 [Cleanup] No stale SIDs found in API_info
2026/06/10 10:00:15 Finish cleanup of removed SIDs
2026/06/10 10:00:15 Start duplicate domain/alias check
2026/06/10 10:00:15 [Duplicate Check] No duplicates found
2026/06/10 10:00:15 Finish duplicate domain/alias check
2026/06/10 10:00:15 Start WAF whitelist update
2026/06/10 10:00:16 [WAF Whitelist] No changes needed
2026/06/10 10:00:16 Finish WAF whitelist update
```
## Troubleshooting
### Ошибка: "API_sync.env file not found"
Создайте файл конфигурации по пути `/etc/API_sync/API_sync.env` или используйте системные переменные окружения.
### Ошибка: "git commit failed: Author identity unknown"
Git автоматически настраивается при первом запуске. Если ошибка повторяется:
```bash
cd /home/install/waf_whitelist
git config user.email "API_sync@example.com"
git config user.name "API Sync Bot"
```
### Медленная работа
Увеличьте `MAX_CONCURRENT_WORKERS` в конфигурации:
```env
MAX_CONCURRENT_WORKERS=10
```
### Telegram не доступен напрямую
Заполните переменные прокси в конфигурации. Утилита автоматически попробует HTTP-прокси, затем SOCKS5, и только если оба недоступны — прямое подключение.
### Ошибка TLS при отправке email
Если сертификат SMTP-сервера просрочен или невалиден:
```env
EMAIL_SKIP_TLS_VERIFY=true
```