TL;DR
2020年12月9日、CentOS Projectは「CentOS Linux8」を2021年12月31日でサポートを終了することを発表。
CentOS7は予定通り2024年6月30日までサポートするとしているものの、CentOS9はリリースしないとされています。
https://atmarkit.itmedia.co.jp/ait/articles/2110/07/news006.html
そんなわけでCentOSユーザーはDebian, Ubuntuなど他ディストリビューションへ移るか、CentOSの代替となるディストリビューションへの移行を余儀なくするわけですが、すでにCentOSで稼働しているシステムに関しては、できればCentOSの代替ディストリビューションへ移行させたいところ。
という背景があり、自分が選んだCentOSの代替ディストリビューションはRocky Linux8です。
今回から、Rocky Linux8にApacheをインストールしてhttps通信ができるようになるまでを記事にしたいと思います。
今回は導入編ということで、Apacheのインストールから動作確認までをやっていきます。
検証環境
- Rocky Linux8
- GCEを立てて検証します
SELinuxを無効にする
vi /etc/selinux/config
SELINUX=enforcing
Apacheをインストール
yum -y intalls httpd
今回はyumで放り込みます。
ソースインストールの場合は、ARPがいてくれるおかげでディストリビューションの違いを受けないですしね。
ポイント
パッケージインストールのメリットはアップデートをyum update一撃で出来ること。
デメリットはゼロデイ攻撃。
脆弱性が発見された場合、パッチがリリースされるまで待たないといけない。
デフォルトページを変更する
vi /var/www/html/index.html
<html>
<body>
<h1>It works!</h1>
</body>
</html>
Apache起動
systemctl start httpd
アクセスする
http://GCEの外部インスタンス/
4で修正したページが表示されることを確認する

設定を変更していきたいので、Apacheを一旦止める
systemctl stop httpd
設定変更する前に、オリジナルの設定ファイルはバックアップ取っておく
cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.org
バックアップで取れたら、viで編集していく。
vi /etc/httpd/conf/httpd.conf
設定変更項目
Server管理者のメールアドレスを変更
ServerAdmin root@localhost → hogehoge@localhost
ServerのOSバージョン情報がHTTPヘッダに表示されないようにする
デフォルトでは、以下のようにHTTPヘッダに情報が出ている。

ApacheのバージョンもLinuxのディストリビューションも見えちゃってるので、攻撃者に余計な情報を与えてしまいます。
これを隠すための設定をします。
/etc/httpd/conf/httpd.confに以下のディレクティブを追加します。
ServerTokens prod
追加後、再度サーバーへリクエストしたときのHTTPヘッダ情報はこうなります。

ServerがApacheだということしか分からなくなりましたね。
設定ファイルを変更してるのでテストしておく
やる人とやらない人に分かれると思うのですが、自分は設定ファイルを変更した後には設定ファイルの構文をチェックします。
apachectl configtest
これでエラーが出なければOK。
ついでにですが、Apacheのテストコマンドはもう一つあります。
httpd -t
ですね。
この2つ何が違うのか?と思って調べてみました。
まず、whichコマンドを使ってapachectlの実態が何かを調べます。
which apachectl
結果、/usr/sbin/apachectlとなるので、このファイルの中を見ていきます。
すると↓の関数が実行されていることが分かる。
function testconfig() {
# httpd is denied terminal access in SELinux, so run in the
# current context to get stdout from $HTTPD -t.
if test -x /usr/sbin/selinuxenabled && /usr/sbin/selinuxenabled; then
runcon -- `id -Z` /usr/sbin/httpd $OPTIONS -t
else
/usr/sbin/httpd $OPTIONS -t
fi
ERROR=$?
}
apachectlを叩いた時に実行されている実態はtestconfigという関数でその関数の実行の実態は「/usr/sbin/httpd」だとわかる。
多分httpdコマンドの実態なんだろうなと思われるが、ウラを取る。
whitch httpd
この結果はやはり「 /usr/sbin/httpd 」となるので、apachectlの実態はhttpdと同じだということが分かる。
サーバーを起動したときに、Apacheが起動してくれるように設定する
systemctl enable httpd
最後に
とりあえず導入はさらっとこんな感じ。
基本的にApacheを入れたら絶対やるようなことは問題なくできた。
次回はOpenSSLを入れたうえで、このApacheを使ってhttps通信をしていきます。
お疲れ様でした。