Des inconvénients à utiliser un proxy via un port au lieu d'un socket de domaine Unix ?

Je teste le déploiement de Discourse sur AlmaLinux 9 dérivé de CentOS avec SELinux activé et nginx externe configuré.

Comme le conteneur basé sur Ubuntu ne connaît pas SELinux, il remplace continuellement le socket de domaine Unix par un nouveau fichier non étiqueté en termes de sécurité à chaque démarrage du conteneur, et nginx n’est pas autorisé à y accéder tant que je n’ai pas exécuté restorecon sur le fichier pour lui donner un contexte de sécurité auquel nginx est autorisé à accéder. Évidemment, cela ne fonctionne pas comme solution de production.

Je ne souhaite pas vraiment exécuter semanage permissive -a httpd_t car j’aimerais profiter de SELinux sur le seul service réellement ouvert sur le monde extérieur. :smiling_face:

Cela fonctionne si je fais un proxy vers un port réseau au lieu d’un socket de domaine Unix :

  • setsebool -P httpd_can_network_connect 1
  • ne pas utiliser templates/web.socketed.template.yml
  • expose: - "8008:80"
  • Dans nginx externe, proxy_pass http://127.0.0.1:8008

Y a-t-il des inconvénients particuliers à cela ? Dois-je modifier des paramètres comme la limitation des connexions dans cette configuration ?

Je rédigerai cela plus en détail dans la documentation après des tests plus approfondis, et s’il y a des préoccupations supplémentaires, je pourrai les inclure dans ce que j’écrirai.

2 « J'aime »

Tant que vous empêchez les gens de se connecter directement au port 8008 en utilisant votre méthode préférée, il n’y a pas de problème.

3 « J'aime »

Merci !

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

Il y a une différence de latence, une socket est environ 3 fois plus rapide qu’un port de bouclage local.

Cela dit, nous parlons ici d’une différence de 4 à 5 µs au mieux.

3 « J'aime »

Après avoir examiné cela plus en détail, je souhaite absolument ajouter proxy_set_header \"Connection\" \"\"; pour désactiver l’en-tête Connection: close par défaut.