web-dev-qa-db-ja.com

SELinuxでカスタムポートを管理するための最良の方法

RHEL 6.2では、ホスト上のhttpdを別のホスト上のTomcatのフロントエンドプロキシとして使用しています。また、非標準ポートでリッスンしてステータス情報を監視ツールに提供するようにmod_statusを構成しています。したがって、1)ネットワーク接続を確立し、2)非標準ポートでリッスンするためにhttpdが必要です。

デフォルトのターゲットポリシー(現在は寛容モード)は、httpdが定義済みのポートリスト(semanage port -l | grep http_port_t)での待機のみを許可し、httpdが送信ネットワーク接続を確立することを許可しません。 aureport -aは、httpdがカスタムステータスポートにバインドしようとしたとき、および他のホストのAJPポートに接続しようとしたときのAVC拒否を示します。

私は2つの解決策を見つけましたが、1つは寛容すぎ、もう1つは脆弱すぎるようです(つまり、ポリシーのアップグレード時に破損する可能性があります)。

「幅広い」ソリューション

audit2allowを使用してローカルポリシーソースを生成し、次にcheckmoduleを使用してコンパイルし、semodule_packageを使用してポリシーパッケージを生成し、semanageを使用して適用を開始しました。次にhttpdを再起動し、AVC拒否が生成されていないことを確認しました。 audit2allowによって生成されたローカルポリシーは、次の付与を使用しました。

httpd_t port_t:tcp_socket {name_bind name_connect}を許可します。

これにより、httpdは(http_port_tにリストされているポートだけでなく)任意のポートにバインドし、任意のポートに接続できます。このアプローチの利点は、ローカルポリシーに含まれ、次のyum updateで上書きされないことです。短所は、必要以上に幅広い許可を与えることです。 httpdは、任意のポートにバインドして接続できます。

「狭い」ソリューション

バインドの代わりに、次のコマンドを使用して、カスタムポートをhttp_port_tリストに追加します。

semanage port -a -t http_port_t -p tcp(custom-port-number)

semanage port -l | grep http_port_tを使用してhttp_port_tの下のポートのリストを表示できることは知っていますが、このリストがどこに保存されているかわかりません。また、新しいポリシーを持つ次のyum updateが上書きされるかどうかもわかりません。リスト。

接続する別の方法は、次のコマンドを使用して新しいポートリストを作成することです。

セマネージポート-a-t ajp_port_t -p tcp 9010

次に、次のローカルポリシーを作成します。

httpd_t ajp_port_t:tcp_socket {name_connect}を許可します。

強化されたhttp_port_tリストのように、新しいajp_port_tリストが新しいターゲットポリシーバージョンのインストールを生き残るかどうかはわかりません。

6
Eric Rath

semanageは、ポリシーパッケージの制御下にない新しいモジュールを作成します。ポリシーパッケージがアップグレードされると、これらのモジュールは残り、ロード時に新しいポリシーに適用されます。