Linux

PacketFenceによるWeb認証ネットワークの構築手順をメモ

最近ではカフェや空港など公共の場でWiFi環境が整備されはじめとても便利になりました。これらのWiFi環境に接続する時には、Webページに飛ばされてユーザ名とパスワードを入力するよう促される場面が多々あると思います。そしてこのようなWebベースのユーザ認証を実現するソフトウェアとしてPacketFenceというものがあることを最近知りました。そこで実際に使ってみたところ、機能が充実しており便利だったため、PacketFenceを用いたWeb認証ネットワークを構築してみました。その構築手順についてメモします。

PacketFenceの使用構成と機能

まずはじめに、PacketFenceを使用する構成について説明します。以下の図1が使用構成になります。図1のように、2つのNIC(図1中のeth0、eth1)を持つPacketFenceがインストールされたubuntu12.04マシン(図1中のPacketFence Server、以降ではPacketFenceサーバと呼びます)を、Web認証を行いたい図1中の認証ネットワークとインターネットの間に直列に接続した構成で使用します。ちなみに、図1中のRouterがDHCPサーバ、DNSサーバとして動作します。

pfnet_configure図1 PacketFenceの使用構成

そして、認証ネットワーク側のユーザ端末がWiFiアクセスポイントやネットワークスイッチに接続すると、RouterはIPアドレスを割り振ります。その後、例えばユーザ端末がいざWebブラウジングしようとすると、PacketFenceがユーザ端末の通信に介入して、ユーザをWebブラウザ上のログイン画面へリダイレクトし、認証を行うといった流れになります。PacketFenceの主な機能を以下に簡単にまとめます。

  • WiFiアクセスポイント、またはネットワークスイッチへ有線接続したユーザ(図1中のWired User PC、Wireless User PC)に対してWebブラウザを通して認証可能。RADIUSのようにWiFiアクセスポイント機器やネットワークスイッチ、さらにユーザ端末に対する特別な要件(IEEE802.1xへ要対応など)が不要。
    WiFiアクセスポイント、ネットワークスイッチに接続したユーザの端末には以下のようなログイン画面がWebブラウザ上に表示されます。

    captive_portalpage2図2 ユーザ接続時のログイン画面



    上のログイン画面でPacketFence側にあらかじめ登録された正しいユーザ名とパスワードを入力すれば、そのユーザはインターネットへ接続できるようになります。ログインが成功しない限りユーザ端末はインターネットへの接続が完全に遮断された状態となり、Webページへのアクセスはもちろん、メール送受信、pingも通りません。なお、上のログイン画面は、css、htmlファイルを修正することで自由にカスタマイズ可能です。

  • アカウント毎に接続可能端末数の制限や各アカウントのログイン時間、さらにRADIUSと連携させることでアカウント毎の帯域使用量の管理、設定した帯域使用量を越えたアカウントの抽出、ある条件を満たしたアカウントへのペナルティなども設定することができるそうです。ただ、今回はRADIUSとの連携までは設定していないため、以降にRADIUSとの連携による帯域使用量の管理方法やペナルティの設定方法については書いてありません。
  • アカウントを持っていないユーザに対してゲストアカウントを作成させることも可能です。具体的には、上の図2の画面下方にある「Sign up」をクリックすると、以下のようなゲストアカウント取得のための画面が表示され、ユーザは必要事項を記入することでゲストアカウントを取得できます。なお、ユーザに入力させる必要事項の修正やゲストアカウントの有効期限などはPacketFence側で設定可能です。
    signuppage

他にもPacketFenceには色々な機能が用意されているようです。今回は単純にPacketFenceを用いてユーザ認証だけを行うネットワークを環境しました。その構築手順を以降にメモします。

RADIUSを用いた認証ネットワークとの違い

