SELinuxのリスニング接続は同じですか?

SELinuxのリスニング接続は同じですか?

によるとsemanage-port(1)...

  • -a は --add と同じ効果を持ちます。
  • -t は --type と同じ効果を持ちます。
  • -p は --port と同じ効果を持ちます。

そして命令を出す

 semanage port -a -t http_port_t -p tcp 81

Apache がポート 81 でリッスンできるようにします。

今まではそんなに良くなった。しかし、これはhaproxy関連の問題に対する解決策ですこの命令を教えてください

semanage port --add --type http_port_t --proto tcp 8001

haproxyが接続できるポートのリストにポートを追加します。

listening onSELinuxに関する限り、これは意味し、常に同じですか?connecting toそれとも、ポートリストを受信、送信、またはその両方にリンクするルールはありますか?では、オペレーティングシステムでこの情報をどこで見つけることができ、どのように変更できますか?

答え1

SELinuxに関する限り、「リスニング」と「接続」は、いいえ同じもの。これは2つの異なる操作であり、どちらかを実行するにはプロセスに正しい権限が必要です。ポートにバインドしてポートに接続する場合、これらの権限name_bindはとですname_connect

この場合、私たちはクラスの権限に興味があります。しかし、一般的なSELinuxの場合と同様に、1つの情報がありません。つまり、どのクラスの権限ですか?これを見つけるより良い方法があるようですが、実際にはまだ見つかりませんでした。それでは、私たちが知っていることを活用しましょう。

sesearch -d -A -t http_port_t
Found 81 semantic av rules:
    allow cloud_init_t http_port_t : tcp_socket name_connect ;
    ...

これにより、http_port_tをターゲットとして許可されているすべてのルールが表示されます。ありがたいことに、私たちはそれらがすべて同じクラスtcp_socketで実行されていることがわかります。これは意味があります。それでは、tcp_socketクラスが持っているすべての権限を確認してみましょう(私が知っている限り、これはポリシー自体で定義されています)。

seinfo -ctcp_socket -x
  • -cオブジェクトクラスを印刷します(フラグと名前の間にスペースがあってはいけません)。
  • -xより多くの情報を表示(この場合、実際に私たちが興味を持っているもの - 権限!)

これにより、tcp_socket クラスに適用されるすべての権限が一覧表示されます。その中で、name_bind と name_connect は質問の LISTEN ON と CONNECT TO の意味です。

haproxyを使用するとします。 haproxyのSELinuxタイプは次のとおりですhaproxy_t。ここで、http_port_tで定義されているポートに対するhaproxyが持っている権限を確認してください。

sesearch -d -A -s haproxy_t -t http_port_t
Found 1 semantic av rules:
    allow haproxy_t http_port_t : tcp_socket { name_bind name_connect } ;

これは、haproxy に name_bind 権限と name_connect 権限があることを示します。したがって、http_port_tにどのポートを追加しても、haproxyはそのポートにバインドして接続できます(ただし、http_port_tを使用する他のすべてのタイプもそのポートに対する適切な権限を使用できます。たとえば、openvpnはメッセージを送受信できます。があります)、バインディングと接続)。

http_port_tの代わりにhaproxyが各権限に特定の型を使用する場合(たとえば、haproxy_connect_port_tおよびhaproxy_bind_port_tにそれぞれname_connectおよびname_bind権限がある場合)、haproxy_connect_port_tにポートを追加するとそのポートにのみ接続できますが、受信/バインドできません。

関連情報