一般のご家庭向けEAP-SIM認証Wi-Fi

一般のご家庭向けEAP-SIM認証Wi-Fi

ご家庭のWi-Fi、まだパスワード認証ですか?

こんにちは。陽炎型航洋直接教育艦 晴風の艦長、岬明乃です。 昨日開催されたカーネル/VM探検隊で、晴風の艦内無線LANの構築をした話をしてきました。

発表枠は手軽な20分だったこともあり、聞いていて飽きてしまうであろう詳細な構成方法などを省いたため、構築についての手順を書き記しておきます。

目次

Open 目次

  1. 実習期間中の艦内無線LAN事情
  2. 晴風艦内EAP-SIM認証Wi-Fi構築
    1. SIMカードの読み込み下準備
    2. SIMへのアクセスの確認
    3. FreeRADIUSのEAP-SIM設定
      1. EAP-SIM有効化
      2. EAP-SIM認証情報の設定
    4. 無線LAN APの設定
      1. hostapdの設定
    5. 自宅EAP-SIM無線LANアクセスポイントへの接続
  3. まとめ

実習期間中の艦内無線LAN事情

晴風クラスに限らず、横須賀女子海洋学校の1年次の実習では30人前後の船員を乗せて航海に出ます。 艦の仲間のネットワークアクセスを管理するため、艦内無線LANでは802.1XによるWPA2エンタープライズ認証を設けるのがルールとなっています。 802.1X認証の方法は特に学校からの指定はなく、みんな好きなRADIUSサーバを建てて認証基盤を構築しています。 これも実習の一環というわけです。

晴風では、FreeRADIUSを採用し、EAP-TLSでみんなのユーザ名とパスワードをセットして使ってもらうつもりでした。 しかしです。このご時世、パスワードなる脆弱なものを利用するのは少数派なのです。 そこで主計科の子たちと一緒に考えた末、EAP-SIMによるパスワードレス認証を導入することとなりました。

晴風艦内EAP-SIM認証Wi-Fi構築

さて、実際に構築した手順を説明していきます。

SIMカードの読み込み下準備

ここで必要になるハードウェアは、PC/SCカードリーダとICカードアダプタ、SIMカード変換アダプタです。

必要なソフトウェアは、

です。よしなにインストールしてくれればいいのですが、依存関係がごにょっとしてるのでDebianでのセットアップ例を挙げておきます。

$ sudo apt-get install pcscd pcsc-tools libccid libpcsclite-dev
$ sudo apt-get install python python-setuptools python-serial python-dev swig git curl
$ mkdir -p ~/.cache/
$ cd ~/.cache/
$ curl -O http://ludovic.rousseau.free.fr/softwares/pcsc-tools/smartcard_list.txt
$ git clone https://github.com/LudovicRousseau/pyscard /tmp/pyscard
$ cd /tmp/pyscard
$ sudo python setup.py build_ext install
$ git clone https://github.com/mzyy94/pysim ~/pysim && cd ~/pysim

SIMへのアクセスの確認

スライドで発表した通り、SIMにはいろいろな情報が詰まっています。 ICCIDやIMSIを確認してみたい場合は、pySIMのpySim-read.pyを実行してみてください。情報がだばぁっとでてこれば成功です。 このとき、上記のGemaltoのICカードリーダを使っている場合は、-p 0オプションをつけることでリーダから読み込むことができます。

FreeRADIUSのEAP-SIM設定

発表スライドでは、simtriplets.datに認証情報を書き込む方法を記しました。 この方法は、Debianでapt-get install freeradiusで入るバージョンやFreeRADIUSの標準ビルド設定では無効化されています。 晴風では多くの艦員のSIM認証情報を書き込むため、FreeRADIUSをソースからビルドしてsimtripletsの読み込みを有効化していました。

しかし、ご家庭では30を超える認証情報を追加することはほとんどないだろうということで、一般的なFreeRADIUSのユーザ設定と同じ方法を紹介します。

EAP-SIM有効化

EAP-SIMは標準では無効化されているので、これを有効化します。 有効化といっても大層なことはせず、設定ファイル/etc/freeradius/eap.confに2行追加するだけですけどね。

有効化ついでに/etc/freeradius/clients.confのsecretも変えておくとわかりやすくていいですね。

EAP-SIM認証情報の設定

発表でも述べた通り、SIMの仕様書にあるコマンドを送ってチャレンジする認証情報を生成しなければいけません。 加えて、得た情報をFreeRADIUSのusersファイルの書式にしたがって編集する必要があります。 EAP-SIMのリクエストの仕様上、IMSIからHNIを推定してMCCとMNCを特定してユーザ名を作り上げるのは正直言って面倒です。

なのでコマンド一発でusersファイルが作成できるツールをhttps://github.com/mzyy94/pysim/に同梱してあります。 ./pySim-gen-eapsim-user.pyをバシっと叩いて一瞬でusersファイルを作れます。