この前はRADIUSによる認証ネットワーク環境構築のための7ステップをメモしました。しかし、実際の運用にあたって、RADIUSを用いると以下のような2つの問題があります。

  • RADIUSに対応しているwifiアクセスポイントやネットワークスイッチが必要であり、これらは高価な場合が多い
  • 一般ユーザにとって接続が簡単でない場合がある。例えば、Windows 7からRADIUS認証ネットワークに接続する場合、設定変更を要する場合があり、この設定変更は一般ユーザにとって分かりにくい

以上のような問題から、RADIUSを導入することは管理する側とユーザ側の両方にとってすごく簡単かと聞かれるとそうではありません。しかし、RADIUSのほうが優れている点はもちろんあります。例えば、RADIUSでは、ユーザの端末に対してIPアドレスを割り振る前に認証処理を行うことができます。それに対して、今回構築するWeb認証ネットワークでは、どんな端末でも認証する前にIPアドレスを割り振ってしまいます。したがって、Web認証のネットワークはRADIUS認証を用いたネットワークよりもセキュリティは劣ると言えると思います。よって、Web認証のほうが全ての面で優れているかというとそうではないので、RADIUSとWebベースどちらの認証ネットワークを構築するかは対象とするユーザや規模によって適切に選択する必要がありそうです。


PacketFenceのインストール

前置きが長くなりましたが、PacketFenceのインストール手順について説明します。注意点として、ubuntu12.04では下記の通りで問題なくインストールできますが、12.04以降ではインストールできませんでした。PacketFenceの開発元によると、ubuntu12.04、Debian 7.0 (Wheezy)、RHEL/CentOSに対応しているようです。以降では、インストール先がubuntu12.04であることを前提とします。
まず以下のコマンドで、「/etc/apt/sources.list.d/packetfence.list」というファイルを作成、編集します。以下ではエディタとしてnanoエディタを用いています。

$ sudo nano /etc/apt/sources.list.d/packetfence.list


そして作成したファイルに以下の内容を記述します。

deb http://inverse.ca/downloads/PacketFence/ubuntu precise precise



ただし、上記はubuntu12.04の場合です。

次に以下のコマンドによってPacketFenceをインストールするための公開鍵を取得します。

$ sudo apt-key adv --keyserver keys.gnupg.net --recv-key 0x810273C4


最後に以下のコマンドを実行することでPacketFenceのインストールが開始されます。

$ sudo apt-get update
$ sudo apt-get install packetfence


上記でインストールが開始されますが、途中で以下のようにmysqlやnullmailerの設定をするための画面が表示される場合があります。

pf_mysql_small図3 mysqlの設定画面


pf_nulmailer図4 nullmailerの設定画面


pf_nulmailer2図5 nullmailerの設定画面


この場合は、適当に入力して次に進んで下さい。なお、これらの設定は後からでも変更できます。


最後に、PacketFenceの設定を行うまえに、以下のコマンドによって、ubuntuのパケット転送を有効にしておく必要があります。パケット転送を有効化しておかないとPacketFenceが正しく動作できません。

$ sudo sysctl net.ipv4.ip_forward=1



以上で準備は完了です。次はPacketFenceの設定を行っていきます。

PacketFenceの設定

インストールが完了したら、ブラウザを開き以下のURLにアクセスします。以下のURLは、PacketFenceの各設定を行うための管理画面のURLになります。管理画面にアクセス後、PacketFenceの初期設定を行っていきます。初期設定は全部でステップ6まであります。以降で各ステップについて説明します。

https://localhost:1443


ステップ1:PacketFenceの使用構成の指定

初めて管理画面にアクセスすると、以下の画面が表示され、ここではステップ1としてPacketFenceの使用構成を指定します。

pf_config1図6 ステップ1:PacketFenceの使用構成の指定画面

使用構成としては、「インライン」と「VLAN」の2つがあります。インライン構成では、冒頭に載せた図1のように、PacketFenceサーバが、認証ネットワークとインターネットに直列(インライン)に接続して使用する構成です。このインライン構成では、PacketFenceサーバが図1の認証ネットワークの通信全てを監視することになります。ここでは、インライン構成でPackeFenceを使用するので、画面内の「Inline enforcement」にチェックを入れて画面下の「Continue」で次に進みます。

