LeoBenelli
|
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. |
||
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