IT-Tools : Le Couteau Suisse DevOps
Une suite d'outils web complÚte, auto-hébergée pour ne plus jamais coller de données sensibles sur des sites publics.
Pourquoi IT-Tools ?
Le ProblÚme : Outils en Ligne Non Sécurisés
Scénario classique :
Dev : "Je dois décoder ce JWT pour debug"
Dev : *Ouvre jwt.io et colle le token*
Lead : "Tu viens d'envoyer un token de production sur Internet ?!"
Dev : "Euh... oui"
Lead : "RegénÚre TOUS les tokens. Maintenant."
Risques des outils publics : - Fuite de données : Tokens, clés privées, configs envoyées sur des serveurs tiers - Man-in-the-Middle : Interception possible (HTTP non chiffré) - Logging : Aucune garantie que les données ne soient pas stockées - Dépendance Internet : Inutilisables en environnement air-gapped
La Solution : Auto-Hébergement avec IT-Tools
flowchart LR
A[Engineer] -->|1. Paste Sensitive Data| B[IT-Tools Local]
B -->|2. Process Client-Side| C[JavaScript in Browser]
C -->|3. Result| A
B -.->|Never Leaves Network| D[Your Infrastructure]
style B fill:#4CAF50
style D fill:#2196F3
IT-Tools = 80+ outils dans un conteneur Docker
Bénéfices (SecNumCloud Compliant)
- Privacy : Toutes les opérations sont client-side (JavaScript)
- Security : Données sensibles ne quittent jamais votre réseau
- Availability : Fonctionne 100% hors ligne (air-gapped environments)
- Centralization : Un seul onglet pour tous les outils du quotidien
- Performance : Ultra-léger (~50Mo RAM, démarrage instantané)
- No Tracking : Aucune télémétrie, analytics ou cookies
Section 1 : Pourquoi l'Auto-Héberger ? (SecNumCloud Mindset)
1. Sécurité & Privacy
Traitement Client-Side :
Contrairement aux outils en ligne, IT-Tools exécute tout en JavaScript dans votre navigateur :
DonnĂ©es sensibles â Browser (IT-Tools UI) â JavaScript Processing â RĂ©sultat
â
Jamais envoyé au serveur
Exemples critiques : - JWT Decoder : Décode les tokens sans les envoyer sur Internet - Hash Calculator : Hachage de mots de passe localement - Private Key Inspector : Parse les clés SSH/TLS sans risque de fuite
2. Disponibilité (Air-Gapped Environments)
Cas d'usage SecOps :
# Datacenter isolé (pas d'accÚs Internet)
$ docker run -d -p 8080:80 corentinth/it-tools
# Tous les outils sont maintenant disponibles localement
# Pas besoin de connexion externe
Industries concernées : - Finance (PCI-DSS compliance) - Santé (HIPAA) - Défense (Classified networks) - Cloud souverain (SecNumCloud)
3. Centralisation : One Tool to Rule Them All
Avant IT-Tools :
Onglet 1 : jwt.io (JWT decode)
Onglet 2 : yamllint.com (YAML validation)
Onglet 3 : crontab.guru (Cron syntax)
Onglet 4 : subnet-calculator.com (CIDR)
Onglet 5 : base64decode.org (Base64)
... 20 onglets ouverts
Avec IT-Tools :
Onglet unique : http://localhost:8080
â Search bar : "jwt" â JWT Decoder
â Search bar : "yaml" â YAML to JSON
â Search bar : "cron" â Crontab Generator
Section 2 : Installation (Docker Compose)
Méthode 1 : Docker Run (Quick Start)
# Lancement instantané
docker run -d \
--name it-tools \
--restart unless-stopped \
-p 8080:80 \
corentinth/it-tools:latest
# AccÚs immédiat
open http://localhost:8080 # macOS
xdg-open http://localhost:8080 # Linux
start http://localhost:8080 # Windows
Méthode 2 : Docker Compose (Production)
Fichier docker-compose.yml :
version: '3.8'
services:
it-tools:
image: corentinth/it-tools:latest
container_name: it-tools
restart: unless-stopped
ports:
- "8080:80"
# Optionnel : Bind mount pour personnalisation
# volumes:
# - ./custom-config.json:/app/config.json:ro
# Ressources (trÚs léger)
deploy:
resources:
limits:
memory: 128M
cpus: '0.5'
reservations:
memory: 64M
# Labels pour Traefik (si reverse proxy)
labels:
- "traefik.enable=true"
- "traefik.http.routers.it-tools.rule=Host(`tools.internal.company.com`)"
- "traefik.http.routers.it-tools.entrypoints=websecure"
- "traefik.http.routers.it-tools.tls=true"
# Basic Auth (si exposition interne)
- "traefik.http.middlewares.it-tools-auth.basicauth.users=admin:$$apr1$$hash$$"
- "traefik.http.routers.it-tools.middlewares=it-tools-auth"
networks:
default:
name: tools-network
Déploiement :
# Créer le répertoire
mkdir -p ~/docker/it-tools
cd ~/docker/it-tools
# Créer le fichier docker-compose.yml (voir ci-dessus)
nano docker-compose.yml
# Lancer le service
docker compose up -d
# Vérifier les logs
docker compose logs -f
# Tester l'accĂšs
curl -I http://localhost:8080
Méthode 3 : Avec Reverse Proxy (Traefik)
Stack complĂšte avec authentification :
version: '3.8'
services:
traefik:
image: traefik:v2.10
container_name: traefik
restart: unless-stopped
command:
- "--api.insecure=true"
- "--providers.docker=true"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
ports:
- "80:80"
- "443:443"
- "8081:8080" # Dashboard Traefik
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./traefik/acme.json:/acme.json
networks:
- tools-network
it-tools:
image: corentinth/it-tools:latest
container_name: it-tools
restart: unless-stopped
labels:
- "traefik.enable=true"
- "traefik.http.routers.it-tools.rule=Host(`tools.local`)"
- "traefik.http.services.it-tools.loadbalancer.server.port=80"
networks:
- tools-network
networks:
tools-network:
driver: bridge
Sécurité : Ne PAS Exposer Publiquement
IT-Tools ne possÚde pas d'authentification intégrée.
Si exposition nĂ©cessaire : - â Interne uniquement : VPN, rĂ©seau privĂ© - â Basic Auth : Via Traefik, Nginx, Apache - â SSO : Authelia, Keycloak, OAuth2 Proxy - â Internet public : Risque d'abus (DDoS, data mining)
Exemple Basic Auth avec Traefik :
# Générer un hash bcrypt pour le mot de passe
htpasswd -nbB admin "SuperSecretPassword"
# Output: admin:$2y$05$hash...
# Ajouter dans docker-compose.yml labels:
- "traefik.http.middlewares.auth.basicauth.users=admin:$$2y$$05$$hash..."
- "traefik.http.routers.it-tools.middlewares=auth"
Section 3 : Les "Killer Features" pour le SysOps
Catégorie 1 : DevOps & Containers
đ„ Docker Run â Docker Compose Converter
Outil le Plus Utile
Gain de temps énorme : Convertir instantanément docker run en docker-compose.yml
Cas d'usage :
# Documentation officielle fournit :
docker run -d \
--name nginx \
-p 80:80 \
-v /data:/usr/share/nginx/html:ro \
--restart unless-stopped \
--memory 512m \
-e NGINX_HOST=example.com \
nginx:alpine
# IT-Tools génÚre automatiquement :
version: '3.8'
services:
nginx:
image: nginx:alpine
container_name: nginx
restart: unless-stopped
ports:
- "80:80"
volumes:
- /data:/usr/share/nginx/html:ro
environment:
- NGINX_HOST=example.com
deploy:
resources:
limits:
memory: 512M
Reverse : Convertir docker-compose.yml en commande docker run pour debug.
YAML â JSON Converter
Scénario Kubernetes :
# Manifeste YAML
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
database_url: "postgres://db:5432"
Converti en JSON pour traitement programmatique :
{
"apiVersion": "v1",
"kind": "ConfigMap",
"metadata": {
"name": "app-config"
},
"data": {
"database_url": "postgres://db:5432"
}
}
Utilisation avec jq :
# Pipeline de traitement
cat deployment.yaml | \
# (Paste dans IT-Tools YAMLâJSON) | \
jq '.spec.replicas = 5' | \
# (Paste dans IT-Tools JSONâYAML)
kubectl apply -f -
JSON Viewer / Formatter
Logs JSON difficiles Ă lire :
# Output brut de kubectl
kubectl get pod -o json
# â 5000 lignes sur une seule ligne
# Coller dans IT-Tools JSON Viewer
# â Tree view avec collapse/expand
# â Syntax highlighting
# â Search dans le JSON
Catégorie 2 : Réseau & Infrastructure
Calculateur CIDR (Subnet)
Planification d'infrastructure AWS :
Input : 10.0.0.0/16
Output :
ââ Network : 10.0.0.0
ââ Netmask : 255.255.0.0
ââ Broadcast : 10.0.255.255
ââ Usable IPs : 10.0.0.1 - 10.0.255.254
ââ Total IPs : 65,536
ââ Usable : 65,534
Découpage en subnets :
VPC : 10.0.0.0/16
Subnets :
- Public AZ-A : 10.0.0.0/24 (256 IPs)
- Public AZ-B : 10.0.1.0/24 (256 IPs)
- Private AZ-A : 10.0.10.0/24 (256 IPs)
- Private AZ-B : 10.0.11.0/24 (256 IPs)
- RDS AZ-A : 10.0.20.0/24 (256 IPs)
- RDS AZ-B : 10.0.21.0/24 (256 IPs)
IPv4 â IPv6 Converter
Migration dual-stack :
IPv4 : 192.168.1.100
IPv6 : ::ffff:192.168.1.100 (IPv4-mapped IPv6)
IPv6 : 2001:0db8:85a3:0000:0000:8a2e:0370:7334
Compressed : 2001:db8:85a3::8a2e:370:7334
Catégorie 3 : SystÚme & Scripting
Générateur / Validateur Crontab
Interface visuelle pour cron :
Selector:
- Minute : */15 (Every 15 minutes)
- Hour : 2 (At 2am)
- Day : * (Every day)
- Month : * (Every month)
- Weekday : 1-5 (Monday to Friday)
Output :
*/15 2 * * 1-5 /usr/local/bin/backup.sh
Next runs:
- 2024-01-22 02:00:00 (Monday)
- 2024-01-22 02:15:00 (Monday)
- 2024-01-22 02:30:00 (Monday)
Ăvite les erreurs classiques :
# â Erreur frĂ©quente (s'exĂ©cute TOUTES les minutes de 2h Ă 3h)
0-59 2 * * * script.sh
# â
Correct (s'exécute UNE FOIS à 2h)
0 2 * * * script.sh
Chmod Calculator
Permissions visuelles :
User : [â] Read [â] Write [â] Execute = 7
Group : [â] Read [â] Write [ ] Execute = 6
Other : [â] Read [ ] Write [ ] Execute = 4
Command : chmod 764 file.sh
Symbolic : chmod u=rwx,g=rw,o=r file.sh
Catégorie 4 : Sécurité & Cryptographie
Token Generator
Générer des secrets sécurisés :
# API Token (32 bytes, base64)
dGhpc2lzYXNlY3VyZXRva2VuZm9yYXBpYWNjZXNz
# Random Password (20 chars, symbols)
K#9mP$vL2@xQ8nR!7wT6
# UUID v4
550e8400-e29b-41d4-a716-446655440000
# Hex String (64 chars)
a3f5d9c1e8b2f7a4d6c9e1b8f3a5d2c7e9b4f6a1d3c8e5b7f9a2d4c6e8b1f3a5
Usage :
# Générer un token pour .env
API_SECRET=$(generate_token_via_it_tools)
echo "API_SECRET=$API_SECRET" >> .env
Hash Calculator
Calculer des hashes sans envoyer sur Internet :
Input : MySecretPassword
Algorithms:
ââ MD5 : 5f4dcc3b5aa765d61d8327deb882cf99
ââ SHA1 : 5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8
ââ SHA256 : 2c6ee24b09816a6f14f95d1698b24ead...
ââ SHA512 : e9b8c9b2f5d6a3c1e8b7f4a9d2c5e8b1...
ââ bcrypt : $2a$10$N9qo8uLOickgx2ZMRZoMye...
Vérifier l'intégrité d'un fichier :
# Télécharger un ISO
wget https://releases.ubuntu.com/22.04/ubuntu-22.04.3-live-server-amd64.iso
# Hash fourni par Ubuntu
sha256sum ubuntu-22.04.3-live-server-amd64.iso
# â Copier le hash dans IT-Tools pour comparaison visuelle
JWT Debugger
Décoder un token sans l'envoyer sur jwt.io :
Token : eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
Decoded Header:
{
"alg": "HS256",
"typ": "JWT"
}
Decoded Payload:
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
Expiration: 2018-01-18 01:30:22 (EXPIRED)
Validation de signature (local) :
Catégorie 5 : Encodage & Formatage
Base64 Encoder / Decoder
Kubernetes Secrets :
# Encoder un secret
echo -n "my-database-password" | base64
# â bXktZGF0YWJhc2UtcGFzc3dvcmQ=
# Créer le secret K8s
kubectl create secret generic db-password \
--from-literal=password=bXktZGF0YWJhc2UtcGFzc3dvcmQ=
# Décoder pour vérifier
echo "bXktZGF0YWJhc2UtcGFzc3dvcmQ=" | base64 -d
# â my-database-password
URL Encoder / Decoder
Query parameters :
Original : https://api.com/search?q=Hello World&filter=name:John Doe
Encoded : https://api.com/search?q=Hello%20World&filter=name%3AJohn%20Doe
XML Formatter
Formater des réponses SOAP :
<!-- Input : une ligne illisible -->
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><GetUserResponse><User><ID>123</ID><Name>John</Name></User></GetUserResponse></soap:Body></soap:Envelope>
<!-- Output formaté : -->
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetUserResponse>
<User>
<ID>123</ID>
<Name>John</Name>
</User>
</GetUserResponse>
</soap:Body>
</soap:Envelope>
Catégorie 6 : Autres Outils Utiles
| Outil | Usage SysOps |
|---|---|
| Case Converter | snake_case â camelCase â kebab-case (variables) |
| Lorem Ipsum Generator | Générer du texte de test pour UI |
| QR Code Generator | Partager des URLs/configs (TOTP, WiFi) |
| Color Converter | HEX â RGB â HSL (dashboards Grafana) |
| Temperature Converter | Celsius â Fahrenheit (monitoring hardware) |
| Date Converter | Unix timestamp â ISO 8601 (logs analysis) |
| Roman Numeral Converter | Parce que pourquoi pas ? đ |
Section 4 : Intégration Workflow
1. Windows Terminal (Web Tab)
Ajouter IT-Tools comme onglet permanent :
// settings.json de Windows Terminal
{
"profiles": {
"list": [
{
"name": "IT-Tools",
"commandline": "wt.exe",
"startingDirectory": null,
"tabTitle": "đ§ IT-Tools",
"suppressApplicationTitle": true,
"icon": "đ ïž",
// Ouvrir dans le navigateur par défaut
"commandline": "cmd.exe /c start http://localhost:8080",
"closeOnExit": "never"
}
]
}
}
Raccourci clavier :
{
"actions": [
{
"command": {
"action": "newTab",
"profile": "IT-Tools"
},
"keys": "ctrl+shift+t"
}
]
}
2. Favori de Barre Personnelle (Browser)
Chrome / Edge / Firefox :
1. Accéder à http://localhost:8080
2. Bookmarks â Add Bookmark
3. Name : đ§ IT-Tools
4. Folder : Bookmarks Bar
5. Keyboard Shortcut : Ctrl+Shift+I (Chrome extensions)
Organisation recommandée :
Bookmarks Bar/
ââ đ§ IT-Tools (http://localhost:8080)
ââ đ Grafana (http://monitoring.local)
ââ đł Portainer (http://docker.local)
ââ đ ShellBook (http://docs.local)
3. Alfred / Raycast (macOS)
Workflow Alfred :
# Créer un Web Search
Keyword : tools
URL : http://localhost:8080/?search={query}
Usage :
tools jwt â Ouvre directement JWT Decoder
tools yaml â Ouvre YAML to JSON
4. KRunner (KDE Plasma)
# Ajouter un Web Shortcut
Settings â Search â Web Shortcuts
Name : IT-Tools
Keyword : tools
URL : http://localhost:8080/?search=\{@}
5. Script de Lancement Rapide
Linux / macOS :
#!/bin/bash
# ~/.local/bin/tools
# Vérifier si IT-Tools est lancé
if ! docker ps | grep -q it-tools; then
echo "Starting IT-Tools..."
docker start it-tools 2>/dev/null || \
docker run -d --name it-tools -p 8080:80 corentinth/it-tools
sleep 2
fi
# Ouvrir dans le navigateur
xdg-open http://localhost:8080 # Linux
# open http://localhost:8080 # macOS
echo "IT-Tools ready at http://localhost:8080"
Windows (PowerShell) :
# ~\Documents\PowerShell\Scripts\tools.ps1
# Vérifier si IT-Tools est lancé
$running = docker ps --filter "name=it-tools" --format "{{.Names}}"
if (-not $running) {
Write-Host "Starting IT-Tools..."
docker start it-tools 2>$null
if ($LASTEXITCODE -ne 0) {
docker run -d --name it-tools -p 8080:80 corentinth/it-tools
}
Start-Sleep -Seconds 2
}
# Ouvrir dans le navigateur
Start-Process "http://localhost:8080"
Write-Host "IT-Tools ready at http://localhost:8080" -ForegroundColor Green
Alias dans profile :
# ~/.bashrc ou ~/.zshrc
alias tools='~/local/bin/tools'
# PowerShell Profile
Set-Alias tools ~\Documents\PowerShell\Scripts\tools.ps1
Référence Rapide
Installation Rapide
# Docker Run (Instant)
docker run -d --name it-tools --restart unless-stopped -p 8080:80 corentinth/it-tools
# Docker Compose
cat > docker-compose.yml <<EOF
version: '3.8'
services:
it-tools:
image: corentinth/it-tools:latest
container_name: it-tools
restart: unless-stopped
ports:
- "8080:80"
deploy:
resources:
limits:
memory: 128M
EOF
docker compose up -d
# AccĂšs
open http://localhost:8080
Commandes Essentielles
# Démarrer IT-Tools
docker start it-tools
# ArrĂȘter IT-Tools
docker stop it-tools
# Voir les logs
docker logs -f it-tools
# Mettre Ă jour vers la derniĂšre version
docker pull corentinth/it-tools:latest
docker stop it-tools
docker rm it-tools
docker run -d --name it-tools --restart unless-stopped -p 8080:80 corentinth/it-tools
# Vérifier la consommation de ressources
docker stats it-tools
Outils les Plus Utilisés
| Catégorie | Outil | Recherche |
|---|---|---|
| DevOps | Docker Run â Compose | docker |
| Format | YAML â JSON | yaml |
| Format | JSON Viewer | json |
| Réseau | CIDR Calculator | cidr ou subnet |
| SystĂšme | Crontab Generator | cron |
| SystĂšme | Chmod Calculator | chmod |
| Sécurité | JWT Decoder | jwt |
| Sécurité | Hash Calculator | hash |
| Sécurité | Token Generator | token |
| Encodage | Base64 Encoder | base64 |
| Encodage | URL Encoder | url |
Dépannage
| ProblĂšme | Solution |
|---|---|
| Port 8080 déjà utilisé | docker run -p 8888:80 corentinth/it-tools |
| Conteneur ne démarre pas | docker logs it-tools |
| Mise Ă jour non prise en compte | docker pull corentinth/it-tools && docker restart it-tools |
| Erreur "Cannot connect" | Vérifier que le conteneur est running : docker ps |
Ressources
Projet Officiel : - GitHub : CorentinTh/it-tools - Documentation
Alternatives : - CyberChef : Plus orienté forensics/CTF - DevToys : Application Windows native - DevUtils : Application macOS native (payant)
Intégrations : - Déployer sur Kubernetes avec Helm - Intégrer dans une stack Homelab (Traefik, Portainer) - Utiliser comme sidecar dans des pods de debug
Next Steps : - Explorer tous les outils disponibles (80+) - Créer des bookmarks pour les outils les plus utilisés - Intégrer dans votre workflow quotidien (raccourcis clavier) - Partager l'instance avec votre équipe (avec authentification !)