ステップ2:PacketFenceが使用するインターフェースの設定

次にステップ2として以下の画面が表示されます。ここでは、PacketFenceサーバが持つ2つのインターフェースの各IPアドレス、どちらが認証ネットワークにつながれているかなどを指定します。

pf_step2図7 ステップ2:PacketFenceが使用するインターフェースの設定画面

インライン構成では、認証ネットワークに接続されたインターフェースの「Type」を「inline」に指定し、インターネットに接続されたインターフェースの「Type」を「Management」に指定します。なお、この管理画面にアクセスする際にURLとして「https://localhost:1443」を指定しましたが、このステップ2以降は、ここでManagementに指定したインターフェースのIPアドレスが管理画面にアクセスする際に必要なIPアドレスになります。よって図7のように設定した場合は、管理画面のURLは「https://192.168.122.12:1443」になります。

図7の画面内のインターフェース名であるeth0、eth1をクリックすることで各インターフェースの設定を行うことができます。eth0をクリックしてみると、以下の画面が表示されます。ここでは、以下のように設定しました。eth0は認証ネットワークに接続されているインターフェースであるため、「Type」を「Inline」に設定しています。設定が終わったら、「Save」をクリックして完了です。

pf_eth02
図8 eth0の設定

また、eth1をクリックしてみると以下の画面が表示されます。eth0の場合と異なるのは、「Type」を「Management」に設定している点です。この場合はDNSの設定は不要になります。

pf_step2_eth1図9 eth1の設定

また、図7の下方にあるDefault GatewayのIPアドレスを指定したら、画面下の「Continue」で次に進みます。

ステップ3:PacketFenceが利用するMySQLサーバの設定

ステップ3では、PacketFenceが利用するMySQLサーバの設定を行います。画面内の必要な部分を適当に入力して完了です。

pf_step_22図10 ステップ3:PacketFenceが利用するMySQLサーバの設定画面

PacketFence accountは、管理画面にアクセスする時に必要となるアカウントです。
データベースのユーザ名とパスワードを入力したら画面内の「Create database and tables」をクリックし、さらにPacketFenceアカウントのユーザ名とパスワードを入力したら「Create user」をクリックします。そして最後に「Continue」をクリックしてステップ3は完了です。

ステップ4:PacketFenceの構成に関する設定

ステップ4では、以下の画面のようにドメイン名やホスト名DHCPサーバなどを設定します。

pf_step4図11 ステップ4:PacketFenceの構成に関する設定画面


ステップ5:PacketFenceのAdministratorアカウントの設定

ステップ5では、PacketFenceのAdministratorアカウントの作成です。これも適当にユーザ名とパスワードを設定して完了です。

pf_step5図12 ステップ5:PacketFenceのAdministratorアカウントの設定画面


ステップ6:PacketFenceの起動

そして最後のステップ6でPacketFenceを起動します。

pf_step6図13 ステップ6:PacketFenceの起動画面

画面下の「Start PacketFence」をクリックすると、各DaemonのStatusがStartingになり、そのうちStartedになります。これでPacketFenceの設定は完了です。

再度ブラウザから「https://192.168.122.12:1443」にアクセスすると、管理画面へのログイン画面が表示されます。そしてログインすると、以下のような画面が表示されると思います。

pf_firstpage図14 PacketFenceログイン後の画面

この管理画面から様々な設定やまたユーザのアカウント毎の情報を確認、制御することができます。以降では、ユーザアカウントの作成方法を説明します。

PacketFenceのユーザアカウントの作成手順

