Semplice quesito su iptables

20 risposte [Ultimo contenuto]
Ritratto di compact
compact
(Geek)
Offline
Geek
Iscritto: 11/12/2004
Messaggi: 149

Inoltre il filtraggio non mi funziona più: devo essermi persa qualcosa.
vedi FORWARD ACCEPT non dovrebbe essere FORWARD DROP

Con iptables attivo, dando il comando "wget ipdelclient:porta/file",
questo resta in attesa di chi sa cosa per una trentina di secondi e poi parte con il download.
prova a modificare la regola cosi

-A FORWARD -p tcp -m state --state NEW --dport 23456 -j ACCEPT
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

potresti comunque postare l'output dei comandi:

iptables -L -n
iptables -L -t nat -n

oppure direttamente lo script utilizzato in quanto spero che sia un attimo più leggibile di quello che hai
inviato (o forse sarà la mancanza di caffeina) in quanto ho problemi a capire le regole aggiunte.

Ritratto di strapdm
strapdm
(Junior)
Offline
Junior
Iscritto: 20/01/2018
Messaggi: 12

Ti posto gli output come richiesto.
Se non sei riuscito a capire le regole che ho scritto non è certo per una tua mancanza, sappi che le regole che ho scritto sono "sparate a caso" o quasi... Non essendo pratica di networking e tantomeno di Debian vado a tentativi.

Gli indirizzi contrassegnati come yy.yy.yy.yy e xx.xx.xx.xx sono i due domini esterni che dovrebbero poter essere raggiunti dagli host collegati in wifi ai quali dovrebbe essere preclusa ogni altra risorsa interna o esterna

Anche modificando la regola di forwarding come consigliato, wget resta in apparente stato di coma per una trentina di secondi prima di iniziare il download (non che la cosa sia un guaio, tanto è uno script che viene eseguito in background ad occuparsi di scaricare i file dagli host connessi in wifi, però sarebbe carino far andar bene le cose...)

iptables -L -n
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp spts:67:68 dpts:67:68
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:53 dpt:53
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:23456

Chain FORWARD (policy DROP)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:23456
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT tcp -- 0.0.0.0/0 yyy.yy.yy.yy tcp
ACCEPT tcp -- 0.0.0.0/0 xxx.xx.xx.xx tcp

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

iptables -L -t nat -n

Chain PREROUTING (policy ACCEPT)
target prot opt source destination

Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 0.0.0.0/0 0.0.0.0/0

Ritratto di compact
compact
(Geek)
Offline
Geek
Iscritto: 11/12/2004
Messaggi: 149

partiamo dalle basi (non ho capito dove è il server web sulla porta 23456)

ti consiglio ti prendere carta e penna e di fare uno schema della tua rete vedi:
https://www.google.it/url?sa=i&rct=j&q=&esrc=s&source=imgres&cd=&cad=rja&uact=8&ved=0ahUKEwieiLPCy-nYAhVSaVAKHV3xDYcQjRwIBw&url=http%3A%2F%2Fwww.isaserver.it%2Fforum%2Ftopic.asp%3FTOPIC_ID%3D1867&psig=AOvVaw3MUPO65eaUYbSLqKVwPCev&ust=1516642427249034

facciamo qualche esempio

host1 (server ssh + firewall)
elenco dei servizi che host1 deve erogare da quello che sembra fa ssh + dhcp + dns, ecc fa differenza sia chi deve accedere
a questi servizi che da dove ed è per questo che ti serve uno schema della tua rete

client1 (che si deve poter connettere al solo server ssh su host1, più sul server alla porta 23456)

in questo caso

basta

iptables -P INPUT DROP (tutto quello non concesso è rifiutato)
iptables -A INPUT -i lo -j ACCEPT (le connessioni locali sono accettate)
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT (tutte le connessioni relative a connessioni possibili è accettato)
iptables -A INPUT -p tcp --dport 22 -s indirizzo_ip_host1 -j ACCEPT
iptables -A INPUT -p tcp --dport 23456 -s indirizzo_ip_host1 -j ACCEPT

in questo caso FORWARD e NAT non vengono toccate

caso numero 2

host1 (server ssh - firewall)

client1 (che si deve poter connettere al solo server ssh su host1)
a tutti gli altri client sulla 10.1.1.0/24 (stessa rete locale a quale client1 appartiene)
sarà permesso accedere al server web presente su client1 alla porta 23456
(se però il traffico di rete passa da host1)

iptables -P INPUT DROP (tutto quello non concesso è rifiutato)
iptables -A INPUT -i lo -j ACCEPT (le connessioni locali sono accettate)
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT (tutte le connessioni relative a connessioni possibili è accettato)
iptables -A INPUT -p tcp --dport 22 -s indirizzo_ip_host1 -j ACCEPT

iptables -t nat -A POSTROUTING -s 10.1.1.0/24 -j MASQUERADE (il traffico uscente proveniente da 10.1.1.0/24 sarà mascherato)

