// Stai leggendo ...

L'angolo dello Smanettone

[Howto] Hotspot in regola con la Pisanu (parte 3): logging e conservazione traffico, filtro p2p

image_previewLa conservazione e il tracciamento (log o logging) del traffico generato dagli utenti del nostro hotspot è certamente uno degli aspetti “più torbidi” e meno chiari della disciplina attuale. Vedremo come sia possibile salvare i dati di traffico su di un file di testo o su di un database mysql remoto per mezzo di una connessione criptata ssh effettuando l’ “immagazzinamento” di tali dati su base giornaliera.


Dopo aver installato e configurato adeguatamente il nostro hardware di rete in modo da poter correttamente navigare in internet, previa autenticazione a mezzo radius server, è arrivato il momento di occuparci delle impostazioni che ci permetteranno di tracciare il traffico generato dagli utenti dell’ hotspot, nonchè di residue “funzionalità di contorno” quali il monitoraggio remoto dell’ access point ed altre limitazioni “minori” (accennavo alla richiesta fattami di impedire il traffico p2p).

CONFIGURAZIONE FIREWALL:
A partire da Kamikaze gli sviluppatori di Openwrt hanno modificato di molto la gestione di questo aspetto: è infatti possibile utilizzare la funzionalità di scripting UCI andando ad agire sul file

/etc/config/firewall

(se non erro è stata anche sviluppata un’ apposita interfaccia grafica per questo) oppure continuare a creare le “classiche” stringhe di iptables da inserire in

/etc/firewall.user

Personalmente ho adottato “una strategia ibrida” scegliendo l’una o l’altra soluzione a seconda di quello che di volta in volta ritenevo più semplice.

Cominciamo con:

vi /etc/config/firewall

in coda al quale andremo ad aggiungere:

config rule
option _name ssh
option src wan
option target ACCEPT
option proto tcp
option dest_port 22

config rule
option _name monit
option src wan
option target ACCEPT
option proto tcp
option dest_port 2812

Il funzionamento delle 2 regole dovrebbe essere abbastanza intuitivo: con la prima “apriamo” la porta 22 sull’interfaccia WAN in modo da poterci connettere da remoto al router (via ssh), con la seconda invece permettiamo l’accesso all’ interfaccia web di monit, una piccola utilità di monitoraggio di cui parlerò in seguito.

Viceversa, leggermente più criptiche potrebbero comparire le istruzioni che andremo ad aggiungere al file firewall.user

vi /etc/firewall.user

in cui inseriremo:

##### ABILITAZIONE LOGGING TRAFFICO
iptables -t nat -A PREROUTING -i br-lan -j ULOG --ulog-prefix "LOGGING: "
######### BLOCCO P2P
iptables -I FORWARD -m ipp2p --ipp2p -j DROP
iptables -I INPUT -m ipp2p --ipp2p -j DROP
iptables -I OUTPUT -m ipp2p --ipp2p -j DROP

La prima abilita il logging del traffico generato dai client connessi all’ hotspot per mezzo del demone ULOGD, le restanti invece inibiscono il traffico p2p da parte degli utenti.

Nota sul filtraggio del traffico p2p:
Sebbene iptables offra 2 strumenti atti a questo scopo (ip2pp e L7-filter), dei quali soltanto il secondo sembra attualmente mantenuto ed aggiornato, personalmente ho ottenuto risultati migliori con IP2PP.
Nulla vi vieta di utilizzare l’altro protocollo: entrambi sono infatti presenti nel firmware precompilato che ho messo a disposizione.

ULOGD: SALVIAMO I NOSTRI LOG SU DI UN DATABASE REMOTO
Per questioni di comodità e stabilità generale del sistema (di default tutti i log sono salvati in memoria ram) è necessario fare in modo che i tracciati del nostro traffico vadano a risiedere su di una unità esterna. A questo fine ci serviremo del demone ULOGD capace di gestire una pluralità di strategie, tra le quali sfrutteremo quella che permette di salvare i dati su di un file di testo e/o su di un database mysql remoto.
La prima soluzione (LOGEMU) è quella da preferire qualora si possa utilizzare una unità disco connessa al nostro hardware di rete (grazie alla porta usb o alla modifica hardware), la seconda (MYSQL) invece permette di ordinare i nostri log in modo più rigoroso e facilita successive ricerche.
Accediamo al file di configurazione di Ulogd tramite l’editor VI:

vi /etc/ulogd.conf

e modifichiamo le seguenti righe come segue:

# logfile for status messages
logfile="/mnt/log/ulogd.log" ### Percorso file di log, da impostare in questo modo qualora il router abbia una unità disco
plugin="/usr/lib/ulogd/ulogd_BASE.so"
plugin="/usr/lib/ulogd/ulogd_LOGEMU.so"  ##Decommentare
plugin="/usr/lib/ulogd/ulogd_MYSQL.so" ## Decommentare

[LOGEMU]  ## Componente che salva i log di traffico su file di testo
file="/mnt/log/ulogd.syslogemu"  ## Percorso del file di testo. ATTENZIONE: è necessario un router/gateway dotato di unità di massa per il salvataggio dati
sync=1

[MYSQL] ## Componente che salva i log di traffico su database mysql remoto
table="ulog"
pass="password-utente-mysql"
user="root"
db="databaselog"
host="127.0.0.1"

I commenti al file dovrebbero essere autoesplicativi: LOGEMU si prende cura del salvataggio in locale, MYSQL di quello su di un database esterno.

Qualora, come consiglio, si adotti la strategia del database MYSQL è necessario in primo luogo creare il database (nell’esempio databaselog) sul server remoto ed in seconda battuta creare un tunnel ssh sicuro e criptato che permetta ai nostri dati di “viaggiare sicuri” fino a destinazione.

Cominciamo dal DATABASE. Accediamo a mysql sulla macchina remota:

$ mysql -uroot -ppassword-di-root mysql

Una volta autenticati digitiamo:

> CREATE DATABASE databaselog;
> use databaselog;
> source /usr/share/doc/ulogd-mysql/mysql.table
> GRANT ALL PRIVILEGES ON databaselog.* TO root@localhost IDENTIFIED BY 'password-di-root';
> FLUSH PRIVILEGES;
> quit;

Torniamo ad agire sul nostro apparecchio di rete equipaggiato con Openwrt. Per creare il tunneling ssh è necessario creare una chiave d’autenticazione pubblica ed una privata: copieremo la prima nel server esterno (quello su cui gira MYSQL), mentre la seconda risiederà sul nostro router.

dropbearkey -t rsa -f id_rsa

andrà a restituire a video qualcosa di simile a questo:

Will output 1024 bit rsa secret key to 'id_rsa'
Generating key, this may take a while...
Public key portion is:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgwCagAvA7/EdxINoRzHoIYDUf4sE24VZZG4N+VHFVDKDrekvCtKDkdmUnbyP8bZqLtH6rSFyLeI1qAeU/cREQcwhsnOTwxesfe1dvZthUnbSfQ9nm7MVRZCUPZO4lAQZ+tW2vFHaoSPE3fSYA3B+ObkygKP8CxzvOsmN4AHklXB0YbRD root@192.168.1.1
Fingerprint: md5 xx:xx:xx

Copiamo dunque la chiave pubblica appena generata in un file di testo che trasferiremo (via ftp, scp o semplicemente copiandolo a mezzo di una chiavetta usb) sul server esterno.

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgwCagAvA7/EdxINoRzHoIYDUf4sE24VZZG4N+VHFVDKDrekvCtKDkdmUnbyP8bZqLtH6rSFyLeI1qAeU/cREQcwhsnOTwxesfe1dvZthUnbSfQ9nm7MVRZCUPZO4lAQZ+tW2vFHaoSPE3fSYA3B+ObkygKP8CxzvOsmN4AHklXB0YbRD root@191.168.1.1

Sul SERVER REMOTO rinominiamo il file appena copiato in authorized_keys, copiamolo in

/home/UTENTE/.ssh

ed impostiamo i diritti d’accesso di tale file a 0600

chmod 0600 /home/UTENTE/.ssh/authorized_keys

Sul ROUTER faremo lo stesso per la chiave privata:

cat id_rsa > /etc/dropbear/dropbear_rsa_host_key
chmod 0600 /etc/dropbear/dropbear_rsa_host_key

Non ci resta che creare uno script che instauri il tunnel sicuro ad ogni avvio di Openwrt:

