2017年3月19日日曜日

MyDNS と Let's Encrypt を使って,FreeBSD 上の apache24 を https 化してみた(その1)

 個人用のサイトを FreeBSD 上の apache24 で作っている。 今回はそれを https 化(通信の暗号化)してみた。 その話を書こうと思う。

 まず,前提を書いておこう。
(1) OS は FreeBSD を使っている。バージョンは10.3だが,そろそろ11に上げないと,と思っている。

(2) web server は apache24 を使っている。これは /usr/ports/ からインストールしたものである。
  web server 用に,cgi(p5-CGI-4.35)や php(php5.6.30) も使っているが,今回の件では特に問題はなかった。

(3) サーバーが設置してあるネットワークは,数日経つとプロバイダーが IP アドレスを勝手に変更してしまう。
  そのため,Dynamic DNS (DDNS,動的 DNS) として MyDNS.JP のお世話になっている。

 このような環境下で,FreeBSD 上の apache24 の通信の暗号化に挑戦してみた,というお話し。 今回もいろいろなサイトを参考にしたが,結構寄せ集めになってわからなくなってきたので,まとめておこうと思ったのが今回の投稿である。 分量として結構あるので,数回に分けようと思う。 そこで目次を用意してみた。

目次
 (a) その1:MyDNS を使って web サーバーをたてる(今回)
 (b) その2:オレオレ認証を使った https 化
 (c) その3:Let's Encrypt を使ったサーバー認証
 (d) その4:vhost や ssl などの apache24 の設定
 (e) その5:サイトの内容に関する注意点(最終)

 今回は,MyDNS.JP にアカウントを取得して,DDNS で web サーバーを立ち上げる話について書こう。

 自宅でサーバーをあげようと思うと,まずweb サーバーにホスト名をつける必要がある。 このホスト名は,サーバーの置かれているネットワークに対して与えられたドメイン名と,サーバー固有の名前をくっつけたものであり,
 www.hogehoge.mydns.jp
のような形式のものである。

 ここで,青字で書いた「www」がサーバー固有の名前であり,それ以降の「hogehoge.mydns.jp」がドメイン名となる。 このホスト名に対して,1個の固有の IP アドレス(192.168.0.1 のような番号)を対応させるのが DNS (Domain Name Server) と呼ばれる機能である。 当初は,サーバー1台に対して IP アドレス1個が付加されていたが,近年,個人の家では「1個の IP アドレスの下にルーターを置いて,複数のコンピューターをつなぐ」のが普通になっている。 そのため,多くの場合「各家庭に1個の IP アドレス」とそれに対応した「ホスト名」がインターネットプロバイダーから与えられている。

 しかし,この「各家庭に1個の IP アドレス」と「ホスト名」は,多くの場合,不定期に(もしかして定期的に?)付け替えが行われる。 なぜ付け替えられるのかは知らないが,そういうシステムになっているみたい。 単に受動的にインターネットを使う場合にはあまり気にならないが,サーバーを立てる際には問題になる。 つまり,サーバーの住所である IP アドレスが時間とともに変わってしまう,という問題が生じる。 家の住所が時々刻々変わると,郵便物が届かないように,IP アドレスが時間とともに変わると,外部からサーバーに到達できなくなる。

 そこで登場するのが Dynamic DNS (DDNS, 動的 DNS) と呼ばれるサービスである。 DDNS では,特定のホスト名を持っているサーバーが数分に1回程度の割合で信号を送ることによって,その時点でサーバーが存在している IP アドレスを DDNS に伝える。 その IP アドレスと登録してあるホスト名を結びつけてくれるのが DDNS の役割である。 一種の DNS だが,設定したらずっと同じ IP アドレスに特定のホスト名を対応させる静的な DNS とは違って,時々刻々対応する IP アドレスを調べて,変更があれば新しい IP アドレスとホスト名を対応付けてくれるのが動的な DNS である。

 その DDNS の一つが MyDNS.JP である。 MyDNS.JP は,無料で IP アドレスを特定のホスト名に紐付けてくれるサービスである。 MyDNS.JP を利用する際,ホスト名は MyDNS.JP が無料で提供しているドメイン名を使ったものでいいし,年間1000円から数千円払って取得した独自ドメインを使ってもいい。 そのドメイン名に適当なサーバー名をつけたものを ホスト名として MyDNS.JP に登録し,定期的に MyDNS.JP に対して信号を送ると,サーバーをあげることができる。 また,ホスト名は複数のものをエイリアスとして,同じ IP アドレスに登録することもできる。

 MyDNS.JP に登録するには,MyDNS.JP のページの上の方にある「JOIN US」というリンクをクリックする。 すると,登録ページに移動するので,そこで
 「氏名」,
 「国名」,
 「住所」,
 「電話番号」,
 「メールアドレス」
等を入力する。
 最後に,数字5桁の「確認キー」を入力して,「CHECK」ボタンを押せば,登録完了となる。 入力したメールアドレスに,「Master ID」と「パスワード」の情報が届くはずである。

 Maser ID とパスワードが届いたら,MyDNS.JP にログインしてみよう。 ログインできると,情報の設定が可能となる。
(i) USER INFO:これは氏名や住所などのユーザー情報である。パスワードはMyDNS.JP 側が自動で発行するみたいである。

(ii) DOMAIN INFO:ここが一番重要なドメイン名,ホスト名の登録画面である。
  ドメイン名としては,独自ドメインを使ってもいいし,MyDNS.JP が用意しているもののサブドメインを登録してもよい。
  例えば「hogehoge.mydns.jp」のようなものが空いていれば使うことができる。
  登録画面には例があるので,それを真似すればよいが,ドメイン名を入力し,ホスト名にワイルドカード(*印)を入れるだけでいいみたい。

(iii) IP ADDR DIRECT:これは当該のドメイン名に紐付ける IP アドレスを示している。
このページで直接書き換えることもできるが,下記に示すように自動で更新するのが DDNS での使い方である。

 IP アドレスを自動で通知するには,サーバーからメール,FTP,web,等でアクセスすると通知できる。 MyDNS.JP のページの「LET'S TRY」にも書いてあるが,私は以下のようなスクリプトを cron で5分に1回通知している。
#!/bin/sh
#
# send IP address to mydns.jp
#
/usr/local/bin/wget -O - 'http://mydnsXXXXX:YYYYYYY@www.mydns.jp/login.html'
 ここでは wget を用いて,HTTP-BASIC でmydns.jp にアクセスしている。 mydnsXXXXX (X:数字)が登録済みの Master ID であり,YYYYYYY(Y:英文字や数字)がパスワードである。
 上記のスクリプトを
/etc/periodic/every5min/100.mydns.jp
として保存し(/etc/periodic/の下に「every5min」を作った),/etc/crontab に以下の赤色の行を追加して,cron デーモンを再起動した。
# Perform daily/weekly/monthly maintenance.
*/5     *       *       *       *       root    periodic every5min
1       3       *       *       *       root    periodic daily
15      4       *       *       6       root    periodic weekly
30      5       1       *       *       root    periodic monthly

 スクリプトがちゃんと働いていれば,MyDNS.JP の「IP ADDR DIRECT」の中の IP アドレスが自動的に書き換わる。
こうしておいて,外部から「xxx.hogehoge.mydns.jp」(xxx はサーバー固有の名前)にアクセスできるようになる。
(その2)オレオレ認証を使った https 化に続く

0 件のコメント: