Selinux - clamdがスレッドごとに新しいポートを開くのを防ぐいくつかの戦略を探しています。

Selinux - clamdがスレッドごとに新しいポートを開くのを防ぐいくつかの戦略を探しています。

CentOSでSElinuxを強制し、clamAVがファイルを取得できるようにします。しかし、SElinuxはclamdの次の動作が好きではないようです。

Clamdは事前定義されたTCPポートでリッスンし、任意のTCPポートを使用してファイルを交換してクライアントと確認します。

つまり、スキャンされた各ファイルは新しいポートを開きます。

SElinuxを無効にすると、すべてがうまく機能するため、SElinuxポリシー関連の問題であるに違いありません。

SElinuxを有効にしてclamdを強制適用すると、次の問題が発生します。

● clamd.service - clamd scanner () daemon
   Loaded: loaded (/usr/lib/systemd/system/clamd.service; static; vendor preset: disabled)
   Active: active (running) since Thu 2017-06-22 15:56:57 CEST; 27min ago
 Main PID: 3671 (clamd)
   CGroup: /system.slice/clamd.service
           └─3671 /usr/sbin/clamd -c /etc/clamd.d/scan.conf --foreground=yes
Jun 22 15:57:06 prd-app-srv clamd[3671]: HWP3 support enabled.
Jun 22 15:57:06 prd-app-srv clamd[3671]: Self checking every 600 seconds.
Jun 22 15:58:05 prd-app-srv clamd[3671]: ScanStream: Can't find any free port.
Jun 22 15:58:05 prd-app-srv clamd[3671]: ERROR: ScanStream: Can't find any free port.
Jun 22 16:08:05 prd-app-srv clamd[3671]: SelfCheck: Database status OK.
Jun 22 16:08:05 prd-app-srv clamd[3671]: SelfCheck: Database status OK.
Jun 22 16:08:24 prd-app-srv clamd[3671]: ERROR: ScanStream: Can't find any free port.
Jun 22 16:08:24 prd-app-srv clamd[3671]: ScanStream: Can't find any free port.
Jun 22 16:18:24 prd-app-srv clamd[3671]: SelfCheck: Database status OK.
Jun 22 16:18:24 prd-app-srv clamd[3671]: SelfCheck: Database status OK.

/var/log/audit/audit.log で、次のログエントリを探します。

type=AVC msg=audit(1498156946.689:4165): avc:  denied  { name_bind } for  pid=4086 comm="clamd" src=30860 scontext=system_u:system_r:antivirus_t:s0 tcontext=system_u:object_r:unreserved_port_t:s0 tclass=tcp_socket
type=SYSCALL msg=audit(1498156946.689:4165): arch=c000003e syscall=49 success=no exit=-13 a0=b a1=7fdc8fc31a90 a2=10 a3=1f items=0 ppid=1 pid=4086 auid=4294967295 uid=995 gid=994 euid=995 suid=995 fsuid=995 egid=994 sgid=994 fsgid=994 tty=(none) ses=4294967295 comm="clamd" exe="/usr/sbin/clamd" subj=system_u:system_r:antivirus_t:s0 key=(null)

これは密接な関係があるようです。 https://bugzilla.redhat.com/show_bug.cgi?id=1248785

サービスが望むすべてのポートを開くのを妨げるselinuxポリシーを知っている人はいますか?

SElinuxを有効にして実施し、侵害の少ない方法で問題を解決したいと思います。

答え1

/etc/clamd.d/scan.conf で clamd が使用するポート範囲を定義することで解決しました。

StreamingMinPort 30000
StreamingMaxPort 32000

そして selinux ポリシーに同じポート範囲を反映して

semanage port -a -t clamd_port_t -p tcp 30000-32000

この問題を解決するためのよりクリーンなまたはより侵害的な方法を知っている人はいますか?

関連情報