「そのアクセスポイント、本物ですか?」
こんにちは!「LINUX工房」管理人の「リナックス先生」です。
前回までは、IDとパスワードによる認証の仕組みを整えてきました。
しかし、無線LAN(Wi-Fi)の世界には、有線LANにはない恐ろしい脅威が存在します。
それが「偽アクセスポイント(Evil Twin)」です。
攻撃者が「社内のWi-Fiと同じ名前(SSID)」の偽APを設置し、社員がうっかり接続してIDとパスワードを入力してしまう…という手口です。
先生、それ怖すぎます!
スマホでWi-Fiを選ぶときって、SSIDしか見てないですもん。
もし同じ名前の偽物が飛んでたら、絶対気付かずに繋いじゃいます。
どうやって見分ければいいんですか?
人間には見分けがつかないわ。
だからこそ、PCやスマホ(サプリカント)に自動で判断させるの。
そのための身分証明書が「電子証明書(サーバー証明書)」よ。
今回は、最も普及している認証方式「EAP-PEAP」を使って、安全なエンタープライズWi-Fi環境を作りましょう!
本記事では、FreeRADIUSでEAP-PEAP認証を構築するための全手順を解説します。
特に難関とされる「サーバー証明書の作成」と「Windowsクライアントの設定」を重点的にフォローします。
🔐 FreeRADIUS完全攻略講座(バックナンバー)
- 【第1回】RADIUSサーバーとは?仕組みの完全図解とインストール
- 【第2回】基本設定とユーザー追加(clients.conf/users)&接続テスト
- 【第3回】脱・テキスト管理!MariaDB(MySQL)との連携設定
- 【第4回】Web GUIで楽々管理!daloRADIUSの導入と設定
- 【第5回】Wi-Fi認証の鉄板!EAP-PEAP認証と電子証明書の作成
- 【第6回】セキュリティ極限強化!Google Authenticatorによる多要素認証
- 【第7回】「誰がいつ繋いだ?」ログ管理とアカウンティングの極意
- 【第8回】トラブルシューティングと冗長化(Failover)構成
第1章:EAP-PEAP認証の仕組み
まずは敵を知りましょう。
「EAP(イーエーピー)」とは、PPPを拡張した認証プロトコルの総称です。
その中でも、PEAP(ピーアープ)は、Windows標準対応という利便性から、現在もっとも普及している方式です。
認証の流れ(ざっくり図解)
- 接続要求: クライアント(PC)がAPに接続。
- サーバー証明書の提示: RADIUSサーバーが、自分の身分証明書(サーバー証明書)をPCに送る。
- サーバーの検証: PCは「この証明書は信頼できるか?」をチェックする。(ここで偽APを見破る!)
- 暗号化トンネル確立: 信頼できたら、PCとサーバー間でTLS暗号化トンネルを作る。
- ID/PASS送信: 安全なトンネルの中で、ユーザーIDとパスワードを送る(MS-CHAPv2)。
- 認証完了: 合っていれば接続OK。
重要なのは、「IDを送る前に、サーバーが本物か確認する」という点です。
このために、FreeRADIUS側に「サーバー証明書」を設定する必要があります。
第2章:【最難関】サーバー証明書の作成
本来、サーバー証明書はVeriSignなどの認証局(CA)から購入するものですが、社内Wi-Fi用にお金をかけるのは大変です。
そこで、自分で認証局を立てて、自分で署名する「自己署名証明書(オレオレ証明書)」を作成します。
FreeRADIUSには、証明書作成を自動化するスクリプトが付属していますが、デフォルトだと有効期限が短かったりするので、少しカスタマイズして使います。
1. 作業ディレクトリへ移動
証明書関連のファイルは /etc/raddb/certs/ にあります。
cd /etc/raddb/certs/
ここに Makefile や ca.cnf, server.cnf といったファイルがあります。
まず、既存の(インストール時に作られたダミーの)証明書を削除します。
sudo rm -f *.pem *.der *.csr *.crt *.key *.p12 serial* index.txt*
2. 設定ファイルの編集(有効期限を延ばす)
デフォルトでは有効期限が「60日」など短く設定されている場合があり、すぐに切れて繋がらなくなります。ca.cnf と server.cnf を編集して、10年(3650日)くらいに延ばしておきましょう。
sudo nano ca.cnf
default_days という項目を探して変更します。
default_days = 3650
同様に server.cnf も変更します。
sudo nano server.cnf # default_days = 3650 に変更
3. パスワードの変更(Makefile)
証明書作成時に使われるパスワードが passwords.mk に書かれています。
セキュリティのため、これも変更しておきます。
sudo nano passwords.mk
# 任意の文字列に変更 export CA_PASSWORD=MySecretPassword export SERVER_PASSWORD=MySecretPassword
4. 証明書の作成(makeコマンド)
準備ができたら、魔法のコマンド make を実行します。
これ一発で、CA証明書、サーバー証明書、秘密鍵などが全て生成されます。
sudo make
エラーが出ずに終了したら、以下のファイルができているか確認してください。
ca.pem: ルート証明書(クライアントPCに入れるやつ)。server.pem: サーバー証明書(公開鍵)。server.key: サーバー秘密鍵。
5. 権限の修正
作成されたファイルは所有者が root になっています。
FreeRADIUS(radiusdユーザー)が読めるように権限を変更します。
sudo chown radiusd:radiusd *.pem *.key sudo chmod 640 *.pem *.key
これで証明書の準備は完了です!
第3章:EAPモジュールの設定
作成した証明書を使うように、FreeRADIUSの設定を変更します。
設定ファイルは /etc/raddb/mods-available/eap です。
1. eap.confの編集
sudo nano /etc/raddb/mods-available/eap
eap { ... } ブロックの中にある tls-config tls-common { ... } セクションを探します。
tls-config tls-common {
# 秘密鍵のパス
private_key_file = ${certdir}/server.key
# サーバー証明書のパス
certificate_file = ${certdir}/server.pem
# ルート証明書のパス
ca_file = ${certdir}/ca.pem
# 秘密鍵のパスワード(passwords.mkで設定したもの)
private_key_password = "MySecretPassword"
# ... (中略) ...
# Diffie-Hellmanパラメータ(ここも確認)
dh_file = ${certdir}/dh
}
※ dh ファイルがない場合は、sudo openssl dhparam -out /etc/raddb/certs/dh 2048 で作成してください(数分かかります)。
2. EAPタイプの設定
同じファイルの下の方に、peap { ... } というセクションがあります。default_eap_type = mschapv2 となっていることを確認してください。
3. 設定の反映(再起動)
設定が終わったら、いつものようにデバッグモードで起動してエラーがないか確認します。
sudo systemctl stop radiusd sudo radiusd -X
Ready to process requests と表示されればOKです。
この画面は開いたままにしておきましょう。
第4章:Windowsクライアントの設定(最重要)
ここが今回のハイライトです。
サーバー側の設定が完璧でも、クライアント(Windows)の設定を間違えると100%繋がりません。
特に「オレオレ証明書」を使う場合、Windowsに「この証明書を信じろ!」と教え込む必要があります。
ステップ1:ルート証明書(ca.pem)の取り出し
サーバー上の /etc/raddb/certs/ca.pem を、WinSCPなどを使って手元のWindows PCにダウンロードしてください。
ファイル名を my-wifi-ca.crt などに変更すると分かりやすいです。
ステップ2:証明書のインストール
- ダウンロードした
.crtファイルをダブルクリックします。 - 「証明書のインストール」をクリックします。
- 保存場所:「ローカル コンピューター」を選択(※管理者権限が必要です)。
- 「証明書をすべて次のストアに配置する」を選び、「参照」ボタンを押します。
- 【超重要】「信頼されたルート証明機関」フォルダを選択してOKを押します。
- 「次へ」→「完了」。「正しくインポートされました」と出ればOKです。
ステップ3:Wi-Fi接続プロファイルの手動作成
SSIDを選んでパスワードを入れるだけ…では上手くいかないことが多いです。
手動でプロファイルを作ります。
- 「コントロールパネル」→「ネットワークと共有センター」→「新しい接続またはネットワークのセットアップ」。
- 「ワイヤレスネットワークに手動で接続します」を選択。
- ネットワーク名: Wi-FiのSSIDを入力。
- セキュリティの種類: 「WPA2-エンタープライズ」を選択。
- 「次へ」を押し、「接続の設定を変更します」をクリック。
ステップ4:PEAPの詳細設定
プロパティ画面が開きます。
- 「セキュリティ」タブの「ネットワークの認証方法の選択」で「Microsoft: 保護されたEAP (PEAP)」が選ばれていることを確認し、「設定」ボタンをクリック。
- 「証明書を検証してサーバーのIDを検証する」にチェックを入れる(重要!)。
- 「信頼されたルート証明機関」のリストから、さきほどインポートした証明書(Common Nameなど)を探してチェックを入れる。
- 「認証方法を選択する」で「セキュリティで保護されたパスワード(EAP-MSCHAP v2)」を選び、「構成」ボタンをクリック。
- 「Windowsのログオン名とパスワードを…使う」のチェックを外す(重要!これを外さないとPCのログイン情報を勝手に送って失敗します)。
- 全てOKで閉じる。
第5章:接続テストとトラブルシューティング
さあ、緊張の一瞬です。
WindowsのWi-Fi一覧から対象のSSIDを選択し、「接続」をクリックします。
1. 認証画面
「サインイン」という画面が出て、ユーザー名とパスワードを求められます。
ここに、FreeRADIUSに登録した(usersファイル、またはDBの)ユーザー情報を入力します。
2. 接続成功!
しばらく待って「接続済み」になれば成功です!
サーバー側のデバッグログ(radiusd -X)には、以下のようなEAPのやり取りが流れているはずです。
... (15) eap: Peer sent EAP Response (Identity) (15) eap_peap: TLS Session established (15) eap_peap: Tunneled data is valid (15) Login OK: [testuser] ...
よくあるエラーと対策
Q1. 「接続できませんでした」と即座に出る
A. 証明書の信頼設定ミスです。
Windowsの設定で、ルート証明書が正しくインポートされていないか、PEAPの設定で証明書にチェックが入っていません。
面倒なら一時的に「証明書を検証して…」のチェックを外して試してみてください(繋がれば証明書周りが原因です)。
Q2. ユーザー名/パスワード入力後、何度も聞かれる
A. パスワード形式の問題です。
EAP-PEAP (MSCHAPv2) では、サーバー側がパスワードの「NTLMハッシュ」を知っているか、または「平文(Cleartext-Password)」を知っている必要があります。
FreeRADIUSのDBに登録する際、パスワードをMD5などでハッシュ化してしまっていませんか?
必ず Cleartext-Password で登録してください。
Q3. AndroidやiPhoneの場合は?
スマホはもっと簡単です。
接続時に「PEAP」を選び、「CA証明書」の欄で「検証しない(またはシステム証明書を使用)」を選べば繋がります(セキュリティ的には証明書をインストールすべきですが、検証なしでも動作はします)。
まとめ:これで「エンタープライズWi-Fi」の完成!
お疲れ様でした!
これで、あなたのWi-Fi環境は「ID/パスワード認証」+「電子証明書によるサーバー検証」という、企業のオフィスと同等レベルのセキュリティを手に入れました。
今回の重要ポイント:
- EAP-PEAPは「サーバー証明書」と「ID/PASS」を使う方式。
makeコマンドで簡単に自己署名証明書が作れる。- Windowsクライアントには「ルート証明書」を「信頼されたルート証明機関」に入れる必要がある。
- Wi-Fiプロファイルを手動作成し、証明書の検証設定を行うのが確実。
しかし、これでもまだ完璧ではありません。
IDとパスワードが漏れてしまったら? 他人のスマホから勝手に繋がれてしまいますよね。
これを防ぐには、「パスワード」に加えて「スマホが持っているワンタイムパスワード」を組み合わせる「多要素認証(MFA)」が有効です。
次回、第6回は「セキュリティ極限強化!Google Authenticatorによる多要素認証」です。
FreeRADIUSとGoogle Authenticatorを連携させ、スマホアプリに表示される6桁のコードを使わないとWi-Fiに繋げない、鉄壁の要塞を構築します。
お楽しみに!
▼ エンジニアとしてのキャリアを加速させる ▼
証明書認証を実践
「VPS」で自分専用環境
サーバー知識を年収に
「ITエンジニア転職」

コメント