iptables -P FORWARD DROP
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT (tutte le connessioni relative a connessioni possibili è accettato)
iptables -A FORWARD -p tcp -s 10.1.1.0/24 --dport 23456 -d indirizzo_ip_host1 -j ACCEPT

Ritratto di strapdm
strapdm
(Junior)
Offline
Junior
Iscritto: 20/01/2018
Messaggi: 12

Mi sto documentando molto su iptables ma trovo ancora molte difficoltà, vuoi per la nomenclatura molto specifica vuoi per la quantità di novità a cui sono soppoposta. Comunque spiegato così sembra più comprensibile... se non che l'ultima regola non saprei come applicarla:

iptables -A FORWARD -p tcp -s 10.1.1.0/24 --dport 23456 -d indirizzo_ip_host1 -j ACCEPT

sembra che questa regola permetta a "indirizzo_ip_host1" di accedere alla porta 23456, ma io non posso sapere a priori quale sarà questo ip in quanto viene assegnato dal dhcp.

infatti il webserver che devo raggiungere è dentro al client collegato in wifi (un app che usano i nostri venditori nei loro tablet)
la dinamica è questa:

1) il venditore arriva in sede e si collega a hostapd (i venditori sono una ventina ed ognuno ha la proria app che genera il webserver)
2) uno script in esecuzione in backgroud trova il nuovo peer
3) inizia a scaricare i file con gli ordini dei suoi clienti presso la porta 23456
4) I file sono parsati ed i dati inseriti nel db aziendale
5) Su uno dei domini che è possibile raggiungere, il venditore può seguire il progresso dell'operazione (che dura mediamente da pochi secondi a meno di due minuti)

Ai fini dello schema della nostra rete possiamo semplificare cosí:
un modem-router collegato ad internet al cui switch sono connessi un computer dell'amministrazione e il pc con Debian (quello con hostapd).
Lo script e tutto quanto serve i punti 2,3 e 4 di cui sopra si trovano nel pc con Debian.
ovviamente c'è molto di più, ma non dovrebbe avere alcuna importanza ai fini del "confezionamento" di regole funzionanti.

Ritratto di compact
compact
(Geek)
Offline
Geek
Iscritto: 11/12/2004
Messaggi: 149

iptables -A FORWARD -p tcp -s 10.1.1.0/24 --dport 23456 -d indirizzo_ip_host1 -j ACCEPT

sembra che questa regola permetta a "indirizzo_ip_host1" di accedere alla porta 23456, ma io non posso sapere a priori quale sarà questo ip in quanto viene assegnato dal dhcp.

veramente questa regola permette ad un qualsiasi indirizzo ip della rete 10.1.1.0/24 di accedere alla porta 23456 del server all'indirizzo ip "indirizzo_ip_host1".

se non puoi sapere l'indirizzo ip sul quale è installato il server web la regola deve essere cambiata in:

iptables -A FORWARD -p tcp -s 10.1.1.0/24 --dport 23456 -j ACCEPT

quindi il tablet del venditore non ha un indirizzo ip fisso ma variabile tramite dhcp
ed è il tablet del venditore che ha il server web sulla porta 23456

1) il venditore arriva in sede e si collega a hostapd (i venditori sono una ventina ed ognuno ha la proria app che genera il webserver)
2) uno script in esecuzione in backgroud trova il nuovo peer
3) inizia a scaricare i file con gli ordini dei suoi clienti presso la porta 23456
4) I file sono parsati ed i dati inseriti nel db aziendale

chiediti quale traffico concedere hai tablet dei venditori
come tu hai detto:
"Cosa non va: i client wifi collegati vedono tutte le risorse interne e navigano ovunque"
a quali risorse non devono avere accesso e il traffico dal tablet alla risorsa passano dal firewall

secondo me riletto il post dal inizio la regola che blocca è
-A POSTROUTING -o eth0 -j MASQUERADE
il quanto il MASQUERADE fa in modo che la rete 10.1.1.0/24 sia invisibile a tutti gli altri host su 192.168.64.0 (a parte il firewall naturalmente)

192.168.64.0/24 <--> 10.1.1.0/24

Ritratto di compact
compact
(Geek)
Offline
Geek
Iscritto: 11/12/2004
Messaggi: 149

iptables -P FORWARD DROP
iptables -A FORWARD -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth0 -p tcp --dport 23456 -j ACCEPT
iptables -A FORWARD -i wlan0 -p tcp --sport 23456 -j ACCEPT

se non mi sono sbagliato facendo cosi senza il MASQUERADE dovrebbe funzionare se
senza il firewall attivo un host della rete 10.1.1.0/24 riesce a raggiungere un host
della rete 192.168.64.0 e viceversa

i pacchetti provenienti da eth0 possono arrivare solo alla porta 23456 verso la wlan0
e i pacchetti provenienti da wlan0 ma solo dalla porta 23456 possono raggiungere eth0

