LeoBenelli
Personal WebPage


FIREWALL/MASQUERADING/IPCHAINS

 

La possibilita' di filtro e' direttamente mplementata nel Kernel, e' pero' necessario attivare nella sua configurazione le opzioni :
Network Firewalls
IP: Firewalling
IP: always defragment
IP: transparent proxy support
IP: masquerading
IP: ICMP masquerading
L'attraversamento dei pacchetti tra un'interfaccia e l'altra e' controllato dalla funzione di Forwarding-gatewaying, con i Kernel precedenti era necessario agire direttamente nel Kernel, mentre con i 2.2.* > e' possibile attivare la funzionalita' attraverso :


echo 1 > /proc/sys/net/ipv4/ip_forward


I filtri applicabili ai pacchetti sono gestiti da Ipchains con il quale e' possibile impostare le condizioni per l'ingresso input), il passaggio (forward), e l'uscita (output) dei pacchetti. Non ci sono file di configurazione ma e' necessario lanciare il comando ipchains piu' volte per impostare le varie regole, l'ordine di immissione influenza le regole di filtro, la sintassi e' :

ipchains opzione filtro <regola> <obiettivo>

 

Le opzioni possono essere :

 

 

 

Opzione

Descrizione

-F

Elimina tutte le regole del filtro specificato

-D posizione

Elimina una o piu' regole dal filtro.

-A

Aggiunge una regola in coda a quelle del filtro selezionato.

-I posizione

Inserisce una regola in una posizione stabilita del filtro

-R posizione

Sostituisce una regola dal filtro.

-L

Lista le regole.

-P

Cambia la politica predefinita del filtro.

-v

Visualizza piu' informazioni.

-n

Lascia gli indirizzi in formato numerico invece di convertirli in nomi dal DNS.

-p [!] tcp | udp | icmp | all

Stabilisce il protocollo, usando il ! Si esegue l'operatore NOT.

-l

Annota nel log tutti i pacchetti che soddisfano la regola (in /var/log/messages)

-i [!] interfaccia

Stabilisce l'interfaccia per la regola

-j obiettivo

Opzione usata nella dichiarazione di un obiettivo

-s [!] indirizzo/Mask [!][porta] [!][tipo]

Imposta una regola secondo la sorgente del pacchetto il mask puo' essere 0,8,16,24,32 a seconda se considerare tutto l'indirizzo come di rete, oppure di classe A,B,C o indirizzo di Host.
La porta puo' essere un numero, un range con la sintassi [porta iniziale]:[porta finale] (se un elemento non specificato si intende 0 o 65535); e' possibile usare anche i nomi della porte secondo lo schema in /etc/services.
Nel caso di filtro di pacchetti ICMP al posto della porta c'e' la possibilita' di filtrare per tipo, cioe' per codice relativo alla tipologia del pacchetto, secondo la seguente tabella

Codice

Nome

Chi lo utilizza

0

Echo-reply

ping

3

Destination-unreachable

Traffico TCP/UDP

5

redirect

Instradamento dei pacchetti

8

Echo-request

ping

11

Time-exceeded

traceroute

-d [!] indirizzo/Mask [!][porta] [!][tipo]

Imposta una regola secondo la destinazione del pacchetto per il mask e per le porte e pacchetti ICMP valgono le regole per l'opzione -s

I filtri possono essere :

 

 

 

filtro

Descrizione

input

Filtro di ingresso pacchetti

Forward

Filtro di passaggio pacchetti

output

Filtro di uscita pacchetti

Per obiettivi si intendono le sorti del pacchetto in base ad una regola stabilita e possono essere :

 

 

 

Obiettivo

Descrizione

ACCEPT

Permette il passaggio del pacchetto

DENY

Nega il passaggio senza avvertire la sorgente del messaggio.

REJECT

Rifiuta il pacchetto, notificando all'origine com un messaggio ICMP l'evento.

MASQ

Permette il masquerading degli indirizzi ip della rete verso l'esterno del firewall.

REDIRECT

Redirige le richieste ad una porta su un'altra, usato per abilitare il Transparent proxy

 

 

 

 

 

 

 

 

 

 

 

 

 

Per modificare le policy predefinite occorre eseguire ad esempio :
ipchains -P input DENY (nega i diritti di ingresso dei pacchetti)
Per visualizzare la situazione dei filtri impostati :
ipchains -L (visualizza tutti i filtri)
ipchains -L input (visualizza solo i filtri di input)
Per gestire le regole si puo' usare la seguente sintassi di esempio :
ipchains -A output -p tcp -s ! 192.168.0.1/32 80 -d 0/0 -l -j DENY (accoda la regola per gli indirizzi sorgenti diversi da 192.168.0.1 provenienti dalla porta 80 e diretta a tutti gli indirizzi, e nega l'uscita, memorizzando il blocco nel file di log)
ipchains -I output 2 .....(inserisce nella posizione 2 la regola ....)
ipchains -R output 2 .....(inserisce la regola nella posizione 2 con la nuova regola ....)
ipchains -D output 2 (cancella la regola nella posizione 2)

 

Tramite ipchains e' possibile gestire il mascheramento di una rete interna, cioe' permette ai client di accedere all'esterno del firewall non con il proprio indirizzo IP ma con quello dell'interfaccia del firewall rivolta verso l'esterno, questo si ottiene sempre tramite l'utilizzo di ipchains tramite l'obiettivo MASQ che agisce sui pacchetti in inoltro (forward) :
ipchains -A forward -s indirizzi_da_mascherare -d 0/0 -l -j MASQ
ipchains -A forward -s indirizzi_da_mascherare -d !indirizzi_da_mascherare -j MASQ
Se si desidera evitare che anche dall'esterno verso l'interno si abbia il mascheramento dell'IP (molto pericoloso per la sicurezza) e' possibile bloccare il traffico di inoltro dall'esterno verso l'interno modificando la politica predefinita in DENY.
ipchains -P forward DENY

 

Ipchains permette anche la redirezione delle richieste inviate ad una porta su un'altra, per avere abilitare la funzionalita' di transparent proxy, senza che le postazioni debbano essere configurate, cio' permette di permettere l'accesso alla rete esterna facendo passare forzatamente le richieste da un proxy server (Squid, Apache, ecc...) per limitare il carico della rete e per avere una maggiore sicurezza.
Per abilitare cio' si usa l'obiettivo REDIRECT
Ipchains -A input -p tcp -s 192.168.0.0/24 -d ! 192.168.0.0/24 80 -l -j REDIRECT 3128 ( in questo modo si redirigono tutte le richieste tcp verso la rete esterna alla porta 3128, cio' permette al demone squid in funzione di intercettare la richiesta, senza che i client siano configurati per usare il proxy.
A seconda del server proxy attivo sara' probabilmente necessario attivare alcune funzioni nella configurazione degli stessi :
Per Apache non ci sara' probabilmente da fare niente
Per Squid sara' necessario attivare le direttive nel file di configurazione /etc/squid.conf :
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on