Configurazione Kernel Linux per il firewalling

Per far si che il nostro linux funga da firewall, dovremo compilare il kernel abilitando il netfiltering e alcune sue features a seconda dello scopo e del tipo di traffico che dovra' filtrare.
Come la maggior parte delle features del kernel linux si ha la possibilita' di selezionarle come moduli oppure compilarli all'interno del kernel se si preferisce un kernel monolitico.

Di seguito vengono messe in evidenza le piu' importanti opzioni da considerare nella fase di configurazione del kernel per attivare e gestire il packet filtering:

CONFIG_PACKET
Permette a varie applicazione ed utility di lavorare direttamente sui device di rete
CONFIG_NETFILTER
DA ABILITARE!! Di fatto e' l'opzione base che vi permettera' anche di accedere al menu delle singole opzioni di iptables
CONFIG_IP_NF_CONNTRACK
Modulo che permette il tracking delle connessioni, utilizzato per il NAT e masquerading
CONFIG_IP_NF_FTP
Modulo che permette il tracking delle connessioni FTP, utile se volete fare firewall perimetrale o di contenimento che devono gestire anche traffico ftp. Bene o male FTP si utilizza ovunque, direi DA ABILITARE.

CONFIG_IP_NF_IPTABLES
DA ABILITARE!! Opzione che permette qualsiasi tipo di filtering, NAT e masquerading. Praticamento e' il core delle iptables
CONFIG_IP_NF_MATCH_LIMIT
Opzione non obbligatoria, ma permette di fare filtering sulle connessioni, stabilendo che un certo numero di pacchetti in un certo limite di tempo devono matchare alcune regole. Utile per difendersi da attacchi DoS
CONFIG_IP_NF_MATCH_MAC
Opzione che permette l'utilizzo del MAC address per il matching delle regole. Comodo se si hanno poche macchine da gestire, ma sarete pesantemente dipendenti dall'hardware che utilizzerete
CONFIG_IP_NF_MATCH_MARK
Abilita la possibilita' di fare il matching tramite il MARK dei pacchetti.
CONFIG_IP_NF_MATCH_MULTIPORT
Permette di filtrare le connessioni specificando un range di sorce port e destination port. DA ABILITARE
CONFIG_IP_NF_MATCH_TOS
Permette il filetring tramite TOS (Type of Service). ONLY FOR EXPERT
CONFIG_IP_NF_MATCH_TCPMSS
Abilita' la possibilita del matching del MSS field. ONLY FOR EXPERT
CONFIG_IP_NF_MATCH_STATE
Permette il stateful matching delle connessioni. DA ABILITARE !!
CONFIG_IP_NF_MATCH_UNCLEAN
Opzione che permette di filtrare il traffico TCP,UDP,ICMP che sono considerati invalidi. DA ABILITARE, ma ricordarsi che non funziona del tutto corettamente in tutti i casi
CONFIG_IP_NF_MATCH_OWNER
Ci permette di filtrare le socket, abilitando un'utente specifico per aprire un certo tipo di socket. E' ANCORA IN FASE DI SVILUPPO
CONFIG_IP_NF_FILTER
Modulo base per il packet filetering. DA AGGIUNGERE!!
CONFIG_IP_NF_TARGET_REJECT
Modulo che permette di specificare che i messagi di ICMP error di essere inviati alla sorgente
CONFIG_IP_NF_TARGET_MIRROR
Abilita il bounced back (rimbalzati indietro) dei pacchetti al sender. ES. se si decide di mettere un MIRROR target sulle porte di destinazione di HTTP (80), tutte le richieste verranno replicate al sender e poi seguite dai pacchetti contenenti le informazioni per visualizzare la pagina
CONFIG_IP_NF_NAT
Modulo che abilita il NAT, Port forwarding e masquerading. DA ABILIATRE se si vuole translare gli ip sorgente o di destinazione
CONFIG_IP_NF_TARGET_MASQUERADE
Modulo che permette di aggiungere il TARGET per il masquerading. DA ABILITARE, se si vuole fare masquerading.
CONFIG_IP_NF_TARGET_REDIRECT
Opzione che permette che vi permette di far funzionare il vostro firewall come se fosse un transparent proxy
CONFIG_IP_NF_TARGET_LOG
Permette la possibilita' di loggare i packetti. DA ABILITARE, anche se quello che si logga dipende dalle vostre regole. Se decidete di abilitare questa opzione e di loggare in syslog, utilizzate tools per avere un report del entry registrate nel log sia per rendere la lettura dei log piu' comprensibile sia per la possibilita' di mantenere una history
CONFIG_IP_NF_TARGET_TCPMSS
Questa opzione viene utilizzata per ovviare a vari problemi con host o ISP che bloccano i pacchetti che richiedono l'ICMP Fragmentation.
CONFIG_IP_NF_COMPAT_IPCHAINS
Abilita la compatibilita' con le vecchie IPCHAINS. DA ABILIATRE solo in caso di bisogno
CONFIG_IP_NF_COMPAT_IPFWADM
Abilita la compatibilita' con le vecchie IPCHAINS. DA ABILIATRE solo in caso di bisogno

