Bannato da adSense: alternative per vendere pubblicità?

Qualche giorno fa il mio account adSense è stato disabilitato: perchè? Secondo Google “gravi e comprovati motivi”, come quando si veniva riformati a militare. Cotrollo i TOS, non mi pare di aver fatto nulla di male, forse manca il link alla privacy du tutte le pagine (su un blog personale, poi…), forse qualche parente ha fatto qualche click di troppo sui banner (ho una media di 2-3 click al giorno…): faccio ricorso chiedendo spiegazioni e la risposta di Google è “ricorso respinto per gravi e comprovati motivi”. Quindi non solo non ho capito cosa sia successo, ma ora ho la certezza che il mio account adSense non potrà essere più riabilitato.
Beh, non la prendo certo come fatto personale: il blog ha una media di un paio di centinaia di visitatori unici al giorno ed è tutta “gente del mestiere” o clienti, per cui sono partito ad usare adSense senza alcuna velleità di “far soldi”.
Certo che la cosa mi puzza alquanto, perchè se basta fare un paio di click al giorno per qualche settimana su un annuncio pubblicato da un sito “nemico” perchè venga “bannato” da adSense, beh, affidarsi al solo adSense mi sembra alquanto pericoloso!
Quindi, per chi vuole delle alternative perchè è stato bannato come o semplicemente perchè vuole dormire sonni tranquilli differenziando le fonti di entrate dalla pubblicità, vi presento qualche piattaforma che ho trovato interessante e che ho abilitato sul blog per capire se sono convenienti:

  • adBrite è un sistema di vendita banner in cui si propone uno spazio del proprio sito a possibili compratori che, se interessati compreranno lo spazio sul sito. Oltre al classico banner, è possibile utilizzare adBrite anche per creare dei link in automatico sul testo del messaggio che rimandano a siti esterni nonchè inserire intere “sottopagine”. L’attivazione è pressochè immediata, ma non è semplice avere un sito interessante per un compratore.

  • BitVertiser è un servizio analogo ad adSense e di immediata attivazione. Interessante che paghino dopo soli 10$ attraverso un accredito su paypal e la possibilità di creare toolbar personalizzate per il proprio sito

  • affinity interpreta il contenuto della pagina per trovare possibili richiami a pubblicità. E’ possibile configurarlo per mostrare “intext link”, oppure per creare dei banner dall’aspetto simile ad un tag cloud. Una cosa un po’ noiosa è che per poter ricevere i pagamenti è necessario firmare una dichiarazione (tale Form W-8BEN).

  • chitika è molto lento nell’attivazione in quanto, al pari di adSense viene controllato manualmente il sito. Nella maggior parte sei casi il sito viene attivato a livello “silver” con revenue non esaltanti; nel caso di un numero di impression elevato, si viene promossi a livello gold con revenue molto più elevate.

Il modulo mod_evasive di Apache

mod_evasive è un altro modulo di Apache in grado di aumentare la sicurezza del sistema proteggendoci da attacchi DOS e D-DOS sulla porta 80.
Gli attacchi di tipo DOS e D-DOS (Denial of Services e Distributed Denial of Services) sono attacchi atti a rendere inaccessibili i sistemi a causa di un intenso traffico dati. Grazie a questo modulo, però, riusciamo a prevenire questo tipo di attacco quando viene rivolto ad Apache in quanto il modulo tiene traccia del numero di connessioni provenienti da un determinato IP e, in caso di superamento della soglia, interviene bloccandole.
Per installare il modulo su Debian/Ubuntu è sufficiente lanciare il comando:

apt-get install libapache2-mod-evasive

Quindi creiamo la directory per i log:

mkdir -p /var/log/apache2/evasive
chown -R www-data:root /var/log/apache2/evasive

Ora creiamo un file di configurazione per il modulo:

<strong>/etc/apache2/conf.d/modevasive.conf</strong>
<IfModule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 5
DOSSiteCount 100
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 600
DOSLogDir "/var/log/apache2/evasive"
</IfModule>

e riavviamo Apache:

