SElinux:httpdが特定のポートに接続できるようにする


41

私のシステムは、Apache2.2.15でCentOS 6.4を実行しています。SElinuxは強制的であり、python / wsgiアプリを介してredisのローカルインスタンスに接続しようとしています。エラー13、許可が拒否されました。次のコマンドで修正できます。

setsebool -P httpd_can_network_connect

ただし、httpdがすべてのtcpポートに接続できるようにしたくはありません。httpdが接続できるポート/ネットワークを指定するにはどうすればよいですか?httpdがポート6379(redis)または127.0.0.1のtcpに接続できるようにするモジュールを作成できれば、それが望ましいでしょう。なぜ私の妄想がこれにとても強いのかは分かりませんが、ちょっと...

知ってる?


プロキシを強制的に外に出した方が良いでしょうか?そうすれば、a)アクセスできるものをよりよく制御できるようになります。b)何がいつ発生したかをより良く監査できるようになります。
キャメロンカー

回答:


51

デフォルトでは、SELinuxポリシーは、これらのサービスに関連付けられた認識されたポートへのサービスアクセスのみを許可します。

# semanage port -l | egrep '(^http_port_t|6379)'
http_port_t                    tcp      80, 81, 443, 488, 8008, 8009, 8443, 9000
# curl http://localhost/redis.php
Cannot connect to redis server.

-Redisポート(6379)をSELinuxポリシーに追加

# semanage port -a -t http_port_t -p tcp 6379
# semanage port -l | egrep '(^http_port_t|6379)'
http_port_t                    tcp      6379, 80, 81, 443, 488, 8008, 8009, 8443, 9000
# curl http://localhost/redis.php
Connected successfully.

setroubleshoot-serverRPMをインストールして実行することもできsealert -a /var/log/audit/audit.logます。-有用な提案(上記のコマンドを含む)を含む素晴らしいレポートを提供します。

接続をテストするPHPスクリプト:

# cat redis.php 
<?php

$redis=new Redis();
$connected= $redis->connect('127.0.0.1', 6379);

if(!$connected) {
        die( "Cannot connect to redis server.\n" );
}

echo "Connected successfully.\n";

?>

3
httpdから開始されたperlスクリプト(Net :: SMTPを使用)から(ポート25で127.0.0.1に接続して)電子メールを送信するという問題がFedora 23で発生しました。「httpdがポート25に接続するための許可」は、その場合に探しているものではありません。実際http_port_t、ポート25がすでに使用されているため(別のSELinuxタイプ用)、ポート25をSELinuxタイプに追加できませんValueError: Port tcp/25 already defined。httpdがポート25に接続できるようにする正しい方法は、対応するSELinuxポリシーのブール値をオンに設定することですsetsebool -P httpd_can_sendmail on(を参照getseebool -a)。(パート2に続く)
デビッドトンホーファー

1
(パート1からの続き)ただし、perlスクリプトから送信する場合は、それを許可するSELinuxモジュールを明示的に作成する必要がありますsealert -b; sealert -a /var/log/audit/audit.log; grep perl /var/log/audit/audit.log | audit2allow -M mypol; semodule -v -i mypol.pp。その後、動作します!
デビッドトンホーファー

@DavidTonhofer getsebool -aコマンドのマイナーなタイプミス(1つ少ないe)。
davidjb

1
:@DavidTonhoferあなたがあなたの代わりにそれを修正することができ、既存のポートのための新しいポリシーを作成する必要はありませんsemanage port -m -t http_port_t -p tcp 25、参照semanage port --help
HTF

ZABBIXのために、そこにはすでに、CentOSの7.5にspecualブールです:setsebool -P httpd_can_connect_zabbix true
デビッドTonhofer

17

使用する必要があるかもしれません

semanage port -m -t http_port_t -p tcp 6379

semanageが欠落している場合、パッケージpolicycoreutils-pythonを追加します

yum install policycoreutils-python

semanagepolicycoreutils-python-utils(少なくともFedora 23で)今にいる可能性があります
デビッドトンホーファー

1
CentOS 7にはまだ含まsemanageれていpolicycoreutils-pythonます。
jxmallett

他の何かの代わりに質問に答えてくれてありがとう。
フロリアンハイグル

3

selinuxを一時的に許可モードにして、httpdをredisに接続してから、audit2allowを使用してカスタムポリシーモジュールを生成および構築できます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.