Red Hat Training

A Red Hat training course is available for RHEL 8

10.3. selinux RHEL システムロールを使用したポートの管理

selinux RHEL システムロールを使用すると、複数のシステムにわたる一貫した SELinux でのポートアクセス管理を自動化できます。これは、たとえば、Apache HTTP サーバーを別のポートでリッスンするように設定する場合に役立ちます。これを実行するには、特定のポート番号に http_port_t SELinux タイプを割り当てる selinux RHEL システムロールを使用して Playbook を作成します。管理対象ノードで Playbook を実行すると、SELinux ポリシーで定義された特定のサービスがこのポートにアクセスできるようになります。

SELinux でのポートアクセス管理は、seport モジュール (ロール全体を使用するよりも高速) を使用するか、selinux RHEL システムロール (SELinux 設定で他の変更も行う場合に便利) を使用することで自動化できます。これらの方法は同等です。実際、selinux RHEL システムロールは、ポートを設定するときに seport モジュールを使用します。どちらの方法も、管理対象ノードでコマンド semanage port -a -t http_port_t -p tcp <port_number> を入力するのと同じ効果があります。

前提条件

  • 制御ノードと管理ノードを準備している
  • 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
  • 管理対象ノードへの接続に使用するアカウントに、そのノードに対する sudo 権限がある。
  • オプション: semanage コマンドを使用してポートの状態を確認するには、policycoreutils-python-utils パッケージをインストールする必要があります。

手順

  • 他の変更を加えずにポート番号だけを設定するには、seport モジュールを使用します。

    - name: Allow Apache to listen on tcp port <port_number>
      community.general.seport:
        ports: <port_number>
        proto: tcp
        setype: http_port_t
        state: present

    <port_number> は、http_port_t タイプを割り当てるポート番号に置き換えます。

  • SELinux のその他のカスタマイズを伴うより複雑な設定を管理対象ノードに行う場合は、selinux RHEL システムロールを使用します。Playbook ファイル (例: ~/playbook.yml) を作成し、次の内容を追加します。

    ---
    - name: Modify SELinux port mapping example
      hosts: all
      vars:
        # Map tcp port <port_number> to the 'http_port_t' SELinux port type
        selinux_ports:
          - ports: <port_number>
            proto: tcp
            setype: http_port_t
            state: present
    
      tasks:
        - name: Include selinux role
          ansible.builtin.include_role:
            name: rhel-system-roles.selinux

    <port_number> は、http_port_t タイプを割り当てるポート番号に置き換えます。

検証

  • ポートが http_port_t タイプに割り当てられていることを確認します。

    # semanage port --list | grep http_port_t
    http_port_t                	tcp  	<port_number>, 80, 81, 443, 488, 8008, 8009, 8443, 9000

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.selinux/README.md ファイル
  • /usr/share/doc/rhel-system-roles/selinux/ ディレクトリー