Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
FencePost — Мультихостовый дашборд для межсетевого экрана UFW — объясняет правила простым языком, выявляет пробелы в безопасности и предоставляет диагностику подключений | Kitploit
Инструменты/GitHubGitHub/seriocomic/fencepost
Безопасность контейнеровАнализ уязвимостейАудит конфигурацииСетевая безопасностьБезопасность облачных средDevSecOpsРазведка угрозРеагирование на ИнцидентыАнализ Журналов
GitHubseriocomic/fencepost

FencePost

Мультихостовый дашборд для межсетевого экрана UFW — объясняет правила простым языком, выявляет пробелы в безопасности и предоставляет диагностику подключений

24 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
Репозиторий

FencePost

Многохостовый дашборд для брандмауэра UFW. Подключается к Linux-хостам через SSH, анализирует правила брандмауэра и прослушиваемые порты, объясняет всё понятным языком и указывает на пробелы в безопасности.

Python FastAPI License

Возможности

  • Обзор нескольких хостов -- просматривайте статус UFW, политики по умолчанию и активные службы на всех хостах с одного взгляда
  • Понятные объяснения -- каждое правило брандмауэра преобразуется в читаемые описания с именами VLAN и служб
  • Выявление пробелов -- находит прослушиваемые порты, для которых нет подходящего разрешающего правила UFW, с разделением на внешнюю и локальную доступность
  • Диагностика подключений -- прослеживайте IP-источник + порт назначения по цепочке правил, чтобы узнать, будет ли трафик разрешён, заблокирован или отклонён
  • Обнаружение изменений -- сравнивает текущее состояние с последним снимком и отправляет события (добавленные/удалённые правила, переключение UFW, недоступные хосты) в вебхук
  • С учётом Docker -- помечает Docker-хосты, где iptables может обходить UFW

Скриншоты

Главная Список правил Детали правила

Страницы

RouteDescription
/Обзорная панель с карточками хостов, индикаторами служб и счётчиками пробелов

Архитектура

root@kitploit:~
Browser --> Cloudflare Tunnel --> Reverse Proxy --> FencePost (:8890)
  FastAPI container
    |-- SSH --> Host 1 (ufw status, ss -tlnp)
    |-- SSH --> Host 2
    |-- SSH --> Host N
    '-- POST --> Notification webhook

FencePost работает в режиме только для чтения -- он никогда не изменяет правила брандмауэра, а только сообщает о них.

Быстрый старт

Предварительные требования

  • Python 3.12+ (локальная разработка) или Docker (продакшн)
  • Пара SSH-ключей (ed25519) с публичным ключом, развёрнутым на целевых хостах
  • Запись в sudoers на каждом хосте для SSH-пользователя:
    root@kitploit:~
    <user> ALL=(ALL) NOPASSWD: /usr/sbin/ufw status verbose, /usr/sbin/ufw status numbered, /usr/bin/ss -tlnp
    

1. Клонируйте и настройте

root@kitploit:~
git clone <repo-url> && cd fencepost

# Add your SSH key
cp ~/.ssh/your_key ssh/id_ed25519
chmod 600 ssh/id_ed25519

# Create your environment file from the template
cp .env.example .env
# Edit .env with real credentials

2. Отредактируйте config.yaml

root@kitploit:~
timezone: Australia/Melbourne

hosts:
  - name: My Server
    hostname: 192.168.1.10
    ssh_user: deploy
    ssh_port: 22
    is_docker_host: false

networks:
  "192.168.1.0/24": "LAN"

3. Запустите

Локальная разработка

root@kitploit:~
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

# Load env vars (bash/zsh)
export $(grep -v '^#' .env | xargs)

uvicorn app.main:app --reload --port 8890

Откройте http://localhost:8890.

Примечание: локальный режим использует SSH-ключ по пути, указанному в config.yaml (ssh.key_path). Для локальной разработки вы можете переопределить его, указав ваш локальный ssh/id_ed25519:

root@kitploit:~
ssh:
  key_path: ssh/id_ed25519
  timeout: 10

Docker (продакшн)

root@kitploit:~
docker compose up -d --build

Откройте http://localhost:8890. Контейнер автоматически читает учётные данные из .env через compose.yaml.

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

config.yaml

Переменные окружения (.env)

Учётные данные хранятся в .env (внесён в .gitignore) и используются через compose.yaml. Никогда не коммитьте секреты в репозиторий.

Стек

  • Бэкенд: Python 3.12 / FastAPI / Uvicorn
  • SSH: Paramiko с аутентификацией по ключу ed25519
  • Шаблоны: Jinja2 (серверный рендеринг, без JS-фреймворков)
  • HTTP-клиент: httpx (уведомления через вебхук)
  • Стили: пользовательский CSS, тёмная тема, без фреймворков
  • Шрифты: DM Mono (для данных), Anybody (для заголовков)

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

root@kitploit:~
app/
  main.py           # FastAPI routes and auth
  models.py         # HostFirewallState, UFWRule, ListeningPort dataclasses
  parser.py         # Parses ufw status and ss output
  explainer.py      # Translates rules to plain English
  diagnose.py       # Connection diagnostic engine
  gap_detector.py   # Finds uncovered listening ports
  ssh_client.py     # Paramiko wrapper, parallel host fetching
  eventfeed.py      # Change detection and webhook posting
  templates/
    base.html       # Layout, CSS, navigation
    overview.html   # Host dashboard grid
    host_detail.html # Per-host tabbed detail view
    diagnose.html   # Connection diagnostic form and results
    login.html      # Authentication page
config.yaml         # Host definitions, VLANs, devices, timezone
compose.yaml        # Docker Compose service definition
Dockerfile          # Python 3.12 slim image
.env.example        # Template for environment variables
ssh/                # SSH key directory (key not committed)
data/               # Runtime state (last_state.json, not committed)

Добавление хоста

  1. Добавьте запись в config.yaml в раздел hosts:
  2. Скопируйте публичный SSH-ключ на хост: ssh-copy-id -i ssh/id_ed25519.pub user@host
  3. Создайте на хосте файл /etc/sudoers.d/fencepost с необходимыми правилами NOPASSWD
  4. Пересоберите: docker compose up -d --build

Уведомления

При настройке в config.yaml с переменной окружения NOTIFICATIONS_API_KEY FencePost отправляет события об изменениях при каждом обновлении дашборда:

  • UFW активирован / деактивирован
  • Правила добавлены / удалены (с деталями правил)
  • Новые непокрытые внешние порты
  • Хост стал недоступен / восстановился

События содержат ключи идемпотентности для предотвращения дубликатов.

Лицензия

MIT

Скачать инструмент
/host/{name}Детальная информация о хосте с вкладками: объяснённые правила, непокрытые порты, прослушиваемые порты, необработанный вывод
/diagnoseИнструмент диагностики подключений с визуализацией трассировки по каждому правилу
/loginАутентификация на основе сессий
SectionPurpose
timezoneЧасовой пояс IANA для отображаемых меток времени (например, Australia/Melbourne, UTC)
hostsМассив SSH-целей: name, hostname, ssh_user, ssh_port, is_docker_host
sshkey_path (путь к приватному ключу) и timeout в секундах
networksСопоставление CIDR-диапазонов с именами для VLAN -- используется в объяснении правил и диагностике
devicesИменованные IP-адреса для кнопок быстрого выбора на странице диагностики
notificationsНеобязательный вебхук: url, channel (API-ключ задаётся через переменную окружения)
VariableDefaultDescription
FENCEPOST_USERNAMEadminИмя пользователя для входа
FENCEPOST_PASSWORDfencepostПароль для входа
FENCEPOST_SECRET_KEYchange-meКлюч подписи сессионных cookie
FENCEPOST_CONFIGconfig.yamlПуть к файлу конфигурации
NOTIFICATIONS_API_KEYBearer-токен для вебхука уведомлений