/etc/init.d/apache2 restart

Per collaudare il funzionalmento del modulo, c’è un semplice script perl incluso con la documentazione:

# perl /usr/share/doc/libapache2-mod-evasive/examples/test.pl 
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 403 Forbidden
HTTP/1.1 200 OK
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden

Rendiamo sicuro apache con mod_security

mod_security è un modulo di apache che ci aiuta a rendere il sistema più sicuro attraverso un Web Application Firewall.
Il Web Application Firewall (per gli amici WAF) è un filtro che controlla il traffico da e verso il webserver identificando possibili atticchi di alto livello come SQL Injection, Cross-Site scripting e simili.
L’utilizzo di mod_security deve essere però ponderato attentamente in quanto influisce negativamente sulle prestazioni globali del sistema e aumenta i consumi di risorse.
Quasi tutte le maggiori distribuzioni hanno un pacchetto precompilato per mod_security; in qualsiasi caso, trattandosi di un sistema che viene aggiornato con elevata frequenza, è preferibile non usare il pacchetto precompilato ma procedere con la compilazione. Questo perchè può capitare che le ultime regole non siano compatibili con versioni più anziane del modulo.

Installazione del modulo e delle regole
Il sistema si compone di due pacchetti: un pacchetto da compilare con il modulo di apache e un secondo pacchetto con le regole, simile alle definizioni di un antivirus.
Iniziamo con l’installazione dei prerequisiti: in questo caso propongo la sintassi di Debian/Ubuntu.
libapr e libapr-util

apt-get install libapr1 libapr1-dev libaprutil1 libaprutil1-dev

libpcre

apt-get install libpcre3 libpcre3-dev

libxml2

apt-get install libxml2 libxml2-dev

liblua

apt-get install liblua5.1-0 liblua5.1-0-dev

libcurl

apt-get install libcurl4-openssl-dev libcurl3-dbg

le librerie di sviluppo di apache:

apt-get install apache2-dev

i tools per lo sviluppo

apt-get install build-essential

i prerequisiti di Perl

apt-get install liblwp-useragent-determined-perl libgnupg-perl libcrypt-ssleay-perl

Infine è necessario abilitare il module mod_uniqueid

a2enmod unique_id

Dal sito http://www.modsecurity.org/ procediamo al download del modulo (al momento l’ultima versione disponibile è la 2.6.3) e scompattiamo il sorgente:

cd /usr/local/src
wget http://www.modsecurity.org/download/modsecurity-apache_2.6.3.tar.gz
tar zxvf modsecurity-apache_2.6.3.tar.gz
cd modsecurity-apache_2.6.3

Quindi passiamo alla compilazione e all’installazione del modulo:

./configure && make && make mlogc && make install

A questo punto avrete il modulo compilato e già installato nella directory corretta (/usr/lib/apache2/modules/mod_security2.so)

Ora è il turno delle regole CRS base (in questo caso l’ultima versione è la 2.2.3); il sito ufficiale rimanda a SourceForge: scaricate il pacchetto in /usr/local/src, scompattatelo e spostatelo nella direcory corretta con:

tar zxvf modsecurity-crs_2.2.3.tar.gz
mv modsecurity-crs_2.2.3 /etc/apache2/modsecurity-crs

Configurazione
La prima cosa da fare è configurare Apache perchè carichi il modulo. Lavorando su un sistema Debian/Ubuntu, seguo il loro modo di operare creando il file /etc/apache2/mods-available/mod-security.load

<strong>/etc/apache2/mods-available/mod-security.load</strong>
LoadFile /usr/lib/libxml2.so.2
LoadModule security2_module /usr/lib/apache2/modules/mod_security2.so

Ora attiviamo il modulo con:

a2enmod mod-security

Il file di configurazione base sarà /etc/apache2/conf.d/modsecurity.conf. Partiamo da una solida base, utilizzando la configurazione raccomandata del sorgente scaricato.

