Indimedia
media individuale incensurabile
tipi di nodo
dio: un nodo nascosto (hidden service tor), con copia autoritativa di tutti i siti esistenti. dio da accesso via http su hidden service al pannello di admin dei cms e in caso di modifiche a questi ultimi scrive via rete tor il contenuto sui credenti. dio non esiste. implementato come macchina fisica con tor + VM con apache + php con accesso alla rete esclusivamente via tor
credente: nodo non-affidabile, di contenuto pubblico, a perdere. credente permette l'accesso in sola lettura via http rete pubblica ai cms e in scrittura via rsync hidden service da parte di dio.
VPS con apache + php.
installazione nodo credente:
Si compra una VPS x, con Debian Squeeze (32 o 64 bit). Ci si logga sulla macchina, si aggiunge una riga a /etc/apt/sources.list, per esempio:
apt http://ajdklajsdklasd.onion/debian squeeze main
e un altro file in /etc/apt/apt.conf.d/30proxy:
Acquire::http::Proxy "http://localhost:8118/";
e si installa il pacchetto indimedia_base + hosting + dns (facoltativo). Il pacchetto deve essere dipendente da:
- Tor
- Polipo
- rsync
- ntp
- unattended-upgrades
- sqlite3
[hosting]
- apache + mod_macro
- php
[dns]
- powerdns (senza recursor) + sqlite.
Inoltre, il pacchetto fara' certe azioni:
- creare un utente indimedia.
- Copia la chiave pubblica in /home/indimedia/.ssh/authorized_keys
- Aggiunge un paio di script in /etc/cron.d (da definire).
- Crea un tor hidden service.
- Callback dell'hidden service a 'dio'.
Gestione dei credenti:
Dio non controlla direttamente i credenti, ma fornisce loro dei semplici file di configurazione via rsync. Un demone controlla ogni x minuti lo stato dei file e fa' una comparazione con lo stato attuale della macchina. Ogni volta che vengono trovate delle discrepazione, il demone riallinea la configurazione della macchine con i file forniti.
I file di configurazione:
[hosting]
- sites.txt: Contiene i siti attivi su questa macchina. (letto da mod_macro)
[dns]
- zone.sqlite: Contiene tutti i sottodomini attivi.
- domains.txt: Contiene tutti i domini attivi.
Da questi files, vengono generati:
- La configurazione di Apache (domains X (zone contenuti in sites) ).
- La configurazione di powerdns (domains X zone).
strutture dati:
host
host active bw_capacity space_capacity host_onion_hostname(24)
site
site active bw_weight space_weight site_onion_hostname(24) site_onion_private_key(1024)
hosts_sites
site host
queryez
spazio in libero su un host:
SELECT ( host . space_capacity - SUM ( site . space_weight ) ) FROM site , host , hosts_sites WHERE "nodo.ortiche.net" = hosts_sites . host AND hosts_sites . site = site . site AND hosts_sites . host = host . host
banda libera su un host:
SELECT ( host . bw_capacity - SUM ( site . bw_weight ) ) FROM site , host , hosts_sites WHERE "nodo.ortiche.net" = hosts_sites . host AND hosts_sites . site = site . site AND hosts_sites . host = host . host
sito con meno istanze:
versione sqlite
SELECT site . site , COUNT ( hosts_sites . host ) AS 'count' FROM site , host LEFT OUTER JOIN hosts_sites ON ( site . site = hosts_sites . site AND site . active = 1 AND host . host = hosts_sites . host AND host . active = 1 ) GROUP BY site . site ORDER BY COUNT ASC
comando di sync:
SELECT "rsync - avzHx /var/www/vhosts/" || site . site || "/ rsync : //" || host . onion_hostname || "/" || site . site , "/" FROM site , host , hosts_sites WHERE hosts_sites . site = 'beppe.indimedia.net' AND site . site = hosts_sites . site AND host . host = hosts_sites . host AND host . active = 1
siti istanziati su un host:
SELECT site.site FROM site , hosts_sites WHERE "nodo.ortiche.net" = hosts_sites . host AND hosts_sites . site = site.site
comando di update dimensione siti:
SELECT "du - s /var/www/vhosts/" || site . site FROM site
blocco degli HS in torrc:
SELECT "HiddenServiceDir /etc/tor/indimedia/" || site . site || "/ \n HiddenServicePort 873 127 . 0 . 0 . 1 : 873 \n\n" FROM site
stat
periodicamente ogni host comunica il consumo orario medio di banda per-sito a dio, che lo integra in bw_weight
dio calcola periodicamente le dimensioni dei site copiati in locale, e segna in space_weight
coerenza
dio confronta periodicamente e randomicamente l'hash di una pagina su una vps con l'hash della stessa pagina su dio. se non coincidono disabilita il sito.
trasferimento
lato credente:
in rsyncd.conf
[indimedia] list = no path = /var/www/vhosts write only = yes
in torrc
HiddenServiceDir /usr/pkg/etc/tor/hidden/rsync/ HiddenServicePort host.local_port 127.0.0.1:873
procedure
istanziazione:
il site con meno istanze attive viene istanziato sull'host che ha il rapporto space/bw piu simile E che ha bw_capacity e space_capacity sufficienti
viene creato un A sito.indimedia -> host
replicazione
via fileschanged dio conserva una lista degli eventi di modifica dei file dei siti. dopo un numero random di modifiche (e dopo un tempo non superiore ai 5 minuti) scrive via rsync le modifiche sull'host
cms
pro: amministrazione intuitiva, pdo, multisite nativo cons: plugin un po scassi
pro: plugin fighi, sviluppo attivo cons: un po obeso, non troppo intuitivo
pro: db separati (content.sqlite entries.sqlite userdata.sqlite)
db su file, buona gestione immagini, multiuser, multisite, auto-ravanabile