giovedì 30 giugno 2011

Videosorveglianza a basso costo con Linux

Tra i mille usi che il mio muletto può assolvere c'è anche la videosorveglianza. Effettivamente a me serve a poco (non vivo di certo in una mega villa), però.. volete mettere la goduria di poter controllare da remoto cosa fa il mio cane durante il giorno (salirà mica sul letto quando non ci sono?) ;)

L'hardware
A livello hardware le scelte sono 2: una o più webcam usb (si trovano su ebay o in qualsiasi centro commerciale dagli 8 euro in su) oppure una o più ip cam wifi, magari motorizzate (su ebay dai 60 euro in su).
Le prime, saranno collegate alle porte USB del nostro computer e controlleranno solo la zona dove è fisicamente installato il nostro PC, mentre le seconde, per un uso più professionale, hanno il vantaggio di poter esser  piazzate ovunque nel nostro perimetro (coperto dal wifi), a patto di poter essere alimentate elettricamente con  classica presa della corrente.
Non avendo necessità reali di videosorveglianza, ho preso le 2 webcam usb che avevo in casa e le ho piazzate sul mio muletto.

Lato software
Per il mondo Windows esistono tanti programmi che fanno questo lavoro, ma poichè il mio muletto monta Linux, la scelta doveva ricadere tra due software: ZoneMinder o Motion. Il primo, che testerò appena avrò un pò di tempo, è una soluzione molto professionale e completa per la videosorveglianza. Esiste anche in versione Live (scarichi la ISO, la masterizzi o la carichi su USB.. ed hai ZoneMinder pronto per l'uso), permette di controllare N sorgenti video ed ha una nutrita sezione gestionale. Poichè volevo qualcosa di più leggero (da configurare), ho optato per Motion.

La configurazione di Motion
Una volta installato con sudo apt-get install motion bisogna configurare il file /etc/motion/motion.conf con un editor di testo (niente interfaccia grafica, nel puro stile *nix). I parametri sono tanti e sono ben commentati (in inglese), qui ne cito solo alcuni, quelli più rilevanti:

daemon on/off se on il programma, una volta lanciato va in background
videodevice /dev/video0 il device della nostra webcam (0 sarà la prima, 1 la seconda e così via, ma, per ogni webcam, sono da specificare in file diversi).
width ed height settiamo qui la risoluzione dell'immagine che vogliamo catturare. A seconda della webcam di cui disponiamo, potremo settare 640 x 480 o più.
framerate è il max numero di frame catturabili al secondo (valore da 2 a 100)

v4l2_palette (da 0 a 8) specificare il tipo di palette che la webcam può riprodurre
output_motion on/off specifica se si vuole che vengano salvate immagini e video quando viene rilevato del movimento. Attenzione: se si specifica ON ci si deve preparare al fatto che poco a poco il nostro hard disk diventerà saturo di immagini e video ! Quindi sarà necessario prepararsi un qualche script che ogni X giorni cancella il contenuto della directory!
snapshot_interval possiamo specificare ogni quanti secondi salvare uno snapshot dalla nostra webcam
target_dir qui specificheremo il percorso assoluto di salvataggio delle nostre immagini e video
webcam_port specificare qui il numero della porta dove la nostra webcam andrà in streaming: sarà visibile via browser all'indirizzo http://localhost:nporta
webcam_localhost on/off se on la webcam sarà visibile solo dall'host locale. Se off chiunque potrà vedere la webcam in streaming (sempre se il nostro server sia visibile da internet!)



Nota: se si vogliono collegare più webcam sullo stesso server bisogna considerare due cose:  
1) Attivare (decommentare) i file thread.conf, uno per ogni webcam, specificando in ognuno di essi il parametro videodevice (che sarà video0, video1, video2 ...videoN)
2) Potete collegare solo una webcam per controller USB 1.1, poichè ogni web cam occupa più della metà degli 11mb messi a disposizione dall'USB 1.1 ! Così è specificato nelle FAQ di motion

Rimane un unico problema.. anzi un grosso problema: motion sembra non permettere la protezione dell'accesso alla pagina di streaming. Ergo: chiunque potrebbe guardare casa nostra !

Cosa non accettabile ovviamente; allora ho spulciato il sito di supporto ed ho trovato la risposta a questo link, in cui si rimanda all'installazione di questa patch!

