hostapd を使用した簡単な方法で WiFi に強力な暗号化を実装する

WPA2 による暗号化を使用して、オープンな WiFi アクセスを保護し、セキュリティーを高める

無線 LAN のセキュリティーは単純なものにしましょう。hostapd (Host Access Point デーモン) は企業レベルの規準を満たす確実な WiFi 暗号化を実現しますが、FreeRADIUS を実行することによるオーバーヘッドは一切ありません。この記事では、hostapd についての概要と、hostapd を環境に組み込む方法について説明します。

Carla Schroder, Linux administrator and author, Tux Computing

Carla Schroder は、フリーランスとして PC の設定を行っており、スモール・ビジネス向けの Linux システムおよび Windows システムの管理や、ハウツー記事の執筆などを行っています。コンピューターやハイテクをこよなく愛する彼女は、Linux/オープンソース/フリー・ソフトウェアを自らが活動する最高の場として捉えています。彼女がコンピューターとハイテクに出会ったのは 1994年のことでした。彼女の最初の PC は Apple II であり、以降、DOS/Windows、Windows 3.1、Windows XP へと変遷しています。そして 1998年に Linux に出会いました。彼女は中年でも独学でコンピューターの第一人者として優れた存在になれることを示す生き証人です。



2012年 5月 17日

はじめに

Linux ベースの無線 LAN アクセス・ポイントにおいて WPA2 による強力な暗号化と認証を実現する hostapd (Host Access Point デーモン) は、構成を行うのがかなり簡単であることに加え、WPA2 パーソナルと WPA2 エンタープライズをサポートし、独特の方法で WPA2 パーソナルを強力かつ簡単に管理できるように変更します。

WPA2 パーソナルと WPA2 エンタープライズとは、かなり大きく異なります。WPA2 エンタープライズは無線 LAN のセキュリティーとしては最も強力ですが、サーバー証明書とクライアント証明書から成る PKI (Public Key Infrastructure: 公開鍵基盤) と認証局を必要とするため、管理が複雑です。WiFi サービスを提供しているほとんどの店舗では、こうしたことのすべてに対応するために FreeRADIUS サーバーを使用していますが、管理対象のアクセス・ポイントが少ない場合や一時的なイベントやプロジェクトのためにアクセス・ポイントをセットアップしたい場合には、FreeRADIUS サーバーでは大げさすぎます。

WPA2 パーソナルはすべてのユーザーが 1 つの共有鍵を使用するため、小さな店舗でも簡単に扱える上に強力なものになっています。この共有鍵方式は容易にセットアップすることができますが、常にセキュリティーの懸念があり、また管理が面倒です。例えば、1 人だけユーザーを削除したい場合に適切な方法がありません。なぜなら、鍵が変更された場合は必ず新しい鍵をすべてのユーザーに配布する必要があり、望ましくないユーザーは店内に友人が 1 人居さえすれば新しい鍵を入手できるため、望ましくないユーザーを排除することができないからです。この方式は半公衆型のホットスポットに適しています。例えば、皆さんのオフィスへの訪問者に無料で WiFi を提供したいものの、その近隣の誰もが無料でアクセスできるようにはしたくないような場合などに、この方式が適しています。

hostapd は優れた中間的な方式であり、WPA2 パーソナルを使用しますが、すべてのユーザーが 1 つの鍵を共有するわけではなく、各ユーザーは個別の鍵を使用します。これらの鍵はクライアントの hostapd の構成ファイルに格納されるパスワードにすぎないため、PKI や認証サーバーを別途用意する必要はありません。

無線 LAN 接続での傍受を防止するためにトラフィックが暗号化されるのは、クライアントと無線 LAN ルーターとの間のみであることを忘れないでください。hostapd にはエンド・ツー・エンドの暗号化機能はありません。エンド・ツー・エンドの暗号化は OpenVPN や SSH トンネルなどによって行います。


前提条件

無線 LAN アクセス・ポイント (hostapd がインストールされているか、hostapd をインストールできるもの) と iw コマンド、そしてテスト用の Linux PC に wpa_supplicant が必要になります。アクセス・ポイントは hostapd 0.6.8 またはそれ以降のバージョンをサポートしている必要があります。(最新の hostapd リリースは 0.7.3 です)。hostapd のバージョン 0.6.8 は nl80211 ドライバーを実装しています。Linux カーネルの mac80211 フレームワークでサポートされている WIC (Wireless Interface Card) を使用する場合は、最初からドライバーが組み込みでサポートされているため、特別なドライバーは必要ありません。

nl80211 ドライバーにより、暗号化、認証、鍵のローテーション、その他のアクセス・ポイント機能がユーザー空間に移されます。普段は iwconfig コマンドを使用している人は、iw コマンドを使用するようにしてください。hostapd のバージョン 0.6.8 では iwconfig が動作しないからです。

DD-WRT と OpenWRT は、Linksys WRT54G のようなコンシューマー向け無線 LAN ルーターのファームウェアを置き換える、優れたオープンソース・ファームウェアです (「参考文献」を参照)。どちらも hostapd を含んでおり、サポートしている広範な機器に対応したファームウェアをダウンロードできるデータベースがあります。私のお気に入りは、Soekris、PC Engines、MicroTik などのシングルボード・コンピューター (「参考文献」を参照) で必要最小限の Linux を使用して独自の無線 LAN アクセス・ポイントを作成することです。これらのボードは堅牢であり、完全に制御することができて、非常に柔軟です。

独自の無線 LAN アクセス・ポイントを作成したい場合、最も重要なコンポーネントは Linux カーネルで最初からサポートされている WIC です。WIC は無線 LAN アクセス・ポイントにとって非常に重要な AP モードをサポートしています。AP モードは Access Point モード、Master モード、Infrastructure モードと呼ばれることもあり、無線 LAN アクセス・ポイントに必ず必要です。多くの無線 LAN ネットワーク・インターフェースは AP モードをサポートしておらず、最小限の機能に絞り込んだクライアント機器にすぎません。私は Atheros の無線 LAN インターフェースを使用していますが、それはこのインターフェースがフル機能であり、レガシーの Madwifi ドライバーでも最近の mac80211 ドライバーでも十分にサポートされているからです。

アクセス・ポイントに ndiswrapper を使用しないでください。ndiswrapper は他に選択肢がない場合には WIC を動作させるための便利なツールになりますが、ndiswrapper にはさまざまな問題があるからです。あくまでも、カーネルで最初からサポートされている適切な無線 LAN インターフェースを使用する必要があります。

linuxwireless.org の機器データベースを調べると、サポートされているインターフェースを検索することができ、また無線 LAN ドライバーやユーザー空間コマンドに関する大量の情報も入手することができます (「参考文献」を参照)。Linux Wireless プロジェクトは Linux 無線 LAN スタックを整理、調和させる上で素晴らしい成果を上げています。

クライアント・サイドはサーバー・サイドよりも容易です。Linux カーネルで最初からサポートされている WiFi 準拠の WIC はほとんどすべて、強力な WPA2 セキュリティーを使用してアクセス・ポイントに接続することができるからです。Mac クライアントと Windows クライアントも、Linux ベースの便利なアクセス・ポイントを使用することができます。


WIC の機能を詳しく調べる

WIC がサポートしている機能を調べるには、iw を使用します。WIC が AP モードをサポートしているかどうかを確認するためには、「Supported interface modes (サポートされているインターフェース・モード)」セクションを調べます。その例をリスト 1 に示します。

リスト 1. iw list コマンド
$ iw list

[...]

Supported interface modes:
*IBSS
*managed
*monitor
*AP
*AP/VLAN

この例は AP モードと無線 VLAN をサポートする WIC を示しています。IBSS はアドホック・モードです。monitor モードは無線 LAN ネットワークを検出するためのモードです。すべての WIC は、アクセス・ポイントのクライアントである managed モードをサポートしています。

Madwifi ドライバーを使用する Atheros インターフェースの場合には、下記リスト 2 のように wlanconfig を実行します。

リスト 2. wlanconfig の例
# wlanconfig ath0 list caps
ath0=7782e40f<WEP,TKIP,AES,AES_CCM,HOSTAP,TXPMGT,SHSLOT,SHPREAMBLE,TKIPMIC,WPA1,WPA2,BURST
     ,WME>

この例は、このインターフェースが AP モードをサポートし、また WPA2 と強力な AES-CCMP による暗号化もサポートしていることを示しています。

