Gibt es Nachteile, per Port statt über einen Unix-Domain-Socket zu proxen?

Ich teste die Bereitstellung von Discourse auf AlmaLinux 9, das von CentOS abgeleitet ist, mit aktiviertem SELinux und externem Nginx.

Da der Ubuntu-basierte Container SELinux nicht kennt, ersetzt er jedes Mal, wenn ich den Container starte, die Unix-Domain-Socket-Datei durch eine neue Datei, die nicht sicherheitsgekennzeichnet ist. Nginx darf erst damit kommunizieren, nachdem ich restorecon auf die Datei angewendet habe, um ihr einen Sicherheitskontext zu geben, auf den Nginx zugreifen darf. Das ist offensichtlich keine praktikable Lösung für die Produktion.

Ich möchte semanage permissive -a httpd_t nicht wirklich verwenden, da ich SELinux für den einzigen Dienst, der tatsächlich für die Außenwelt offen ist, nutzen möchte. :smiling_face:

Es funktioniert, wenn ich auf einen Netzwerkport statt auf einen Unix-Domain-Socket weiterleite:

  • setsebool -P httpd_can_network_connect 1
  • Verwenden Sie nicht templates/web.socketed.template.yml
  • expose: - "8008:80"
  • Im externen Nginx: proxy_pass http://127.0.0.1:8008

Gibt es Nachteile bei dieser Vorgehensweise? Sollte ich in dieser Konfiguration Parameter wie die Verbindungslimits ändern?

Ich werde dies nach gründlicheren Tests detaillierter als Dokumentation aufschreiben und, falls es weitere Bedenken gibt, kann ich diese in meine Aufzeichnungen aufnehmen.

2 „Gefällt mir“

Solange du Leute davon abhältst, sich direkt mit Port 8008 zu verbinden, mit deiner bevorzugten Methode, kein Problem.

3 „Gefällt mir“

Danke!

public (active)
  target: default
...
  services: dhcpv6-client http https ssh
  ports:
  protocols:
  forward: yes
  masquerade: yes
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

Es gibt einen Unterschied bei der Latenz, ein Socket ist etwa 3x schneller als ein lokaler Loopback-Port.

Das gesagt, wir sprechen hier bestenfalls von einem Unterschied von 4-5us.

3 „Gefällt mir“

Nachdem ich mir das genauer angesehen habe, möchte ich definitiv proxy_set_header \"Connection\" \"\"; hinzufügen, um den Standard-Header Connection: close zu deaktivieren.