cp /usr/local/src/modsecurity-apache_2.6.3/modsecurity.conf-recommended /etc/apache2/conf.d/modsecurity.conf
mv /etc/apache2/modsecurity-crs/modsecurity_crs_10_config.conf.example /etc/apache2/modsecurity-crs/modsecurity_crs_10_config.conf

Con questa configurazione, in realtà, il nostro sistema fa ben poco in quanto si tratta solo di un setup di base del modulo che non blocca nulla e non include alcuna regola specifica. Editiamo il file operando le modifiche qui sotto:

<strong>/etc/apache2/conf.d/modsecurity.conf</strong>
#### Riga da aggiungere all'inizio
<IfModule mod_security2.c>                                       
...
#### Riga da modificare
SecRuleEngine On                                                 
...




#### Righe da aggiungere alla fine
Include /etc/apache2/modsecurity-crs/modsecurity_crs_10_config.conf 
Include /etc/apache2/modsecurity-crs/base_rules/*.conf
Include /etc/apache2/modsecurity-crs/activated_rules/*.conf
</IfModule>

A questo punto riavviamo Apache e verifichiamo in /var/log/apache2/error_log che il modulo venga caricato correttamente.

Per verificare l’effettiva funzionalità del sito potete creare un file test.php nella home directory del sito con il comando phpinfo. Ad es.

<strong>/var/www/test.php</strong>
<?php
phpinfo();
?>

e usare un tool di verifica come nikto per fare la scansione di quel sito. Questo è l’output del tools su una installazione standard di Apache senza mod_security:

+ Server: Apache/2.2.16 (Debian)
+ ETag header found on server, inode: 273242, size: 177, mtime: 0x4b5b1f0a49780
+ Apache/2.2.16 appears to be outdated (current is at least Apache/2.2.19). Apache 1.3.42 (final release) and 2.0.64 are also current.
+ Allowed HTTP Methods: GET, HEAD, POST, OPTIONS 
+ Retrieved x-powered-by header: PHP/5.3.3-7+squeeze3
+ OSVDB-3092: /phpmyadmin/changelog.php: phpMyAdmin is for managing MySQL databases, and should be protected or limited to authorized hosts.
+ OSVDB-3092: /test/: This might be interesting...
+ OSVDB-3233: /test.php: PHP is installed, and a test script which runs phpinfo() was found. This gives a lot of system information.
+ OSVDB-3233: /test/info.php: PHP is installed, and a test script which runs phpinfo() was found. This gives a lot of system information.
+ OSVDB-3233: /test/phpinfo.php: PHP is installed, and a test script which runs phpinfo() was found. This gives a lot of system information.
+ OSVDB-3268: /icons/: Directory indexing found.
+ OSVDB-3233: /icons/README: Apache default file found.
+ OSVDB-3092: /test.php: This might be interesting...
+ /phpmyadmin/: phpMyAdmin directory found
+ 6456 items checked: 0 error(s) and 13 item(s) reported on remote host
+ End Time:           2012-01-05 15:31:00 (425 seconds)
---------------------------------------------------------------------------

Questo è l’output del tool dopo l’abilitazione di mod_security:

---------------------------------------------------------------------------
+ Server: Apache/2.2.16 (Debian)
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ Apache/2.2.16 appears to be outdated (current is at least Apache/2.2.19). Apache 1.3.42 (final release) and 2.0.64 are also current.
+ 6456 items checked: 0 error(s) and 1 item(s) reported on remote host
+ End Time:           2012-01-05 15:06:42 (414 seconds)
---------------------------------------------------------------------------

Andare oltre
Già con le sole regole base attive abbiamo visto che il nostro server è molto più sicuro.
Il pacchetto crs comprende però altre regole in grado di aumentare ulterioremente il grado di protezione del nostro server e si trovano in /etc/apache2/mod_security/optional_rules, /etc/apache2/mod_security/experimental_rules e /etc/apache2/mod_security/slr_rules. La nostra configurazione è già pronta per regole aggiuntive e per attivarle è sufficiente creare un link simbolico dei file nella directory /etc/apache2/mod_security/activated_rules e ricaricare la configurazione di Apache.