ライン

ポイント:わかりやすく使えるように近づいた

ライン

 はじめに

高性能なファイアウォールアプリ pfSense

 久々に導入をやってみました。
これまでの多くは、VMware上に導入でした。
ただ、ネットワークを有効にして起動にし、192.168.1.0/24 のネットワークが重複してしまった結果、面倒になった経験がなんと2回もありました。

 今回は、家庭に転がっているHP ML110 G5に512MBのECCのDIMM2枚を入れ、USBメモリー2GBを機器内蔵状態で、CD-ROM起動のpfSenseを動作させる内容にすることにしました。(後段で、結局そのUSBメモリー起動に変更しています)

 今回試したのは、pfSense 2.2-RELEASEという最新のバージョン。どんな感じに変わったのか楽しみです。

 起動

CD-ROM起動のLiveCD利用

 pfSenseは、ハードディスクに導入する形の他、LiveCD等から起動して、設定ファイルをUSB等のメディアに保存する形で利用できる形があります。今回は、この形で動かしてみることにします。

 オフィシャルページよりダウンロードで入手することができます。今回は、普通に 「Live CD with Installer」を選択し、アメリカの最上部のものより入手しました。

 かつて持っていたメディアの倍近くの容量になっていました。
とりあえず、CD-Rに焼いて起動させてみることにします。

 今回使用しているのは、ML110 G5なので、NICが1枚しかありません。インテルのEXP9301CTを1枚出してきて、2枚のNICのあるサーバにして入れています。

 起動は、作成したCDをマシンに入れて起動するだけ。em0とbge0の2つのNICが見えてくるので、em0をWAN、bge0をLANという形で進めます。

*** Welcome to pfSense 2.2-RELEASE-cdrom (amd64) on pfSense ***

 WAN (wan)       -> em0        -> v4/DHCP4: --
                                  v6/DHCP6: --
 0) Logout (SSH only)                  9) pfTop
 1) Assign Interfaces                 10) Filter Logs
 2) Set interface(s) IP address       11) Restart webConfigurator
 3) Reset webConfigurator password    12) pfSense Developer Shell
 4) Reset to factory defaults         13) Upgrade from console
 5) Reboot system                     14) Disable Secure Shell (sshd)
 6) Halt system                       15) Restore recent configuration
 7) Ping host                         16) Restart PHP-FPM
 8) Shell

99) Install pfSense to a hard drive, etc.

Enter an option:

 メニューの8と14を選択し、SSHで接続してみました。(初期のsshdは無効になっています)
IDは、admin。パスワードの入力はチャレンジレスポンス認証により "pfsense" と入力することによりログインすることが可能です。

[2.2-RELEASE][admin@pfSense.localdomain]/root: uname -a
FreeBSD pfSense.localdomain 10.1-RELEASE-p4 FreeBSD 10.1-RELEASE-p4 #0 36d7dec(releng/10.1)-dirty:
 Thu Jan 22 15:12:35 CST 2015     root@pfsense-22-amd64-builder:/usr/obj.amd64/usr/pfSensesrc/src/sys/pfSense_SMP.10  amd64

こんな感じで、FreeBSD 10.1がベースになっていることを確認することができました。
このタイミングでadminのパスワードは変更をしておきました。

 空いている側のNICには無線LANのアクセスポイント(MZK-RP150Nという携帯型の無線APでちょっと外出時には便利)を接続してきました。
pfSense経由で利用する無線LANで動作させます。接続すると、本体のサウンドが鳴るようになっています(デフォルト)。これは結構うるさいですが、セキュリティとしては有効ですね。まだインターネットは見えません。

pfSenseのWAN側のネットワーク経由でウェブアクセスで画面をみていきます。

https://(IPアドレス)/ でアクセスすることができました。もちろん、SSLの鍵は "オレオレ" な値になります。
※海外から見に来るがウェブ翻訳を利用しても意味がわからないと思う…
ログインは、先ほど変更したadminのパスワードではなく、元々のものになっていました。
これは、sshでログインした際に "3) Reset webConfigurator password" を利用して変更すれば良いです。
私は、passwdコマンドで変更していました。

ログインで成功しても失敗しても、サーバのbeepがなるのが驚きます。
これは、以下の画面で操作して状態を変更することができます。

アドバンスドメニューのNotifications の下部にあるシステムサウンドの箇所にクリックを入れ、「Save」で機能が停止できます。
必要がないと思われる方は変更すると良さそうです。

ちなみに、PHP-Growlって何? Growlサーバは良くわからないので、このままにしました。ポップアップで通知するものっぽい?
メール通知は今回まだ利用しない方針にしました。

Message from syslogd@pfSense at Feb  8 08:24:34 ...
pfSense php-fpm[52136]: /index.php: webConfigurator authentication error for 'admin' from -

Message from syslogd@pfSense at Feb  8 08:25:02 ...
pfSense php-fpm[52136]: /index.php: Successful login for user 'admin' from: -

コンソールにはこんな感じに表示されていました。
以下の画面の右上に表示されているnoticesにはその理由などが表示されていました。
やっぱり、USBなりにインストールして動作するようにした方が便利そうです。
(どこのHUBに刺したのか100BaseTXでの接続になっていました)

 知っているpfSenseの画面(メニュー)よりもかなり機能充実です。
日本語表示で使えると便利そうです。
※でもドキュメントのTranslationsの部分には、「Added Japanese translation 」とかあるのに…。

Language: The language to use for the GUI. Default is English, Portuguese, Turkish,
and Japanese are also available depending on the version in use.

/usr/local/share/locale/ja/LC_MESSAGESとか見ると、pfSense.poあるじゃん。
…でも、pfSense.moは置かれていない。

# pkg install gettext-tools

これで、変換できるツールが準備できました。置かれていた物をmoファイルを作成してみたものの、バージョンが既に古い物なんだね。

 英語版のものが元なので、これを入手してゴニョゴニョと修正してみる。
→/usr/local/share/locale/en/LC_MESSAGES/pfSense.pot

..
msgid ""
msgstr ""
"Project-Id-Version: fkimura Ver 0.2\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-12-12 12:10-0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: JAPANESE <LL@li.org>\n"
"Language: ja\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"

#: etc/inc/array_intersect_key.inc:37
msgid "Wrong parameter count for array_intersect_key()"
msgstr "array_intersect_key()のパラメータ数が間違えています"
..

のように修正していけばいいだけ。以前はこんなの良く作ったっけな…。
grep msgstr pfSense.po|wc -lで見たら、5981みたいな数見た。流石にやってられないのでパス。
少しだけ修正入れてみて変わるところは見ておきたいところ。

msgfmt -v -o pfSense.mo pfSense.po
9 translated messages, 5981 untranslated messages.

とか作ってみた。
おやしかし、メニュー上には加わってこない。
ウェブ上のソースを覗くことに。

<select name="language">
    <?php
         foreach(get_locale_list() as $lcode => $ldesc) {
             $selected = ' selected="selected"';
             if($lcode != $pconfig['language'])
             $selected = '';
         echo "<option value=\"{$lcode}\"{$selected}>{$ldesc}</option>";
         }
    ?>
</select>

ふむ。そういうことか。/etc/inc/pfsense-utils.incを変更して、日本語が出るように行追加しました。
※面倒になってきて、このページでは割愛

以下のように、修正を入れた部分が日本語になります。
※※責任持ってメンテナンスするなんてありえないので、個人用で遊ぶことにします※※
そのうちにのバージョンで誰か入れてくれるでしょう。

ちゃんと日本語になったので、良しとします。

 さて、英語で先は見ることにします。適当にいじれる部分を変更してみました。
メニューの遷移は、以下の例では、「System」⇒「General Setup」と流れた内容です。

ホスト名やドメインはそのままにしていますが、タイムゾーンは東京(日本)にして、NTPも国内に変更しました。
ちなみに、WAN/LANの両方を有効にしたところで、WAN側のWeb GUIが使えなくなりました。
これは、LAN側より同様で接続して、Firewall → Rules でメニューを表示し、WANタブをクリック。
以下のようにすることで、WAN側でもアクセスできます。
#ここでは、キャプチャーを取得するために必要だったためで、作業完了後は適用箇所を無効にする予定です

 後は、LAN側でDHCPを動作させて、DNS利用ができるようにしていきます。
無線APは、アクセスポイントのモードに設定をして、DHCPはクライアント動作のみさせるようにして、LAN側のDHCPはpfSenseに役割を持たせることにしました。
DNS Resolverは、ちょっと緩めにしてみました。

LAN側の無線LANのAP経由でインターネットを利用したノートPCは何事もなかったかのように利用することができました。

 バックアップ

 さて、この辺りで時間切れ。ファイルを保存しておくことにします。

現在までの設定を保存するため、「Download configration」をクリックすると”config-pfSense.localdomain-20150208213904.xml” というファイルが保存できました。

 Captive Portal

 ここで日付が変わりました。
あまりに良い感じだったので、CD-ROM起動からUSBメモリー起動に変更しました。
途中をキャプチャーしておけば良かったなと思うのですが、とりあえずそのままできちゃったので省略。
 なかなか使いやすくなっていました。その後は、前回取得したバックアップをrestoreして続きができるようになりました。

 さて、気が向いて久々にCaptive Portalを動かすことにします。前回はこんな感じで、FreeRadiusも入れてやったのですが、今回はシンプルに実装する形を試します。

ServicesからCaptive Portalをメニュー選択すると、上記のようにZonesという設定画面になります。

