E’ si, dopo tanti tentativi per importare feed qua e la e dopo qualche anno di utilizzo massivo di liferea sono definitivamente passato a Google Reader, principalmente perché, se “flaggo” una entry come letta voglio che lo sia ovunque.

L’unico ostacolo era la notifica dei nuovi feed che trovavo un po’ scomoda (cerco di non lasciare tab aperti e sovraccaricare firefox di estensioni). Per ovviare al problema stasera sono arrivato a grnotify, un bel progettino che si integra perfettamente con Gnome, segnala quali feed ci sono da leggere ed usa gnome-keyring-manager per salvare la password del profilo Google. Clickando sull’icona nella tray bar viene aperto il default browser con la sessione in Google già attiva (non serve il login). Ed è ancora alle prime versioni…. !

Annunci

Migrazione gallery

31 dicembre 2007

Ho spostato tutte le mie foto su flickr, 1000 immagini circa creando tutti i sets e le collections come si deve, taggando e sistemando le date. La cosa che un po’ mi spiace e non aver caricato gli originali quindi su quelle mancano i dati EXIF e le risoluzioni sono decisamente più basse (almeno sono leggere). Dal 2008 sistemeremo il tutto come si deve….

ProxyReverse con Apache2

27 ottobre 2007

Supponiamo di avere la necessità di configurare apache2 per un ProxyReverse verso un servizio offerto, per esempio, questo:

$  netstat -ntlp
Proto Recv-Q Send-Q  Local Address    Foreign Address   State     PID/Program name
tcp        0      0  127.0.0.1:1234   0.0.0.0:*         LISTEN    -

e quindi fruibile solo in locale.

In questo caso voglio permettere a chi accede da 192.168.1.0/24 di raggiungere questo servizio che è in esecuzione su una macchina della stessa subnet (es. 192.168.1.100) e voglio che sia protetto da SSL

Setup apache2 e relativi moduli

partiamo con l’installazione di apache:

#  apt-get install apache2

abilitiamo i moduli di apache che ci serviranno

#  a2enmod proxy
#  a2enmod proxy_http
#  a2enmod ssl

o se preferite:

#  cd /etc/apache2/mods-enabled/
#  ln -s ../mods-available/proxy.conf proxy.conf
#  ln -s ../mods-available/proxy.load proxy.load
#  ln -s ../mods-available/proxy_http.load proxy_http.load
#  ln -s ../mods-available/ssl.conf ssl.conf
#  ln -s ../mods-available/ssl.load ssl.load

Creazione certificato SSL

creaiamo una subfolder per il certificato:

#  mkdir /etc/apache2/ssl

ed ora creiamolo. Lo useremo solo privatamente senza necessità di rilascio da parte di una CA.

Cominciamo col generare la chiave:

$  openssl genrsa -out name.key 1024

ed esportare la request (specificando i dati che preferiamo in quanto non rilevanti):

$  openssl req -new -key name.key -out name.csr

Ora proseguiamo ricevendo il certificato (specificando i dati che preferiamo in quanto non rilevanti, inclusi i giorni di validità del certificato):

$  openssl x509 -in  name.csr  -out name.crt -req -signkey  name.key -days 1825

Configurazione apache2

Adesso passiamo alla configurazione di apache2. Creiamo un nuovo sito in sites-available per comodità:

# touch /etc/apache2/sites-available/example_proxy_reverse

e modifichiamolo con l’editor di testo che preferiamo in questo modo:

Listen 443
NameVirtualHost *:443
<VirtualHost *:443>
      ServerName localhost
      SSLEngine On
      SSLCertificateKeyFile ssl/name.key
      SSLCertificateFile ssl/name.crt
      ProxyRequests Off
      <Proxy *>
              Order deny,allow
              Allow from all
      </Proxy>
      ProxyPass /virtual-path http://localhost:1234/
      ProxyPassReverse /virtual-path http://localhost:1234/
</VirtualHost>

oppure, nel caso in cui si voglia un prelogin htaccess di apache per rafforzare la sicurezza, così:

Listen 443
NameVirtualHost *:443
<VirtualHost *:443>
      ServerName localhost
      SSLEngine On
      SSLCertificateKeyFile ssl/name.key
      SSLCertificateFile ssl/name.crt
      ProxyRequests Off
      <Proxy *>
              AuthType Basic
              AuthName "Remote Shell Access"
              AuthUserFile /etc/apache2/nostro_file_htpasswd
              Require user nome_utente_htaccess
              Order deny,allow
              Allow from all
      </Proxy>
      ProxyPass /virtual-path http://localhost:1234/
      ProxyPassReverse /virtual-path http://localhost:1234/