ユーザがPacketFenceによる認証ネットワークに接続するには、あらかじめユーザアカウントを作成しておく必要があります。ただ、あらかじめユーザアカウントを持たないユーザでも、ゲストアカウントを作成することで認証ネットワークに接続することができます。しかしここではゲストアカウントについては省略し、ユーザアカウントの作成手順を以下で説明します。


まずPacketFenceの管理画面にアクセスし、以下の画面上部の赤線枠内の「Configuration」をクリックします。
pf_firstpage_2


すると、以下のようにPacketFenceの設定画面に移ります。ここで様々な設定を行います。ユーザアカウントを作成するには、以下赤線枠内の「USERS」の「Create」をクリックします。
pf_generalsetting_2


ここで必要事項を入力することでユーザアカウントを作成できます。なお、「Registration Window」にユーザアカウントの使用開始日と使用終了日を設定することができます。
pf_createuser


必要事項を記入し終えたら、一番下の「Create Users」をクリックして完了です。すると以下の画面が出ます。必要ならば「Send Email」をクリックすることで、登録したユーザのメールアドレスに通知を送信することができます。
pf_createduser

以上でユーザアカウントの作成は完了です。作成したユーザアカウントの一覧と各アカウントの情報は、以下の赤線枠内の「Users」の画面で確認および修正することができます。
pf_firstpage_3

なお、作成したユーザアカウントを使って認証ネットワークに接続した端末は以下のように管理画面に表示され、管理者はリアルタイムにモニタリングすることができます。

pf_dashboard


Web認証画面のカスタマイズについて

PacketFenceの設定に関わる各ファイルは、ubuntu12.04にインストールした場合だと「/usr/local/pf/」に置いてあります。そしてこのディレクトリ内に「html」というディレクトリがあり、この中のhtml、cssファイルを修正することでWen認証画面を自由にカスタマイズできます。

動作しない場合

まずPacketFenceが正しく動作している場合は、管理画面の「Services」の画面において、全てのDaemonのStatusが以下のように「Started」になっているはずです。

pf_status_started



もし、いずれかのDaemonが「Started」になっていない場合は、上の画面下にある「Stop All」を押した後、再度管理画面にアクセスして、「Start ALl」を押してみて下さい。それでも全てのDaemonがStartedにならない場合は、一度ホストマシン(ここではubuntu)を再起動し、その後、ターミナル上で下記のコマンドを実行することでPacketFenceを起動してみて下さい。

$ sudo service packetfence start



これで何もエラーが出ずに起動できれば、管理画面上で全てのDaemonがStartedになり、PacketFenceが正常に動作すると思います。これらの作業後もまだ「Started」にならないDaemonがある場合は、そのDaemonに関する設定に問題がある可能性があるのでそのDaemon関連の設定を見直すと解決に繋がるかもしれません。

まとめ

Web認証を実現するソフトウェアであるPacketFenceを使うことで、割と簡単にWeb認証ネットワークを構築することができました。他にWeb認証を実現するソフトウェアとして、WiFidogというソフトウェアなども試そうとしましたが、どうもインストールがうまくいかず結局私では使えませんでした。しかし、PacketFenceはインストールがすんなりと完了し非常に楽でした。また、ブラウザ上での管理画面が用意されていて設定が楽である点、機能が満載である点も良かったです。ただ、PacketFenceがどれだけのユーザ数を収容できるのか、実用に耐えうる性能なのかなどは確認できていないので、もし機会があれば確認してみたいと考えています。

SPONSORED LINK

3 thoughts on “PacketFenceによるWeb認証ネットワークの構築手順をメモ

  1. Can not successfully install Packetfence in Ubuntu 12.04
    Is it possible to successfully install packetfence in 12.04

  2. 初めまして。
    突然のコメント送信、失礼します。
    このページの通りにコマンドを(コピペにて)入力してみましたが、
    色々とエラーメッセージが表示され、インストールできませんでした
    相談に乗っていただけませんか?

匿名 にコメントする コメントをキャンセル

メールアドレスが公開されることはありません。