Files
hcornet 78fb13b0e5
CI / Backend — lint, types, tests (push) Failing after 4m44s
CI / Interface — types et compilation (push) Successful in 10m23s
CI / Construction des images (sans publication) (push) Skipped
first sync
2026-09-12 13:10:16 +02:00

6.4 KiB

Limier

Plateforme OSINT auto-hébergée : recherche d'informations publiquement accessibles à partir d'un pseudonyme, d'un prénom et nom, d'une adresse e-mail ou d'un nom de domaine.

Bâtie sur Maigret pour la recherche par pseudonyme, avec deux moteurs écrits pour l'occasion — Maigret ne couvre ni l'e-mail ni le domaine.

Le nom est un clin d'œil : un limier suit une piste, et Maigret doit le sien au commissaire de Simenon.


Ce que ça fait

Recherche par pseudonyme sur 3 300+ sites, avec extraction des données de profil : avatar, nom affiché, biographie, abonnés, date d'inscription.

Recherche par nom civil. « Hubert Cornet » est traité comme une seule identité : les pseudonymes plausibles sont déduits par ordre de probabilité (hubertcornet, hubert.cornet, hcornet, h.cornet…) puis recherchés ensemble. La liste est affichée avant lancement.

Recherche par e-mail : profil Gravatar et comptes vérifiés qui y sont déclarés, posture de messagerie du domaine (MX, SPF, DMARC), détection des adresses jetables, fuites connues (optionnel), comptes rattachés (optionnel).

Recherche par domaine : enregistrement RDAP, DNS complet, et sous-domaines issus des journaux de transparence des certificats, séparés entre ceux qui résolvent encore et ceux qui sont historiques.

Des résultats notés, pas des pastilles vertes. Un scanner naïf considère « trouvé » tout site répondant 200 — alors que beaucoup rendent 200 sur une page « utilisateur inconnu ». Chaque résultat est jugé sur des signaux observables (profil extrait, nom affiché, avatar, métriques, classement du site) puis classé confirmé / probable / faible. Les signaux sont affichés : on voit pourquoi un résultat est confirmé.

Progression en direct. Les résultats arrivent au fil de l'eau, site par site, pas en bloc après deux minutes de sablier.

Architecture

Composant Rôle
limier-web interface React compilée, servie par nginx
limier-api FastAPI — acceptation, authentification, flux SSE
limier-worker arq — exécution des recherches, travaux planifiés
limier-postgres recherches, résultats, comptes, quotas
limier-redis file de travaux et progression
limier-holehe optionnel, isolé — licence GPLv3
limier-flaresolverr optionnel — contournement Cloudflare

Détail dans docs/01-architecture.md.

Arborescence

limier/
├── backend/                    API + worker (une image, deux commandes)
│   ├── src/limier/
│   │   ├── config.py           toutes les variables d'environnement
│   │   ├── api/routes/         une route = un fichier
│   │   ├── auth/               OIDC Authentik, session par cookie signé
│   │   ├── db/                 modèles SQLAlchemy
│   │   ├── engines/            contrat commun + un dossier par moteur
│   │   │   ├── base.py         le contrat
│   │   │   ├── scoring.py      la notation anti-faux-positifs
│   │   │   ├── username/       Maigret
│   │   │   ├── email/          Gravatar, DNS, fuites, holehe, pivot
│   │   │   └── domain/         RDAP, DNS, transparence des certificats
│   │   ├── jobs/               file arq, progression, travaux
│   │   ├── net/                client HTTP, pool de proxies
│   │   ├── privacy/            hachage des identifiants, conservation
│   │   └── quotas/             quotas mensuels, limitation de débit
│   ├── migrations/             Alembic
│   └── tests/
├── frontend/                   React 19 + Vite, sans framework CSS
├── services/holehe/            microservice isolé (GPLv3)
├── deploy/                     compose, config Traefik, .env.example
├── docs/                       sept documents, voir ci-dessous
└── .gitea/workflows/           CI, publication, entretien

Documentation

Fichier Contenu
01-architecture.md découpe, contrat des moteurs, où chercher quoi
02-deploiement.md installation sur SLDOKP03
03-authentik.md groupes, fournisseur OAuth2, pièges
04-moteurs.md sources, limites, notation
05-rgpd.md conservation, effacement, ce qui reste à ta charge
06-exploitation.md sortie réseau, entretien, pannes
07-api.md routes, flux SSE, codes de refus

Démarrage rapide

cp deploy/.env.example .env    # renseigner les trois secrets
docker compose run --rm limier-api alembic upgrade head
docker compose up -d
curl -s https://limier.tips-of-mine.com/api/pret | jq

Développement :

cd backend && pip install -e ".[dev]" && pytest -q
cd frontend && npm ci && npm run dev

Deux points à connaître avant d'ouvrir au public

La sortie réseau. Une recherche émet 500 requêtes vers 500 domaines en quelques secondes. Depuis une IP unique, cela déclenche des blocages et le taux de sites non vérifiables monte vite. Le pool de proxies est prévu pour ça — c'est le poste de coût principal d'une instance publique. Voir 06-exploitation.md.

Le RGPD. Un service public de recherche sur des personnes fait de toi un responsable de traitement. Ce qui est implémenté : minimisation (le terme peut n'être conservé que sous forme d'empreinte), purge automatique, export, demande d'effacement avec liste d'exclusion. Ce qui reste à ta charge : base légale, mentions légales, modération. Voir 05-rgpd.md.

Licences

Limier est sous licence MIT. Voir NOTICE.md pour les composants tiers — en particulier services/holehe/, sous GPLv3, maintenu comme programme séparé précisément pour cette raison.

Usage licite uniquement. L'outil n'interroge que des sources publiques, mais il ne distingue pas un usage légitime d'un harcèlement.