有効な無駄知識を…?

ITや情報系のネタ中心に書いていくつもりですが…。時々思い出したように更新。

UPSmini500 IIの蓄電池を交換する

2017-08-26 12:35:27 | 個人的メモ

UPSmini500 IIの蓄電池を交換する(自己責任)

はじめに

ユタカ電機製作所製のUPSmini500 II("http://www.yutakadenki.jp/products/103_upsmini.html")の警告LEDが点滅し、シリアルケーブルで接続しているサーバがシャットダウンされるという事象が発生しました。

購入後5年以上経過し、内蔵されている蓄電池の劣化が疑われたため、これを機に蓄電池の交換を行いました。本稿はその記録です。

※注意

注意点は以下の通りです。

  • 本記事は、バッテリーの交換作業を紹介するだけであり、お勧めするものではありません。また、メーカも推奨しておりません。
  • バッテリー交換にて、感電や火災などの人命や財産に影響のある事態が発生する可能性があります。
  • 本記事により何らかの損害を負っても、筆者は責任を負いません。

必要なもの

作業に必要なものを挙げます。括弧付きのものはあると望ましいものです。

  • プラスドライバ(電工ドライバー)
  • ペンチ・ラジオペンチ
  • 絶縁テープ
  • マルチメータ
  • (絶縁手袋)
  • (電気の知識)

交換用バッテリーの調達

ネジを外し、内蔵されている蓄電池を確認すると、以下の蓄電池が入っていました。


値段を考慮しつつ、同種の蓄電池を探したところ、以下の2種類が該当しました。

多少(1~2Ah)容量が大きくとも問題がないとのことだったので、今回は「LONG 12V 9Ah」を選択しました。

交換作業

蓄電池の交換を行います。電源をOFFにし、電源入力側・出力側のケーブルを全て外します

1.古い蓄電池をケースから取り出す。

UPSの4カ所のネジ止めを外し、ケースを外します。説明書きが書いてある側が上面です。

2.古い蓄電池の接続を外す。(-→+)

バッテリの端子に触れないよう(絶縁手袋を装着の上)、蓄電池をケースから取り外します。ケーブルは長くありませんが、蓄電池をケースの側に置くだけの余裕はあります。

ペンチ・ラジオペンチを使い端子(ファストン端子)を引き抜きます。端子には絶縁用のゴムの皮膜が付いていますので、傷つけないように注意します(ペンチに通電し、感電やショートの危険があります)。ここでは、ペンチに絶縁テープを巻いています。

端子の付け根を掴み、左右動かしながら引き抜きます。端子自体を掴むと、端子の噛み締めがきつくなり引き抜けません。

端子を引き抜く順番は、車の蓄電池と同様に-極(黒)→+極(赤)の順番にしました。

3.放電を待つ。

蓄電池は完全に放電している訳ではなく、ある程度の電気を蓄えた状態です。

念のため、放電するまで待ちます(数時間かかるかもしれません)。私は、0.01Vになるまで待ちました。

4.新しい蓄電池を接続する。(+→-)

買ってきた蓄電池に端子を接続します。購入時点で、満充電に近い状態となっているので、素手やペンチの金属部分に端子が触れないように注意します。

始めに+極(赤)を接続します。

次に-極(黒)を接続します。-極の接続時に、通電するため火花が出ることがありますので、燃えやすいものは側に置かないようにしてください。

5.新しい蓄電池をケースに戻す。

端子の接続が終わったら、蓄電池をケースに戻します。ケースには、端子の位置が元の蓄電池の位置と同じ向きになるようにしてください。

※ケースに戻すときに、端子に手やケース内の他の部品に触れないよう注意します

動かしてみる。

ケースのネジを締めたら、テスターで+・-間の電圧を確認します。電源が入っていない状態であるので、入力・出力とも電圧は0Vであるはずです。

問題なさそうならば、入力電源のみを繋ぎ正常に電源が入るか確認します。

電源が入ったならば、購入時と同様に動作の確認を行います。

ご参考

本記事は、以下のブログを参考にしました。


XAMPPのデータベースをMySQLに置き換える

2017-07-12 14:09:09 | 情報系ネタ

XAMPPのデータベースをMySQLに置き換える

はじめに

本稿では、XAMPPの最新版(2017-5-12時点 7.1.4)で、データベースをMariaDBからMySQLに置き換える方法について記します。

PHPの開発では、ApacheやPHPをひとまとめにしたXAMPPを利用することがあります。XAMPPにはウェブサーバ、データベースなども同梱されています。

XAMPP -1.8.3/5.6.3-5.6.12ではMySQLが、XAMPP 5.5.33-5.5.38/5.6.14-ではMariaDBが採用されています。 そのため、XAMPPの最新版ではMySQLを利用することができません。

ここでは、MySQLの最新機能を利用するため、MariaDBをMySQLへ置き換えることを考えます。

制限事項

MariaDBをMySQLへ置き換えるにあたり、幾つか制限があります。

  1. XAMPPの最新版(2017-5-12時点 7.1.4)のみ、動作することを確認しています。
  2. ログが既定の場所に出力されません(回避方法あり)。
  3. MySQLのサービス登録は試していません。
  4. その他、私が認識していない問題がある可能性があります。

MySQLのダウンロード

MySQLのウェブページ("https://dev.mysql.com/downloads/mysql/")から、MySQLの最新版をダウンロードします(今回は、5.7.18をダウンロードします)。

インストーラ付き、32bit/64bitなど複数のファイルがダウンロードできますが、「Windows (x86, 32-bit), ZIP Archive」をダウンロードします(64bitは、XAMPPコントロールパネルからMySQLをシャットダウンできません)。

