Volevo sottoporre a tutti quelli che passeranno per questa pagina un argomento interessante che è stato oggetto di una ricerca per un esame universitario: Cognitive Radio Networks.
Ho scritto un veloce paper su che cosa rappresentano le Cognitive Radio per lo sviluppo delle comunicazioni e quali problemi di sicurezza possano portare con se.
Mi piacerebbe che da questa piccola introduzione nascesse un dibattito per approfondire e suggerire eventuali soluzioni.
Link al paper
All'interno del paper si fa anche un costante riferimento al Nokia Reseach che si è occupata di vedere dove è possibile impiegare con successo questa nuova tecnologia.
È possibile anche vedere il video prodotto su YouTube che metto qua sotto per chi fosse interessato.
domenica 6 marzo 2011
giovedì 20 gennaio 2011
Java and performance, non è impossibile con gcj
Java è un buon linguaggio. Molto diffuso e ricco di documentazione e librerie.
La Java VM è molto lenta. Molto lenta. Mooooooooolto lenta.
Sono venuto così a contatto con gcj ovvero gcc per Java. Questo compilatore produce un file eseguibile esattamente come per C/C++.

A questo punto viene spontaneo fare un piccolo test di performance. Premetto che il test proposto non ha valenza assoluta.
Compiliamo questa classe.
e successivamente richiamiamola da un semplice "main".
Questo codice compilato con gcj esegue le operazioni in 75ms mentre lanciato con la Java VM i millisecondi salgono a 291.
La mia macchina è un P8400 e Ubuntu 10.04.
La Java VM è molto lenta. Molto lenta. Mooooooooolto lenta.
Sono venuto così a contatto con gcj ovvero gcc per Java. Questo compilatore produce un file eseguibile esattamente come per C/C++.
A questo punto viene spontaneo fare un piccolo test di performance. Premetto che il test proposto non ha valenza assoluta.
Compiliamo questa classe.
public class MiaClass
{
public MiaClass()
{
}
public void print()
{
long startTime = System.currentTimeMillis();
callOperationToTime();
long endTime = System.currentTimeMillis();
long totalTime = endTime - startTime;
System.out.println("Time: " + totalTime);
}
private void callOperationToTime()
{
for(int i = 0; i < 10000; i++)
{
System.out.println(" ");
}
}
}
e successivamente richiamiamola da un semplice "main".
public class HelloWorld {
public static void main(String[] args) {
MiaClass c = new MiaClass();
c.print();
}
}
Questo codice compilato con gcj esegue le operazioni in 75ms mentre lanciato con la Java VM i millisecondi salgono a 291.
La mia macchina è un P8400 e Ubuntu 10.04.
domenica 9 gennaio 2011
"Un web ingarbugliato"
Il primo The Economist del 2011 ha al suo interno un articolo molto interessante che si intitola appunto "A tagled web".
Parla della nuova riforma FCC circa la "network neutrality".
La network neutrality non riguarda i contenuti della rete ma il mezzo di trasmissione. Negli States è un problema molto sentito anche politicamente per la mancanza di competizione per le offerte di connettività.
Il problema principale è la "pay for priority". Significa che le compagnie potrebbero favorire il traffico di un utente che paga di più rispetto a chi paga una tariffa inferiore. L'articolo descrive la situazione attuale, dopo la riforma, e denuncia come questo problema sia stato elegantemente trascurato. Recita infatti che sono "proibite discriminazioni non ragionevoli" lasciando all'intelligenza dei provider la definizione di "discriminazione ragionevole".
Ciò su cui mi vorrei concentrare però è la situazione italiana e paragonarla a quella statunitense.
Per prima cosa l'articolo dell'Economist mette in rilievo quanto la questione regolamentata dalla FCC sia sentita politicamente e che posizioni tengono i due schieramenti. In Italia il problema della "network neutrality" non è minimamente percepito dalla classe politica. È evidente se si pensa a quanto Telecom sia stata in grado di fare il buono e il cattivo tempo. Chi sta per dire "Fastweb" non lo dica.
Secondo, ma non meno importante, problema è la mancanza di infrastrutture tali da garantire a tutti gli utenti una velocità dignitosa. In alcune zone d'Italia non arriva il segnale ADSL. Questo è solo un reminder perchè il problema è vecchio come internet.
La liberalizzazione delle reti wi-fi nelle piazze è un evento importante ma credo che sia solo un granello dell'immensa spiaggia chiamata "avanzamento tecnologico". Siamo un paese tremendamente indietro anche per quanto riguarda la connettività. Cerchiamo almeno di imparare dagli errori che gli altri stanno facendo con alcuni anni di anticipo rispetto a noi!
Parla della nuova riforma FCC circa la "network neutrality".
Il problema principale è la "pay for priority". Significa che le compagnie potrebbero favorire il traffico di un utente che paga di più rispetto a chi paga una tariffa inferiore. L'articolo descrive la situazione attuale, dopo la riforma, e denuncia come questo problema sia stato elegantemente trascurato. Recita infatti che sono "proibite discriminazioni non ragionevoli" lasciando all'intelligenza dei provider la definizione di "discriminazione ragionevole".
Ciò su cui mi vorrei concentrare però è la situazione italiana e paragonarla a quella statunitense.
Per prima cosa l'articolo dell'Economist mette in rilievo quanto la questione regolamentata dalla FCC sia sentita politicamente e che posizioni tengono i due schieramenti. In Italia il problema della "network neutrality" non è minimamente percepito dalla classe politica. È evidente se si pensa a quanto Telecom sia stata in grado di fare il buono e il cattivo tempo. Chi sta per dire "Fastweb" non lo dica.
Secondo, ma non meno importante, problema è la mancanza di infrastrutture tali da garantire a tutti gli utenti una velocità dignitosa. In alcune zone d'Italia non arriva il segnale ADSL. Questo è solo un reminder perchè il problema è vecchio come internet.
La liberalizzazione delle reti wi-fi nelle piazze è un evento importante ma credo che sia solo un granello dell'immensa spiaggia chiamata "avanzamento tecnologico". Siamo un paese tremendamente indietro anche per quanto riguarda la connettività. Cerchiamo almeno di imparare dagli errori che gli altri stanno facendo con alcuni anni di anticipo rispetto a noi!
giovedì 30 dicembre 2010
Wikileaks a "palle ferme"
Cercherò di esporre il mio punto di vista sulla vicenda Wikileaks ora che tutti si sono un po' calmati.
Ci sono diversi aspetti che mi hanno colpito di questa vicenda.
Il primo è l'accanimento nei confronti di una persona: tale Julian Assange.
Il personaggio che è stato sulla bocca di tutti i politici (anche con pronunce discutibili) è quello raffigurato nella foto accanto con una pettinatura improbabile, oramai domata. Assange è sì il "publisher" di tutto quello che è all'interno del sito Wikileaks ma non è mica il diplomatico americano che si è lasciato sfuggire i documenti pubblicati. In pratica c'è una diga che fa acqua da tutte le parti e viene incolpato il povero contadino che intervistato al telegiornale dice "guardate che fra un po' si rompe tutto". Questo aspetto non deve tenere conto dell'accusa di violenza sessuale che dev'essere discussa in altra sede.
Lo dico subito: secondo me la pubblicazione di questo materiale rientra nella libertà di stampa. Ai posteri l'ardua sentenza.
Il secondo aspetto che mi ha colpito è l'anacronismo delle dichiarazioni dei politici (nessuna smentita sul contenuto, tanto per dire) e dei mezzi atti a contrastare il flusso costante di materiale pubblicato.
Tutti gli stati si sono lanciati in accuse di qua, insulti di là e certe volte deliri. Nessuno però si è reso conto che siamo nel 2010 e che tutta la rete è invasa di informazioni private di tutti. Se nel calderone generale ci finiscono anche i documenti filtrati dalle ambasciate non c'è nulla di cui stupirsi. Il problema, se ce n'è uno a livello informatico, è come sia stato possibile che le politiche di sicurezza statunitensi abbiano lasciato questi enormi buchi e, se ce n'è uno a livello diplomatico, com'è possibile che nessuno prenda le distanze da quanto scritto in questi compromettenti documenti.
Veniamo ora all'aspetto tecnico che più interessa. Come prevedibile non appena è stato bloccato dai dns il nome www.wikileaks.org sono nati una tonnellata di mirror che si rimbalzano le informazioni. Non contiamo ovviamente i servizi p2p ecc. perchè rischiamo di far venire dei mal di testa ai piani alti.
Ovviamente una volta pubblicati su internet i documenti sono stati sottoposti a multipli wget -r per poter essere conservati anche dopo tutte le opere di censura.
Spero veramente che i vertici capiscano che i giorni dei rapporti diplomatici 1.0 sono finiti. Oramai non solo il web ma anche la vita sta diventando 2.0 quindi è bene che tutti i rapporti che si stringono siano trasparenti e privi di giochetti da guerra fredda. Il risultato se no è un sito che colleziona, un hacker che viene incolpato mentre ce ne sono altri 100.000 che continuano a pubblicare e a mantenere viva questa isola di libertà, una marea di cazzate dette da politici disinformati e una brutta figura planetaria.
Regards ;)
Ci sono diversi aspetti che mi hanno colpito di questa vicenda.
Il primo è l'accanimento nei confronti di una persona: tale Julian Assange.
Lo dico subito: secondo me la pubblicazione di questo materiale rientra nella libertà di stampa. Ai posteri l'ardua sentenza.
Il secondo aspetto che mi ha colpito è l'anacronismo delle dichiarazioni dei politici (nessuna smentita sul contenuto, tanto per dire) e dei mezzi atti a contrastare il flusso costante di materiale pubblicato.
Tutti gli stati si sono lanciati in accuse di qua, insulti di là e certe volte deliri. Nessuno però si è reso conto che siamo nel 2010 e che tutta la rete è invasa di informazioni private di tutti. Se nel calderone generale ci finiscono anche i documenti filtrati dalle ambasciate non c'è nulla di cui stupirsi. Il problema, se ce n'è uno a livello informatico, è come sia stato possibile che le politiche di sicurezza statunitensi abbiano lasciato questi enormi buchi e, se ce n'è uno a livello diplomatico, com'è possibile che nessuno prenda le distanze da quanto scritto in questi compromettenti documenti.
Veniamo ora all'aspetto tecnico che più interessa. Come prevedibile non appena è stato bloccato dai dns il nome www.wikileaks.org sono nati una tonnellata di mirror che si rimbalzano le informazioni. Non contiamo ovviamente i servizi p2p ecc. perchè rischiamo di far venire dei mal di testa ai piani alti.
Ovviamente una volta pubblicati su internet i documenti sono stati sottoposti a multipli wget -r per poter essere conservati anche dopo tutte le opere di censura.
Spero veramente che i vertici capiscano che i giorni dei rapporti diplomatici 1.0 sono finiti. Oramai non solo il web ma anche la vita sta diventando 2.0 quindi è bene che tutti i rapporti che si stringono siano trasparenti e privi di giochetti da guerra fredda. Il risultato se no è un sito che colleziona, un hacker che viene incolpato mentre ce ne sono altri 100.000 che continuano a pubblicare e a mantenere viva questa isola di libertà, una marea di cazzate dette da politici disinformati e una brutta figura planetaria.
Regards ;)
domenica 26 settembre 2010
SQLite - Il database da taschino
Avere il supporto di un database all'interno di un'applicazione aiuta ad immagazzinare i dati, a tenerli in ordine ed a consultarli con efficienza.