Esistono altri parametri configurabili in run-time ovvero dopo che il kernel e' stato caricato e il sistema è in funzione.
Si hanno piu' possibilita' per modificare questi parametri, quello piu' corretto e' quello di modificare i vari parametri editando /etc/sysctl.conf oppure usare il comando sysctl o scrivendo direttamente i valori voluti nel proc filesystem.
Questa operazione viene normalmente eseguita tramite script lanciati al boot della macchina.

Segue un elenco delle principali opzioni modificabili in modalita' run-time per quanto riguarda il network, ovviamente nel dubbio è meglio lasciare i valori di default, salvo quelli strettamente necessari per un firewall (ip_forward).
I valori che si possono assumere sono di tipo:
- BOOLEAN = 0 (disabilita) e 1(abilita)
- INTEGER = N , dove N e' un mumero intero Es 64
- N INTEGERS = X Y Z , N indica il numero dei valori(interi) da inserire, e X Y Z i valori che acquisisce la variabile

Tutte le variabili fanno riferimento a /proc/sys/net/ipv4/*:
ip_forward BOOLEAN - Permette il forwarding dei pacchetti fra le interfacce. DA ABILITARE.
ipfrag_high_thresh INTEGER - La massima memoria utilizzata per riassemblare i pacchetti IP frammentati. Quando questo valore verra' raggiunto, i pacchetti in surplus verranno scartati finche' non si raggiungera' di nuovo il valore settato in ip_frag_low_thresh
ipfrag_time INTEGER - Indica il tempo max in secondi per mantenere in memoria un "IP fragment"
tcp_syn_retries INTEGER - Indica il numero di volte che un SYN deve essere ritrasmesso per i tentativi di una connessione TCP attiva (non puo' essere piu' grande di 255)
tcp_synack_retries INTEGER - Indica il numero delle volte che un SYNACK deve essere ritrasmesso per i tentavi di connessioni TCP passive (non puo' essere piu' grande di 255)
tcp_keepalive_time INTEGER - Indica quanto spesso verra' inviato il messaggio TCP di keepalive. Default 2hdsfsfds
tcp_keepalive_probes INTEGER -  Indica quanti pacchetti Keepalive probes verranno inviati, finche' la connessione verra' considerata definitivamente broken
tcp_keepalive_interval INTEGER - Indica quanto frequentemente i pacchetti di probe sono inviati. Moltiplicando per tcp_keepalive_probes si ottiene il tempo per il KILL di una connessione che non risponde ai pacchetti di probes.
tcp_retries1 INTEGER - Indica il numero di tentativi/richieste prima che venga segnalato al network layer che sulla connessione c'e' qualcosa che non va.
tcp_retries2 INTEGER - Indica il numero di tentativi/richieste prima di killare una sessione TCP attiva
tcp_orphan_retries INTEGER - Indica il numero dei tentativi/richieste prima che una connessione TCP venga killata
tcp_fin_timeout INTEGER - Indica il tempo per cui mantenere una socket nello status di FIN-WAIT-2
tcp_max_tw_buckets INTEGER - Indica il numero massimo di socket simultanee in timewait che mantiene il sistema
tcp_max_orphans INTEGER - Numero massimo di socket TCP che possono rimanere non collegati a file handle aperti dal sistema.
tcp_abort_on_overflow BOOLEAN - Permette il reset di una connessione se un servizio in listening e' troppo lento per rispondere.
tcp_sysncookies BOOLEAN - Opzione valida solo se il kernel e' stato compilato con il supporto dei SYNCOOKIES, previene possibili "syn flood attack"
tcp_timestamps BOOLEAN - Abilita o disabilita il timestamp
tcp_ecn BOOLEAN - Abilita o disabilta  la notificazione di una possibile congestione della network
ip_local_port_range 2 INTEGERS - Desinisce il range delle porte locali, utilizzate  dal  protocollo TCP e UDP. Il primo numero indica la porta piu' bassa ed il secondo indica la porta piu' alta. Il valore di default dipende dal quantitativo di ram disponibile sul sistema
ip_dynaddr BOOLEAN  - Se settato non a zero abilita il supporto per il dynamic addresses
icmp_echo_ignore_all BOOLEAN - Ignora i Ping (ICMP ECHO Request)
icmp_echo_ignore_broadcasts BOOLEAN -  Se settati entrambi il sistema ignora gli ICMP ECHO solo verso indirizzi di broadcast/multicast
log_martians BOOLEAN - Logga i pacchetti con indirizzi impossibili.
accept_redirects BOOLEAN - Accetta o meno gli ICMP redirect
forwarding BOOLEAN -  Abilita il forwarding per una specifica interfaccia
proxy_arp BOOLEAN - Abilita il proxy arp.
secure_redirects BOOLEAN - Accetta ICMP redirect message solo dai gw configurati.
La modifica di alcuni parametri potrebbe pregiudicare il buon funzionamento del sistema, ma può essere necessaria per il fine tuning di sistemi sotto particolari carichi di rete.
Per maggiori informazioni e indicazioni utili sui parametri raccomandabili fare riferimento direttamente al file Documentation/networking/ip-sysctl.txt nel tarball del kernel.

Privacy Policy