Prima di ricompilare, è bene fare una precisazione. Il ``netfilter'' code del kernel di linux, ovvero la parte di kernel che si occupa di fare da firewall, è realizzato e rilasciato da un gruppo indipendente da quello che prettamente si occupa del kernel di linux. Capita quindi spesso che persino l'ultimissima release del kernel di linux sia rimasta indietro rispetto all'ultima versione del codice di filtraggio (il netfilter).
Considerando poi che molto velocemente vengono rilasciati bug fix e nuove funzioni vengono introdotte, una delle cose più importanti da fare è aggiornare iptables ed il kernel all'ultimissima versione, stando attenti però a mantenerli in sincronia. Per fare questo, il gruppo di sviluppo del netfilter ha messo a disposizione uno strumento estremamente potente quanto facile da usare: il patch-o-matic.
Col passare del tempo, però, questo strumento si è evoluto e modificato. Per cui, a secondo della versione di iptables che vorrete installare, dovrete seguire due percorsi diversi. In particolare, se i sorgenti di iptables che avete scaricato sono della versione 1.2.6 o minore, seguite le istruzioni indicate nella sezione ``iptables 1.2.6'', altrimenti seguite quelle indicate nella sezione ``iptables 1.2.7a''.
Entrate quindi nella directory dei sorgenti di iptables, collegatevi ad internet ed iniziate dando un comando come:
# make pending-patches KERNEL-DIR=path_assoluto/delvostrokernel
A questo punto, un'interfaccia a menù vi guiderà nell'aggiornamento del
vostro kernel. Attenzione che è meglio (a volte indispensabile) specificare un path assoluto per
il proprio kernel. In pratica, usate qualcosa come /usr/src/linux anziché
../linux o /src/linux.
Questo comando applicherà sia al kernel che ai vostri sorgenti di iptables tutte quelle patch che sarebbero dovute essere applicate prima del rilascio del kernel ufficiale, ma che per motivi vari non hanno fatto in tempo ad essere inserite (normalmente, si tratta di correzione di bug o piccole modifiche realizzate dopo il rilascio del kernel). Se state utilizzando i sorgenti del kernel della vostra distribuzione preferita, non dovreste preoccuparvi più di tanto. Il patch-o-matic è infatti in grado di capire da solo quali aggiornamenti sono già stati applicati e di evitare la maggior parte dei problemi.
Dopo questo primo passo, nel caso vi sentiste particolarmente coraggiosi ed inebriati dal successo appena ottenuto, potreste voler proseguire con un
# make most-of-pom KERNEL-DIR=path_assoluto/delvostrokernel
Come prima, apparirà un'interfaccia a menù che vi guiderà
nell'aggiornamento dei vari sorgenti. A differenza di prima, però,
questo comando tenterà di installare anche le estensioni che ancora non
sono parte del kernel o classificate sperimentali. Tra queste, ce ne
sono parecchie che la maggior parte delle distribuzioni includono
perché ormai abbastanza testate, o che comunque saranno incluse nelle
prossime versioni del kernel... c'è sempre un sacco di materiale interessante
che spesso vale la pena di installare. Alcune funzioni poi, vi
torneranno utili dopo, magari se vorrete dilettarvi con firewall
trasparenti o imponendo limiti per orari o
sul numero di connessioni parallele o ancora buttando via casualmente
i pacchetti delle persone che più vi stanno antipatiche.
Non preoccupatevi poi se avete paura di applicare patch incompatibili o troppo instabili: most-of-pom è fatto in modo da evitarvi simili errori. In pratica, cercherà di evitere che vi facciate male da soli.
Se invece vi sentite ancor più coraggiosi e tutte le ultime feature del netfilter vi piacciono veramente tanto, potete provare un
# make patch-o-matic KERNEL-DIR=path_assoluto/delvostrokernel
che invece vi metterà a disposizione tutte le nuove feature, dalle
più inoffensive a quelle più pericolose, dalle più testate a quelle
più instabili, comprese quelle incompatibili tra di loro. In questo
caso, starà alla vostra abilità ottenere qualcosa di funzionante.
Ok, in questo caso, dovrete avere a disposizione sia i sorgenti di iptables, sia i sorgenti del patch-o-matic. Dall'1.2.7 in poi, infatti, i sorgenti del patch-o-matic vengono distribuiti indipendentemente dal codice di iptables.
Ipotizzando di aver decompresso tutto in /usr/src, dovrete iniziare entrando nella directory del patch o matic, ovvero
# cd patch-o-matic-xxxxxxxx
dove le 8 x non sono altro che la data di rilascio del patch-o-matic.
Da qui, vi dovrebbe bastare eseguire:
# ./runme pending KERNEL_DIR=/path/assoluto/del/kernel
dove ``/path/assoluto/del/kernel'' è il path dove avete decompresso
il kernel, per esempio ``/usr/src/kernel-source-2.4.19''. In questo caso,
il ``pending'' sta ad indicare che volete installare tutte quelle patch
che sarebbero dovute essere state inserite prima del rilascio del kernel
ma che per un motivo o per l'altro non sono state applicate.
Come per iptlables 1.2.6, i coraggiosi potrebbero voler riprovare ad eseguire il comando di prima sostituendo a ``pending'' un ``base'' e poi un ``extra''.
Il ``base'' vi proporrà l'installazione di quelle patch addizionali che dovrebbero lavorare bene insieme e che comunque si sono dimostrate abbastanza stabili. Al contrario, un ``extra'' vi proporrà l'installazione di tutte le patch disponibili, anche di quelle che potrebbero causare problemi. Fra queste, alcune possono essere particolarmente utili, come il supporto per l'h323 o per protocolli o filtri un po' esotici, come lo ``string'' o l'``iplimit''. In ogni caso, vi verrà presentata una simpatica e semplice da utilizzare interfaccia a menù.
Il pacchetto Debian per iptables 1.2.7 è strutturato in modo che nella directory upstream vi siano alcuni file di documentazione ed i sorgenti originali di iptables (in formato tar.bz2), mentre nella directory debian vi siano i file necessari per ricompilare iptables.
Automaticamente quindi, il processo di compilazione (avviato utilizzando il solito ``debuild'' o ``dpkg-buildpackage'')si occuperà di prendere i sorgenti del kernel indicati nel file debian/control (campo Depends, che dovranno già essere installati sul sistema), decomprimerli e patcharli con il patch-o-matic contenuto nella directory ``upstream'' ed utilizzando tutte le patch elencate nel file ``patch-o-matic.accepted.list''.
Alla fine del processo di compilazione, dovreste quindi trovarvi con i nuovi pacchetti .deb per iptables ed un nuovo .tar.bz2 contenente i sorgenti del kernel patchati in automatico da ``debuild''. A questo punto, dovrete rimuovere i sorgenti precedentemente decompressi in /usr/src ed utilizzare quelli appena generati dal processo di compilazione di iptables, proseguendo poi con il processo di compilazione standard del kernel.
Se invece volete personalizzare il processo di compilazione, dovrete:
# perl -pi -e s/kernel-source-2.4.19/kernel-source-2.4.20/g `find ./ -type -f`
per utilizzare i sorgenti del 2.4.20 anziché quelli del 2.4.19.
Questo comando, semplicemente, sostituisce in ogni file della directory
la stringa ``kernel-source-2.4.19'' con la stringa ``kernel-source-2.4.20''.
Abbiate fiducia, la stringa ``kernel-source-2.4.19'' appare solo dove
viene utilizzata per decomprimere i sorgenti del kernel.
# perl -pi -e s/patch-o-matic-20020825/patch-o-matic-20030220/g `find ./ -type -f`
per utilizzare la versione 20030220 al posto della versione 20020825.In questi casi, la soluzione migliore potrebbe essere quella di aspettare la nuova versione del pacchetto.
Comunqe, per compilare i sorgenti, dovrete ancora una volta utilizzare ``debuild'' o ``dpkg-buildpackage'', ricordandovi di utilizzare la nuova versione del kernel che verrà generata sotto forma di .tar.bz2 dal processo di compilazione di iptables.
Ok, adesso avete l'ultimissima versione del netfilter e di iptables. Se state però configurando un firewall ad uso provider, reti di grosse/medie dimensioni o se avete intenzione di installarlo in posti particolarmente selvaggi con un minimo di banda a disposizione (non vale la pena se avete solo una ADSL o poco di più...), potreste voler essere in grado di effettuare dello shaping. Alcune tra le patch più famose per lo shaping sono:
Comunque sia, per queste e tutte le altre patch che vorrete applicare sul codice di filtraggio o di shaping, la procedura generica è questa:
# patch -p1 < path/file_del_kernel_patch.diff
# patch -p1 < path/file_di_iptables_o_iproute_patch.diff