無線 LAN 対応のハードウェアの機能を詳しく調べるのに適したもう 1 つの方法は、非常に便利な hwinfo コマンドを使用する方法です。hwinfo コマンドは無線 LAN インターフェースのための特別なオプションを持ち、ありとあらゆる有用な情報を生成します。それを示したものがリスト 3 のスニペットです。

リスト 3. hwinfo を使用して検出した WIC のデータの例
$ hwinfo --wlan
27: PCI 500.0: 0282 WLAN controller
Model: "Intel WLAN controller"
Driver: "iwlagn"
Driver Modules: "iwlagn"
WLAN encryption modes: WEP40
WEP104 TKIP CCMP
WLAN authentication modes: open sharedkey wpa-psk wpa-eap
Status: iwlagn is active
Driver Activation Cmd: "modprobe iwlagn"

hwinfo はドライバーの名前を検出し、その WIC がサポートする暗号化、機器の名前、その他大量の情報を表示します。また、PCI ネットワーク・インターフェースには lspci を、USB インターフェースには lsusb を試すこともできます。この WIC はアクセス・ポイントとしては機能しません。hostapd は iwlagn ドライバーをサポートしておらず、どのような場合でも、この WIC は AP モードをサポートしていないからです。(この WIC は低予算用に集積化された Centrino チップの一部です。)


hostapd を構成する

hostapd のインストール方法は、どの Linux ディストリビューションを使用しているかによって異なるため、インストールについては皆さんの宿題とします。最初にアクセス・ポイントで hostapd を構成し、次にクライアント PC で wpa_supplicant を構成して鍵交換をテストします。

アクセス・ポイントに /etc/hostapd.conf ファイルがない場合には、新規に構成ファイルを作成します。インストールによって構成ファイルが作成されている場合には、参照用としてその構成ファイルのバックアップ・コピーをとり、新規の構成ファイルを作成します。リスト 4 の例には WPA2 パーソナルの設定に必要なものがすべて含まれています。

リスト 4. /etc/hostapd.conf の例
interface=ath0
bridge=br0
driver=nl80211
ssid=alracnet
auth_algs=1
wpa=1
wpa_psk_file=/etc/hostapd-psk
wpa_key_mgmt=WPA-PSK 
wpa_pairwise=CCMP TKIP
rsn_pairwise=CCMP

これらのパラメーターの一部 (interface、driver、ssid など) を皆さんの環境での値と置き換える必要があるかもしれません。複数の選択肢を記載する場合には、wpa_pairwise 行のように各選択肢を空白で区切ります。この例についての注意点を以下に記載します。

  • Atheros インターフェースの名前は必ず athx であり、他のインターフェースの名前はすべて wlanx です。
  • アクセス・ポイントにイーサネット・ブリッジがない場合には、bridge 行には何も入力しません。
  • hostapd のバージョンが 0.6.8 以降の場合と、mac80211 をサポートする WIC を使用している場合、ドライバーは nl80211 です。レガシーのドライバーとしてサポートされているのは、HostAP、madwifi、prism54 のみです。0.6.8 よりも前のバージョンの hostapd がサポートしているドライバーは、hostap、wired、madwifi、test、nl80211、bsd です。
  • ssid はアクセス・ポイントの名前であり、任意の名前を ssid として指定することができます。
  • auth_algs=1 は、WPA2 による認証アルゴリズムのみが許可されます。値が 2 だと WEP のみが許可されます。決して WEP (Wired Equivalent Privacy) を使用してはなりません。WEP は何年も前から完全に破綻しており、非常に容易に破ることができます。値が 3 だと両方が許可されます。
  • wpa=2 は WPA2 のみが許可されます。値が 1 だと WPA1 が許可され、3 だと両方が許可されます。
  • wpa_psk_file ファイルは共有鍵を含むファイルを指定します。
  • wpa_key_mgmt は許可したい、鍵の暗号化アルゴリズムを指定します。選択肢は WPA-PSK、WPA-EAP、またはその両方です。PSK は Pre-Shared Key (事前共有鍵) です。EAP は Extensible Authentication Protocol (拡張認証プロトコル) であり、いくつかの異なる認証方式をサポートするフレームワークです。ここでは簡単な事前共有鍵を設定するのみなので、EAP は必要ありません。
  • wpa_pairwise と rsn_pairwise は、どの暗号化方式をデータの暗号化に許可するかを制御し、暗号化方式には CCMP、TKIP またはその両方を使用することができます。CCMP は TKIP よりもはるかに強力なので、CCMP のみを許可することもできます。ただし、Windows クライアントは強力なセキュリティーをうまく扱うことができず、手間がかかることで有名なため、Windows クライアントには TKIP を許可する必要があるかもしれません。