SQLite (http://www.sqlite.org/) è un database relazionale che sta all'interno delle applicazioni e permette di fare tutto ciò che solitamente richiederebbe una database tradizionale diviso in client e server (leggere MySQL, PostgreeSQL).
Per ora ho provato l'integrazione solo con due linguaggi, C++/Qt4 e Java.
In entrambi i casi i risultati sono stati ottimi e l'integrazione è stata rapidissima.
QT4
Qt4 mette a disposizione una libreria per interagire con il db. Ecco uno stralcio di codice che permette di misurare il tempo di esecuzione di due semplici query.
Facendo girare il programma sul mio laptop il tempo di esecuzione è stato di 3 millisecondi. Un ottimo risultato direi.
Java
Ecco un piccolo esempio di codice Java che fa la stessa cosa.
Con il la parte di codice scritta in Java non ho eseguito dei test di performance ma ha garantito una portabilità incredibile visto che il file .jar contiene al suo interno la libreria per interagire con il database.
Questo è solo un primo articolo che vuole fornire lo spunto a tutti quelli che verranno. Spero di essere stato utile.
Alla prossima.
SQLite (http://www.sqlite.org/) è un database relazionale che sta all'interno delle applicazioni e permette di fare tutto ciò che solitamente richiederebbe una database tradizionale diviso in client e server (leggere MySQL, PostgreeSQL).
Per ora ho provato l'integrazione solo con due linguaggi, C++/Qt4 e Java.
In entrambi i casi i risultati sono stati ottimi e l'integrazione è stata rapidissima.
QT4
Qt4 mette a disposizione una libreria per interagire con il db. Ecco uno stralcio di codice che permette di misurare il tempo di esecuzione di due semplici query.
int main(int argc, char *argv[])
{
QTime t;
t.start();
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("qt.db");
db.open();
QSqlQuery * query = new QSqlQuery("insert into T1 values (1,'Insert from program.');",db);
int result = 1;
result = (query->exec()) ? 0 : -1;
query->prepare("SELECT * FROM T1;");
query->exec();
while(query->next())
{
QString line = query->value(0).toString() + ","+query->value(1).toString();
QString deb = "Linea trovata: " + line;
qDebug(deb.toStdString().c_str());
}
int elapsed = t.elapsed();
return elapsed;
}
Facendo girare il programma sul mio laptop il tempo di esecuzione è stato di 3 millisecondi. Un ottimo risultato direi.
Java
Ecco un piccolo esempio di codice Java che fa la stessa cosa.
public static void main(String[] args) throws SQLException {
try {
Class.forName("org.sqlite.JDBC");
Connection conn = DriverManager.getConnection("jdbc:sqlite:test.db");
Statement stat = conn.createStatement();
stat.executeUpdate("insert into T1 values (1,'Insert from program.');");
} catch (ClassNotFoundException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
Con il la parte di codice scritta in Java non ho eseguito dei test di performance ma ha garantito una portabilità incredibile visto che il file .jar contiene al suo interno la libreria per interagire con il database.
Questo è solo un primo articolo che vuole fornire lo spunto a tutti quelli che verranno. Spero di essere stato utile.
Alla prossima.
mercoledì 21 luglio 2010
Esplorando il kernel Linux: boot
Cominciando il mio viaggio all'interno del kernel Linux mi sono posto una domanda: come fa Linux a partire?

Ho cercato e trovato online un link molto interessante che voglio condividere: LINK
In questo articolo viene dettagliato il processo di boot del kernel linux in tutte le sue fasi.
Questi passi possono essere ritrovati all'interno del codice sorgente. A questo proposito a questo indirizzo è possibile consultare il codice sorgente on-line molto comodamente e poter riferire ogni singola linea di codice tramite il bookmark che si trova sotto il numero.
Buona lettura.

Ho cercato e trovato online un link molto interessante che voglio condividere: LINK
In questo articolo viene dettagliato il processo di boot del kernel linux in tutte le sue fasi.
Questi passi possono essere ritrovati all'interno del codice sorgente. A questo proposito a questo indirizzo è possibile consultare il codice sorgente on-line molto comodamente e poter riferire ogni singola linea di codice tramite il bookmark che si trova sotto il numero.
Buona lettura.
Etichette:
Gnu Linux,
Kernel,
Linux,
Programmazione
lunedì 12 luglio 2010
How to install Hping3 from source code
Nella mia nuova Slackbox mancava uno strumento che è oggetto di studio da parte di un corso universitario che seguo:

Mi sono così procurato i sorgenti da http://www.hping.org/ e ho effettuato i soliti comandi:
ecco che spunta un errore:
libpcap_stuff.c alla linea 61 non riesce a trovare una funzione che si trova nel sorgente net/bpf.h
Installo allora le librerie che vengono riportate in alcuni siti: http://www.tcpdump.org/ e più precisamente la libreria libpcap.
Queste librerie vengono installate facilmente eseguendo:
Il file bpf.h viene però posizionato male.
Dando questi comandi è possibile vedere come il file di nostro interesse si trovi dentro pcap e che la cartella net non è stata creata per niente.
Diamo allora i seguenti comandi:
Dopo di che posizioniamoci nella directory con i file sorgenti di Hping3 e diamo in sequenza:
Il risultato sarà questo:
Buon divertimento con Hping3.
hping
Mi sono così procurato i sorgenti da http://www.hping.org/ e ho effettuato i soliti comandi:
./configure
make...
ecco che spunta un errore:
libpcap_stuff.c alla linea 61 non riesce a trovare una funzione che si trova nel sorgente net/bpf.h
Installo allora le librerie che vengono riportate in alcuni siti: http://www.tcpdump.org/ e più precisamente la libreria libpcap.
Queste librerie vengono installate facilmente eseguendo:
./configure
make
make install
Il file bpf.h viene però posizionato male.
Dando questi comandi è possibile vedere come il file di nostro interesse si trovi dentro pcap e che la cartella net non è stata creata per niente.
# cd /usr/local/include/
# cd pcap
# ls
Diamo allora i seguenti comandi:
# mkdir ../net
# cp *.h ../net/
Dopo di che posizioniamoci nella directory con i file sorgenti di Hping3 e diamo in sequenza:
./configure
make
make install
Il risultato sarà questo:
root@slackbox:~# hping3
hping3>
Buon divertimento con Hping3.
martedì 29 giugno 2010
How to write Spamassassin plugin - part 2
Come promesso eccoci al secondo e ultimo appuntamento di questa serie.
Precisiamo subito che semplici regole possono essere scritte direttamente all'interno dei file di configurazione. All'interno dei plugin vanno messe regole più complesse o che si basano su dati che cambiano frequentemente.

Per prima cosa bisogna ereditare dalla classe base Plugin
In questo modo abbiamo registrato la nuova regola già definita all'interno del file di configurazione.
A questo punto bisogna dare corpo alla nuova regola che vogliamo introdurre nel tool.
Nel frammento di codice sopra abbiamo importanto anche le librerie DBI che ci consentono di interrogare il database con un comodo Object Model.
Facciamo un esempio di implementazione di una regola basata su DB.
Questo frammento di codice è piuttosto semplice e fa una query al db, tramite DBI, dopo aver bonificato la stringa da passare.
Una cosa sicuramente da notare è il paramtro $pms che consente di accedere a tutti gli headers della mail.
Forniamo allora questo messaggio
a spamassassin e avremo due comportamenti diversi:
È un argomento piuttosto vasto che richiede tempo per essere assimilato. Questo è solo un input che vuole stimolare interesse. Spero di essere stato chiaro e sono a disposizione per un help in linea, per quanto posso fare.
Have fun ;)
Precisiamo subito che semplici regole possono essere scritte direttamente all'interno dei file di configurazione. All'interno dei plugin vanno messe regole più complesse o che si basano su dati che cambiano frequentemente.
Per prima cosa bisogna ereditare dalla classe base Plugin
package Mail::SpamAssassin::Plugin::MyPlugin;
use Mail::SpamAssassin::Plugin;
use DBI;
our @ISA = qw(Mail::SpamAssassin::Plugin);
sub new {
my ($class, $mailsa) = @_;
# the usual perlobj boilerplate to create a subclass object
$class = ref($class) || $class;
my $self = $class->SUPER::new($mailsa);
bless ($self, $class);
# add rule
$self->register_eval_rule ("check_myplugin_header");
return $self;
}
1;
In questo modo abbiamo registrato la nuova regola già definita all'interno del file di configurazione.
A questo punto bisogna dare corpo alla nuova regola che vogliamo introdurre nel tool.
Nel frammento di codice sopra abbiamo importanto anche le librerie DBI che ci consentono di interrogare il database con un comodo Object Model.
Facciamo un esempio di implementazione di una regola basata su DB.
sub check_myplugin_header
{
my ($self, $pms) = @_;
# Extract desidered informations from mail header
$head = $pms->get('CustomHeader');
$result = 0;
study;
chomp($head);
$head =~ s/;//;
$dbh = DBI->connect("dbi:mysql:spamassassindb","user","pass");
if(!defined $dbh)
{
die "Connessione al database non riuscita: $DBI::errstrn";
}
$query = "SELECT count(accepted_headers) FROM headers WHERE accepted_headers = $head";
# Insert query into database instructions
$sth = $dbh->prepare($query);
# Database query execution
$sth->execute;
$count = $sth->fetchrow();
if($count eq 0)
{
# Report error
$result = 1;
}
# Disconnect from database
$dbh->disconnect();
return $result;
}
Questo frammento di codice è piuttosto semplice e fa una query al db, tramite DBI, dopo aver bonificato la stringa da passare.
Una cosa sicuramente da notare è il paramtro $pms che consente di accedere a tutti gli headers della mail.
Forniamo allora questo messaggio
From god@heaven.com Thu Jun 17 21:33:41 2010
Return-Path: <god@heaven.com>
X-Original-To: account@post-server
Delivered-To: account@post-server
Received: from post-server (host [127.0.0.1])
by post-server (Postfix) with SMTP id B66E9424F5
for <account@post-server>; Thu, 30 Jun 2010 21:33:20 +0200 (CEST)
CustomHeader:blablabla
Subject:Try this
Simple mail to test my plugin.
a spamassassin e avremo due comportamenti diversi:
- Se la stringa "blablabla" è contenuta nel database la regola non andrà ad aggiungere i punti definiti nel file di configurazione (2.0 dal post precedente)
- Se la stringa "blablabla" non è contenuta allora la regola avrà un hit che sommerà 2 punti allo score totale. In questo secondo caso se questo punteggio fa superare la soglia (definita sempre nei vari file di configurazione) allora il messaggio verrà identificato come SPAM!!!
È un argomento piuttosto vasto che richiede tempo per essere assimilato. Questo è solo un input che vuole stimolare interesse. Spero di essere stato chiaro e sono a disposizione per un help in linea, per quanto posso fare.
Have fun ;)
Etichette:
Internet,
Perl,
Programmazione,
Sicurezza,
Spamassassin
domenica 27 giugno 2010
How to write Spamassassin plugin - part 1
Sono giunto a un buon punto di un progetto per un esame universitario (che verrà pubblicato non appena consegnato) che riguarda un argomento sul quale ho trovato pochissimo materiale.
Si sta parlando della scrittura di un plugin che valuti una regola complessa su un messaggio e-mail, per determinare se si tratta di spam oppure no.

C'è voluto molto tempo per raggiungere qualcosa di funzionante ma ora che ho fra le mani un po' di codice che gira posso scrivere un articolo come questo e colmare la lacuna che il web mi ha mostrato. (I'll translate this article soon for international usage)
Cominciamo con installare tutto quello che serve (a parte una VM con sopra Ubuntu): Documentazione Ubuntu - Mail Server
A questo punto il plugin ha bisogno di due cose:
In questa prima parte ci concentreremo sul file di configurazione. Nel prossimo articolo parleremo di come scrivere un .pm che interroghi un database per la valutazione di un header.
Il file di configurazione che bisogna comporre va depositato all'interno della directory di sistema /etc/spamassassin.
Possiamo andare a scriverlo direttamente con il seguente comando:
All'interno di questo file andiamo a scrivere due cose. La prima è il collegamento della funzione che andremo a definire nella nostra classe. La seconda è lo score che la regola aggiunge alla valutazione se si verifica la condizione definita.
Il contenuto sarà pressochè il seguente:
Per configurare la nostra personalizzazione manca solo un passaggio: bisogna far caricare a Spamassassin il nostro plugin. Va dunque cambiato un qualunque file *.pre. Apriamo quindi:
In coda a questo file vanno aggiunte le seguenti righe affinchè il nostro plugin venga caricato a successivo riavvio.
Conclusa la configurazione è il momento di scrivere il vero e proprio plugin ma sarà argomento del prossimo post.
Stay tuned ;)
Ah, quasi dimenticavo:
Si sta parlando della scrittura di un plugin che valuti una regola complessa su un messaggio e-mail, per determinare se si tratta di spam oppure no.
C'è voluto molto tempo per raggiungere qualcosa di funzionante ma ora che ho fra le mani un po' di codice che gira posso scrivere un articolo come questo e colmare la lacuna che il web mi ha mostrato. (I'll translate this article soon for international usage)
Cominciamo con installare tutto quello che serve (a parte una VM con sopra Ubuntu): Documentazione Ubuntu - Mail Server
A questo punto il plugin ha bisogno di due cose:
- Un file di configurazione che permetta di richiamare la regola e le assegni un punteggio.
- Una classe Perl che implementi l'interfaccia Plugin e che definisca precisamente la regola che si vuole aggiungere a Spamassassin.
In questa prima parte ci concentreremo sul file di configurazione. Nel prossimo articolo parleremo di come scrivere un .pm che interroghi un database per la valutazione di un header.
Il file di configurazione che bisogna comporre va depositato all'interno della directory di sistema /etc/spamassassin.
Possiamo andare a scriverlo direttamente con il seguente comando:
sudo gedit /etc/spamassassin/25_myplugin.cf
All'interno di questo file andiamo a scrivere due cose. La prima è il collegamento della funzione che andremo a definire nella nostra classe. La seconda è lo score che la regola aggiunge alla valutazione se si verifica la condizione definita.
Il contenuto sarà pressochè il seguente:
# Rule load for MyPlugin
header MY_RULE eval:check_myplugin_header()
score MY_RULE 2.0
Per configurare la nostra personalizzazione manca solo un passaggio: bisogna far caricare a Spamassassin il nostro plugin. Va dunque cambiato un qualunque file *.pre. Apriamo quindi:
sudo gedit /etc/spamassassin/v310.pre
In coda a questo file vanno aggiunte le seguenti righe affinchè il nostro plugin venga caricato a successivo riavvio.
# load MyPlugin
loadplugin Mail::SpamAssassin::Plugin::MyPlugin
Conclusa la configurazione è il momento di scrivere il vero e proprio plugin ma sarà argomento del prossimo post.
Stay tuned ;)
Ah, quasi dimenticavo:
sudo /etc/init.d/postfix
sudo /etc/init.d/spamassassin
Etichette:
Internet,
Perl,
Programmazione,
Sicurezza,
Spamassassin
Iscriviti a:
Post (Atom)