Entra

View Full Version : [iptables]indirizzare da un pc ad un altro


RaouL_BennetH
10-07-2007, 08:42
Ciao a tutti :)

Ho un piccolo pc che mi fa da gateway per alcuni computer su una piccola rete.

Lo script che mi fa fare questo è il seguente:


echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j MASQUERADE


Ora, siccome ho un altro pc che ha un ip pubblico, e che ha un servizio sempre aperto, vorrei fare in modo che chi si collega debba prima passare dal pc dove ho questo script, e solo successivamente venga indirizzato sul server dove c'è il servizio attivo e solo per predeterminati indirizzi ip esterni

Per esempio:

il pc che fa da gateway ha ip interno 10.0.0.2 e pubblico 100.100.100.100
il pc che fa da serverino ha ip interno 10.0.0.3 e pubblico 100.100.100.101

Quello che vorrei realizzare è che se l'utente pippo da remoto (che ha anche lui un ip fisso e pubblico) anzichè collegarsi direttamente sulla macchina 100.100.100.101, debba collegarsi per forza a quella .100 e che quest'ultima poi lo reindirizzi sulla .101 e solo se si collega sempre dal suo ip pubblico (per esempio da 212.212.212.212)

Mi date una mano per favore ?

Grazie mille.

RaouL.

ilsensine
10-07-2007, 08:53
Ad occhio (non testato) dovresti inserire qualcosa tipo:
iptables -t nat -A PREROUTING -i <interfaccia pubblica> [altre regole...] -j REDIRECT --to-address 10.0.0.3

W.S.
10-07-2007, 09:08
mmm la 100.100.100.101 non deve essere raggiungibile direttamente giusto?

Quindi, se possibile dovresti mettere la 100.100.100.101 su un ip privato in modo che non sia possibile raggiungerla dall'esterno, assegni 100.100.100.101 ad un'interfaccia virtuale di 100.100.100.100 e natti il traffico in entrata (solo quello che abiliti) verso l'ip privato interno, ricordati di mascherare la risposta.
In alternativa blocca l'accesso a quel servizio da qualsiasi indirizzo tranne che dal 100.100.100.100 obbligando così ad utilizzare 100.100.100.100 per raggiungere l'host, mascheri l'ip sorgente della richiesta in modo da farlo apparire come 100.100.100.100 all'host finale.

Ad ogni richiesta che arriva poi i tuoi script dovranno decidere se abilitare o meno la conenssione ed inserire regole di conseguenza. Se sei pratico di C e il servizio non è critico, la cosa migliore sarebbe usare il target QUEUE, in modo da poter gestire i pacchetti in USER-SPACE come vuoi, memorizzare gli utenti... insomma gestire la cosa secondo le tue esigenze.

RaouL_BennetH
10-07-2007, 09:15
Si, al momento la .101 è su ip pubblico ma la vorrei togliere e far passare tutto dalla .100 e solo per prefissati ip esterni e solo dai pc della rete interna.

Per ilsensine: per "altre regole" su cosa mi devo documentare in particolare?

Per W.S.: stai parlando in gergo troppo tecnico per un ignorantone come me :D
potresti cercare di chiarirmi meglio ciò che hai scritto? (nn che sia colpa tua ovviamente)

Grazie mille :)

ilsensine
10-07-2007, 09:21
Per ilsensine: per "altre regole" su cosa mi devo documentare in particolare?
Non so, se solo alcuni servizi devono essere rediretti, puoi mettere filtri sulle porte relative. Se solo alcuni IP sorgente sono ammessi, devi inserirli. Per i casi più complicati, ti conviene creare una chain apposita dove puoi mettere tutte le regole che ti servono.

W.S.
10-07-2007, 09:29
Scusa, è che son un pochino di fretta e non posso rispondere con calma...

Il problema è che se vuoi evitare che quella macchina sia raggiungibile direttamente, o non le assegni un ip pubblico (e quindi per raggiungerla bisogna passare da un NAT) oppure blocchi qualsiasi connessione tramite firewall, lasciando passare solo quelle che vuoi.
Il problema però è il modo in cui vuoi autenticare queste connessioni, come vorresti farlo? Basta la corrispondenza ip-accesso? Sai già quali ip avranno accesso? Devi verificare altro oltre all'ip?

RaouL_BennetH
10-07-2007, 09:30
Non so, se solo alcuni servizi devono essere rediretti, puoi mettere filtri sulle porte relative. Se solo alcuni IP sorgente sono ammessi, devi inserirli. Per i casi più complicati, ti conviene creare una chain apposita dove puoi mettere tutte le regole che ti servono.

Ah, capito :)

Nel mio caso è tutto abbastanza semplice. C'è un piccolo webservice che deve essere raggiunto solo da alcuni ip esterni e dai pc interni.

Volevo solo un chiarimento in merito a questo:

Se nelle regole io dico di accettare solo le connessioni che provengono da detti IP, è sufficiente per impedire l'accesso da qualsiasi altro IP oppure devo specificare ulteriori regole ?

ilsensine
10-07-2007, 09:54
Se nelle regole io dico di accettare solo le connessioni che provengono da detti IP, è sufficiente per impedire l'accesso da qualsiasi altro IP oppure devo specificare ulteriori regole ?
Se non compi altre azioni, la regola viene ignorata e si continua nella catena di prerouting (che va su accept). Quindi le connessioni finiscono sul computer attuale, e puoi bloccarle con le normali regole nella catena di INPUT.