2024年7月17日 Apache httpd 2.4.62 がリリースされました。前バージョンの Apache httpd 2.4.61 でコアの脆弱性(CVE-2024-39884)が修正されたのですが、その修正が完全ではなかったため、わずか2週間でバージョンアップされました。Apache httpd 2.4.62 では問題のコアの脆弱性も含めて2件の脆弱性が修正され、各種機能の不具合が改善されています。そこで今回は AlmaLinux8、RockyLinux8、CentOS Stream 9、AlmaLinux9、RockyLinux9 に Apache httpd 2.4.62 をインストールする手順をまとめてみました。
参考資料:Complete ChangeLog for 2.4
開発ツールのインストール
Apache httpd や各種ライブラリをソースからコンパイルしますので、パッケージを「最小限のインストール」でインストールしている場合は、基本パッケージと開発ツールをインストールしておきましょう。
dnf -y groupinstall development
パッケージのアップデート
インストール済みのパッケージを、最新版にアップデートします。
OSを再起動します。
OpenSSL 3.0 のインストール(OSバージョン9は不要)
AlmaLinux8、RockyLinux8 など RHEL8系のOSの場合は、OpenSSL 3.0 をインストールします。
OpenSSL のコンパイルに必要なパッケージをインストールしておきます。
dnf -y install perl-core
OpenSSL 3.0 のダウンロード(ダウンロードの前に OpenSSL 3.0 の最新リリース を確認しておきましょう)
wget https://www.openssl.org/source/openssl-3.0.14.tar.gz
OpenSSL 3.0 のインストール
cd openssl-3.0.14/
./Configure --prefix=/usr/local/openssl-3.0.14 shared zlib
make
make test
make install
OpenSSL 3.0 のライブラリにパスを通しておきます。
ldconfig
OpenSSL 3.0 の動作確認(バージョンが表示されればOKです)
/usr/local/openssl-3.0.14/bin/openssl version OpenSSL 3.0.14 4 Jun 2024 (Library: OpenSSL 3.0.14 4 Jun 2024)
Nghttp2 のインストール
HTTP/2(mod_http2)のコアエンジン Nghttp2 をインストールします。
Nghttp2 のダウンロード(ダウンロードの前に Nghttp2の最新リリース を確認しておきましょう)
wget https://github.com/nghttp2/nghttp2/releases/download/v1.62.1/nghttp2-1.62.1.tar.gz
Nghttp2 のライブラリをコンパイルしてインストールします。
cd nghttp2-1.62.1/
./configure --enable-lib-only
make
make install
以上で HTTP/2 のライブラリ「libnghttp2」が /usr/local/lib/ 以下にインストールされましたので、ライブラリのパスに追加しておきます。
ldconfig
Brotli のインストール
Brotli のコンパイルに cmake を使いますので、インストールしておきます。
CMake のインストール
Brotli のインストール
Brotli のダウンロード(ダウンロードの前に Brotliの最新リリース を確認しておきましょう)
wget https://github.com/google/brotli/archive/refs/tags/v1.1.0.tar.gz
Brotli をコンパイルしてインストールします。
cd brotli-1.1.0/
mkdir out && cd out
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local ..
cmake --build . --config Release --target install
Brotli のライブラリが /usr/local/lib64 以下にインストールされましたので、ライブラリのパスに追加しておきます。
ldconfig
Apache httpd インストールの下準備
Apache httpd のコンパイルに必要なパッケージをインストールしておきます。
dnf -y install expat-devel
また、Apache 2.4系をソースコードからインストールする場合は、APR と APR-util が必要になりますので、インストールしておきます。
APR
wget https://dlcdn.apache.org/apr/apr-1.7.4.tar.gz
tar xvzf apr-1.7.4.tar.gz
cd apr-1.7.4/
./configure
make
make install
APR-util
wget https://dlcdn.apache.org/apr/apr-util-1.6.3.tar.gz
tar xvzf apr-util-1.6.3.tar.gz
cd apr-util-1.6.3/
./configure --with-apr=/usr/local/apr
make
make install
Apache httpd 2.4.62 のインストール
本題の Apache httpd のインストールです。
Apache httpd のソースコードのダウンロード
wget https://dlcdn.apache.org/httpd/httpd-2.4.62.tar.gz
ダウンロードしたソースコードを解凍して、ディレクトリを移動します。
cd httpd-2.4.62/
AlmaLinux8、RockyLinux8 の場合
Apache httpd をインストールします。AlmaLinux8、RockyLinux8 など RHEL8系のOSの場合は、「--with-ssl」オプションで OpenSSL 3.0 のインストールディレクトリを指定します。
--enable-http2 \
--enable-brotli \
--with-brotli=/usr/local/lib64 \
--enable-ssl \
--with-ssl=/usr/local/openssl-3.0.14 \
--with-apr=/usr/local/apr \
--with-apr-util=/usr/local/apr \
--enable-so \
--enable-mods-shared=all \
--enable-mpms-shared=all
 
