プログラマーのメモ書き

伊勢在住のプログラマーが気になることを気ままにメモったブログです

OpenStreetMap タイルサーバーの https 化

OpenStreetmap のタイルサーバーの地図データを再セットアップしたので、ついでに https にも対応させました。

サーバーの https 化は何度かやってますが、作業記録としてメモっときます。あ、 SSL 証明書は毎度おなじみの Let's Encrypt を使います。

準備

元々、このタイルサーバーは公開にあたりポート番号を 80 から変更していました(こちらの記事参照)。また、それに合わせて ufw も設定していました。なので、 Let's Encrypt を使うにあたり、 80 と 443 でアクセスできるように修正しておきます。

まずは、 apache のポート番号を 80 に戻しておきます。

/etc/apache2/ports.conf

mor@map:/etc/apache2$ cat /etc/apache2/ports.conf
# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default.conf

Listen 80

<IfModule ssl_module>
        Listen 443
</IfModule>

<IfModule mod_gnutls.c>
        Listen 443
</IfModule>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
mor@map:/etc/apache2$ 

バーチャルホスト設定も併せて変更します。

/etc/apache2/sites-available/000-default.conf

<VirtualHost *:80>
(略)
</VirtualHost>

設定ができたら、apache2 を再起動しておきます。

mor@map:~$ sudo service apache2 restart

次は、 ufw の再設定を行います。『Apache for Public』 という名前で公開するポート番号を定義していたので、これを 80 と 443 に変更しておきます。

/etc/ufw/applications.d/apache2-utils.ufw.profile.for-public

[Apache for Public]
title=Web Server
description=Apache v2 is the next generation of the omnipresent Apache web server.
ports=80,443/tcp

このルールを適用します。

mor@map:/etc/ufw/applications.d$ sudo ufw app update "Apache for Public"
プロファイル 'Apache for Public' を規定するルールが更新されました
ファイアウォールの再読込を飛ばします
mor@map:/etc/ufw/applications.d$ sudo ufw reload
ファイアウォールを再読込しました

あと、このサーバーへアクセスするため、ルータの設定を変更します。ルータの設定は、基本的にIPマスカレード設定をしますが、下記の記事で書いたように、

blog.mori-soft.com

NVR510 の場合、不正アクセス検知機能を有効にしているときは、内部から外部へ出ていくパケットの静的フィルタルールを追記してあげる必要があります。

ここまでの設定ができれば、 http(80番ポート)でタイルサーバーに接続できることを確認しておきます。

certbot のインストール

ちょっと前まで、 Ubuntu で Let's Encrypt 使おうとすると、 ppa リポジトリを追加して、 apt で certbot をインストールして、という流れでしたが、今は snap を使ってインストールするそうです。

Certbot - Ubuntuxenial Apache

なので、やってみます。

certbot インストールしてないけど、一応削除

mor@map:~$ sudo apt remove certbot
[sudo] mor のパスワード: 
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
パッケージ 'certbot' はインストールされていないため削除もされません
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 99 個。
mor@map:~$ 

certbot を snap でインストールします。

mor@map:~$ sudo snap install --classic certbot
2020-09-08T15:10:00+09:00 INFO Waiting for automatic snapd restart...
certbot 1.7.0 from Certbot Project (certbot-eff✓) installed
mor@map:~$ 

certbot の設定

あとはいつもの certbot の設定をします。今回は下記コマンドにより apache 側の設定も変更することにしました。 画面の指示に従って、必要事項を入力していけば簡単に設定できます。

mor@map:~$ sudo certbot --apache
(略)

こちらなどが参考になるかと思います。 Ubuntu18.04 で Certbot を使った SSL 証明書の発行と更新 | 株式会社TKS2

今回の設定では http --> https のリダイレクトを設定するようにしました。

あとは、 https でタイルサーバーにアクセスできること、 http でアクセスすると https にリダイレクトされることが確認できればOKです。

なお、 certbot をインストールすると renew のための設定も自動で追加されるようなので、これも操作不要です。心配なら、下記でテストだけしておけばよさそうです。

mor@map:~$ sudo certbot renew --dry-run
(略)

ちなみに、この方法だと Apache の設定ファイルの書き換えもやってくれるというので、今回初めて試したのですが、変更前のファイルを残してくれないんですね。なので個人的にはちょっともやもやしています。ということで certonly をつけて、設定ファイルの変更は自分でやるほうが好みかもしれません。また次の機会に試してみようと思います。