I nuovi parametri da impostare sono:

# Set the authentication method (default: 0)
# 0 = disabled
# 1 = Basic authentication
# 2 = MD5 digest (the safer authentication)
stream_auth_method 0

# Authentication for the http based control. Syntax username:password
# Default: not defined (Disabled)
; stream_authentication username:password


E la nostra pagina diventa ad accesso protetto.

lunedì 27 giugno 2011

Come mi gestisco il server da remoto

Un server altro non è che un pc che fornisce servizi. Un web server, fornisce pagine web, un mail server fornisce un servizio di mail, un file e print server fornisce l'accesso all'archivio dati e alle stampanti collegati su quel server, un server ssh fornisce l'accesso alla shell di un determinato pc, un server vnc o rdp fornisce l'accesso al desktop grafico del pc remoto etc. etc.
Pensare al proprio server come erogatore di servizi solo internamente alla propria lan domestica (o aziendale) è un pò limitante; altresì è vero che esporre tutti i servizi verso Internet, ossia il mondo è rischioso.
Personalmente penso che il gioco valga la candela (chissà perchè si dice così!), quindi espongo gran parte dei miei servizi anche verso Internet con qualche accortezza.
Partiamo dal più rischioso, ossia ssh. SSH permette di accedere in toto alla shell Linux del pc remoto come se si fosse davanti al monitor. Il protoccolo ssh è in se sicuro poichè viene creato un tunnel criptato, quindi chi volesse intercettare i pacchetti su Internet si troverebbe tanti dati... criptati e, per quanto ci è dato sapere, impossibili da decriptare. Un problema è però l'attacco brute-force con cui il male intenzionato di turno potrebbe cercare di scardinare la propria password. L'attacco brute force consiste molto semplicemente nel tentare di forzare la password con un dizionario di parole e termini conosciuti fino a che non si scova la password. Un attacco del genere va in porto se noi, stupidamente, usiamo parole d'uso comune per la nostra password: evitate quindi parole comuni come i nomi di persona, città o qualsiasi altra parola conosciuta. Password come amore, luisa, marco, giovanni, scuola, milano, roma, londra sono password fragili e bucabili. Una password sicura è ad esempio: ljh!8924jksklU_I9k . Certo non ve la ricorderete mai a memoria, però è un buon inizio.
Per ovviare anche all'attacco brute force, è bene installarsi fail2ban programmino che monitora vari log di linux e se qualcuno fallisce più e più volte l'accesso al vostro server, viene bannato, inibendogli a monte il prossimo tentativo di accesso alla macchina.
Infine, cosa che ci da un pizzico di sicurezza in più (senza essere determinante, per la sicurezza), cambiare la porta di accesso ssh. Non esporre ssh sulla porta 22 del nostro router ! Potete anche lanciare il server ssh sulla porta 22, ma chiuderla sul router e fare il redirect della (ad esempio) 2424 o 2342 etc. per farla puntare infine sulle 22 del server ssh. Tutto questo si fa con quel che è chiamato NAT che deve essere configurato sul proprio router.
Altri servizi esponibili verso l'esterno possono essere ad esempio anche il webserver o la gui di aMule, abbastanza sicuri poichè: protetti da password e poco sensibile a possibili attacchi distruttivi di dati (al limite, ti cancella un po' di code di download... ). Poi si può configurare l'accesso al lato web della videosorveglianza, molto sensibile per quanto riguarda la privacy, motivo per cui prima di farlo, accertarsi di aver protetto bene il tutto con password efficaci, pena l'esposizione di casa vostra agli occhi del mondo! E così via, non ci sono limiti !
Riepilogando, gli step da seguire per esporre servizi della propria rete locale, verso Internet, sono:
1. Far girare ogni servizio  su porte differenti da quelle di default
2. Molto importante, ma spesso sottovalutato: accertarsi che non esistano falle di sicurezza note per quel tal servizio (Google viene incontro): magari impostiamo una password di 50 caratteri, per poi scoprire che a monte, quel servizio è vulnerabile (come il WEP)  perchè presenti falle di sicurezza già nelle fondamenta del servizio!
3. Proteggere con password sicure l'accesso ad ogni singolo servizio: la password potrebbe anche essere la stessa e comune di ogni servizio, ma deve essere sicura (almeno 10-15 caratteri misti maiuscoli e minuscoli, e NON deve essere una parola d'uso comune)
4. Installare accorgimenti come fail2ban.