</VirtualHost>

Ora abilitiamo il sito appena creato:

#  a2ensite example_proxy_reverse

o se preferite:

#  cd /etc/apache2/sites-enabled/
#  ln -s ../mods-available/example_proxy_reverse example_proxy_reverse

Riavvio dei servizi

Ora riavviamo apache2:

#  /etc/init.d/apache2 restart

Adesso puntando a:

https://192.168.1.100/virtual-path

raggiungeremo il nostro servizio offerto localmente su quella macchina.

Mod rewrite Apache2

10 ottobre 2007

Probabilmente avrete sentito parlare di Virtual Host con apache2. In poche parole si tratta, nella maggior parte dei casi, di rispondere con i contenuti di una subfolder ad una richiesta via dns.

Utilizzo abituale

Questa funzionalità viene usata soprattutto dagli hosting multi-dominio che ospitano più siti web su una sola macchina o su più macchine con lo stesso ip. Per esempio se il server contiene le seguenti cartelle:

/var/www/foo.tld
/var/www/foobar.tld
/var/www/bar.tld

è possibile fare in modo che chi chiama foobar.tld riceva i contenuti della subfolder sopra elencata. Ma se volessimo solo capire come funziona il modulo che si occupa di questo?

Concetti di base

Le regole per mod_rewrite possono essere definite sia nella configurazione stessa di apache2 che nei files .htaccess all’interno delle subfolder. Per quanto riguarda la configurazione diretta in apache le stesse regole che vedremo vanno inserite nella definizione del Virtual Host stesso.

Definizione di un esempio

Supponiamo di avere il nostro sito web raggiungibile da http://www.dominio.tld e di dover configurare il sottodominio foo.dominio.tld per fare un redirect verso un altra pagina, per esempio http://www.un_altro_dominio.tld. Come prima cosa dovremo configurare un record A o CNAME che venga risolto come http://www.dominio.tld, ma non approfondiremo questo concetto. Una volta fatto questo creiamo un file .htaccess all’interno della cartella con i files e modifichiamolo così:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^foo.dominio.tld
RewriteRule ^(.*)$ http://www.un_altro_dominio.tld$1 [L,R=301]

Esaminiamo le varie istruzioni. La prima serve per abilitare mod_rewrite, la seconda verifica che si provenga dal nostro sottodominio, la terza applica spudoratamente il redirect agganciandoci i path/parametri (variabile $1) se la condizione precedente è rispettata (flag L). Il flag R specifica qual’è il response code HTTP. Esistono alcuni flag tra cui il flag NC che permette di fare una ricerca case insensitive e quindi anche richiamando FOO.dominio.tld verrebbe eseguito il redirect.

Se vogliamo possiamo aggiungere anche il flag P in modo che l’url nella barra dell’indirizzo rimanga quello richiesto. Per fare questo è necessario avere abilitato i moduli mod_proxy e mod_proxy_http.

Informazioni utili

Ovviamente quanto scritto è solo una delle svariate cose che si possono fare con mod_rewrite. Per maggiori informazioni consultare direttamente la documentazione di Apache.

L’indirizzamento IP permette di identificare ogni host all’interno di una rete TCP/IP. Grazie all’utilizzo delle classi di indirizzi ed al subnetting è possibile organizzare e gestire in modo più efficiente il proprio network. Un indirizzo IP, chiamato anche indirizzo logico, rappresenta un identificativo software per le interfacce di rete, esso viene utilizzato in combinazione con l’indirizzo fisico (MAC), il quale consente di determinare in modo univoco ogni interfaccia di un dispositivo di rete. Un IP Address è un numero di 32 bit suddiviso in quattro gruppi da 8 bit ciascuno, la forma con la quale viene solitamente rappresentato è detta decimale puntata (Dotted Decimal).

Essendo ogni numero rappresentato da 8 bit, può assumere un range di valori da 0 a 255. Utilizzando 32 bit per indirizzo è possibile avere 4.294.967.296 combinazioni di indirizzi differenti. In realtà esistono alcuni indirizzi particolari, di conseguenza non tutti i valori sono disponibili al fine di identificare un host nella rete.

Un esempio di Ip Address

        Rete.         Rete.        Rete.          Host
         192.          168.           5.             2         : Rappresentazione decimale
    11000000.     10101000.    00000101.     000000010         : Rappresentazione binaria