すべての人が WPA2 を使用する必要があります。WEP (Wired Equivalent Privacy) は非常に強度が弱いため役に立たず、WPA も WEP と同程度の強度です。2006年から WiFi 認定機器は WPA2 をサポートすることが必須となっており、最近のオペレーティング・システムは、Windows XP SP3 を含め、すべて WPA2 をサポートしています。一部の WIC を交換する必要があるとしても、不正侵入された後でトラブルの処理をするよりも、WIC を交換した方がはるかに安く済みます。

次に、ワイルドカード・パターンの MAC アドレスと最大 63 文字の単純な平文のテスト・パスワードを含む /etc/hostapd-psk ファイルを作成します。

00:00:00:00:00:00 testpassword

今度は Linux クライアント PC で、wpa_supplicant のための単純な構成ファイルとして、wpa_supplicant.conf をリスト 5 のように作成します。

リスト 5. wpa_supplicant.conf の例
ctrl_interface=/var/run/supplicant
network={ 
  ssid="alracnet"
  psk="testpassword"
  priority=5
}

ctrl_interface により、コマンドラインで wpa_supplicant を操作できるようになります。この構成ファイルには皆さん独自の ssid とテスト用の平文パスワードを使用し、その両方を引用符で囲みます。priority の値が大きいほど、アクセス・ポイントへの接続が高速に行われます。今度はアクセス・ポイントに戻り、以下のようにデバッグ・モードで hostapd を起動します。

# hostapd -d /etc/hostapd.conf

構成エラーがある場合には、エラーが表示され、hostapd は実行されません。エラーがなかった場合には、大量の出力行が表示されます。表示を停止するためには CTRL+c を押します。バグを解決できると、hostapd が自動的に起動されるように構成することができ、それをここで行います。

次にクライアントで、無線 LAN 接続が有効になっている場合には無線 LAN 接続を停止し、以下のように wpa_supplicant をルートとして実行します。

# wpa_supplicant -i wlan0 -D wext -c wpa_supplicant.conf -d

ここで -i は無線 LAN インターフェースを、-D wext は汎用の wpa_supplicant ドライバーを、-c は構成ファイルをそれぞれ指定しており、-d はデバッグ・モードを意味します。アクセス・ポイントとクライアントの両方で、大量の出力が表示されます。鍵の交換が成功すると wpa_supplicant は即座に終了し、クライアントにはリスト 6 のようなメッセージが表示されます。

リスト 6. wpa_supplicant から出力されるメッセージの例
EAPOL: SUPP_BE entering state IDLE
EAPOL authentication completed successfully 
RTM_NEWLINK: operstate=1 ifi_flags=0x11043 ([UP][RUNNING][LOWER_UP]) 
RTM_NEWLINK, IFLA_IFNAME: Interface 'wlan0' added

ご覧のように、見事に動作しています。CTRL+c を押して wpa_supplicant セッションを終了します。最後のステップはユーザー個々の鍵を作成することです。まずアクセス・ポイントでユーザー個々の鍵を作成し、次にお好みのネットワーク構成ユーティリティーを使用して、それらの鍵をクライアントにコピーします。グラフィカル構成ユーティリティーはどれもほとんど同じであり、SSID を入力して WPA2 パーソナル認証を選択し、鍵をコピーします。


ユーザーと強力な鍵を追加する

ではいよいよ、セキュリティーを高め、ユーザーを追加します。平文パスワードは暗号化する必要があるため計算負荷が高くなります。そこで wpa_supplicant には、平文パスワードから 256 ビットの暗号化鍵を生成する便利なコマンド wpa_passphrase が用意されています。このコマンドをリスト 7 のように使用し、ここで SSID も使用します。

リスト 7. wpa_passphrase を使用してユーザーを作成する
$ wpa_passphrase "alracnet" "greatbiglongpasswordbecauselongerisbetter"
network={
 ssid="alracnet"
 #psk="greatbiglongpasswordbecauselongerisbetter"
 psk=a8ed05e96eed9df63bdc4edc77b965770d802e5b4389641cda22d0ecbbdcc71c
}