~/pysim$ ./pySim-gen-eapsim-user.py -p 0 | sudo tee -a /etc/freeradius/users
# IMSI: 440103152044102
# NTT DoCoMo Kansai Inc.
1440103152044102@wlan.mnc010.mcc440.3gppnetwork.org  Auth-Type := EAP, EAP-Type := SIM
        EAP-Sim-Rand1 = 0x6d58e5afebffe3f480738f104a74afb8,
        EAP-Sim-SRES1 = 0xbd952f43,
        EAP-Sim-KC1 = 0x610f35c9208e1448,
        EAP-Sim-Rand2 = 0xc22413df2efea1e70197ea58519a72f0,
        EAP-Sim-SRES2 = 0x90f003a1,
        EAP-Sim-KC2 = 0x095001424f8fb62a,
        EAP-Sim-Rand3 = 0x60a5dc16de844884dea914cd41113477,
        EAP-Sim-SRES3 = 0xff0444b3,
        EAP-Sim-KC3 = 0xcff6d25c04ab4474,

無線LAN APの設定

ここはみんな自前の無線LAN環境があると思うので、一例としてEAP-SIM認証が最低限動作するhostapdの構成を記しておきます。 詳しい設定項目などは、Hostapd - Gentoo Wiki をご参照ください。 また、WLX 202など、 お手持ちの無線LAN APで外部RADIUSサーバに対応しているものをお持ちであれば、FreeRADIUSのアドレスの指定とsecretの設定をすることで利用できるでしょう。

hostapdの設定

必要なツールのインストールapt-get install hostapd bridge-utils。 そして、/etc/network/interfacesをこんな感じに。

で、/etc/hostapd/hostapd.confをこう。

自宅EAP-SIM無線LANアクセスポイントへの接続

あとはhostapdを立ち上げて接続するだけ!とお思いでしょうが、残念ならがクライアント側にAPの登録が必要となることがあります。 iOSでは、WPA2 EnterpriseのアクセスポイントをデフォルトでEAP-TLSとして認識し、加えてiPhone/iPad側でEAP-SIMとして接続させる方法がありません。 立ち上げたAPがEAP-SIM認証であることを教え込むために、構成プロファイルを作成する必要があります。

apple configurator2

macOSが動く環境をお持ちの方は、Apple Configurator 2で上図のように作成するか、 もしくはEAP-SIM_AP向けに作った以下の構成プロファイル(XMLファイル)のAP名を変更したものをiOSデバイスにインストールして準備完了です。

最後にお待ちかね、hostapd /etc/hostapd/hostapd.confで起動させて接続してみましょう!

$ sudo hostapd /etc/hostapd/hostapd.conf
Configuration file: /etc/hostapd/hostapd.conf
Using interface wlan0 with hwaddr dc:fb:02:9b:11:ef and ssid "EAP-SIM_AP"
wlan0: RADIUS Authentication server 127.0.0.1:1812
wlan0: interface state UNINITIALIZED->ENABLED
wlan0: AP-ENABLED
wlan0: STA f4:0f:24:ea:95:13 IEEE 802.11: authenticated
wlan0: STA f4:0f:24:ea:95:13 IEEE 802.11: associated (aid 1)
wlan0: CTRL-EVENT-EAP-STARTED f4:0f:24:ea:95:13
wlan0: CTRL-EVENT-EAP-PROPOSED-METHOD vendor=0 method=1
wlan0: STA f4:0f:24:ea:95:13 WPA: pairwise key handshake completed (RSN)
wlan0: AP-STA-CONNECTED f4:0f:24:ea:95:13
wlan0: STA f4:0f:24:ea:95:13 RADIUS: starting accounting session 57F9E33F-00000000
wlan0: STA f4:0f:24:ea:95:13 IEEE 802.1X: authenticated - EAP type: 18 (SIM)

まとめ

海の仲間は家族だから!

Related Posts

debianでiscsi target/initiator動作させるメモ

Linux上でのiSCSIパケット収集のためにVirtual Boxで作成した、Debian 7.0.0にiSCSI initiatorとtargetを入れたときのメモを起こしておきます。今回iS...

read more
1万円台の格安Intel X540-T2 10GbEを買ってみた

1万円台の格安Intel X540-T2 10GbEを買ってみた

事の発端はこちらのツイートこの低価格NICはずっと気になっていて、ほしいものリストにもずっと突っ込んでありました。突っ込んだ当時の価格からずいぶんと安くなり、2016/07/04時点で2万...

read more
一般のご家庭に25GbEネットワークを導入する

一般のご家庭に25GbEネットワークを導入する

師走と言えば大掃除。 一般のご家庭に溜まる可燃ゴミの掃除はもちろんのこと、デジタルデータに溢れる令和の時代は、データ掃除も入念に行う必要があります。 PCやiPadやNASなど、いたるところに散らばる...

read more
DIALというネットワークプロトコル

DIALというネットワークプロトコル

家庭のネットワークの監視システムからDIALなるプロトコルが暴れていてアラートが飛んできたので調査しました。...

read more
中華10GbEスイッチNetcore GS6を運用して1ヶ月たったレビュー

中華10GbEスイッチNetcore GS6を運用して1ヶ月たったレビュー

春に新居に越してからベストエフォートで10Gbpsのインターネット回線を引き込み利用している。 リビングに光コンセントを設置し、ONUに自作ルーターにNASやら母艦やらを集中してリビングに設置していた...

read more