Questo è un esempio di indirizzo (Classe C) in cui 192.168.5 identifica la rete di appartenenza dell’host 2.

Indirizzi speciali: network, broadcast e loopback

Esistono alcuni particolari indirizzi di rete che non possono essere assegnati per l’identificazione di un host, tra questi abbiamo: network e broadcast e loopback:

  • Network: quando i bit dell’ottetto che rappresenta l’host hanno tutti valore 0, l’indirizzo è detto di rete o Network Address: 192.168.5.0 oppure in binario 11000000.10101000.00000101.00000000;
  • 0.0.0.0: quando tutti i bit hanno valore zero, identificano “questo host”;
  • Broadcast: quando i bit del numero che rappresenta l’host hanno tutti valore 1, l’indirizzo è detto di broadcast o broadcast address, e rappresenta tutti gli host di quella rete. Inviare un pacchetto all’indirizzo 192.168.5.255 o in forma binaria 11000000.10101000.00000101.11111111 equivale a mandare un pacchetto a tutti gli host della rete 192.168.5;
  • Broadcast di rete: abbiamo questo tipo di indirizzo quando tutti i bit, sia della parte relativa all’host sia della parte relativa alla rete hanno valore 1. Inviare un pacchetto a 255.255.255.255 o in binario 11111111.11111111.11111111.11111111 significa inoltrarlo verso tutti gli host della rete corrente;
  • Loopback: è utilizzato per funzioni di test del protocollo TCP/IP, non genera traffico di rete e corrisponde all’indirizzo 127.0.0.1;

Classi di indirizzi

Per permettere una migliore organizzazione della rete, gli indirizzi disponibili sono stati suddivisi in classi in base alle dimensioni del network da gestire. In questo modo si verrando utilizzate le classi più adatte ad alla dimensioni della rete, con conseguente minore spreco di ip address. Sono disponibili cinque classi di indirizzi IP, di cui solo le prime tre possono essere utilizzate per assegnare indirizzi agli host.

Indirizzi di classe A

Il valore del primo ottetto è compreso tra 1 e 126 (I primi otto bit di questo indirizzo saranno: 0*****). E’ rappresentata da indirizzi di tipo: Rete.Host.Host.Host ovvero 8 bit per la identificare la rete (di cui il primo fisso) e 24 per identificare gli host. Permette di ottenere 126 reti formate da 16.774.214 host ciascuna.

Indirizzi di classe B

Il valore del primo ottetto è compreso tra 128 e 191 (I primi otto bit di questo indirizzo saranno: 10*****). E’ rappresentata da indirizzi di tipo: Rete.Rete.Host.Host ovvero 16 bit per la identificare la rete(di cui i primi due fissi) e 16 per identificare gli host. E’ possibile ottenere 16.384 reti formate da 65.534 host ciascuna.

Indirizzi di classe C

Il valore del primo ottetto è compreso tra 192 e 223 (I primi otto bit di questo indirizzo saranno: 110*****). E’ rappresentata da indirizzi di tipo: Rete.Rete.Rete.Host ovvero 24 bit per la identificare la rete (di cui i primi tre fissi) e 8 per identificare gli host. E’ possibile ottenere 2.097.152 reti con 254 host ciascuna.

Indirizzi di classe D

Il valore del primo ottetto è compreso tra 224 e 239 (I primi otto bit di questo indirizzo saranno: 1110****). Sono indirizzi di rete riservati ai gruppi multicast e non assegnabili ai singoli host.

Indirizzi di classe E

Il valore del primo ottetto è compreso tra 240 e 255 (I primi otto bit di questo indirizzo saranno: 1111****). Sono indirizzi riservati per usi futuri.

Le subnet mask

Per il corretto funzionamento di una rete, ogni host deve poter distiguere quale parte dell’indirizzo identifica l’host e quale la rete. Questo può avvenire grazie all’ausilio delle subnet mask (Maschere di sottorete). Per quanto riguarda le classi A B C standard, cioè non ulteriormente suddivise, esistono delle subnet di default:

  • Classe A: Rete.Host.Host.Host ha come subnet 255.0.0.0;
  • Classe B: Rete.Rete.Host.Host ha come subnet 255.255.0.0;
  • Classe C: Rete.Rete.Rete.Host ha come subnet 255.255.255.0;

Il processo di messa in AND