MariaDBの待避

今までのMariaDBのファイルを移動することで退避します。

これからの操作では、XAMPPのすべてのサービスを停止して下さい。

XAMPPをインストールしたフォルダに移動し、「mysql」というフォルダ名を「mysql_old」に変更します。

mysqlのコピー

ダウンロードしたMySQLの圧縮ファイル(mysql-*-win32.zip)を解凍します。

解凍したファイルはフォルダ(mysql-*-win32)ごと「【XAMPPインストール先】」移動し、フォルダ名を「mysql」に変更します。

データの移行

MariaDBのデータを、MySQLフォルダに移動します。移動対象は以下のファイル/フォルダです。(ファイル/フォルダ名が重複しないデータ全てです)

  • data
  • scripts
  • COPYING.LESSER
  • COPYING.thirdparty
  • CREDITS
  • EXCEPTION-CLIENT
  • my-huge.ini
  • my-innodb-heavy-4G.ini
  • my-large.ini
  • my-medium.ini
  • my-small.ini
  • mysql_installservice.bat
  • mysql_uninstallservice.bat
  • resetroot.bat
  • wsrep.ini

設定・スクリプトの編集

設定ファイルについても、基本的にMariaDBのものをコピーして使用します。

「【XAMPPインストール先】\mysql_old\bin\my.ini」を、「【XAMPPインストール先】\mysql\bin\my.ini」へ上書きコピーします。

コピー後、「【XAMPPインストール先】\mysql\bin\my.ini」の設定を一部修正します。

「key_buffer」のコメント化

MySQLでは、key_bufferという設定項目は無い(廃止になった?)ため、「key_buffer = 16M」の先頭に#を付けてコメント化します。

「innodb_additional_mem_pool_size」のコメント化

MySQLでは、innodb_additional_mem_pool_sizeという設定項目は無い(廃止になった?)ため、「innodb_additional_mem_pool_size = 2M」の先頭に#を付けてコメント化します。

起動確認とデータ修正

以上の設定で、MySQLが起動できることを確認し、その後データの修正を行います。

起動確認

コマンドプロンプトを起動し、「【XAMPPインストール先】\mysql\bin\」へ移動します。

移動後、mysqldコマンドを実行します。実行には、以下の通り「--defaults-file="【XAMPPインストール先】\mysql\bin\my.ini"」「--console」のコマンドオプションを付けます。

> cd 【XAMPPインストール先】\mysql\bin\
> mysqld --defaults-file="【XAMPPインストール先】\mysql\bin\my.ini" --console

異常終了せず、実行中の状態になれば良好です。

データ修正

起動確認をしたまま(コマンドプロンプトを開いたまま)で、もう1つコマンドプロンプトを起動し、「【XAMPPインストール先】\mysql\bin\」へ移動します。

移動後、mysql_upgdateコマンドを実行します。実行には、以下の通り「-u root」「-p」のコマンドオプションを付けます。

> cd 【XAMPPインストール先】\mysql\bin\
> mysql_upgdate -u root -p

mysql_upgdateコマンドを実行すると、パスワードの問いかけ(Enter password:)が出てきますが、初期設定は"なし"になっています(そのままEnterキーを押下)。

整合性チェックが終了すれば完了です。

起動確認のMySQLについても、CtrlキーとCキーの同時押し(Ctrl+C)で終了させてください。

MySQLの起動

設定が完了したため、MySQLを起動します。

通常のXAMPPと同様に、XAMPP Control Panelから、「Start」ボタンを押下することで起動できます。

ウェブブラウザから。"http://localhost/phpmyadmin"に接続すると、画面右側に起動しているデータベースのバージョンが表示されます。記載内容が「MySQL Community Server」となっていれば、MySQLサーバに接続できています。

付録:ログの出力

今回の方法では、MySQLのログがファイルに保存されないため、XAMPP Control Panelからサーバログを確認することができません。ログを確認するには以下の2つの方法があります。

Windowsのイベントビューアー

MySQLのログは、Windowsのアプリケーションイベントに記録されています。そのため、イベントビューアーを起動し、Windowsログ→Applicationから内容を確認することができます。

ただし、他のアプリケーションのログも記録されるため、あまり見やすくはありません。

起動オプションを指定したバッチファイルからMySQLを起動する

MySQLもログ出力機能を持っていますが、コマンドオプション「--log-error="【ファイル名】"」で指定する必要があります。 しかし、XAMPPにおけるMySQLの起動オプションは「--console」となっており変更できません。

XAMPPにはXAMPP Control Panelを使用するほかに、バッチファイルからMySQLを起動することができます。そのバッチファイルにて、ログ出力先を指定することで、ログをファイルに出力することができます。

バッチファイルは【XAMPPインストール先】にあります。【XAMPPインストール先】をエクスプローラーで開き、バッチファイル「mysql_start.bat」を右クリックします。右クリックメニューから「編集」を選択しファイルの内容を以下の通りに書き換えます。

変更前
mysql\bin\mysqld --defaults-file=mysql\bin\my.ini --standalone --console
変更後
rem mysql\bin\mysqld --defaults-file=mysql\bin\my.ini --standalone --console
mysql\bin\mysqld --defaults-file=mysql\bin\my.ini --log-error="mysql_error.log" --standalone

編集が終わったら、ファイルを保存します。

MySQLの起動には「mysql_start.bat」を実行することで、ログをファイルに出力した状態で起動できます。起動したらコマンドプロンプトを閉じても、MySQLは起動したままとなります(「mysql_end.bat」で終了できます)。

