IPTABLES: Blockieren des Ports nur für externe Benutzer

364
Ed de Almeida

Ich habe einen Server mit zwei Docker-Containern. Eines davon ist das Frontend einer kleinen Anwendung, die mit bedient wird http-server. Diese Anwendung verwendete die Javascript-Abruf-API, um Daten aus einer wirklich einfachen Datenbank abzurufen, die auf dem Json-Server-Modul von Node.js basiert, das in dem anderen Container ausgeführt wird.

Es kommt vor, json-serverdass Port 3000 für externe Benutzer verfügbar ist. Wenn also jemand auf einen Browser verweist http://example.com:3000, sind meine Daten ohne Filterung und Präsentation des Frontends verfügbar. Das will ich nicht.

Ich möchte den Port 3000 für die Außenwelt blockieren, während mein anderer Docker-Container wie üblich Daten abrufen kann. Ich denke, dass dies auf einer IP-Basis gemacht werden kann, aber ich weiß nicht, wie es geht.

Dies ist meine aktuelle Iptables-Konfiguration, die standardmäßig von Docker selbst erstellt wurde.

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  

In der obigen Konfiguration ist IP 172.17.0.2 meine Frontend-Anwendung, während 172.17.0.3 die IP meines Datenbankcontainers ist.

Der Frontend-Container wird mit gestartet

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

und der zweite mit

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

Ich dachte auch über die Möglichkeit nach, Docker zu verwenden, um diesen Zugriff einzuschränken, aber nach langem Suchen konnte ich nichts finden.

Irgendwelche Vorschläge, wie ich das machen kann?

0

1 Antwort auf die Frage

1
bcs78

Da Sie "ACCEPT" "TCP" Verbindungen von "irgendwo" zum Host "172.17.0.3" auf "TCP" Port "dpt: 3000" und ich denke, gibt es auch eine DNAT-Regel, die jede eingehende Verbindungen an "you-public" weiterleitet -ip-address: 3000 "bis" 172.17.0.3:3000 "(siehe iptables -t nat -L --line-numbers), das ist normal.

Entfernen Sie die DNAT-Regel aus der NAT-Tabelle.

iptables -t nat -D PREROUTING <the-dnat-rule-number>