名前は文句をいわれ、こんなにしてみました。
有効化と利用インターフェイスをLAN側で指定。
認証を選択。ローカルユーザマネージャーを使用するように選択。
今回はRadiusは利用しない形で。
ユーザマネージャーにアカウントを追加してみる。
最初に、Wi-Fi認証用のグループを作成しておきます。
一回保存すると、「Assigned Privileges」というのが増えている。
キャプティポータル用のグループになりました。
ユーザを追加し、グループにも所属させました

これで準備はできたはず。無線LANで接続してみます。一応ここではSSIDのパスワードは有りにしています。
インターネットブラウザでアクセスすると以下の画面が表示されます。
このページが正しく表示されるケース(ERR_connection_abortedになる)が高くないので、ちょっと不安定です。
見た感じだと、SSLの警告ページを表示しかけて、エラーページに遷移する感じに見えます。(※以下に記述したSSL通信を有効にしているため)
これは早すぎるのだと思い、Services: Captive portalの設定画面にある "Idle timeout" を2分にすることで回避できるようになりました。
これでひとまずは解消です。

以下がログイン時のページです。
※前回のページも書いた通り、このページは自作することが可能です。

ここで、先ほど作成したIDとパスワードでログインを完了すると、自由にインターネットを参照できるようになりました。
ただし、このページはhttpなページなので、SSL通信にしたいところです。

 こんな感じに設定することで、SSL通信になりました。

 接続中のユーザは確認することができます。
その他、接続時間や通信速度などはウェブ設定画面で制限することができるので、その後の調整は適当にやってください。

 その他で気になるのは、認証後はWAN側のネットワークに通信できてしまうこと。
ルータの設定画面とか内部で動作している機器のWebGUIなどに平気でアクセスできてしまいます。
このため、Interfaces: LAN にある "Block private networks" を有効にしてしまったら、既にWAN側のデフォルトゲートウェイにアクセスできない始末となり、意味不明なことになってしまいました。(この使い方は誤り)
Firewall: Rules の設定のLANタブで

のように、通信をさせないようにすることで解消させました。
もうちょっと気持ちが悪い部分が残るので、少し考えてみようとは思っています。

LAN側の通信速度を制限する方法がいくつかありますが、簡易的には以下のようにすることができます。

いろんなグラフ表示も便利そうです。本当は少しユーザに利用させて動き評価したいけど、そんなわけにもいかず。
ここは雰囲気だけ。

 バウチャー

 スペインに行ったときに、スターバックスなどでWi-Fi用のバウチャーチケットをレジ印字で受け取ることができました。
この手の機能をバウチャー機能と呼んでいるみたいです。

 Captive PortalでIDとパスワードを使わせるのはちょっと面倒という場合に、ゲスト的な人に一定時間利用可能なバウチャーチケットを渡すことで一時的な無線LANの利用が可能になるようなことがしたいときに便利です。
 ドイツで開発されているPDFまたは印刷でその券まで作成できる機能があるみたいなので、試してみようと思います。
食事ができる店なんかで、飲食のお客様に配布するなどで活用できそうです。

 設定は以下のように、サービスのCaptive portalのVouchersタブにあるEnable Vauchersにクリックして有効にする箇所から開始します。
初期の秘密鍵や公開鍵が編集可能な状態になっています。鍵を作り直す方法はマニュアルページを参照して作成してください。
面倒になってきてしまいごめんなさい。
 また、パスワードで利用可能な文字が "Character set"として並んでいます。

ブルーの部分をクリックするとCSVファイルが取得できます。
作成しているバウチャーの文字列をキーボードで入力します。
全部数字だけで構成してみたのですが、20桁になってしまい、入力が厳しいかなぁと。

ステータス画面では、以下のような表示がされていました。

 さて、このCSVの内容を印刷形式で出力できるアプリがあります。
Captive Portal Plusです。現状は、captive_portal_plus_v1.0.4.zipという版でした。
解凍したフォルダのcppフォルダよりcpp_install.phpをアップロード。
mvコマンドの実施。

https://(サーバのアドレス)/cpp_install.php

 いまいち、1と2でファイルを配置できなかったので、前作業に同様でzipファイルをアップロードして、/usr/local/www/packages/cpp にファイルを配置しました。

うーん、使い方がいまいちわからないかな。
とりあえず、CSVでファイルができているので、EXCELでマクロ使って印字でもいい。

なんとなく使い方が見えた気がします。
そのうちに、pfSenseが動くボード購入して、ルータとか作成するとVPNなどで楽しく使えるかなという気がしてきました。

とりあえず、ここまでのお試しとします。


【改訂履歴】作成:2015-02-08 更新:2015-02-14

【リンク】

pfSense Project

How to Set Up a Captive Portal Using pfSense

Copyright © 1996,1997-2006,2007- by F.Kimura,