SELinux がブロックしているポート 80 で Apache は何をしようとしているのでしょうか?

SELinux がブロックしているポート 80 で Apache は何をしようとしているのでしょうか?

私は小さな PHP と MySQL アプリを実行する小さな Web サーバー (CentOS 8) を持っています。また、セカンダリ MX として実行されている Nagios、BIND、Postfix も実行しています。

すべてが「機能」しているようで、問題に気付いたことはありません。Nagios と他の PHP アプリケーションをポート 443 経由で読み込むことができます。URL をポート http / ポート 80 経由で読み込むと、Apache は 443 にリダイレクトするように設定され、同様にうまく動作します。

ただし、selinux は定期的に次の AVC をログに記録し、ポート 80 に何らかの問題があることを示します。

time->Sat Dec 12 01:55:16 2020
type=AVC msg=audit(1607756116.608:1381369): avc:  denied  { name_connect } for  pid=631936 comm="httpd" dest=80 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:http_port_t:s0 tclass=tcp_socket permissive=0

を見ると/var/log/httpd/error_log、同じ pid に対して同時に対応する Permission Denied が発生していることがわかります。

[Sat Dec 12 01:55:16.608941 2020] [core:warn] [pid 631936] (13)Permission denied: AH00056: connect to listener on [::]:80

Apache がブロックされているのに何をしようとしているのかを正確に追跡する方法はありますか? 前述したように、何も壊れていないように見えるので、これを許可するモジュールを作成しようとはしていません。ただし、ここで AVC 拒否メッセージの根本的な原因を見つけたいので、次のいずれかを行います。

  • 無害であり、実際に許可されるべきであれば許可する、または
  • Apacheが実行しようとしていることを停止するように設定

答え1

ここで行われている接続は、Apacheが自分自身に接続しているものです。これらはログに記録されinternal dummy connection、Apacheの子プロセスを起動する

デフォルトでは、SELinux は Web サーバーがネットワーク接続を発信することを許可しません。この動作を変更するブール値はいくつかありますが、おそらくこれを修正するために使用したいのは、httpd_graceful_shutdownラベル (80、81、443、488、8008、8009、8443、9000) が付いた TCP ポートへの接続のみを許可する ashttp_port_tです。名前が示すように、これにより Apache のシャットダウン時に誤った警告が表示されなくなります。シャットダウン時に Apache 自身にも接続しようとするためです。また、このブール値により、即時の問題が解消され、内部のダミー接続が許可されます。

setsebool -P httpd_graceful_shutdown 1

関連情報