バッチファイルから起動した場合でも、XAMPP Control Panelは起動中の表示に変わります。XAMPP Control PanelからMySQLを終了させることもできます。

この場合は、XAMPP Control Panelからログを開くことができます。


SSH接続にて、ed25519の公開鍵+パスワードの二段階認証を行う

2017-05-21 15:36:06 | FreeBSD

SSH接続にて、ed25519の公開鍵+パスワードの二段階認証を行う

概要

サーバーを遠隔から操作する場合は、SSH接続にてコマンドにて操作することが一般的です。 誰でサーバーを操作できる状態は問題があるため、サーバーへの接続には認証が設けられています。 認証には、公開鍵を利用した認証を使う場合が多いです。

公開鍵の暗号方式は、RSAが多く使われていますが、最近のOpenSSHでは、 ECDSA、ed25519という比較的新しい暗号形式もサポートされるように なってきました。
ここでは、ed25519の公開鍵を作成し、SSH接続の認証に用いたいと思います。
また、今回の公開鍵の認証だけではなく、パスワード認証も併用した 二段階認証を設定します。

前提条件

今回は、以下の条件にて設定および動作確認をしました。

※セキュリティを維持するためにも最新版の利用をお勧めします。

ed25519の鍵を作成する。

ed25519の鍵を作成します。 鍵生成のコマンド以外は、通常の鍵の作成方法と同じです。

公開鍵を作成したいユーザでログインし、サーバーのSSHのバージョンを確認します。 OpenSSH 6.5以上であれば良好です。

% ssh -V

ed25519方式の鍵を作成します。

% ssh-keygen -t ed25519

問い掛け内容を入力していきます。今回は以下の通りに設定しています。
hogeは現在のログインユーザ名を表します)

問いかけ内容は以下の通りです。
  • Enter file in which to save the key (/home/hoge/.ssh/id_ed25519)

    公開鍵・秘密鍵の保存先を指定します。 今回は、既定値の「/home/hoge/.ssh/id_ed25519」のままとします。

  • Enter passphrase (empty for no passphrase):

    秘密鍵のPassphrase(秘密鍵を使用するためのパスワード)を設定します。 Passphraseを設定すると、認証以外で秘密鍵を使用する度にパスワードを聞かれます。 未設定にすることも可能ですが、今回は設定することにします。

    ※Passphraseを入力しても、表示上は入力文字は見えません。未設定の場合はそのままEnterキーを押下します。
  • Enter same passphrase again:

    上で設定したPassphraseの確認です。上で設定したPassphraseを再度入力します。

全ての設定が完了すると、公開鍵・秘密鍵の保存先に秘密鍵・公開鍵が作成されます。

  • id_ed25519:秘密鍵(クライアント用)
  • id_ed25519.pub:公開鍵(サーバー用)

サーバー上では公開鍵を持ち、接続するクライアントには秘密鍵を設定します。 暗号鍵は、この段階でSFTPなどを使いクライアントに移動してください。
今回は「saba_PrivateKey」という名前をつけています。

OpenSSHに合わせて公開鍵の名前変更と、パーミッション変更を行います。

% mv ~/.ssh/id_ed25519.pub ~/.ssh/authorized_keys
% chmod 600 ~/.ssh/authorized_keys

ファイルの状態を確認します。

% ls -l ~/.ssh/

上の状態では公開鍵と暗号鍵の両方が存在していますが、 セキュリティ上、サーバー側からは暗号鍵を削除することをお勧めします。

これで、公開鍵の作成は完了です。

公開鍵+パスワードの二段階認証を設定する

OpenSSHにて、公開鍵+パスワードの二段階認証を有効にします。

# vi /etc/ssh/sshd_config

変更箇所は、2カ所です。

 
# チャレンジレスポンス認証を有効にする(コメントアウトを外す)。
ChallengeResponseAuthentication yes
 
# 二段階認証を有効にする(追記する)。
AuthenticationMethods publickey,keyboard-interactive

設定が済んだら、OpenSSHを再起動します。

# service sshd restart

以上で、公開鍵+パスワードの二段階認証の設定、及びサーバ側の設定は完了です。

※以下、説明上、PuTTYとFileZillaの両方で秘密鍵の変換をしていますが、PuTTYとFileZillaの どちらで変換しても同じ鍵ファイルが作成されます。変換はどちらか一方で十分です

クライアントのSSH接続(PuTTY)を設定する。

PuTTYで、サーバーに秘密鍵でログイン出来るようにします。 OpenSSHで作成した秘密鍵はそのままではPuTTYで使用できないため、 使用前に鍵の変換を行います。

PuTTY 鍵生成(PuTTYgen)で鍵を変換する。

PuTTY 鍵生成(PuTTYgen)でを使用して、秘密鍵をPuTTYで使用できる形式へ変換します。 PuTTYgenは、PuTTYをインストールすると同時にインストールされています。

PuTTY 鍵生成(PuTTYgen)を起動し、「読み込み」ボタンを押下します。

「秘密鍵の読込」というダイアログが開くので、サーバーから取得した秘密鍵を選択します。 今回の場合は、「saba_PrivateKey」というファイルになります。

秘密鍵にPassPhraseを設定している場合は、入力フォームが表示されるため、 設定したPassPhraseを入力します。

鍵の保存に関する通知が出るため、内容を確認し「OK」を押下します。

秘密鍵の読み込み後、「秘密鍵の保存」ボタンを押下します。

保存ダイアログで、適当なフォルダに秘密鍵を保存します。

以上で、秘密鍵の変換は終了です。

秘密鍵を使ってサーバーに接続する。

