Newsgroup: it.comp.sicurezza.varie
Titolo: iptables e masquerading

rusty russel ha detto che ipchains era troppo complicato.
avevo ipchains, e per mascherare la rete dietro il gateway collegato a
internet facevo:
#maschero
ipchains -A forward -s 
192.168.0.0/24
 -j MASQ
#apro le porte necessarie al masquerading
ipchains -A output -i ppp0 -p tcp -s 
100.100.100.100/32
 61000:65095 -j
ACCEPT
ipchains -A input -i ppp0 -p tcp -d 
100.100.100.100/32
 61000:65095 -j
ACCEPT
ipchains -A output -i ppp0 -p udp -s 
100.100.100.100/32
 61000:65095 -j
ACCEPT
ipchains -A input -i ppp0 -p udp -d 
100.100.100.100/32
 61000:65095 -j
ACCEPT
leggo il nat-howto e il packet filtering howto e sostituisco le
precedenti con:
iptables -t nat -A POSTROUTING -o ppp0 -s 
100.100.100.100/32
 -j
MASQUERADE
e tutto funziona. fino a che... non decido che:
iptables -P FORWARD DROP
ovviamente c'e' anche:
iptables -A INPUT -i eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -j ACCEPT
iptables -A OUTPUT -o eth0 -j ACCEPT
in quanto la rete 192.168.0.* arriva da li'.
purtroppo non riesco a capire come vengono attraversate le tabelle...
le catene l'avevo capito al tempo di ipchains ma ora che sono saltate
fuori pure le tabelle... ho qualche difficolta' a capire il giro.
ciao
-- 
Seti@Home Java Applets
http://maruko.cjb.net/
http://maruko.cjb.net/bofh.jsp

 interfacce ppp0 ed eth0 rende assolutamente inutile la policy)
Aggiungo: come pretendi che i pacchetti escano dalla box su internet senza
un iptables -A OUTPUT -o ppp0 -j ACCEPT?
Per l'inutilità delle policy non sono d'accordo, perchè bisognerebbe vedere
come è statoimpostato il kernel per quanto riguarda lo spoofing.
 E poi chiudi tutto tranne quello che dico io è la migliore policy che
esista.
Per il giro delle tabelle è semplice (si fa per dire).
Esistono tre tabelle che vengono passate tutte. L'ordine dipende da tante
cose, e per molte applicazioni puoi non considerarlo.
La tabella filter è quella dove dovresti mettere il codice che filtra ciò
che deve passare e ciò che no.
All'interno vi sono tre catene: INPUT vede tutti i pacchetti che entrano
nella box; OUTPUT vede tutti i pacchetti che escono dalla box; FORWARD tutti
i pacchetti che arrivano alla box, ma sono destinati a qualche altra parte
(vengono appunto forwardati).
Naturalmente un pacchetto che viene fordardato da A verso C passando per B
(cioè la linuxbox) deve prima entrarci (passando la INPUT) e se viende
deciso di farla passare (nella FORWARD) deve anche uscire (tramite la
OUTPUT).
Poi c'è la tabella nat, con altre tre catene: PREROUTING, POSTROUTING,
OUTPUT
L'uso di questa tabella dovrebbe essere limitato al natting in tutte le sue
forme (nat, snat, dnat, ...?).
L'ultima tabella, mangle, serve per "alterare" i pacchetti, cambiando ad
esempio i flag, e altre cose che non mi vengono in mente (io non altero
niente...;)
La cosa da tenere presente è che tutto quello che ho nominato (o quasi)
viene attraversato da *ogni* pacchetto. E' importante perchè non basta
accettare un pacchetto da una parte perchè arrivi adestinazione: deve essere
accettato in ogni catena che attraversa.
Sembra macchinoso, ma è molto potente. Non vedo l'ora che la debian si
decida ad uscire con la woody in ver. stable per usare su tutte le macchine
iptables!
Ciao. Radel

accettato in ogni catena che attraversa.
il fatto e' che, non sapendo bene l'ordine delle catene (piu' che
altro delle tabelle), e' difficile sapere che devo mettere li' una
regola per accettare quel pacchetto (a parte l'errore banale che ho
commesso nella catena di forward)



oh, si', mi era sfuggito che parlasse di OUTPUT.
la linuxbox non puo', in effetti, uscire su internet. se volessi
farglielo fare dovrei anche aprire in INPUT... e allora addio
firewall. la linuxbox fa un po' di SNAT, un po' di DNAT e parla solo
con ben determinati host (pop3 ad esempio).
se invece ci si sta riferendo ai pacchetti mascherati, quelli non
necessitano di una regola come:
iptables -A OUTPUT -o ppp0 -j ACCEPT
una cosa del genere serviva con ipchains (aprire il range usato per il
masquerading). non serve con iptables. 
infatti ho:
iptables -P OUTPUT DROP
iptables -P INPUT DROP
e tutto funziona.
credo sia dovuto al fatto che il masquerading viene effettuato nella
catena POSTROUTING della tabella nat... e da qui vengono seri dubbi su
come vengono attraversate le catene e le tabelle... e gli howto non
sono chiari su questo.


 sono chiari su questo.
Non lo so se sia per quello, ma la cosa è chiara: quello che arriva alla box
ma non è destinata ad essa passa per la FORWARD della tabella filter; che
poi si faccia anche PREROUTING e POSTROUTING della nat e PREROUTING e OUTPUT
della mange è un discorso diverso... E per quello che ne ho capito io ci
passa.
Hoancora qualche perplesstà sull'ordine di attraversamento dei pacchetti che
fanno arte di una connessione masquerata già stabilita; nessuno sa aiutarmi?
Ciao. Radel
--
PS. Per risposte in email togliere le due ".remove" dall'indirizzo
      To reply remove both ".remove" in the address.


deve servire l'interno e fare da gateway per l'esterno. a volte
sarebbe comodo googlare direttamente dalla linuxbox ma finora ho
resistito. per quanto riguarda il dns, puo' farlo visto che e' aperta
verso il dns. poi accede anche a qualche pop3 e puo' fare anche
quello. ovviamente c'e' una regola per ogni server che contatta.
lo so, un firewall come si deve non deve fare quest'ultime cose...
appena trovo un 486 da riciclare, lo debianizzo e via.


Credo che quest'ultimo schema sia abbastanza chiaro.
chiarisce tutto. certo che metterlo anche negli howto per utenti
"normali" non avrebbe guastato.