Un ultima cosa: essendo l'Adsl casalinga, per propria natura, con Ip dinamico, risalire al proprio server casalingo da Internet potrebbe rivelarsi leggermente difficile. Niente paura, ci vengono incontro servizi come no-ip.com o dyndns.com che permettono di registrare un dominio di terzo livello sui propri domini di secondo livello, che verranno aggiornati da un client residente sul nostro server. E' un piccolo servizio che rende statico il nostro indirizzo ip dinamico.
Alla prossima!

domenica 26 giugno 2011

Un nuovo muletto ...

La mia vecchia Epia C3 a 800 Mhz è ormai defunta, a causa di una mia geniale mossa: montare una scheda Pci a caldo. Mi sono rifatto acquistando una Epia M10000 C3 ad 1 Ghz. Questo modello di scheda madre ha qualcosina in più, tra cui:

  • Le USB sono 2.0, quindi vanno a 480Mbs
  • Il processore ad 1 Ghz mi sembra viaggiare del doppio rispetto al precedente
  • 1 Gb di ram (rispetto ai 256mb della precedente)
  • Infine, riesco a montarci l'hard disk da 2.5" a 5400rpm direttamente all'IDE (internamente)
  • Consumo in watt: qualcosa in più, dato che il processore è più potente. Credo comunque di stare sempre sotto i 20 Watt escluso l'hub aggiuntivo a cui ci sono collegati vari hard disk, stampanti, webcam ... etc!
Detto questo, ci ho montato Lubuntu e tutto funziona davvero bene. Ho tolto la ventolina sul processore (rumorosissima) e l'ho sostituita con una da 40x40 del Rasurbo Silent (che è davvero silenziosa). Due dati veloci: memoria RAM occupata in Idle 120 Mb (ma credo anche meno appena completato il boot), e, carico medio del processore: 0,10 / 0,20 (con amuled, motion, samba ed nfs in esecuzione). 

A proposito di Motion: vorrei dedicargli un post a parte perchè è stata una bella scoperta, e cioè la possibilità di creare un sistema di videosorveglianza in modo semplice ed economico. 
Al post successivo!

giovedì 2 giugno 2011

Messenger

Da un bel po' non avevo spunti per scrivere un articolo sul mio caro (a me) blog. La richiesta di mio fratello di oggi "Teo, cos'è messenger ?" mi fa cogliere la palla al balzo. No, non tanto per scrivere un articolo su cosa sia messenger, quanto sul confronto di due tra i più utilizzati (in ambito Linux) messenger all-incluse: Pidgin e Empathy. 
Entrambi i succitati software, sono multiprotocollo (per fortuna). Il che significa che è possibile inserire le proprie user e password dei più noti messenger del pianeta, per poter chattare e, se va bene, audio-chattare. Il problema di questi software multiprotocollo è sempre lo stesso: le funzioni di base ... funzionano, ma quando si chiede un po' di più, cominciano le mancanze. In parole povere: sarà possibile chattare per la maggior parte dei casi (e dei protocolli), ma quando si comincerà con: audio, video, trasferimento file, multi conferenza etc... beh, le cose non andranno sempre bene. Motivo per cui, per sfruttare al 100% le funzionalità della rete proprietaria (Skype, Msn, Icq etc.),  i client proprietari (ed originali) saranno decisamente meglio !
Passiamo ai protocolli supportati:


Protocol
Pidgin
Empathy
AIMXX
BonjourX
Gadu-GaduXX
Google TalkX
GroupWiseXX
ICQXX
IRCXX
MSNXX
MySpaceIMXX
QQXX
SILCXX
SIMPLEXX
SametimeXX
Jabber/XMPPXX
YahooXX
Yahoo JAPANX
ZephyrXX
Skype (via plugin)X

Insomma, non c'è servizio di IM che non sia supportato.
Solo una nota dolente: uno dei più utilizzati al mondo, Skype, è anche il meno supportato. Il motivo è, ovviamente, la chiusura del codice di Skype stesso e la complessità tecnologica del protocollo (che non è Client/Server ma si basa su un concetto di P2P).

Io personalmente, uso Pidgin ma anche Empathy funziona benissimo.
A voi la scelta...