make
make install
CentOS Stream 9 、AlmaLinux9、RockyLinux9 の場合
Apache httpd をインストールします。CentOS Stream 9 および AlmaLinux9、RockyLinux9 など RHEL9系のOSの場合は「--with-ssl」オプションの指定は必要ありません。
--enable-http2 \
--enable-brotli \
--with-brotli=/usr/local/lib64 \
--enable-ssl \
--with-apr=/usr/local/apr \
--with-apr-util=/usr/local/apr \
--enable-so \
--enable-mods-shared=all \
--enable-mpms-shared=all
 
make
make install
以上で Apache が /usr/local/apache2/ 以下にインストールされました。続いてSSLサーバー証明書の作成と、Apacheの設定を行います。
自己署名のSSLサーバー証明書の作成
HTTP/2 および Brotli は HTTPS が必須になりますので Apache の設定の前に、SSLサーバー証明書を作成しておきます。
秘密鍵の作成
SSLサーバー証明書の作成(有効期限30年)
-subjオプションで C(Country Name)に2文字の国名コード、CN(Common Name)にサイトのドメイン名(FQDN)を指定してください。
-days 10950 \
-key server.key \
-subj '/C=JP/CN=www.example.com' \
-out server.crt
秘密鍵とSSL証明書を移動
mv -i server.crt /etc/pki/tls/certs/
パーミッションを変更
chmod 600 /etc/pki/tls/certs/server.crt
SELinux を有効にしている場合は、秘密鍵とSSL証明書に正しいセキュリティコンテキストをつけておきましょう。(Apache httpd 起動時にエラーが発生することがあります)
restorecon /etc/pki/tls/certs/server.crt
Apache httpd の設定
ログの出力先を変更
rm -rf /usr/local/apache2/logs/
ln -s /var/log/httpd /usr/local/apache2/logs
(補足)Linuxディストリビューションによっては logrotate の設定により /usr 以下に出力されたログがローテーションできないことがありますので /var/log/ 以下に出力することをオススメします。
オリジナルの設定ファイルをバックアップ
mv -i /usr/local/apache2/conf/extra/httpd-ssl.conf /usr/local/apache2/conf/extra/httpd-ssl.conf.org
・設定ファイルを作成します(コピペしてください)
vim /usr/local/apache2/conf/httpd.conf
vim /usr/local/apache2/conf/extra/httpd-ssl.conf
systemd ユニットファイルの作成
Apache httpd 用の systemd ユニットファイル(起動スクリプトのようなもの)を作成します。
vim /etc/systemd/system/httpd.service
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/usr/local/apache2/bin/apachectl start
ExecReload=/usr/local/apache2/bin/apachectl graceful
ExecStop=/usr/local/apache2/bin/apachectl stop
[Install]
WantedBy=multi-user.target
作成したサービスファイルを systemd に反映
systemd に反映されているか確認
systemctl list-unit-files | grep httpd httpd.service disabled disabled ←この表示があればOK
起動
自動起動設定
firewalld設定
HTTP(80/tcp) と HTTPS(443/tcp) を開けておきます。
firewall-cmd --add-port=443/tcp --permanent
firewall-cmd --reload
・確認
firewall-cmd --list-all
interfaces: enp0s3 enp0s8
sources:
services: dhcpv6-client ssh
ports: 443/tcp 80/tcp ←この表示があればOK
(略)
ログのローテーション設定
・設定ファイルを作成します
vim /etc/logrotate.d/httpd
/var/log/httpd/*log { daily missingok dateext rotate 365 create 644 daemon daemon sharedscripts postrotate /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true endscript }
・確認します
logrotate -v /etc/logrotate.d/httpd
-----(下記のような表示であればOKです)-----
Handling 1 logs
rotating pattern: /var/log/httpd/*log after 1 days (365 rotations)
empty log files are rotated, old logs are removed
(略)
以上です。設定お疲れ様でした!
コメント