IPTABLES: blocco della porta solo per utenti esterni


0

Ho un server con due container docker in esecuzione. Uno di questi è il frontend di una piccola applicazione, servita con http-server. Questa applicazione utilizza Javascript fetch API per recuperare i dati da un database veramente semplice basato sul modulo json-server di Node.js, che è in esecuzione nell'altro contenitore.

Succede quello json-server rende la porta 3000 disponibile all'utente esterno, ad esempio se qualcuno punta un browser su http://example.com:3000, i miei dati saranno disponibili senza il filtraggio e la presentazione forniti dal frontend. Questo non è quello che voglio.

Vorrei bloccare la porta 3000 al mondo esterno, consentendo al mio altro contenitore docker di recuperare i dati come al solito. Penso che questo possa essere fatto su base IP, ma non so come farlo.

Questa è la mia attuale configurazione di Iptables, creata principalmente da Docker come standard.

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy DROP)
target     prot opt source               destination         
DOCKER-USER  all  --  anywhere             anywhere            
DOCKER-ISOLATION-STAGE-1  all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
DOCKER     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain DOCKER (1 references)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             172.17.0.2           tcp dpt:http-alt
ACCEPT     tcp  --  anywhere             172.17.0.3           tcp dpt:3000

Chain DOCKER-ISOLATION-STAGE-1 (1 references)
target     prot opt source               destination         
DOCKER-ISOLATION-STAGE-2  all  --  anywhere             anywhere            
RETURN     all  --  anywhere             anywhere            

Chain DOCKER-ISOLATION-STAGE-2 (1 references)
target     prot opt source               destination         
DROP       all  --  anywhere             anywhere            
RETURN     all  --  anywhere             anywhere            

Chain DOCKER-USER (1 references)
target     prot opt source               destination         
RETURN     all  --  anywhere             anywhere 

Nella configurazione sopra, IP 172.17.0.2 è la mia applicazione di frontend, mentre 172.17.0.3 è l'IP del mio contenitore di database.

Il contenitore di front-end è stato avviato con

docker run -p 80:8080 --name=frontend -d mtr/frontend

e il secondo con

docker run -p 3000:3000 --name=database -d mtr/database

Ho anche considerato la possibilità di avere un modo Docker per rendere questo accesso limitato, ma dopo molte ricerche non ho trovato nulla.

Qualche suggerimento su come posso farlo succedere?

Risposte:


1

Siccome tu "ACCEPT" "tcp" le connessioni da "ovunque" all'host "172.17.0.3" su "tcp" port "dpt: 3000" e immagino ci sia anche una regola DNAT che inoltra tutte le connessioni in entrata a "you-public" -ip-address: da 3000 "a" 172.17.0.3:3000 "(vedi iptables -t nat -L --line-numbers ) è considerato normale.

Rimuovere la regola DNAT dalla tabella NAT.

iptables -t nat -D PREROUTING <the-dnat-rule-number>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.