Per determinare se il destinatario dei propri pacchetti si trova sulla propria sottorete ogni host utilizza la propria maschera di sottorete durante un processo chiamato di messa in AND (ANDing process). Questo processo consiste nel confrontare il risultato dell’operazione di AND (matematica booleana) bit a bit tra il proprio indirizzo e la propria maschera subnet mask con quello tra l’indirizzo del destinatario e la propria subnet mask.

Avendo un Host A con IP 192.168.0.5 con subnet 255.255.255.0 che vuole inviare dei pacchetti ad un Host B 192.168.0.25 con subnet 255.255.255.0, esso deve determinare se B è sulla stessa sua sottorete:

  • Host A: 192.168.0.5
11000000.10101000.00000101.000000010 : Ip address Host A
11111111.11111111.11111111.000000000 : Subnet mask Host A
11000000.10101000.00000101.000000000 : Risultato operazione AND bit a bit
  • Host B: 192.168.0.25
11000000.10101000.00000101.000011001 : Ip address Host B
11111111.11111111.11111111.000000000 : Subnet mask Host B
11000000.10101000.00000101.000000000 : Risultato operazione AND bit a bit

Il risultato è identico, quindi, i due host possono inviarsi direttamente i pacchetti in quanto sulla stessa sottorete. Qualora il processo di AND avesse evidenziato valori diversi, i due host non avrebbero potuto comunicare direttamente, ma sarebbe stato necessario un router tra di essi.

Notazioni

Esistono due principali notazioni attraverso le quali è possibile indicare un indirizzo IP:

  • Indicando espressamente la subnet mask:
 49.22.5.3 255.0.0.0 - Classe A;
 172.16.20.5 255.255.0.0 - Classe B;
 192.168.15.4 255.255.255.0 - Classe C;
  • Indicando i bit che compongono la subnet mask:
 49.22.5.3/8 - Classe A;
 172.16.20.5/16 - Classe B;
 192.168.15.4/24 - Classe C;

Subnetting

L’utilizzo della classe di rete corrispondente alle dimensioni che più si avvicinano a quella che si vuole gestire a volte non è sufficiente. Può essere necessario, dover suddividere la rete in ulteriori sottoreti. Per fare questo è possibile utilizzare la tecnica del subnetting.

Il subnetting di una rete comporta diversi vantaggi:

  • Minor spreco di indirizzi: in quanto è possibile scegliere il numero di host che faranno parte della sottorete;
  • Riduzione del traffico di rete: in quanto si riduce il dominio di collisione (broadcast domain);
  • Miglioramento delle performance della rete: in conseguenza della riduzione del traffico;

Il subnetting consiste nell’utilizzare alcuni bit “presi in prestito” (borrowed) dalla parte host dell’indirizzo di rete. E’ possibile procedere alla suddivisione della rete in sottoreti più piccole tramite lo scheda seguente:

  • Determinare il numero di sottoreti necessarie. E’ necessario tenere presente che il numero di subnet che si possono creare è dato da 2^x-2 dove x è rappresentato dai bit presi in prestito dalla parte host dell’indirizzo ai quali naturalmente bisogna levare l’indirizzo di broadcast e quello di rete non assegnabili. Esempio: utilizzando prendendo in prestito 4 bit, sarà possibile creare 14 sottoreti;
  • Determinare il numero di host per ogni sottorete. Questo valore è dato da 2^y-2 dove y è il numero di bit rimasti per la rappresentazione degli host; Esempio: se i bit rimanenti sono 6 si potranno avere sottoreti formate da 62 host l’una;
  • Determinare le subnet valide. Questo valore è dato da 256-z, dove 256 dove z rappresenta il valore della subnetmask. Esempio: con una subnetmask di valore 224 avremmo avuto 256-224=32. Questo valore è il valore della prima subnet valida ed è anche la base per le successive, la cui progressione sarà: 32, 64, 96, 128, 160, 192;
  • Determinare gli host validi. Sono rappresentati da tutti i valori compresi tra le subnet create togliendo gli indirizzi di broadcast e network;
  • Determinare degli indirizzi di broadcast e network delle subnet. Sono gli indirizzi in cui rispettivamente i bit della parte host sono settati a 1(broadcast) e a 0(network);

Esempio subnetting di una rete di classe C