秘密鍵を使ってサーバーに接続する場合は PuTTYの「接続」→「認証」から、「認証のためのプライベートキーファイル」に上で 変換した秘密鍵を設定してログインします。

設定し秘密鍵にてサーバに接続します。問いかけを入力し、ログインできれば設定完了です。

  • Passphrase for key:秘密鍵に設定したPassphraseを入力します。Passphraseが未設定の場合は表示されません。
  • Password for hogehoge:該当ユーザー(秘密鍵を作成したユーザーと 同じユーザーの、ログインパスワードを入力します。

クライアントのSFTP接続(FileZilla)を設定する。

FileZillaにて、サーバーに秘密鍵でログイン出来るようにします。 設定方法は通常の秘密鍵の登録方法と同様です。

秘密鍵を登録する。

FileZillaに秘密鍵を登録します。

FileZillaを起動し、メニューバーから「編集」→「設定」を選択し、設定ウィンドウを表示します。 設定ウィンドウの中から「接続」→「SFTP」を選び、「鍵ファイルを追加」ボタンを押下します。

「秘密鍵が格納されたファイルを選択」というダイアログが表示されるので、 サーバーから持ってきた秘密鍵のファイルを選択します。

「鍵ファイルの変換」という確認ダイアログが表示されるため、「はい」を押下します。

秘密鍵にPassPhraseを設定している場合は、入力フォームが表示されるため、 設定したPassPhraseを入力します。

変換した鍵ファイルの選択画面が表示されるため、適宜ファイル名を指定して 保存します。

保存先を指定すると、保存した鍵ファイルが秘密鍵の一覧に表示されます。 これで、必要に応じて認証に秘密鍵が使用されます。

以上で秘密鍵の設定は終わりです。

秘密鍵を使ってサーバーに接続する。

設定した秘密鍵を使ってサーバーに接続します。二段階認証の設定を行っているため、 接続設定には、パスワードの設定も必要です。

付録

今回は、以下のウェブサイトを参考にしました。


FreeBSD 11にて、Apache + SSL(Let's Encrypt) + HTTP/2を動かす。

2017-01-26 01:16:16 | FreeBSD

FreeBSD 11にて、Apache + SSL(Let's Encrypt) + HTTP/2を動かす。

概要

FreeBSD 11にApacheをいれ、SSL証明書を取得し、HTTP/2の設定をした時の記録です。流れは、以下の通りです。

  1. Apache 2.4のインストールと設定
  2. SSL証明書(Let's Encrypt)の取得と設定
  3. HTTP/2の設定

OSなど前提条件は以下の通りです。

  • OS: FreeBSD 11.0-RELEASE
  • フォーマット: ZFS (RAID1 ミラーリング)
  • (1)ドメインを取得済みであること(ここでは、hoge%hoge.mydns.jpというドメインを例に使用します)
  • (2)ルータにて、グローバルIPが取得できること(動的割り当てでOK)。
  • (3)ルータからFreeBSD機まで、80/443ポートの静的NAT設定ができていること。
  • (4)DNSに、IPアドレスが取得したドメインに登録されていること。
※実際のドメインでは、「%」の文字は使用できません。

簡単にセットアップしたいため、pkgを利用してインストールします。

Apache 2.4のインストールと設定

Apache 2.4のインストール

pkgを利用して、Apacheをインストールします。基本的にスーパーユーザで「pkg install apache24」と入力するだけです。以下、入力した部分は太字にしています。

% su
Password: XXX(実際には非表示です)
# pkg update
# pkg upgrade
# pkg install apache24
Updating FreeBSD repository catalogue...
FreeBSD repository is up-to-date.
All repositories are up-to-date.
The following 10 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
        apache24: 2.4.25_1
        libxml2: 2.9.4
        expat: 2.2.0_1
        apr: 1.5.2.1.5.4_2
        gdbm: 1.12
        indexinfo: 0.2.6
        gettext-runtime: 0.19.8.1_1
        db5: 5.3.28_6
        perl5: 5.24.1.r4_1
        pcre: 8.39_1

Number of packages to be installed: 10

The process will require 139 MiB more space.
33 MiB to be downloaded.

Proceed with this action? [y/N]: y
Fetching apache24-2.4.25_1.txz: 100%    5 MiB 546.6kB/s    00:09
Fetching libxml2-2.9.4.txz: 100%  803 KiB 411.0kB/s    00:02

(途中略)

[9/10] Extracting pcre-8.39_1: 100%
[10/10] Installing apache24-2.4.25_1...
===> Creating groups.
Using existing group 'www'.
===> Creating users
Using existing user 'www'.
[10/10] Extracting apache24-2.4.25_1: 100%
Message from perl5-5.24.1.r4_1:
The /usr/bin/perl symlink has been removed starting with Perl 5.20.
For shebangs, you should either use:

#!/usr/local/bin/perl

or

#!/usr/bin/env perl

The first one will only work if you have a /usr/local/bin/perl,
the second will work as long as perl is in PATH.
Message from apache24-2.4.25_1:
To run apache www server from startup, add apache24_enable="yes"
in your /etc/rc.conf. Extra options can be found in startup script.

Your hostname must be resolvable using at least 1 mechanism in
/etc/nsswitch.conf typically DNS or /etc/hosts or apache might
have issues starting depending on the modules you are using.

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

- apache24 default build changed from static MPM to modular MPM
- more modules are now enabled per default in the port
- icons and error pages moved from WWWDIR to DATADIR

   If build with modular MPM and no MPM is activated in
   httpd.conf, then mpm_pre style="line-height: 70%;"fork will be activated as default
   MPM in etc/apache24/modules.d to keep compatibility with
   existing php/perl/python modules!

Please compare the existing httpd.conf with httpd.conf.sample
and merge missing modules/instructions into httpd.conf!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

以上で、インストールは終了です。FreeBSDにスタートアップ(rc.conf)に登録します。

# vi /etc/rc.conf

以下のコマンドを追記する。
apache24_enable="yes"

試しに起動してみます。下記の通り、警告が出ますが「Starting apache24.」と表示され、起動することは確認できます。

# /usr/local/etc/rc.d/apache24 start
Performing sanity check on apache24 configuration:
AH00557: httpd: apr_sockaddr_info_get() failed for www2
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppre style="line-height: 70%;"ss this message
Syntax OK
Starting apache24.
AH00557: httpd: apr_sockaddr_info_get() failed for www2
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppre style="line-height: 70%;"ss this message

Apache 2.4の設定

Apache 2.4に対して、取得しているドメイン名を設定します。

# vi /usr/local/etc/apache24/httpd.conf

ServerNameの部を書き換える。
#ServerName www.example.com:80
ServerName hoge%hoge.mydns.jp:80

HOSTS設定の127.0.0.1に、取得しているドメイン名を追加します。

# vi /etc/hosts

以下のように追記する。
::1                     localhost localhost.my.domain
127.0.0.1               localhost localhost.my.domain hoge%hoge.mydns.jp

Apacheを再起動して、先ほどの警告が消えることを確認します。

# /usr/local/etc/rc.d/apache24 restart
Performing sanity check on apache24 configuration:
Syntax OK
Stopping apache24.
Waiting for PIDS: 736.
Performing sanity check on apache24 configuration:
Syntax OK
Starting apache24.

以上の状態でブラウザからFreeBSD機に接続し、テスト用のページが見えるか確認します。ブラウザにてFreeBSD機のIPアドレスを入力し「It works!」と表示されれば成功です。

Apache 2.4の設定+α

FreeBSDでは、Apacheの性能を向上させる機能があるようなので、それを有効にします。

loader.confには、カーネルモジュールの「accf_http.ko」と「accf_data.ko」を有効にする設定を追加します。 これらのコマンドは、FreeBSD起動時に読み込まれます(すぐに有効にしたい場合は、kldloadコマンドを使います)。

# /boot/loader.conf

以下のコマンドを追記する。
accf_data_load="YES"
accf_http_load="YES"

有効になっているカーネルモジュールは、kldstatコマンドで確認できます。

# kldstat
Id Refs Address            Size     Name
 1   14 0xffffffff80200000 1fa7c38  kernel
 2    1 0xffffffff821a9000 30aec0   zfs.ko
 3    2 0xffffffff824b4000 adc0     opensolaris.ko
 4    1 0xffffffff824bf000 1620     accf_data.ko
 5    1 0xffffffff824c1000 2710     accf_http.ko

rc.confには、Apacheでhttp_acceptを有効にするコマンドを追加します。

# vi /etc/rc.conf

以下のコマンドを追記する。
apache24_http_accept_enable="YES"

FreeBSD機を再起動すると、性能向上機能が有効になります(私はまだ体感できていません)。

ご参考

参考にした記事は以下の通りです。

SSL証明書(Let's Encrypt)の取得と設定

Let's Encryptの取得ツールのインストール

無料のドメイン証明書発行機関:Let's Encrypt(https://letsencrypt.jp/)を使って、SSL証明書を取得します。 証明書の取得には、certbotというツールが便利なので、certbotをインストールして使用するものとします。

certbotはPythonを使っているため、certbotをインストールすると、Python関連ファイルもインストールされます。

# pkg install py27-certbot
Updating FreeBSD repository catalogue...
FreeBSD repository is up-to-date.
All repositories are up-to-date.
The following 34 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
        py27-certbot: 0.9.3,1
        python27: 2.7.13_1
        libffi: 3.2.1
        readline: 6.3.8
        py27-setuptools27: 32.1.0
        py27-openssl: 16.0.0
        py27-six: 1.10.0
        py27-cryptography: 1.6
        py27-enum34: 1.1.6
        py27-cffi: 1.7.0
        py27-pycparser: 2.10
        py27-pyasn1: 0.1.9
        py27-idna: 2.0
        py27-ipaddress: 1.0.17
        py27-psutil: 5.0.1
        py27-mock: 1.3.0_1
        py27-pbr: 1.8.1
        py27-pip: 9.0.1
        py27-funcsigs: 1.0.2
        py27-pyrfc3339: 1.0
        py27-pytz: 2016.10,1
        py27-parsedatetime: 2.1
        py27-zope.interface: 4.1.3
        py27-configobj: 5.0.6_1
        py27-zope.component: 4.2.2
        py27-zope.event: 4.1.0
        py27-acme: 0.9.3,1
        py27-requests: 2.11.1
        py27-werkzeug: 0.11.15
        py27-dnspython: 1.15.0
        py27-ndg_httpsclient: 0.4.2
        py27-python2-pythondialog: 3.4.0
        python2: 2_3
        py27-configargparse: 0.11.0

Number of packages to be installed: 34

The process will require 110 MiB more space.
17 MiB to be downloaded.

Proceed with this action? [y/N]: y
Fetching py27-certbot-0.9.3,1.txz: 100%  292 KiB 299.1kB/s    00:01
Fetching python27-2.7.13_1.txz: 100%   10 MiB 678.6kB/s    00:16

(途中略)

[34/34] Installing py27-certbot-0.9.3,1...
[34/34] Extracting py27-certbot-0.9.3,1: 100%
Message from python27-2.7.13_1:
===========================================================================

Note that some standard Python modules are provided as separate ports
as they require additional dependencies. They are available as:

bsddb           databases/py-bsddb
gdbm            databases/py-gdbm
sqlite3         databases/py-sqlite3
tkinter         x11-toolkits/py-tkinter

===========================================================================
Message from py27-pip-9.0.1:
============================== !!!! WARNING !!!! ==========================

pip MUST ONLY be used:

 * With the --user flag, OR
 * To install or manage Python packages in virtual environments

Failure to follow this warning can and will result in an inconsistent
system-wide Python environment (LOCALBASE/lib/pythonX.Y/site-packages) and
cause errors.

Avoid using pip as root unless you know what you're doing.

============================== !!!! WARNING !!!! ==========================
Message from py27-funcsigs-1.0.2:
===>   NOTICE:

The py27-funcsigs port currently does not have a maintainer. As a result, it is
more likely to have unresolved issues, not be up-to-date, or even be removed in
the future. To volunteer to maintain this port, please create an issue at:

https://bugs.freebsd.org/bugzilla

More information about port maintainership is available at:

https://www.freebsd.org/doc/en/articles/contributing/ports-contributing.html#maintain-port
Message from py27-certbot-0.9.3,1:
===========================================================================

The Let's Encrypt Client is BETA SOFTWARE. It contains plenty of bugs and
rough edges, and should be tested thoroughly in staging environments before
use on production systems.

This port installs the "standalone" Python client only, which does not use and
is not the letsencrypt-auto bootstrap/wrapper script.

To obtain certificates, use the 'certonly' command as follows:

 # sudo certbot --server  certonly

Note: The client currently requires the ability to bind on TCP port 80. If
you have a server running on this port, it will need to be temporarily stopped
so that the standalone server can listen on that port to complete
authentication.

The letsencrypt plugins to support apache and nginx certificate installation
will be made available soon in the following ports:

 * Apache plugin: security/py-letsencrypt-apache
 * Nginx plugin: security/py-letsencrypt-nginx

===========================================================================

以上で、インストールは終わりです。

SSL証明書の取得(certbotの使用)

certbotは、SSL証明書の取得と更新を自動的に行うツールです。certbotを実行すると対話形式にSSL証明書の取得を行うことが出来ます。

今回のcertbotは、standaloneオプションで実行します。standaloneオプションは、certbotが一時的にhttpサーバを立ち上げることからApacheと競合します。 そのため、Apacheを停止してからceetbotを実行します。Apacheなどcertbotと競合する状態では、certbotが競合を検知するため、Apacheを停止してからコマンドを再実行して下さい。

# /usr/local/etc/rc.d/apache24 stop
Stopping apache24.

# certbot certonly --standalone -d hoge%hoge.mydns.jp -m XXX@YYY.ZZZ  (※)

Note: 上記のコマンドでは、「-m XXX@YYY.ZZZ」でメールアドレスを指定しています。このメールアドレスは、何かあったとき(証明書の有効期限が間近のときなど)に 連絡が来るメールアドレスです。このコマンドに含めない場合は、対話形式でメールアドレスを聞かれます。

Let's Encryptの契約条件に同意するか聞かれます。ここでは、「Agree」(同意する)を選択します。

図のように、一般的には手動でOpenSSLなどを用いて証明書発行手続きを行うところを、自動で処理が行われます。

- Congratulations! Your certificate and chain have been saved at /usr/local/etc/letsencrypt/live/XXX/fullchain.pem. Your cert will expire on XXXX-XX-XX. To obtain a new or tweaked version of the certificate in the future, simply run Certbot again. To non-interactively renew *all* of your certificates, run "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

以上の様に、「Congratulations!~」と言う文章が表示されれば、SSL証明書の取得が成功しています。

しかし、有名なDDNSのドメインでは、以下のようなエラーメッセージが表示され、SSL証明書の取得に失敗します。

An unexpected error occurred:
There were too many requests of a given type :: Error creating new cert :: Too many certificates already issued for: mydns.jp

これは、Let's EncryptのSSL証明書発行上限(同一ドメイン(今回はmydns.jp)にて週に20個)に到達しているために、SSL証明書発行できない状態になっています。

私もこの状況に陥り、2週間空いた時間に証明書の取得を試み、hoge%hoge.mydns.jpのSSL証明書を取得することができました。

証明書の取得に失敗した場合は、(※)のコマンドを再度実行して下さい。途中、下記のように証明書を更新するかの問いかけがありますが、2のYESを選択します。

Note: 証明書がなかなか発行できない場合は、下記のコマンドにて正式ではない証明書を作成することができます(認証局証明が有効ではない証明書が発行されます)。 (この場合でも、後ほど(※)のコマンドを実行することで正式な証明書に置き換えることができます)

# certbot certonly --standalone -d hoge%hoge.mydns.jp -m XXX@YYY.ZZZ --test-cert

ApacheのSSL設定

ApacheにSSL証明書の設定を行います。始めに「httpd-ssl.conf」にて、SSLモジュールに対して設定を行います。

# cd /usr/local/etc/apache24/extra 
# vi httpd-ssl.conf

SSLCertificateFileの行を、以下のように書き換える。
SSLCertificateFile "/usr/local/etc/letsencrypt/live/hoge%hoge.mydns.jp/fullchain.pem"

SSLCertificateKeyFileの行を、以下のように書き換える。
SSLCertificateKeyFile "/usr/local/etc/letsencrypt/live/hoge%hoge.mydns.jp/privkey.pem"

ServerNameの行を、以下のように書き換える。
#ServerName www.example.com:443
ServerName hoge%hoge.mydns.jp:443
hoge%hoge.mydns.jpは、設定したドメイン名にて変わります。環境に合わせて適宜変更して下さい。

暗号の強度を上げるため、同じく「httpd-ssl.conf」に、以下の設定を追加・変更します(2017年1月現在)。 この設定では、古い暗号形式を禁止・OCSPStaplingを有効にしています。

暗号強度の設定は、サーバの用途によって適宜修正して下さい。また、日頃から 最新のセキュリティに関する情報を集めるようにして下さい。記載内容は、 私個人に用途に合わせて概ね問題ないような設定にしています(2017年5月加筆)。

#   SSL Cipher Suite:
#   List the ciphers that the client is permitted to negotiate,
#   and that httpd will negotiate as the client of a proxied server.
#   See the OpenSSL documentation for a complete list of ciphers, and
#   ensure these follow appropriate best practices for this deployment.
#   httpd 2.2.30, 2.4.13 and later force-disable aNULL, eNULL and EXP ciphers,
#   while OpenSSL disabled these by default in 0.9.8zf/1.0.0r/1.0.1m/1.0.2a.
SSLCipherSuite HIGH:MEDIUM:!LOW:!MD5:!RC4:!3DES:!IDEA
SSLProxyCipherSuite HIGH:MEDIUM:!LOW:!MD5:!RC4:!3DES:!IDEA


#   SSL Protocol support:
#   List the protocol versions which clients are allowed to connect with.
#   Disable SSLv3 by default (cf. RFC 7525 3.1.1).  TLSv1 (1.0) should be
#   disabled as quickly as practical.  By the end of 2016, only the TLSv1.2
#   protocol or later should remain in use.
SSLProtocol all -SSLv3 -SSLv2
SSLProxyProtocol all -SSLv3 -SSLv2

#   OCSP Stapling (requires OpenSSL 0.9.8h or later)
#
#   This feature is disabled by default and requires at least
#   the two directives SSLUseStapling and SSLStaplingCache.
#   Refer to the documentation on OCSP Stapling in the SSL/TLS
#   How-To for more information.
#
#   Enable stapling for all SSL-enabled servers:
SSLUseStapling On

#   Define a relatively small cache for OCSP Stapling using
#   the same mechanism that is used for the SSL session cache
#   above.  If stapling is used with more than a few certificates,
#   the size may need to be increased.  (AH01929 will be logged.)
SSLStaplingCache "shmcb:/var/run/ssl_stapling(32768)"

#   Seconds before valid OCSP responses are expired from the cache
SSLStaplingStandardCacheTimeout 3600

#   Seconds before invalid OCSP responses are expired from the cache
SSLStaplingErrorCacheTimeout 600


ファイル末尾に以下の1文を追加する。
Header set Strict-Transport-Security " max-age=315360000;"

Apacheに対しても、SSLのモジュールを読み込む設定を追加します。

# cd /usr/local/etc/apache24
# vi httpd.conf

以下は、コメントアウトされている場合は、コメントを外す。
LoadModule log_config_module libexec/apache24/mod_log_config.so
LoadModule setenvif_module libexec/apache24/mod_setenvif.so
LoadModule ssl_module libexec/apache24/mod_ssl.so
LoadModule socache_shmcb_module libexec/apache24/mod_socache_shmcb.so

LoadModuleの下に、以下の設定(SSL設定を読み込む)を追記する。
Include etc/apache24/extra/httpd-ssl.conf

上記の設定が完了したら、Apacheを再起動する。

# /usr/local/etc/rc.d/apache24 restart
Performing sanity check on apache24 configuration:
Syntax OK
Stopping apache24.
Waiting for PIDS: 1188.
Performing sanity check on apache24 configuration:
Syntax OK
Starting apache24.

以上の状態でブラウザからFreeBSD機に接続し、テスト用のページが見えるか確認します。ブラウザにてFreeBSD機の httpsをつけてIPアドレスを入力(例:https://192.168.15.X)し「It works!」と表示されれば成功です。 途中、ドメイン名が一致しない旨のエラーが出ますが、例外として表示して下さい。

SSL証明書の更新設定

Let's Encryptの証明書は有効期間が90日となっています。ここでは、CronによってSSL証明書を更新することを考えます。

証明書の更新もcertbotにて行うことが出来ます。始めにSSL証明書の更新コマンドが動作するか「--dry-run」(動作確認)オプションを付加して確認します。

# certbot renew --webroot -w /usr/local/www/apache24/data/ --renew-by-default --dry-run

/usr/local/www/apache24/data/は、Apacheのドキュメントディレクトリを設定します。ドキュメントディレクトリを変更した場合は、 /usr/local/www/apache24/data/も修正する必要があります。

上記の様に「Congratulations, all renewals succeeded,」と表示されれば成功です。このコマンドを、Cronに設定します。

Let's Encryptの公式サイトでは、1日2回の更新確認が推奨されているため、cronでも2回更新確認を行います。

# crontab -e

以下のコマンドを追加します。
0 2,5 * * * /usr/local/bin/certbot renew --agree-tos --webroot -w /usr/local/www/apache24/data/ --renew-by-default && /usr/local/etc/rc.d/apache24 reload

※はじめ、Cronの時刻設定が「0 2/5 * * *」になっていましたが、コメントのご指摘通り誤りでした。正しくは「0 2,5 * * *」です。

ご参考

参考にした記事は以下の通りです。

http/2の設定

SSL証明書の設定が終わった後、http/2の設定を行います。http/2を簡単に言うと、ページの読み込みを高速化する技術です(http/2で動作するにはSSL通信が必須です)。

Apache用のhttp/2モジュール:mod_http2をインストールします。

# pkg install mod_http2-devel
Updating FreeBSD repository catalogue...
FreeBSD repository is up-to-date.
All repositories are up-to-date.
The following 2 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
        mod_http2-devel: 1.8.5
        libnghttp2: 1.18.0

Number of packages to be installed: 2

203 KiB to be downloaded.

Proceed with this action? [y/N]: y
Fetching mod_http2-devel-1.8.5.txz: 100%   99 KiB 101.3kB/s    00:01
Fetching libnghttp2-1.18.0.txz: 100%  104 KiB 106.4kB/s    00:01
Checking integrity... done (0 conflicting)
[1/2] Installing libnghttp2-1.18.0...
[1/2] Extracting libnghttp2-1.18.0: 100%
[2/2] Installing mod_http2-devel-1.8.5...
[2/2] Extracting mod_http2-devel-1.8.5: 100%
Message from mod_http2-devel-1.8.5:
If you want to have the h2 module enabled in your apache installation,
you need to add

   LoadModule http2_module modules/mod_h2.so

somewhere in your config files and add a line like

   H2Engine on

whereever you want the module to be active (general server of specific
virtual hosts).

NB: The shared libraries were renamed from mod_http2 to mod_h2 to
    avoid conflicts with the (now bundled) mod_http2 in www/apache24

http2_module(mod_h2.so)は、/usr/local/libexec/apache24/以下にインストールされます。

Apacheに対して、http2_moduleの読み込み設定を行います。

# vi /usr/local/etc/apache24/httpd.conf

以下、コメントアウトされていれば、コメントを外す。
LoadModule socache_shmcb_module libexec/apache24/mod_socache_shmcb.so

LoadModuleの最後尾に、http2_moduleのモジュール読み込みを追加する。
LoadModule http2_module libexec/apache24/mod_h2.so

SSL設定に対しても設定を行います。

# vi /usr/local/etc/apache24/extra/httpd-ssl.conf

<VirtualHost _default_:443>の下に、次のコマンドを追記する。
Protocols h2 http/1.1

以上の設定が終わったら、Apacheを再ロードします。

#/usr/local/etc/rc.d/apache24 reload
※「H2Engine on」は設定の必要はありませんでした。

httpsでページを表示してhttp/2接続できているか確認します。FireFoxの場合は、メニューから「ツール─Web開発─開発ツールの表示」にあるネットワークタブで確認できます。

ご参考

参考にした記事は以下の通りです。

以上で、Apache + SSL(Let's Encrypt) + HTTP/2の設定は終わりです。


ASRock マザボにて、FreeBSD11をUEFI Bootさせる

2017-01-01 13:28:47 | FreeBSD

ASRock マザボにて、FreeBSD11をUEFI Bootさせる

概要

2016年夏ごろ、購入後、大分経ったAsrockマザボにFreeBSD11をいれてUEFI Bootさせようとしたのですが、どうもうまく行きません。暫く、BIOS Bootで起動していたのですが、ふと参考になる記事を見つけ、UEFI Bootに成功しました。そのときのメモです。

参考記事によると、FreeBSDをインストール時にUEFIのBootメニューに登録されないことがあるとのことです。そのため、ここでは別のLinuxシステムからUEFIのBootメニューに登録する作業をします。

大まかな環境は、以下の通りです。

  • OS: FreeBSD 11.0-RELEASE
  • フォーマット: ZFS (RAID1 ミラーリング)
  • パーティション: GPT
  • BOOT方式: BIOS+UEFIの両対応
  • MB: ASRock Q2900-ITX (ファームバージョン:1.50)
  • 作業用OS: Ubuntu 16.04 LTS

参考にした記事は以下の通りです。

以下、Linuxを多少なりとも経験している方向けに細かい話しは飛ばします。

前作業

インストールは通常通り(FreeBSDハンドブックに従い)にインストールします。はじめはBIOSで起動します。この時点で、BootメニューからFreeBSDのUEFIメニューは見えません。

Linuxを立ち上げ、ディスクを確認する。

Linux(私はUbuntuを使いました)をディスクBoot(HDDにインストールせずに)で起動します。USBメモリでも何でもOKです。Linuxが起動したら、terminal(端末)を立ち上げます。

毎回sudoするのも面倒なので、"sudo su"でrootユーザになります。ここから、partedでディスクを確認します。

$ sudo su
# parted -l

2本のHDDが、"/dev/sda"と"/dev/sdb"で認識されていることがわかります。

efibootmgrにて、FreeBSDをUEFI Bootできるようにする。

efibootmgrにて、FreeBSDをUEFIブートテーブルに登録します。

ディスクが2本あるので、片方が逝ったときのために2本とも登録しました。labelは、Bootセレクタで表示される名称です。ディスクの型番で見分けられるようにしました。

# efibootmgr --create --disk /dev/sda --part 1 --loader \\EFI\\BOOT\\BOOTX64.EFI --label "FreeBSD DT01ACA3"
# efibootmgr --create --disk /dev/sdb --part 1 --loader \\EFI\\BOOT\\BOOTX64.EFI --label "FreeBSD MD04ACA3"

なんとなくUEFIブート順が気になったので修正しました。2本のHDD以外はそのままです。

# efibootmgr --bootorder 0,2,1,7,8,9,A

これで、Linuxの作業は終了です。シャットダウンして終了します。

動作確認

Bootメニューに、登録した名称が2つ出てきます。

登録した名称を選択して起動すると、画面解像度を認識してFreeBSDが起動しました。このため、UEFI Bootで起動していることが確認できます(確認できたはず…)。