Indimedia

From ciapini
Revision as of 15:48, 11 June 2012 by Admin (talk | contribs) (Created page with "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...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

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 "pippo.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 "pippo.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 "pippo.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

letture