Attraverso IPTables abbiamo la possibilità di monitorare il traffico: ad esempio, se il nostro server si occupa di gestire più di un servizio (ad esempio se funge sia da web server che da mail server), ci potrebbe tornare utile sapere quanto traffico è consumato per il web e quanto per la posta elettronica.

Attraverso questo semplice script, creeremo le regole IPTables necessarie per creare  delle tabelle “copia” delle tabelle INPUT e OUTPUT e, quindi, inseriremo le regole per monitorare il traffico di ogni porta.

### creo i nuovi set ###
/sbin/iptables -N INET_IN_PORT
/sbin/iptables -N INET_OUT_PORT
### li collego (usare FORWARD in caso di gateway) ###
/sbin/iptables -A INPUT -j INET_IN_PORT
/sbin/iptables -A OUTPUT -j INET_OUT_PORT
### setto e regole per INPUT ###
/sbin/iptables -A INET_IN_PORT -i eth1 -p tcp --dport 80
/sbin/iptables -A INET_IN_PORT -i eth1 -p tcp --dport 443
/sbin/iptables -A INET_IN_PORT -i eth1 -p tcp --dport 25
/sbin/iptables -A INET_IN_PORT -i eth1 -p tcp --dport 143
/sbin/iptables -A INET_IN_PORT -i eth1 -p tcp --dport 53
/sbin/iptables -A INET_IN_PORT -i eth1 -p udp --dport 53
/sbin/iptables -A INET_IN_PORT -i eth1 -p tcp --dport 22
### setto e regole per OUTPUT ###
/sbin/iptables -A INET_OUT_PORT -o eth1 -p tcp --sport 80
/sbin/iptables -A INET_OUT_PORT -o eth1 -p tcp --sport 443
/sbin/iptables -A INET_OUT_PORT -o eth1 -p tcp --sport 25
/sbin/iptables -A INET_OUT_PORT -o eth1 -p tcp --sport 143
/sbin/iptables -A INET_OUT_PORT -o eth1 -p tcp --sport 53
/sbin/iptables -A INET_OUT_PORT -o eth1 -p udp --sport 53
/sbin/iptables -A INET_OUT_PORT -o eth1 -p tcp --sport 22
/sbin/service iptables save

Una volta inserite le regole, possiamo vedere il traffico registrato con:

iptables -L INET_IN_PORT -v -n
iptables -L INET_OUT_PORT -v -n

Se vogliamo monitorare in tempo reale cosa succede, possiamo usare il comando watch -n 1:

watch -n 1 iptables -L INET_IN_PORT -v -n
watch -n 1 iptables -L INET_OUT_PORT -v -n
 

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:

/etc/apache2/conf.d/modevasive.conf
<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
 

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

/etc/apache2/mods-available/mod-security.load
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:

/etc/apache2/conf.d/modsecurity.conf
#### 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.

/var/www/test.php
<?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.

 

OpenERP è uno dei pochi software ERP OpenSource. Gli ERP sono sostanzialmente software gestionali che integrano funzionalità avanzate quali, ad esempio, sistemi di controllo di produzione, CRM, gestione del magazzino e molto altro.
OpenERP è un software stabile (siamo ormai giunti alla versione 6.1), tradotto in numerose lingue e ovviamente c’è una traduzione italiana ufficiale: quindi è un sistema che certamente è utilizzabile in produzione e si adatta agevolmente sia alle piccole aziende sia alle grandi corporate.

Una delle cose che personalmente reputo importanti in OpenERP è l’architettura che sta alla base: OpenERP è un sistema client-server realizzato avendo in mente l’apertura che hanno tutti i software più blasonati.
Il server è solo “il motore” del sistema, è realizzato in Python e si appoggia ad un database PostgreSQL; è possibile comunicare con il server solo attraverso delle API raggiungibili attraverso il protocollo standard XML-RPC.
Per utilizzare queste API, è possibile ovviamente usare delle interfacce installabili sulla propria workstation già pronte: sono tutte realizzate in Python attraverso la libreria PyGTK, sono aperte e funzionano su client Windows, MacOS e Linux. Oltre ai client installabili sul PC, c’è un ottimo client web che è possibile anche installare direttamente sulla stessa macchina ove è installato OpenERP Server.

E’ ovviamente possibile usare direttamente le API e il protocollo XML-RPC per far comunicare la propria applicazione con OpenERP. Ad esempio un ecommerce può sfruttare le API per avere in tempo reale la situazione del magazzino e per generare automaticamente i documenti ed i processi in caso d’ordine. A tal proposito, già esiste un interfacciamento funzionante e collaudato con il software di e-commerce “Magento”.

Essendo un software OpenSource, è aperto anche a funzionalità aggiuntive. Difatti OpenERP ha una architettura modulare ed è già presente un ecosistema di moduli ufficiali e di terze parti, comprese alcune interessanti verticalizzazioni già pronte come quella per le associazioni e per le case d’asta.
Il mio spassionato consiglio, è di non partire con una installazione completa di tutti i moduli, ma di partire con una installazione base e di aggiungere i moduli necessari solo in caso di effettiva esigenza: una installazione complenta, difatti, mette a disposizione una tale quantità di opzioni che è facile perdersi e disorientarsi.

Il capitolo moduli riserva però una sorpresa riguardo al meccanismo di licenza, che è una anomalia nel panorama delle modalità di distribuzione di software OpenSource. OpenERP, come molti altri software, esiste in due versioni: gratuita e a pagamento. Queste due versioni sono identiche, non esiste alcuna funzionalità aggiuntiva nella versione a pagamento ripetto alla versione gratuita.
La differenza riguarda esclusivamente la metodologia di sviluppo dei moduli: se una azienda ha necessità di una particolare funzione che non è presente originariamente nel sistema o in uno dei moduli installati, è possibile contattare una delle aziende certificate per farsi realizzare il modulo che soddisfi le proprie esigenze. Se si sta utilizzando la versione gratuita è obbligatorio rendere disponibile nell’ecosistema il modulo realizzato, altrimenti è possibile mantenerlo “riservato”.