Newsgroup: it.comp.os.unix
Titolo: Firewall di FreeBSD

Ciao a tutti :)
Ebbene ci ho provato, e' una settimana che sto facendo girare una FreeBSD
4.7, e a parte dei piccoli problemini, sta funzionando tutto abbastanza
bene, quindi scusatemi se pongo una domanda stupida.
Sto giochicchiando con ipfw, ho letto (non ancora in modo approfondito)
il manuale e ho letto la sezione dell' handbook che lo riguarda ma
evidentemente non ho afferrato alcuni concetti.
Ho queste regole:
${fire} add 100 pass all from any to any via lo0
${fire} add 200 deny all from any to 
127.0.0.0/8
${fire} add 300 deny all from 
127.0.0.0/8
 to any
Dalla mie esperienza con iptables queste dovrebbero far passare tutti i
pacchetti sulla loopback (100), dei restanti pacchetti che non arrivano
dalla lo0 scarta quelli che hanno come source o destination 127.0.0.1 .
Bene, io pensavo che le regole 200 e 300 fossero solo a scopo formale o
per prevenire un malfunzionamento di routing della mia macchina, invece mi
sbaglio, se non commento la regola 300 non posso navigare :-/
Perche' secondo voi, c'e' qualche falla nel modo che ho di ragionare?
Un' altra cosa, vorrei un comportamento stateful del firewall, in altre
parole non accettare le richieste di connessione dall' esterno, ma
lasciare passare tutti i pacchetti di connessioni gia' esistenti.
Ho dei problemi con questa regola:
${fire} add pass all from any to any established
(questa non la carica perche' non riconosce "established")
${fire} add check-state
${fire} add pass tcp from ${NET}:${MASK} to any setup keep-state
${fire} add pass udp from ${EXTIP} to any dst-port 53 keep-state
(qui sembra essere sbagliato dst-port ma probabilmente e' un problema di
sintassi)
Ovviamente alla fine c'e' un default deny.
Secondo voi potrebbe funzionare? mi interessa piu' un commento sulla
politica del firewall che sulla singola regola (anche se sono stato io a
mettere le regole specifiche che ho messo :-P )
Grazie a tutti dell' attenzione.
TIA
-- 
The fish doesn't think ,
cause the fish knows everything
	>>>:/OuZ\:<<<
per rispondermi in mail rimuovere TOGLIQUESTO

 mettere le regole specifiche che ho messo :-P )
E' un po' poco quello che ci hai scritto, per poter valutare l'intera
politica...
 bye
	av.

 politica...
Forse hai ragione, ma quello che vorrei fare mi sembra abbastanza
semplice:
-1- Non accetto nessun tentativo di connessione dall' esterno
-2- Accetto ogni risposta a connessioni instaurate da me
Tutto questo, se possibile sia da tcp che da udp. Solo dopo che
funzionara' la base stateful del mio firewall provvedero' a aggiungere
altre funzionalita' piu' specifiche.
Comunque grazie mille della tua risposta :)


 
piu' o meno questo e' quanto ti serve
##### regole stateful  #####
1000 add check-state
###### questa regola e' abbastanza severa (man ipfw) #####
2000 add deny tcp from any to any in established
###### queste sono le regole che alimentano la tabella di stato #####
3000 add allow tcp from any to any out via $EXTINTERFACE setup keep-state
4000 add allow udp from any to any out via $EXTINTERFACE keep-state
Per effettuare il tuning basta loggare le regole.
Ciao

 4000 add allow udp from any to any out via $EXTINTERFACE keep-state