先ほどの /etc/hostapd-psk に、ユーザーを追加することができます。暗号化された各事前共有鍵はユーザーの MAC アドレスに対応している必要があります。一例をリスト 8 に示します。

リスト 8. /etc/hostapd-psk の例
11:22:33:44:55:66     a8ed05e96eed9df63bdc4edc77b965770d802e5b4389641cda22d0ecbbdcc71c
22:33:44:55:66:77     eac8f79f06e167352c18c266ef56cc26982513dbb25ffa485923b07bed95757a
33:44:55:66:77:aa     550a613348ffe64698438a7e7bc319fc3f1f55f6f3facf43c15e11aaa954caf6 
44:55:66:77:aa:bb     ad328e5f2b16bdd9b44987793ed7e09e6d7cca3131bc2417d99e48720b4de58c

すべてが正常に動作していることに満足できると、おそらく hostapd を自動的に実行させたくなるはずです。そのための方法はいくつかあり、起動スクリプトを作成してブート時に hostapd を起動させる方法、あるいは無線 LAN ネットワーク・インターフェースが起動された時に hostapd を起動させる方法などがあります。各種 Linux ディストリビューションによって自動起動の構成方法も非常に多様なため、これも皆さんの宿題とします。皆さんはおそらく、デバッグ用の -d オプションではなく、バックグラウンドとして動作する -B オプションを使いたくなるはずです。

これで、素晴らしい hostapd デーモンの紹介を終わります。詳細については「参考文献」を参照してください。

参考文献

学ぶために

  • hostapd の構成ファイルの例を見てください。この例は構成ファイルのフォーマットについて説明し、またどのようなオプションを使用できるかも示しています。
  • wpa_supplicant の構成ファイルの例を見てください。この例は構成ファイルのフォーマットについて説明し、またどのようなオプションを使用できるかも示しています。
  • Devices - Linux WirelessLinux」のデータベースで、サポートされているインターフェースについての情報の他、無線 LAN ドライバーやユーザー空間コマンドについて調べてください。
  • Linux man ページで以下の項目について学んでください。
    • man hostapd
    • wpa_supplicant
    • iw
    • iwconfig
    • wlanconfig
    • lshw
    • hwinfo
    • lsusb
    • lspci
  • Linux 無線 LAN スタックのホームページ、Linux Wireless を訪れてください。無線 LAN 機器としてサポートされている機器のデータベースを含め、ユーザー、ベンダー、開発者のための情報が提供されています。
  • developerWorks の Linux ゾーンには、Linux 開発者や管理者のためのハウツー記事やチュートリアル、ダウンロード、ディスカッション・フォーラムなどのリソースが豊富に用意されています。
  • developerWorks の Open source ゾーンには、オープンソース・ツールの情報やオープンソース技術の使い方に関する情報が豊富に用意されています。
  • IBM 製品や IT 業界のトピックに焦点を絞った developerWorks の Technical events and webcasts で最新情報を入手してください。
  • 無料の developerWorks Live! briefing に参加して、IBM の製品およびツールについての情報や IT 業界の動向についての情報を迅速に把握してください。
  • developerWorks On demand demos をご覧ください。初心者のための製品インストール方法やセットアップのデモから、上級開発者のための高度な機能に至るまで、多様な話題が解説されています。
  • Twitter で developerWorks をフォローするか、あるいは developerWorks で Linux に関するツイートのフィードを購読してください。

製品や技術を入手するために

  • 既存ファームウェアの置き換えとして使用することができ、hostapd を含む 2 つのオープンソース・ファームウェア、DD-WRTOpenWRT を試してみてください。
  • SoekrisPC EnginesMicroTik のシングルボード・コンピューターについて調べてみてください。
  • 皆さんの目的に最適な方法で IBM 製品を評価してください: 製品の試用版をダウンロードする方法、オンラインで製品を試す方法、クラウド環境で製品を使う方法、あるいは SOA Sandbox で数時間を費やし、サービス指向アーキテクチャーの効率的な実装方法を学ぶ方法などがあります。

議論するために

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Linux, Open source
ArticleID=814616
ArticleTitle=hostapd を使用した簡単な方法で WiFi に強力な暗号化を実装する
publish-date=05172012