Ce guide explique comment configurer la rΓ©cupΓ©ration automatique de tous les domaines .ch via transfert de zone AXFR.
sudo apt update
sudo apt install -y dnsutilsVΓ©rifier l'installation:
dig -vcd /opt/oldsite-scanner
source venv/bin/activate
python -m backend.fetch_ch_domainsCette commande va:
- β
Tenter un AXFR sur
zonedata.switch.ch - β Si Γ©chec, essayer des serveurs alternatifs (ns1.nic.ch, ns2.nic.ch, etc.)
- β
CrΓ©er/mettre Γ jour
domains_ch.txtavec tous les domaines trouvΓ©s - β Si tout Γ©choue, conserver le fichier existant (pas d'erreur bloquante)
# Voir le nombre de domaines
wc -l domains_ch.txt
# Voir les premiers domaines
head -20 domains_ch.txt
# Voir les derniers domaines
tail -20 domains_ch.txt# Scanner 10 domaines pour tester
python -m backend.scan_ch_sites --limit 10
# Scanner 100 domaines
python -m backend.scan_ch_sites --limit 100# Copier les nouveaux services
sudo cp deployment/oldsites-fetch-domains.service /etc/systemd/system/
sudo cp deployment/oldsites-full-scan.service /etc/systemd/system/
sudo cp deployment/oldsites-full-scan.timer /etc/systemd/system/
# Recharger systemd
sudo systemctl daemon-reload
# Activer le timer (scan quotidien Γ 3h00)
sudo systemctl enable oldsites-full-scan.timer
sudo systemctl start oldsites-full-scan.timer
# VΓ©rifier que le timer est actif
sudo systemctl list-timers | grep oldsites# Lancer manuellement le pipeline (fetch + scan)
sudo systemctl start oldsites-full-scan.service
# Voir les logs en temps rΓ©el
sudo journalctl -u oldsites-full-scan -fRécupère uniquement les domaines via AXFR (sans scanner).
# Lancer
sudo systemctl start oldsites-fetch-domains.service
# Logs
sudo journalctl -u oldsites-fetch-domains -n 50Pipeline complet: rΓ©cupΓ©ration des domaines + scan (1000 domaines par dΓ©faut).
# Lancer
sudo systemctl start oldsites-full-scan.service
# Logs
sudo journalctl -u oldsites-full-scan -fTimer pour exΓ©cuter automatiquement le pipeline tous les jours Γ 3h00.
# Statut
sudo systemctl status oldsites-full-scan.timer
# Voir quand sera la prochaine exΓ©cution
sudo systemctl list-timers | grep oldsites
# DΓ©sactiver
sudo systemctl stop oldsites-full-scan.timer
sudo systemctl disable oldsites-full-scan.timerΓditer /etc/systemd/system/oldsites-full-scan.service:
# Scanner 5000 domaines au lieu de 1000
ExecStart=/opt/oldsite-scanner/venv/bin/python -m backend.scan_ch_sites --limit 5000
# Scanner TOUS les domaines (attention: peut prendre des heures!)
ExecStart=/opt/oldsite-scanner/venv/bin/python -m backend.scan_ch_sitesPuis:
sudo systemctl daemon-reloadΓditer /etc/systemd/system/oldsites-full-scan.timer:
# Toutes les 6 heures
OnCalendar=*-*-* 00,06,12,18:00:00
# Tous les lundis Γ 3h
OnCalendar=Mon *-*-* 03:00:00
# Tous les jours Γ 3h et 15h
OnCalendar=*-*-* 03,15:00:00Puis:
sudo systemctl daemon-reload
sudo systemctl restart oldsites-full-scan.timerSi le scan prend trop de temps, augmenter le timeout dans oldsites-full-scan.service:
# 4 heures au lieu de 2
TimeoutStartSec=14400# Tester manuellement avec dig
dig @zonedata.switch.ch ch AXFR
# Essayer un autre serveur
dig @ns1.nic.ch ch AXFR
dig @a.nic.ch ch AXFRCauses possibles:
- β Le serveur refuse les transferts AXFR (politique de sΓ©curitΓ©)
- β Firewall bloque le port 53
- β ProblΓ¨me rΓ©seau
Solutions:
- Le script essaie automatiquement plusieurs serveurs
- Si tout Γ©choue, il conserve l'ancien fichier
domains_ch.txt - Vous pouvez crΓ©er manuellement
domains_ch.txtavec vos domaines
sudo apt install -y dnsutilssudo chown -R www-data:www-data /opt/oldsite-scanner
sudo chmod +x /opt/oldsite-scanner/backend/fetch_ch_domains.py# VΓ©rifier les logs
sudo journalctl -u oldsites-full-scan -n 100
# VΓ©rifier que le fichier domains_ch.txt existe
ls -lh /opt/oldsite-scanner/domains_ch.txt
# Tester manuellement
cd /opt/oldsite-scanner
source venv/bin/activate
python -m backend.fetch_ch_domains
python -m backend.scan_ch_sites --limit 10# Nombre de domaines dans le fichier
wc -l /opt/oldsite-scanner/domains_ch.txt
# Nombre de scans dans la base
sqlite3 /opt/oldsite-scanner/oldsites.db "SELECT COUNT(*) FROM scans;"
# Derniers scans
sqlite3 /opt/oldsite-scanner/oldsites.db "SELECT domain, score FROM scans s JOIN domains d ON d.id=s.domain_id ORDER BY s.scan_time DESC LIMIT 10;"# Logs de rΓ©cupΓ©ration des domaines
sudo journalctl -u oldsites-fetch-domains -n 50
# Logs du scan complet
sudo journalctl -u oldsites-full-scan -f
# Logs de l'API
sudo journalctl -u oldsites-api -fβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Timer systemd (tous les jours Γ 3h00) β
ββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β 1. RΓ©cupΓ©ration des domaines (fetch_ch_domains.py) β
β - Tente AXFR sur zonedata.switch.ch β
β - Si Γ©chec: essaie ns1.nic.ch, ns2.nic.ch, etc. β
β - Si Γ©chec: conserve l'ancien domains_ch.txt β
β - CrΓ©e/met Γ jour domains_ch.txt β
ββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β 2. Scan des domaines (scan_ch_sites.py) β
β - Lit domains_ch.txt β
β - Scanne 1000 domaines (configurable) β
β - DΓ©tecte les sites obsolΓ¨tes β
β - Enregistre dans oldsites.db β
ββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β 3. RΓ©sultats disponibles β
β - Interface web: http://IP:8000 β
β - API: http://IP:8000/api/scans β
β - Base de donnΓ©es: oldsites.db β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Si AXFR retourne 100'000+ domaines:
-
Augmenter la limite progressivement:
# Jour 1: 1000 domaines # Jour 2: 2000 domaines # Jour 3: 5000 domaines # etc.
-
Augmenter la concurrence: Γditer
/opt/oldsite-scanner/backend/config.py:CONCURRENCY = 100 # Au lieu de 30
-
Augmenter le timeout systemd:
TimeoutStartSec=28800 # 8 heures
-
Surveiller les ressources:
htop df -h
Si vous voulez scanner seulement certains types de sites:
- CrΓ©er un fichier personnalisΓ©:
# Filtrer seulement les domaines courts (potentiellement plus vieux) grep -E '^[a-z]{3,6}\.ch$' domains_ch.txt > domains_short.txt # Scanner ce fichier python -m backend.scan_ch_sites --domains-file domains_short.txt
- β
Le script tourne avec l'utilisateur
www-data(pas root) - β Pas de donnΓ©es sensibles stockΓ©es
- β User-Agent identifiable dans les requΓͺtes
- β Respect des timeouts pour ne pas surcharger les serveurs
En cas de problème:
- VΓ©rifier les logs:
sudo journalctl -u oldsites-full-scan -n 100 - Tester manuellement:
python -m backend.fetch_ch_domains - Consulter la documentation:
README.md