Ok, grazie mille dell' esempio, che vale piu' di mille parole.
Con tcp sembra funzionare tutto, sia dalla lan che dal firewall (a parte la
regola con established deny che non mi fa proseguire con le connessioni ssh
in lan gia' aperte, ma questo penso di risolverlo tranquillamente).
Con udp ho dei problemi. Ti spiego la mia situazione: in questo momento sul
firewall c'e' anche un server bind, quindi solo il firewall (l'indirizzo
pubblico) deve poter uscire con pacchetti udp destinati ai vari server DNS. 
Questo e' il mio ip pubblico in questo momento
EXTIP=$(ifconfig | grep "\-\->" | awk '{print $2}') [1]
e questa e' la regola incriminata
${fire} add pass udp from ${EXTIP} to any out via $EXTIF keep-state
(poi chiaramente permetto ai pacchetti udp di circolare sulla lan, ma il
problema e' all'esterno)
Nei log trovo una sfilza di:
ipfw: 1200 Deny UDP 
62.98.8.177:3541
 
192.26.92.34:53
 out via tun0
ipfw: 1200 Deny UDP 
62.98.8.177:3541
 
192.106.1.31:53
 out via tun0
e cosi' via.
Queste sembrano pacchetti (negati) dall'IP 62.98.8.177 a un DNS esterno. 
E sembra che le richieste non escano neanche dalla mia macchina, ovvio
direte voi, proprio quello che dicono i log; si, peccato che pero'
62.98.8.177 *non* sia il mio indirizzo IP che vedo mostrato con ifconfig... 
Avendo paura di aver sbagliato il comando con cui calcolo l'IP ho provato a
sostituire a $EXTIP quel fantomatico 62.98.8.177, ma a questo punto nei log
mi trovo che il mio indirizzo esterno non e' abilitato a far uscire
pacchetti (giustamente!).
Un'informazione ulteriore e' che 62.98.8.177 e' presente nei miei log da piu'
giorni anche se ho un abbonamento dial-up e 62.98.8.177 e' pure esso un ip
dial-up sempre di inwind come il mio.
Grazie mille dall'aiuto :)
[1] Lo so che fa abbastanza schifo ma sembra funzioni correttamente...


 ipfw: 1200 Deny UDP 
62.98.8.177:3541
 
192.106.1.31:53
 out via tun0
spiacente, non conosco la tua rete ne' la tua configurazione di bind,
ipotizzo sia in ascolto sulla 53 di qualche ip, quindi dovresti
permettergli esplicitamente di ricevere pacchetti es.
**** allow udp from any to me 53 in via tun0.
Ciao

 **** allow udp from any to me 53 in via tun0.
No, scherzi? ;-) Non ho un server bind pubblico, ma solo per la mia lan.
Scusa se mi ero spiegato male ma io non voglio (ne bind puo') ricevere
pacchetti sulla 53, invio all'esterno pacchetti destinati alla 53 quello si.
Il problema delle righe dei log precedenti e' che 62.98.8.177 non sono io (e
questa e' la cosa che piu' mi stupisce) e quei 192 di destinazione
dovrebbero essere dei root server DNS.



Semplificati la vita e metti prima delle regole stateful
**** allow udp from any to $DNSSERVER 53 out via tun0
**** allow udp from $DNSSERVER 53 to any $PORTSOPEN in via tun0
dove DNSSERVER=any o IpAddressDiUnServerDNS
e
PORTSOPEN= "" o RangeDiPorte
Ti restano fuori le risposte TCP dei DNS, ma il piu'
dovrebbe funzionare.
Ciao
--------------------------------
Inviato via 
http://usenet.libero.it

 perche' pensi sia sbagliato?
E' un problema di sintassi. Ho detto togli "dst-port" perche' e' di
troppo, lascia 53 che e' la dst-port. Non so se spiego il gioco delle
virgolette :)
 bye
	av.

 **** allow udp from $DNSSERVER 53 to any $PORTSOPEN in via tun0
Innanzitutto grazie della disponibilita', sei stato molto gentile.
Quello che mi hai indicato sarebbe si una soluzione al problema pero' mi
lascerebbe ancora dubbio su come si comporta ipfw.
Ho una discreta esperienza con iptables e nei log mi aspetto di trovare solo
pacchetti che hanno il mio indirizzo ip o nel campo sorgente o nella
destinazione (a parte il multicast).
Che senso ha:
ipfw: 1200 Deny UDP 
62.98.8.177:3541
 
192.26.92.34:53
 out via tun0
dove 62.98.8.177 *non* sono io?
Grazie.
-- 
Sono un servitore del Fuoco Segreto, e reggo la fiamma di Anor.
A nulla ti servira' il fuoco oscuro, fiamma di Udun.
Torna nell'Ombra! Non puoi passare.

 dove 62.98.8.177 *non* sono io?
La butto li'...
l'indirizzo dinamico della connessione precedente mantenuto in memoria e
ricavato dal tuo script prima che te ne venga assegnato uno nuovo?
Ciao

 virgolette :)
Hai ragione, non ti avevo capito, grazie :)


Il giorno Tue, 04 Mar 2003 00:44:08 GMT, credendo di passare inosservato, Gadaido disse


ANch'io ci avevo pensato ma non dovrebbe essere cosi' visto che lo script
che calcola il mio indirizzo ip viene chiamato da /etc/ppp/ppp.linkup appena
dopo la connessione e' rimasta su...
Inoltre per trovare il mio ip faccio un'ifconfig al momento,non lo tengo in
memoria in un qualche file.
Onestamente e' la prima volta che mi capita qualcosa del genere e non so
neanche che tipo di spiegazione dargli :-/
Ti ringrazio comunque per la risposta.


 ricavato dal tuo script prima che te ne venga assegnato uno nuovo?
Alla fine ci eri molto vicino ed ero io a non accorgermi, beh, meglio tardi
che mai no? ;-)
il problema non era nel come calcolavo l'ip al momento ma il fatto che non
rilanciavo natd una volta ottenuta la connessione quindi il nat continuava a
mascherarmi con l'indirizzo che mi era stato assegnato un paio di settimane
fa...
Beh, se andavo avanti un altro paio di settimane magari mi sarebbe tornato
l'indirizzo iniziale... sono stato un po' stupido :-P
Grazie di tutte le risposte che mi avete dato,
Ciao