se i pc della rete 10.1.1.0/24 devono accedere ad internet o altro allora metterei
iptables -t nat -A POSTROUTING -o eth0 ! -d 192.168.64.0/24 -j MASQUERADE

poi lavorerei sulla tabella di INPUT del pc con DEBIAN che fa da firewall tra le due reti
permettendo solo:

accesso al server dhcp
accesso al server dns
accesso al server ssh solo alle postazioni necessarie (filtraggio con mac address e/o ip address)

Ritratto di strapdm
strapdm
(Junior)
Offline
Junior
Iscritto: 20/01/2018
Messaggi: 12

Fantastico!
Tutto a posto!
Ho seguito alla lettera i tuoi ultimi due post e sono (sono è una parola grossa) riuscita a far andare tutto, e, incredibile ma vero, sto anche iniziando a comprendere come ragiona iptables.
Non mi resta che ottimizzare lo script e poi posto i risultati a beneficio di futuri lettori.

Grazie supermille!

Ritratto di strapdm
strapdm
(Junior)
Offline
Junior
Iscritto: 20/01/2018
Messaggi: 12

Dopo aver fatto le prove del caso posso dichiararmi soddisfatta!

ecco le regole che ho utilizzato

iptables -L -n
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp spts:67:68 dpts:67:68
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:53
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmptype 8
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 192.168.64.0/24 0.0.0.0/0 tcp dpt:22
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:23456
Chain FORWARD (policy DROP)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state NEW,RELATED,ESTABLISHED
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state NEW,RELATED,ESTABLISHED
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:23456
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:23456
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:53
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp spt:53
Chain OUTPUT (policy ACCEPT)
target prot opt source destination

iptables -L -t nat -n
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 0.0.0.0/0 !192.168.64.0/24

Non sono ancora riuscita a limitare l'accesso ai client wifi alla navigazione su due soli domini ma non è così determinante. L'importante è che le risorse interne (condivisioni, stampanti, PC e NAS) siano ad essi invisibili, e questo è a posto!
Oggi la metto in produzione e vedo come si comporta: se funziona tutto abbiamo risparmiato tanti soldini di licenza del software che gira su Windows e ci liberiamo della ditta che ci obbliga ad un contratto di assistenza a 4 zeri!

Ritratto di compact
compact
(Geek)
Offline
Geek
Iscritto: 11/12/2004
Messaggi: 149

Non sono ancora riuscita a limitare l'accesso ai client wifi alla navigazione su due soli domini ma non è così determinante.
L'importante è che le risorse interne (condivisioni, stampanti, PC e NAS) siano ad essi invisibili, e questo è a posto!

Cosa intendi per navigazione su due soli domini ?
intendi connessioni http verso dei server interni (dove stanno?) alla tua rete od esterni alla tua rete:
caso 1 (server web - dominio1 con indirizzo ip 192.168.64.2 e server web - dominio2 con indirizzo ip 192.168.64.3)
caso 2 (server web su internet chiamato www.dominio1.com e server web su internet chiamato www.dominio2.com)

schema tua rete interna e collegate
internet <--> router <--> switch <--> lan 192.168.64.0/24 <--> debian(pc) <--> lan 10.1.1.0/24

modificherei cosi le regole iptables:

iptables -P INPUT DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i wlan0 -p udp --dport 67:68 -j ACCEPT
iptables -A INPUT -i wlan0 -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT (presumo permetti connessioni solo dalla lan 192.168.64.0)

iptables -P FORWARD DROP
iptables -A FORWARD -i wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT

CASO 1 (domini interni alla lan 192.168.64.0)
iptables -A FORWARD -d 192.168.64.2 -i wlan0 -p tcp --dport 80 -j ACCEPT
iptables -A FORWARD -d 192.168.64.3 -i wlan0 -p tcp --dport 80 -j ACCEPT

CASO 2 (domini esterni alla tua rete su internet)
iptables -A FORWARD -d www.dominio1.com -i wlan0 -p tcp --dport 80 -j ACCEPT
iptables -A FORWARD -d www.dominio2.com -i wlan0 -p tcp --dport 80 -j ACCEPT

in quanto se ho capito bene la tua configurazione di massima a nessun pc della lan 192.168.64.0 a parte il pc debian
è permesso di instaurare connessioni con la lan 10.1.1.0
hai tablet dei venditori è permesso solo instaurare connessioni verso i domini da te citati.
le connessioni per lo scarico dei file avvengono fra pc debian e tablet venditore (quindi in output per il pc debian
e siccome non stai installando un firewall sui tablet non ti servono regole specifiche)
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Ritratto di strapdm
strapdm
(Junior)
Offline
Junior
Iscritto: 20/01/2018
Messaggi: 12

Scusa per il ritardo infinito nella risposta: sono stata influenzata e fuori gioco (in realtà ho ancora un po' di febbriciattola).
Il mio collega ha risolto tutto, almeno così dice.

Lunedì torno al lavoro e posto la configurazione.
Grazie ancora per il supporto