vi /etc/init.d/ssh_tunnel

ove incolleremo:

#!/bin/sh /etc/rc.common
# Lancio tunnel ssh al boot di sistema

START=55
STOP=65
PID_F=/var/run/dbclient.pid

start() {
        echo Lancio il tunnelling ssh
        dbclient -f -N -K 60 -L 3306:127.0.0.1:3306 -y -i /etc/dropbear/dropbear_rsa_host_key USERNAME@IP_SERVER_MYSQL
        sleep 5
        pgrep -f -n dbclient > $PID_F
                }

stop() 	{
       	echo Fermo il tunnelling ssh
        # commands to kill application
        # killall dbclient
        [ -f $PID_F ] && kill $(cat $PID_F)
                }

Assicurandoci di sostituire USERNAME@IP_SERVER_MYSQL con i dati della nostra macchina esterna.
Attiviamo lo script con:

/etc/init.d/ssh_tunnel enable

LOGROTATE: RUOTARE I FILE DI LOG ed EFFETTUARNE IL BACKUP
Importante quanto la tracciatura è la corretta rotazione dei files di log, che ci permetterà di catalogarli su base giornaliera. In particolare questa funzione è basilare per quanti abbiano scelto di sfruttare le potenzialità di LOGEMU (ULOGD e salvataggio in locale).

vi /etc/logrotate.d/ulogd

in cui inseriremo:

/mnt/log/ulogd.* {
daily
rotate 1
dateext
compress
missingok
create 640 root root
olddir /mnt/backup
postrotate
/etc/init.d/ulogd reload
endscript
 }

Questo farà si che i files di log testuali gestiti da LOGEMU e residenti in

/mnt/log/

vengano “immagazzinati” su base giornaliera e salvati nella cartella

/mnt/backup

Non ci resta che schedulare questa attività nonchè il backup dei file appena routati per mezzo di cron.Digitiamo:

crontab -e

e quindi incolliamo quanto segue:

## ROUTA I FILE OGNI GIORNO A MEZZANOTTE
0 0 * * * /usr/sbin/logrotate -s /mnt/lib/logrotate.status /etc/logrotate.conf >/dev/null 2>&1  ## RUOTA
## BACKUP FILE DI AUTENTICAZIONE OGNI GIORNO ALLE 5
0 5 * * * rsync -rltDz -e "ssh -i /etc/dropbear/dropbear_rsa_host_key" /mnt/log/radius USER@IP_SERVER_REMOTO:/cartella-backup/ >/dev/null 2>&1
## BACKUP LOG DI LOGEMU OGNI GIORNO ALLE 5.30
30 5 * * * rsync -rltDz -e "ssh -i /etc/dropbear/dropbear_rsa_host_key" /mnt/backup USER@IP_SERVER_REMOTO:/cartella-backup >/dev/null 2>&1

Anche in questo caso i commenti apposti al file dovrebbero essere autoesplicativi, ricordatevi solo di sostituire il percorso USER@IP_SERVER_REMOTO:/cartella-backup/ con quello di un server remoto esterno (nel mio esempio quello in cui risiede anche MYSQL).

Nella prossima ed ultima “puntata” imposteremo MONIT, un utilissimo strumento di monitoraggio della macchina e vi indicherò come creare ed attivare un file di swap su di una unità disco esterna.

Commenti

commenti


I commenti all'articolo

3 commenti for “[Howto] Hotspot in regola con la Pisanu (parte 3): logging e conservazione traffico, filtro p2p”

  1. [...] 2: Le configurazione di rete ed il radius server PARTE 3: Logging del traffico, backup e blocco del p2p PARTE 4: Il monitoraggio remoto e l’unità disco esterna [...]

    Commentato da Howto: Hotspot Wifi basato su Openwrt in regola con la Pisanu | Libera il VoIP | | agosto 26, 2009, 00:20 |
  2. [...] aver correttamente autenticato i nostri utenti, averne tracciato e limitato il traffico (niente p2p) e sincronizzato l’attività del router/access point  con un server remoto e [...]

    Commentato da [Howto] Hotspot in regola con la Pisanu (parte 4): monitoraggio remoto e swap file | Libera il VoIP | | agosto 28, 2009, 00:20 |

Lascia un commento

Devi essere autenticato per lasciare un commento.