Apache httpd 2.4.59(TLS1.3対応)+ HTTP/2 + Brotli インストールメモ

Linux
Linux
スポンサーリンク

 

(2024年7月19日追記)このバージョンの Apache httpd にはセキュリティ脆弱性及び不具合が見つかっています。これらのセキュリティ脆弱性などが修正されている「Apache httpd 2.4.62(TLS1.3対応)+ HTTP/2 + Brotli インストールメモ」をご参照ください。

2024年4月4日 Apache httpd 2.4.59 がリリースされました。前回のリリースから約半年ぶりのバージョンアップです。Apache httpd 2.4.59 では3件の脆弱性が修正され、各種機能の不具合が改善されています。そこで今回は AlmaLinux8、RockyLinux8、CentOS Stream 9、AlmaLinux9、RockyLinux9 に Apache httpd 2.4.59 をインストールする手順をまとめてみました。

参考資料:Complete ChangeLog for 2.4

開発ツールのインストール

Apache httpd や各種ライブラリをソースからコンパイルしますので、パッケージを「最小限のインストール」でインストールしている場合は、基本パッケージと開発ツールをインストールしておきましょう。

dnf -y groupinstall base
dnf -y groupinstall development

dnf アップデート

インストール済みのパッケージを、最新版にアップデートします。

dnf -y update

OSを再起動します。

shutdown -r now

OpenSSL 3.0 のインストール(OSバージョン9は不要)

【注意】CentOS Stream 9 および AlmaLinux9、RockyLinux9 など RHEL9系のOSは、標準で OpenSSL 3.0 がインストールされていますのでこの手順は不要です。 別にインストールした OpenSSL 3.0 のライブラリをパスに追加すると不具合が発生しますので、インストールしないように注意してください。

AlmaLinux8、RockyLinux8 など RHEL8系のOSの場合は、OpenSSL 3.0 をインストールします。

OpenSSL のコンパイルに必要なパッケージをインストールしておきます。

dnf -y install zlib-devel
dnf -y install perl-core

OpenSSL 3.0 のダウンロード(ダウンロードの前に OpenSSL 3.0 の最新リリース を確認しておきましょう)

cd /usr/local/src/
wget https://www.openssl.org/source/openssl-3.0.13.tar.gz

OpenSSL 3.0 のインストール

tar xvzf openssl-3.0.13.tar.gz
cd openssl-3.0.13/
./Configure --prefix=/usr/local/openssl-3.0.13 shared zlib
make
make test
make install

OpenSSL 3.0 のライブラリにパスを通しておきます。

echo /usr/local/openssl-3.0.13/lib64 > /etc/ld.so.conf.d/openssl.conf
ldconfig

OpenSSL 3.0 の動作確認(バージョンが表示されればOKです)

/usr/local/openssl-3.0.13/bin/openssl version

OpenSSL 3.0.13 30 Jan 2024 (Library: OpenSSL 3.0.13 30 Jan 2024)

Nghttp2 のインストール

HTTP/2(mod_http2)のコアエンジン Nghttp2 をインストールします。

Nghttp2 のダウンロード(ダウンロードの前に Nghttp2の最新リリース を確認しておきましょう)

cd /usr/local/src/
wget https://github.com/nghttp2/nghttp2/releases/download/v1.62.0/nghttp2-1.62.0.tar.gz

Nghttp2 のライブラリをコンパイルしてインストールします。

tar xvzf nghttp2-1.62.0.tar.gz
cd nghttp2-1.62.0/
 
./configure --enable-lib-only
 
make
make install

以上で HTTP/2 のライブラリ「libnghttp2」が /usr/local/lib/ 以下にインストールされましたので、ライブラリのパスに追加しておきます。

echo /usr/local/lib > /etc/ld.so.conf.d/usr-local-lib.conf
ldconfig

Brotli のインストール

Brotli のコンパイルに cmake を使いますので、インストールしておきます。

CMake のインストール

dnf -y install cmake

Brotli のインストール

Brotli のダウンロード(ダウンロードの前に Brotliの最新リリース を確認しておきましょう)

