Internet Explorer

C’è un sito utilissimo che permette, da qualsiasi browser, di avere una anteprima di una pagina web così come apparirebbe in Microsoft Internet Explorer!

Link: http://ow.ly/6DC0B

Forse può apparire strana la mia meraviglia. Ma io uso Linux e, se non ho una macchina Windows o una macchina virtuale a disposizione, non posso usare IE…

Foam Nuke

Un virus, ve lo possono mandare con una email catturando l’attenzione col fatto che si son presi soldi dalla carta di credito, ad esempio.

Qui i dettagli http://ow.ly/5XrKj

L’email contiene un allegato dal nome buffo; la sua impronta md5 è:

$ md5sum Order008032011.Doc_________________________________________
___________________________.exe
22736566095007810458da69d82cf44f

Per trovarne il nome l’ho aperto con un editor esadecimale, trovando verso la fine il descrittore. Nel sito citato si trova l’informazione esaustiva.

openssl e padding

L’utilizzo del padding nella cifratura tramite openssl serve a evitare attacchi di tipo cifra-e-confronta dei crittogrammi.

Se encrypt(text, key) desse sempre lo stesso risultato, si potrebbe indovinare il testo in chiaro confrontando due file cifrati.

Abilitando l’opzione pkcs, openssl applica un padding versione PKCS ver. 1.5 al testo prima della cifratura, cioè introduce una stringa casuale prima del testo chiaro e poi procede con la cifratura; è è come se usassi una chiave monouso, solo che anziché modificare la chiave modifico il testo chiaro.

In questo modo evito l’attacco cifra-e-confronta.

Ma non è finita.

FTP: automatizzare la connessione

Ho dovuto automatizzare il programma ftp da linea di comando perché inserisca da solo utente e password.

Avevo bisogno di imitare quello che si fa se si lancia i comando ftp dal browser:

ftp://username:password@myhost.com

Da linea di comando Linux/Unix non funziona così. Un modo per fare una cosa simile è usare il file .netrc che è un file da creare nella directory $HOME dell’utente (plausibilimente /home/utente).

Occorre anche che il file .netrc abbia permessi 600 (ottale) ossia -rw------- (solo il proprietario può leggerlo e scriverci).

Cosa scriviamo nel file .netrc?

Un esempio può essere questo:

machine www.myhost.com
login username
password myp3d
<blank>
<blank>

Dopodiché si danno i permessi corretti

$ chmod 600 .netrc

Come utilizziamo il comando?

Da ultimo proviamo il comando; si invoca solamente il comando seguito dal nome host che a questo punto è solo un’etichetta (cioè il nome host che segue il comando ftp è solo una chiave per selezionare il blocco di righe corripsondente nel file .netrc!):

utente@jsbach:~$ ftp www.myhost.com
Connected to services.myhost.net.
220 ProFTPD 1.3.1 Server (FTP Server ready.) [64.46.178.186]
331 Password required for username
230 User username logged in
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

Fonti: tra man pages e vari siti che ho consultato, il più completo è questo: http://www.walkernews.net/2007/05/08/auto-file-transfer-via-ftp-batch-scripts/

Modo promiscuo

Detto male: è un modo di configurare una scheda di rete in modo che possa vedere non solo i pacchetti TCP a lei destinati, ma tutti quelli che passano nel segmento di rete (cavo) a cui è connessa.

Detto bene: questa risorsa lo spiega in un modo più appropriato.

Test di carico

Un’attività importantissima per l’affidabilità del software è il test di carico, nel quale si stressa l’applicativo simulando l’accesso e l’uso da parte di una qualsivoglia popolazione di utenti.

Conoscevo il software Jmeter del gruppo Apache ma oggi mi sono accostato casualmente a Curl loader, un software scritto in C abbastanza facile da impostare e che consente un controllo preciso delle condizioni di carico del software, assieme alla possibilità di generare dei report che permettano una facile business intelligence.

L’interfaccia è spartana (linea di testo) e l’output viene raccolto in alcuni file che poi occorre analizzare a parte con qualche altro strumento; ma l’interfaccia di testo che appare durante lo stress test è in grado di visualizzare abbastanza direttamente il grado di “sofferenza” dell’applicazione, fornendo il numero ed il tipo di errori ritornati dal web server, il tempo medio di restituzione delle pagine.

curl loader

curl loader

Liferay e OpenSearch

Devo integrare nella ricerca OpenSearch, effettuata da Liferay, Alfresco e MediaWiki.

Un howto: http://ow.ly/5oFFx

MediaWiki e il modulo math

Ho installato in locale, in jsbach, MediaWiki per gestire la mia knowledge base, sempre molto limitata ma ciononostante, incredibilmente, fuori controllo.

Una cosa che subito ho fatto, a causa della mia passione per la Matematica, è l’installazione del modulo che permette di scrivere espressioni matematiche all’interno del Wiki utilizzando il potentissimo e caro vecchio LateX.

In breve:

  • prima di configurare MediaWiki, vanno installati LaTeX, dvipng, texvc: per quest’ultimo middleware, occorre seguire il manuale sull’installazione dell’estensione Math.
  • occorre poi rendere scrivibili dall’utente sotto cui gira Apache le directory mediawiki/images/tmp e mediawiki/images/math

Fare riferimento a questa pagina qui: Manuale Mediawiki

Apache 2: integrazione tra MirthConnect e end point dei webservices INPS

