Apache→Tomcatの連携をSELinuxが阻んでいた話


結論

SELinuxの有効設定をpermissive(アクセス制御は無効だが警告メッセージを表示する)に変更したらApache→Tomcatで連携できるようになった

はじめに

オンラインアプリ開発経験はあるのですが、サーバ構築経験のほぼない初心者のため、四苦八苦しています。
初心者のただのメモですが、もし同じことで詰まる人のために記事にします。

環境

サーバ:RHEL8.2 AWS AMIから作成
Apache 2.4.37
Tomcat 9.0.39
社内プロキシ経由でネットに接続できる環境のため、下記を設定してyumインストールしています

セキュリティグループのアウトバウンド設定に社内プロキシのポートを設定
/etc/yum.conf にProxy設定を追加
社内Proxyに阻まれていろいろ捗らない人のためのTips 様を参考に設定しています

やりたいこと

Apache → Tomcat は http での接続

この、http接続で失敗する・・・

実施した内容

① Apache側に下記を設定

/etc/httpd/conf.d/mod_proxy.conf
ProxyRequests Off
ProxyPass /  http://(APサーバのIP):8080/
ProxyPassReverse / http://(APサーバのIP):8080/

② Tomcat側に下記を設定

/opt/tomcat/conf/server.xml
  <Service name="Catalina">

    <Connector port="8080"
               maxThreads="4002"
               minSpareThreads="200"
               connectionTimeout="30000"
               keepAliveTimeout="500000"
               processorCache="200"
               secure="false"
               protocol="HTTP/1.1"
               enableLookups="false"
               useBodyEncodingForURI="false"
               address="0.0.0.0"  />

これでApacheにアクセスしたらTomcatデフォルト画面が開かれるはずなのに、503エラーとなる。。。

調査

  • /var/log/httpd/error_log を確認
[proxy:error] [pid 17063:tid 140642893367040] (13)Permission denied: AH00957: HTTP: attempt to connect to (APサーバのIP):8080 ((APサーバのIP)) failed

Permission denied とは・・・?
こちらのエラーで検索してヒットした、こちらのサイト 様に答えがありました。

  • /var/log/audit/audit.log を確認したところ、同じエラーが出ている・・・!!
/var/log/audit/audit.log
type=AVC msg=audit(1628573323.280:1221): avc:  denied  { name_connect } for  pid=17063 comm="httpd" dest=8080 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:http_cache_port_t:s0 tclass=tcp_socket permissive=0
# getenforce

→ 「Enforcing」が返ってきた・・・!これが原因か・・・!

  • SELinuxの設定変更
setenforce 0

でpermissiveモード(アクセス制御は無効だが警告メッセージを表示する) に設定。
こちらを設定したことで、Apache⇔Tomcat の連携ができるようになりました!!

こちらは一時的な設定のため、「vi /etc/selinux/config」の設定修正も忘れずやりました。

感想

SELinux という単語を初めて知りました。。。
こんなところでアクセス制限をしているんですね。。勉強になりました。
引き続き頑張ります。