2017年6月19日 Apache httpd2.4.26 がリリースされました。これ以前のバージョンの Apache httpd には、複数の脆弱性(JVNVU#98416507)がありますので、ぜひアップデートしておきたいですね。また、Apache 2.4.17 から対応した HTTP/2 サポートはこれまで「実験的」とされていましたが、このバージョン 2.4.26 からは「製品版(production)」とされています。そこで今回は、CentOS7.3 (1611) に Apache httpd 2.4.26 と mod_http2 をインストールする手順をまとめてみました。
開発ツールのインストール
Apache httpd や各種ライブラリをソースからコンパイルしますので、CentOS7.3 (1611) を「最小限のインストール」でインストールしている場合は、基本コマンドと開発ツールをインストールしておきましょう。
yum -y groupinstall development
OpenSSL 1.1.0 のインストール
Apache httpd 2.4.26 から OpenSSL 1.1.0 がサポートされました。色々とうれしい進化の多いバージョンですね。
まずはじめに OpenSSLのコンパイルに必要なパッケージをインストールしておきます。
yum -y install perl-core
「perl-core」パッケージをインストールしていない場合、OpenSSLの「make test」で次のようなエラーが発生することがあります。
Can't locate Module/Load/Conditional.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at .././test/run_tests.pl line 20. BEGIN failed--compilation aborted at .././test/run_tests.pl line 20. make[1]: *** [_tests] Error 2 make[1]: Leaving directory `/usr/local/src/openssl-1.1.0f' make: *** [tests] エラー 2
OpenSSLのインストール(そこそこの時間がかかります)
wget https://www.openssl.org/source/openssl-1.1.0f.tar.gz
tar xvzf openssl-1.1.0f.tar.gz
cd openssl-1.1.0f/
./config --prefix=/usr/local/openssl-1.1.0f shared zlib
make depend
make
make test
make install
OpenSSL1.1.0 のライブラリにパスを通しておきます。
ldconfig
Nghttp2 のインストール
HTTP/2(mod_http2)のコアエンジン Nghttp2 をインストールします。
Nghttp2 が必要とするライブラリのインストール
Nghttp2 のダウンロード
※頻繁にバージョンアップされているようです。ダウンロードの前に最新リリースを確認しましょう。
https://github.com/tatsuhiro-t/nghttp2/releases/latest
wget https://github.com/nghttp2/nghttp2/releases/download/v1.23.1/nghttp2-1.23.1.tar.gz
Nghttp2 のインストール。環境変数 OPENSSL_CFLAGS と OPENSSL_LIBS に先ほどインストールした、OpenSSL1.1.0 のディレクトリパスを指定してコンパイルします。
cd nghttp2-1.23.1/
env OPENSSL_CFLAGS="-I/usr/local/openssl-1.1.0f/include" OPENSSL_LIBS="-L/usr/local/openssl-1.1.0f/lib -lssl -lcrypto" ./configure -enable-app
make
make install
/usr/local/lib 以下に「libnghttp2」がインストールされますので、こちらもライブラリのパスに追加しておきます。
ldconfig
Apache httpd インストールの下準備
Apache 2.4系を、ソースコードからインストールする場合は、APR と APR-util が必要になりますので、インストールしておきます。
APR
wget http://ftp.jaist.ac.jp/pub/apache//apr/apr-1.6.2.tar.gz
tar xvzf apr-1.6.2.tar.gz
cd apr-1.6.2/
./configure
make
make install
APR-util
cd /usr/local/src/
wget http://ftp.jaist.ac.jp/pub/apache//apr/apr-util-1.6.0.tar.gz
tar xvzf apr-util-1.6.0.tar.gz
cd apr-util-1.6.0/
./configure --with-apr=/usr/local/apr
make
make install
apr-util 1.6.0 のコンパイルでは「expat-devel」パッケージをインストールしていない場合、下のようなエラーが発生することがあります。
xml/apr_xml.lo -c xml/apr_xml.c && touch xml/apr_xml.lo xml/apr_xml.c:35:19: 致命的エラー: expat.h: そのようなファイルやディレクトリはありません #include <expat.h> ^ コンパイルを停止しました。 make[1]: *** [xml/apr_xml.lo] エラー 1 make[1]: ディレクトリ `/usr/local/src/apr-util-1.6.0' から出ます make: *** [all-recursive] エラー 1
また、PCREライブラリも必要になるので、インストールします。
Apache httpd 2.4.26 (mod_http2) のインストール
本題の Apache httpd のインストールです。
Apache httpd のソースコードのダウンロード
wget http://ftp.riken.jp/net/apache//httpd/httpd-2.4.26.tar.gz
ダウンロードしたソースコードを解凍して、ディレクトリを移動します。
cd httpd-2.4.26/
HTTP/2 を使うために必要なモジュール mod_http2 と mod_ssl を有効にし、--with-ssl オプションで、OpenSSL1.1.0 のディレクトリパスを指定してインストールします。
--enable-http2 \
--enable-ssl \
--with-ssl=/usr/local/openssl-1.1.0f \
--enable-so \
--enable-mods-shared=all \
--enable-mpms-shared=all
make
make install
以上で Apache が /usr/local/apache2/ 以下にインストールされました。続いてSSLサーバー証明書の作成と、Apacheの設定を行います。
自己署名のSSLサーバー証明書の作成(HTTPS用)
HTTP/2 は事実上 HTTPS が必須になりますので、Apacheの設定の前に、SSLサーバー証明書を作成しておきます。
秘密鍵の作成
CSR(証明書署名要求)の作成(入力するのは2箇所だけです)
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:<空エンター>
Locality Name (eg, city) [Default City]:<空エンター>
Organization Name (eg, company) [Default Company Ltd]:<空エンター>
Organizational Unit Name (eg, section) []:<空エンター>
Common Name (eg, your name or your server's hostname) []:www.example.com
Email Address []:<空エンター>
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:<空エンター>
An optional company name []:<空エンター>
SSLサーバー証明書の作成(有効期限10年)
秘密鍵とSSL証明書を移動
mv -i server.crt /etc/pki/tls/certs/
パーミッションを変更
chmod 600 /etc/pki/tls/certs/server.crt
CSRを削除
Apache httpd の設定
オリジナルの設定ファイルをバックアップ
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 に反映されているか確認
httpd.service 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
/usr/local/apache2/logs/*log { daily missingok dateext rotate 60 create 644 daemon daemon sharedscripts postrotate /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true endscript }
・確認します
logrotate -dv /etc/logrotate.d/httpd
-----(下記のような表示であればOKです)-----
Handling 1 logs
rotating pattern: /usr/local/apache2/logs/*log after 1 days (60 rotations)
empty log files are rotated, old logs are removed
(略)
以上です。設定お疲れ様でした!
おわりに
上にも書きましたが Apache httpd 2.4.26 では HTTP/2 の正式サポートや OpenSSL1.1.0への対応など、かなりの大きな変更がありました。Apache httpd サポートライブラリの APR や APR-util も久しぶりにアップデートされています。
次回はこれも Apache httpd 2.4.26 から対応した brotli(新しい圧縮アルゴリズム)あたりを試してみたいと思います。
コメント