ポート経由でのプロキシにUnixドメインソケットではなく何か欠点はありますか?

SELinux を有効にした CentOS 派生の AlmaLinux 9 上で Discourse をデプロイし、外部 nginx を設定するテストを行っています。

Ubuntu ベースのコンテナは SELinux について認識していないため、コンテナを開始するたびに Unix ドメインソケットを新しいファイルに置き換えてしまい、そのファイルはセキュリティラベルが付与されていません。nginx は、restorecon を実行して nginx がアクセスできるセキュリティコンテキストを付与するまで、そのファイルと通信することが許可されません。これは明らかに本番環境でのソリューションとしては機能しません。

semanage permissive -a httpd_t を実行したくありません。なぜなら、外部に公開されている唯一のサービスである SELinux を実際に活用したいからです。:smiling_face:

ネットワークポートにプロキシする場合、Unix ドメインソケットの代わりに機能します。

  • setsebool -P httpd_can_network_connect 1
  • templates/web.socketed.template.yml を使用しない
  • expose: - "8008:80"
  • 外部 nginx で proxy_pass http://127.0.0.1:8008

この構成には、特に欠点はありますか?この構成で接続制限などのパラメータを変更すべきですか?

より詳細なテストの後、この内容をドキュメントとして詳しく記述します。追加の懸念事項があれば、それも記述に含めることができます。

「いいね!」 2

お好みの方法でポート8008への直接接続をブロックする限り、問題ありません。

「いいね!」 3

ありがとうございます!

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

レイテンシの違いがあり、ソケットはローカルループバックポートよりも約3倍高速です。

とはいえ、ここではせいぜい4〜5マイクロ秒の違いについて話しています。

「いいね!」 3

さらに調査した結果、デフォルトの Connection: close ヘッダーを無効にするために proxy_set_header \"Connection\" \"\"; を追加することを強く希望します。