Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
FencePost — Tableau de bord de pare-feu UFW multi-hôtes — explique les règles en langage clair, détecte les failles de sécurité et fournit des diagnostics de connexion | Kitploit
Outils/GitHubGitHub/seriocomic/fencepost
Sécurité des ConteneursAnalyse des VulnérabilitésAudit de ConfigurationSécurité RéseauSécurité CloudDevSecOpsRenseignement sur les MenacesRéponse aux IncidentsAnalyse de Journaux
GitHubseriocomic/fencepost

FencePost

Tableau de bord de pare-feu UFW multi-hôtes — explique les règles en langage clair, détecte les failles de sécurité et fournit des diagnostics de connexion

214il y a 5 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager
Voir le dépôt

FencePost

Tableau de bord de pare-feu UFW multi-hôtes. Se connecte aux hôtes Linux via SSH, analyse les règles de pare-feu et les ports en écoute, explique tout en langage clair et signale les failles de sécurité.

Python FastAPI License

Fonctionnalités

  • Vue multi-hôtes -- voir l'état d'UFW, les politiques par défaut et les services actifs sur tous les hôtes en un coup d'œil
  • Explications en langage clair -- chaque règle de pare-feu est traduite en descriptions lisibles avec les noms de VLAN et de services
  • Détection des failles -- détecte les ports en écoute sans règle UFW allow correspondante, répartis entre exposition externe et locale
  • Diagnostics de connexion -- suit une IP source + un port de destination à travers la chaîne de règles pour voir si le trafic serait autorisé, bloqué ou rejeté
  • Détection de changements -- compare l'état actuel à la dernière capture et envoie les événements (règles ajoutées/supprimées, UFW activé/désactivé, hôtes injoignables) à un webhook
  • Sensible à Docker -- signale les hôtes Docker où iptables peut contourner UFW

Captures d'écran

Home Rule List Rule Detail

Pages

RouteDescription
/Tableau de bord avec cartes hôtes, pastilles de services, compteurs de failles
/host/{name}Détail de l'hôte avec vue à onglets : règles expliquées, ports non couverts, ports en écoute, sortie brute
/diagnoseOutil de diagnostic de connexion avec visualisation de la trace règle par règle
/loginAuthentification par session

Architecture

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 est en lecture seule -- il ne modifie jamais les règles de pare-feu, il se contente de les rapporter.

Démarrage rapide

Prérequis

  • Python 3.12+ (développement local) ou Docker (production)
  • Paire de clés SSH (ed25519) avec clé publique déployée sur les hôtes cibles
  • Entrée sudoers sur chaque hôte pour l'utilisateur SSH :
    <user> ALL=(ALL) NOPASSWD: /usr/sbin/ufw status verbose, /usr/sbin/ufw status numbered, /usr/bin/ss -tlnp
    

1. Cloner et configurer

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. Modifier config.yaml

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. Exécuter

Développement local

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

Ouvrez http://localhost:8890.

Remarque : le mode local utilise la clé SSH au chemin spécifié dans config.yaml (ssh.key_path). Pour le développement local, vous voudrez peut-être le remplacer pour pointer vers votre ssh/id_ed25519 local :

ssh:
  key_path: ssh/id_ed25519
  timeout: 10

Docker (production)

docker compose up -d --build

Ouvrez http://localhost:8890. Le conteneur lit les identifiants depuis .env automatiquement via compose.yaml.

Configuration

config.yaml

SectionDescription
timezoneFuseau horaire IANA pour les horodatages affichés (par ex. Australia/Melbourne, UTC)
hostsTableau des cibles SSH : name, hostname, ssh_user, ssh_port, is_docker_host
sshkey_path (chemin vers la clé privée) et timeout en secondes
networksMappage CIDR-à-nom pour les VLAN -- utilisé dans les explications de règles et les diagnostics
devicesIP nommées pour les boutons de sélection rapide de la page de diagnostic
notificationsWebhook facultatif : url, channel (clé API définie via une variable d'environnement)

Variables d'environnement (.env)

VariableDéfautDescription
FENCEPOST_USERNAMEadminNom d'utilisateur de connexion
FENCEPOST_PASSWORDfencepostMot de passe de connexion
FENCEPOST_SECRET_KEYchange-meClé de signature des cookies de session
FENCEPOST_CONFIGconfig.yamlChemin vers le fichier de configuration
NOTIFICATIONS_API_KEYJeton Bearer pour le webhook de notification

Les identifiants sont stockés dans .env (ignoré par git) et référencés par compose.yaml. Ne committez jamais de secrets dans le dépôt.

Pile technologique

  • Backend : Python 3.12 / FastAPI / Uvicorn
  • SSH : Paramiko avec authentification par clé ed25519
  • Templates : Jinja2 (rendu serveur, sans framework JS)
  • Client HTTP : httpx (notifications webhook)
  • Styles : CSS personnalisé, thème sombre, sans framework
  • Polices : DM Mono (données), Anybody (titres)

Structure du projet

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)

Ajouter un hôte

  1. Ajoutez une entrée dans config.yaml sous hosts:
  2. Copiez la clé publique SSH sur l'hôte : ssh-copy-id -i ssh/id_ed25519.pub user@host
  3. Créez /etc/sudoers.d/fencepost sur l'hôte avec les règles NOPASSWD requises
  4. Reconstruisez : docker compose up -d --build

Notifications

Lorsqu'il est configuré dans config.yaml avec une variable d'environnement NOTIFICATIONS_API_KEY, FencePost publie les événements de changement à chaque actualisation du tableau de bord :

  • UFW activé / désactivé
  • Règles ajoutées / supprimées (avec détails des règles)
  • Nouveaux ports externes non couverts
  • Hôte devenu injoignable / rétabli

Les événements incluent des clés d'idempotence pour éviter les doublons.

Licence

MIT

Télécharger l’outil