Esaminiamo il caso di una rete con IP 192.168.5.0 che verrà suddivisa in due sottoreti.

  • Deteriminare il numero di sottoreti necessarie. Volendo creare 2 sottoreti è necessario utilizzare 2 bit dalla parte host in quanto 2^2-2 = 2. Avremmo quindi una subnetmask di questo tipo 255.255.255.192. E’ possibile notare che in binario 192 equivale a 11000000, i primi due bit vengono utilizzati per le subnet ed i restanti 6 per gli host;
  • Determinare il numero di host per ogni sottorete. I bit rimasti per gli host sono 6 quindi, abbiamo 2^6-2=62 indirizzi di host validi per sottorete;
  • Determinare le subnet valide. Le subnet che si andranno a creare sono due con base data da 256-192=64. Questo significa che la progressione delle subnet valide sarà 64 e 128 ovvero 192.168.5.64 e 192.168.5.128.
  • Determinare gli host validi. Gli host validi sono rappresentati dai valori compresi tra le subnet esclusi gli indirizzi di broadcast e di network. Avremo quindi gli indirizzi da 192.168.5.65 a 192.168.5.126 per la prima subnet e 192.168.5.129 a 192.168.5.190 per la seconda;
  • Determinare gli indirizzi di broadcast e network delle subnet. Gli indirizzi di rete (bit della parte host settati a zero) saranno 192.168.5.64 per la prima subnet e 192.168.5.128 per la seconda, mentre gli indirizzi di broadcast (bit parte host settati a 1) saranno rispettivamente 192.168.5.127 e 192.168.5.191.

Tabella di riepilogo:

Rete di partenza: 192.168.5.0 255.255.255.0 suddivisa in due sottoreti tramite la subnet 255.255.255.192:
Subnet 1: 192.168.5.64 in binario 11000000.10101000.00000101.01000000
Primo indirizzo valido: 192.168.5.65 in binario 11000000.10101000.00000101.01000001
Ultimo indirizzo valido: 192.168.5.126 in binario 11000000.10101000.00000101.01111110
Broadcast: 192.168.5.127 in binario 11000000.10101000.00000101.01111111
Subnet 2: 192.168.5.128 in binario 11000000.10101000.00000101.10000000
Primo indirizzo valido: 192.168.5.129  in binario 11000000.10101000.00000101.10000001
Ultimo indirizzo valido: 192.168.5.190 in binario 11000000.10101000.00000101.10111110
Broadcast: 192.168.5.191 in binario 11000000.10101000.00000101.10111111

Questo procedimento è lo stesso da applicare anche per il subnetting delle classi A e B, con la differenza di poter creare un maggior numero di subnet.

Indirizzi IP privati

Sono stati definite alcune classi di indirizzi, definiti nella RFC 1918, chiamati privati, per le reti locali che non accedono ad internet:

  • Da 10.0.0.0.0 a 10.255.255.255.255
  • Da 172.16.0.0 a 172.31.255.255
  • Da 192.168.0.0 a 192.168.255.255

Questi indirizzi non possono essere utilizzati in Internet, e sono riservati per utilizzi in reti interne. Qualora però un host all’interno di un lan si connetta ad internet il suo indirizzo verrà riscritto tramite NAT (Network Address Traslation) da un router od una macchina che fa da gateway verso Indirizzi IP, classi e Subnetting.

Fonte

http://openskills.info/infobox.php?ID=849

Dopo 16 ore di lavoro il server è tornato bello bello in produzione.

Ringraziando ASP e IIS per la cortese attenzione li mandiamo gentilmente affffanculo!

In poche parole quei due balordi mi davano un qualche problema ad usare Sql Native Client come se la connection string fosse errata. Non capisco se si è de-registrata qualche dll/ocx o simili sta di fatto che asp non proferiva verbo e in poche parole non parlava più con il db.
Dopo ripetuti tentativi, nuovi setup, ri-registrato tutte le dll, cercato documentazione inesistente di microsoft a riguardo (nello specifico intendo), ho capito che era meglio passare dalla strada più “veloce”: ripristino del tutto a venerdì notte, un paio di backup del db ed è ripartito tutti. Tra l’altro ho risolto un altro problemino di Exchange…

Se a qualcuno venisse in mente quando una connection string del tipo:

“Provider=SQLNCLI;Server=myServerAddress;
Database=myDataBase;Uid=myUsername;Pwd=myPassword;”

da un momento all’altro dia rogne del tipo

Microsoft SQL Native Client error ‘80040e4d’
Argomento stringa di connessione non valido

….. o qualcosa del genere

me lo faccia sapere che così non passo una notte con un peso sullo stomaco!