cd /usr/local/src/
wget https://github.com/google/brotli/archive/refs/tags/v1.1.0.tar.gz

Brotli をコンパイルしてインストールします。

tar xvzf v1.1.0.tar.gz
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 以下にインストールされましたので、ライブラリのパスに追加しておきます。

echo /usr/local/lib64 > /etc/ld.so.conf.d/usr-local-lib64.conf
ldconfig

Apache httpd インストールの下準備

Apache httpd のコンパイルに必要なパッケージをインストールしておきます。

dnf -y install pcre-devel
dnf -y install expat-devel

また、Apache 2.4系をソースコードからインストールする場合は、APR と APR-util が必要になりますので、インストールしておきます。

APR

cd /usr/local/src/
wget
tar xvzf apr-1.7.4.tar.gz
cd apr-1.7.4/
./configure
make
make install

APR-util

cd /usr/local/src/
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.59 のインストール

本題の Apache httpd のインストールです。

Apache httpd のソースコードのダウンロード

cd /usr/local/src/
wget https://dlcdn.apache.org/httpd/httpd-2.4.59.tar.gz

ダウンロードしたソースコードを解凍して、ディレクトリを移動します。

tar xvzf httpd-2.4.59.tar.gz
cd httpd-2.4.59/

AlmaLinux8、RockyLinux8 の場合

Apache httpd をインストールします。AlmaLinux8、RockyLinux8 など RHEL8系のOSの場合は、「--with-ssl」オプションで OpenSSL 3.0 のインストールディレクトリを指定します。

./configure \
--enable-http2 \
--enable-brotli \
--with-brotli=/usr/local/lib64 \
--enable-ssl \
--with-ssl=/usr/local/openssl-3.0.13 \
--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」オプションの指定は必要ありません。

./configure \
--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サーバー証明書の作成

正規の認証局が発行したサーバー証明書を、無料で取得することもできます。よければご参照ください → Let's Encrypt サーバー証明書の取得と自動更新設定メモ

HTTP/2 および Brotli は HTTPS が必須になりますので Apache の設定の前に、SSLサーバー証明書を作成しておきます。

秘密鍵の作成

openssl ecparam -name prime256v1 -genkey -out server.key

SSLサーバー証明書の作成(有効期限30年)
-subjオプションで C(Country Name)に2文字の国名コード、CN(Common Name)にサイトのドメイン名(FQDN)を指定してください。

openssl req -new -x509 \
-days 10950 \
-key server.key \
-subj '/C=JP/CN=www.example.com' \
-out server.crt

秘密鍵とSSL証明書を移動

mv -i server.key /etc/pki/tls/private/
mv -i server.crt /etc/pki/tls/certs/

パーミッションを変更

chmod 600 /etc/pki/tls/private/server.key
chmod 600 /etc/pki/tls/certs/server.crt

SELinux を有効にしている場合は、秘密鍵とSSL証明書に正しいセキュリティコンテキストをつけておきましょう。(Apache httpd 起動時にエラーが発生することがあります)

restorecon /etc/pki/tls/private/server.key
restorecon /etc/pki/tls/certs/server.crt

Apache httpd の設定

ログの出力先を変更

mkdir /var/log/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/httpd.conf /usr/local/apache2/conf/httpd.conf.org
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

[Unit]
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 に反映

systemctl daemon-reload

systemd に反映されているか確認

systemctl list-unit-files | grep httpd

httpd.service    disabled    disabled    ←この表示があればOK

起動

systemctl start httpd

自動起動設定

systemctl enable httpd

firewalld設定

HTTP(80/tcp) と HTTPS(443/tcp) を開けておきます。

firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --add-port=443/tcp --permanent
firewall-cmd --reload

・確認
firewall-cmd --list-all

public (default, active)
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です)-----

reading config file /etc/logrotate.d/httpd
 
Handling 1 logs
 
rotating pattern: /var/log/httpd/*log after 1 days (365 rotations)
empty log files are rotated, old logs are removed
(略)

以上です。設定お疲れ様でした!

コメント

タイトルとURLをコピーしました