Sto lavorando all’integrazione tra due enti pubblici per la notifica punto – punto di avvio di una procedura. Qui di seguito riassumo un how to che mi è servito a configurare Apache e Mirth in modo tale che quest’ultimo, girando in locale, scriva i risultati di una interrogazione del database su un end-point pubblico.

Il problema che risolve è: raggiungere l’end-point con il protocollo HTTPS quando, nella versione Open, Mirth ha soltanto un canale di scrittura su HTTP.

Realizzo questo funzionamento usando i reverse Proxy di Apache.

Forward e Reverse Proxy

Apache può essere configurato sia in modalità proxy diretta (o in avanti) che inversa (o all’indietro). Per leggere l’articolo completo, fare riferimento al sito Apache.

Forward Proxy

Un proxy diretto (ordinario, o in avanti) è un server intermedio che si trova tra il client e il server di origine. Al fine di ottenere contenuti dal server di origine, il client invia una richiesta al proxy server usando la denominazione di origine come obiettivo e il proxy richiede poi il contenuto dal server di origine e lo restituisce al client. Il client deve essere appositamente configurato per utilizzare il proxy in avanti per accedere ad altri siti.

Un utilizzo tipico di un proxy in avanti è quello di fornire accesso a Internet a client interni che altrimenti sarebbero individualmente bloccati da un firewall.

Il proxy in avanti può anche utilizzare la cache (grazie al modulo aggiuntivo di Apache mod_cache) per ridurre l’utilizzo della rete. Il proxy in avanti si attiva usando la direttiva ProxyRequests. Poiché i proxy diretti consentono ai client di accedere a siti arbitrari sul server nascondendo la loro vera origine[1], è essenziale che voi assicuriate il vostro server in modo che solo i client autorizzati possano accedere al proxy prima di effettuare un proxy in avanti.

Reverse Proxy

Un reverse proxy, al contrario, appare al client come un web server normale. Nessuna configurazione speciale è necessaria sul client. Il client effettua richieste ordinarie per i contenuti in spazio-nomi del reverse proxy. Il reverse proxy decide dove inviare tali richieste, e restituisce il contenuto come se fosse l’origine. Un utilizzo tipico di un proxy inverso è quello di fornire accesso a Internet agli utenti di un server che si trova dietro un firewall.

Un reverse proxy può essere utilizzato anche per bilanciare il carico tra più server back-end, o per fornire la cache per un server di back-end più lento.

Semplici Esempi

Gli esempi che seguono rappresentano solo l’idea di fondo per aiutarvi a partire. Leggete la documentazione per le singole direttive. Inoltre, se volete usare la cache, consultate la documentazione di mod_cache.

Forward Proxy

  ProxyRequests On
  ProxyVia On

  Order deny,allow
  Deny from all
  Allow from internal.example.com

Reverse Proxy

ProxyRequests Off
Order deny,allow
Allow from all      

ProxyPass /foo http://foo.example.com/bar
ProxyPassReverse /foo http://foo.example.com/bar

Tentativi per capire

Ho abilitato i moduli per il ReverseProxy; per fare ciò si aggiunge ai mods-enabled i moduli che si desiderano:

root@jsbach:/etc/apache2# cd mods-enabled/
root@jsbach:/etc/apache2/mods-enabled# ln -s ../mods-available/proxy.conf .
root@jsbach:/etc/apache2/mods-enabled# ln -s ../mods-available/proxy.load .

Ora, avevo la possibilità di intervenire nel file proxy.load per configurare, ma l’ho fatto in conf.d; infatti, in /etc/apache2/apache2.conf c’è la riga:

# Include generic snippets of statements
Include conf.d/

che include nel file di configurazione tutti i file sotto conf.d. Io ho creato un file rproxy.conf:

# prova reverse proxy
Order deny,allow    Allow from all
ProxyPass /inps https://blabla.it/TCW/services/InvioCertificato
ProxyPassReverse /inps https://blabla.it/TCW/services/InvioCertificato

Occorre riavviare Apache:

# apache2ctl configtest
Syntax OK
# apache2ctl restart

Problema

Richiamando la pagina http://jsbach/inps ho Errore 500. Nel file /var/log/apache2/error.log si legge

[Mon Jun 20 16:53:39 2011] [warn] proxy: No protocol handler was valid for the URL /inps. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule.

Non c’è un protocollo disponibile per trattare la richiesta. In effetti, Apache deve reindirizzare la richiesta verso una connessione HTTPS. A questo punto è sufficiente abilitare il motore SSL; quindi, riassumendo, il file di configurazione è il seguente:

# prova reverse proxy
Order deny,allow
Allow from all
SSLProxyEngine On
ProxyPass /inps https://blabla.it/TCW/services/InvioCertificato
ProxyPassReverse /inps https://blabla.it/TCW/services/InvioCertificato

Il risultato è illustrato in figura:

Proxy inverso

Mirthconnect

Ho avuto un problema nell’avvio di Mirth (www.mirthcorp.com) versione 1.8, che è lo stesso documentato qui.

Per risolverlo, aprire (sono sempre sulla mia Ubuntu 10.04) Sistema > Preferenze > Sun Java 6 Policy Tool

Selezionare Impostazioni di rete > Connessione diretta come illustrato:

Pannello di COntrollo Java 6

Schermata-Impostazioni di reteDopodiché puntare il browser a http://localhost:8080/, Cliccare sul pulsante ed autenticarsi. Tutto OK.

Per Windows compiere le stesse operazioni sulla Consolle Java 6.

Nota: l’installazione non ha nemmeno inizio se si usa OpenJDK anziché SunJDK.