Aggiunta del modulo ulog al kernel senza ricompilarlo tutto.
24 agosto 2002
PREMESSA
Tutto quanto descritto è stato provato su RedHat 7.1, 7.2 e 7.3.
Il firewall di linux dal kernel 2.4, netfilter, è interamente modulare, e
il team di netfilter sta aggiungendo nuove funzioni creando nuovi moduli.
Uno di questi moduli implementa una funzione chiamata ULOG (User Logging)
che permette di loggare l'attività del firewall anziché tramite syslog, come
fa la funzione LOG, inviando i dati in user space dove l'utente mette il
proprio sistema di raccolta dei log.
Ciò che descriverò è come aggiungere tale funzione al
firewall senza ricompilare per intero il kernel.
Attualmente RedHat fornisce per la versione 7.1 e 7.2 il kernel 2.4.9
mentre la 7.3 ha il 2.4.18.
Il team di netfilter implementa le aggiunte al firewall mediante un insieme
di patch chiamate "patch-o-matic". Alcune di queste patch sono state
incorporate nel kernel 2.4.18. Ciò spiega la precisazione fatta sopra.
Personalmente trovo comodo aggiornare il kernel via rpm.
COME HO FATTO
Sulla RH 7.1 e 7.2 come detto sopra la pach non c'è nel kernel, quindi
bisogna procurarsela. La patch-o-matic è inclusa nel pachetto iptables che è
possibile scaricare dal sito di netfilter (www.netfilter.org). Per mantenere
al massimo la compatibilità non ho usato l'ultima versione di iptables,
bensì quella già presente nel sistema. Sulla 7.1 e 7.2 c'è iptables 1.2.4
sulla 7.3 iptables 1.2.5.
Per poter applicare la patch è inoltre necessario avere i sorgenti del
kernel. Ho quindi installato l'rpm kernel-source sui sistemi. Va poi
aggiunto a mano il link linux in usr/src/ in quanto RedHat usa quello con la
versione (linux-2.4.x) che non è compatibile con l'installazione della patch.
La patch-o-matic può essere installata tutta intera, cioè tutti i moduli, ma
il team di netfilter lo sconsiglia vivamente (ci sono moduli in stato alpha)
oppure uno alla volta scegliendo quale interessa. Il comando che implementa
questa seconda modalità è make most-of-pom. Fra tutte le pach disponibili ho
aggiunto solo ULOG.
Fatto questo bisogna dire al kernel di includere il nuovo modulo, cosa che
si ottiene con il classico make config dalla directory del kernel source.
A questo punto andrebbe ricompilato il kernel, ma ho notato che eseguendo i
passi soliti alla fine ottengo un kernel che non ha solo il modulo che ho
aggiunto io, ma mancano moduli che uso e ce ne sono di quelli che non mi
servono. Detto in altre parole l'rpm kernel-source non include già la configurazione
uguale a quella fornita con l'rpm kernel già compilato.
Ho quindi cercato un sistema per compilare solo il modulo ULOG e
aggiungerlo al kernel.
E' ovvio che almeno il nuovo modulo vada ricompilato, ma non ho trovato il
modo di compilare solo un modulo. Però guardando dentro il file Makefile del
kernel ho visto che è possibile usare questo comando:
make modules SUBDIRS=/usr/src/linux/net/ipv4/netfilter
vengono così ricompilati solo i moduli presenti nella directory di netfilter.
A questo punto con make module-install si dovrebbero installare solo i moduli
appena compilati, ma non sono sicuro al 100%.
Però nel caso del modulo ULOG ho trovato un sistema a mio modo di vedere più
semplice.
Ho copiato il modulo ULOG insieme agli altri moduli di netfilter e ho
aggiunto a mano una dipendenza (nel file modules.dep) uguale a quella del modulo LOG. Infatti credo
che entrambi i moduli facciano più o meno lo stesso lavoro, cambia solo il
destinatario dei dati, nel caso di LOG vanno al demone syslogd nel caso di
ULOG vanno in user space, ma le cose al fine delle dipendenze non dovrebbero
cambiare.
Quanto descritto fino a qui funziona bene sia in RedHat 7.1 che 7.2.
Su RH 7.3 c'è una semplificazione in quanto come detto in premessa alcune
patch sono state incluse già nel kernel. Infatti nel sorgente del 2.4.18 il
modulo ULOG c'è, anche se RedHat ha deciso di non compilarlo nel kernel che
distribuisce.
Quindi sui sistemi RH 7.3 il processo parte dal make config sul kernel per
abilitare il modulo e poi la compilazione e l'installazione del modulo
procedono allo stesso modo.
CONCLUSIONI
Quali sono i vantaggi di utilizzare il modulo ULOG. Avendo a disposizione i
record di log in user space è ovvio che le possibilità diventano molte, ma
il team di netfilter ha provveduto a creare anche un demone ulogd che
raccoglie i record e li mette su file in 3 formati diversi oppure li passa a
mysql e nell'ultima versione anche a PostgreSQL.
Ho trovato comodo implementare la versione che scrive in mysql dato che non è poi difficile
trovare tools o scrivere semplici pagine in php che facciano statistiche sui dati raccolti.
|