Синхронизация данных из API в БД.
Find a file
2026-04-17 11:07:49 +03:00
.gitignore Added database_schema 2026-04-17 11:07:49 +03:00
api.go Added database_schema 2026-04-17 11:07:49 +03:00
ARCHITECTURE.md Added database_schema 2026-04-17 11:07:49 +03:00
compare.go Added database_schema 2026-04-17 11:07:49 +03:00
config.go Added database_schema 2026-04-17 11:07:49 +03:00
database.go Added database_schema 2026-04-17 11:07:49 +03:00
DATABASE_SCHEMA.md Added database_schema 2026-04-17 11:07:49 +03:00
dns.go Added database_schema 2026-04-17 11:07:49 +03:00
git.go Added database_schema 2026-04-17 11:07:49 +03:00
go.mod Added database_schema 2026-04-17 11:07:49 +03:00
go.sum Added database_schema 2026-04-17 11:07:49 +03:00
LICENSE Initial commit 2026-04-17 08:06:34 +00:00
main.go Added database_schema 2026-04-17 11:07:49 +03:00
notify.go Added database_schema 2026-04-17 11:07:49 +03:00
README.md Added database_schema 2026-04-17 11:07:49 +03:00
whitelist.go Added database_schema 2026-04-17 11:07:49 +03:00

API Sync - API to PostgreSQL Synchronization Tool

Утилита для автоматической синхронизации данных WAF из API в PostgreSQL с управлением whitelist для PT AF AntiDDOS.

Структура проекта

├── main.go           # Точка входа, worker pool
├── 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!)

Сборка

Установка зависимостей

go get github.com/joho/godotenv
go get github.com/lib/pq
go get golang.org/x/net

Компиляция

# Собрать бинарник
go build -o API_sync

# Или с оптимизацией размера
go build -ldflags="-s -w" -o API_sync

Go автоматически найдёт все .go файлы в директории и скомпилирует их в один бинарник.

Конфигурация

Шаг 1: Создать файл конфигурации

cp API_sync.env.example API_sync.env
nano API_sync.env

Шаг 2: Заполнить переменные

# 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

# Git репозиторий whitelist
GIT_REPO_URL=https://token@svc-git.test.ru/wmx/waf_whitelist.git
GIT_REPO_PATH=/home/install/waf_whitelist
WHITELIST_FILE=whitelist_ptaf.txt

# Параллельность
MAX_CONCURRENT_WORKERS=5

Шаг 3: Защитить файл конфигурации

chmod 600 API_sync.env

Использование

Запуск вручную

./API_sync

Запуск через cron

# /etc/cron.d/API_sync
*/15 * * * * install cd /home/install && /home/install/API_sync >> /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

Режим auto/manual — только ресурсы с mode = 'auto' синхронизируются через API; ресурсы из manual_info используются как дополнительный источник IP для whitelist

База данных

Необходимые таблицы

-- Таблица с информацией из 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
);

-- Добавить столбец mode в apps_settings (если ещё не добавлен)
ALTER TABLE apps_settings ADD COLUMN mode VARCHAR(10) DEFAULT 'auto';

-- Добавить столбец waf_vendor в apps_settings (если ещё не добавлен)
ALTER TABLE apps_settings ADD COLUMN waf_vendor VARCHAR(50);

Логи

Программа выводит детальные логи:

2025/12/26 10:00:00 Start sync API_info
2025/12/26 10:00:00 Total SIDs to process: 25
2025/12/26 10:00:00 Using 5 concurrent workers
2025/12/26 10:00:01 [Worker 0] Processing SID 10307
2025/12/26 10:00:01 [WAF Info] SID: 10307, WAF Enabled: 1, Vendor: ptaf, Instance: PTAFd_02_03
2025/12/26 10:00:01 [AntiDDOS Check] ✅ AntiDDOS is ENABLED for nationallottery.ru
2025/12/26 10:00:01 [Telegram] Using SOCKS5 proxy: proxy.example.com:1080
2025/12/26 10:00:15 Finish sync API_info
2025/12/26 10:00:15 Start cleanup of removed SIDs
2025/12/26 10:00:15 [Cleanup] No stale SIDs found in API_info
2025/12/26 10:00:15 Finish cleanup of removed SIDs
2025/12/26 10:00:15 Start WAF whitelist update
2025/12/26 10:00:16 [WAF Whitelist] No changes needed
2025/12/26 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 автоматически настраивается при первом запуске. Если ошибка повторяется:

cd /home/install/waf_whitelist
git config user.email "API_sync@example.com"
git config user.name "API Sync Bot"

Медленная работа

Увеличьте MAX_CONCURRENT_WORKERS в конфигурации:

MAX_CONCURRENT_WORKERS=10

Telegram не доступен напрямую

Заполните переменные прокси в конфигурации. Утилита автоматически попробует HTTP-прокси, затем SOCKS5, и только если оба недоступны — прямое подключение.