爆速でWifi用RADIUSサーバーを構築する方法

コンピューターとネットワーク

FreeRADIUSで無線アクセスポイント用にRADIUSサーバーを作ります。

EAP-TLSを使うための最小セットを爆速で構築します。

アクセスポイントはちょっと古めのBUFFALO WAPM-1166Dです。

OSはDebian12、Dockerコンテナを使いますがPMでも手順は同じです。

Dockerコンテナ作成

docker run  --name=freerasius1  --hostname=fr1  --network=user-net  --ip="172.17.1.11"  --dns="172.17.0.9"  --detach=true  debian12.proto

Dockerの基本やdebian12.protoの作り方はこのサイトの以前の記事を参照してください。

RADIUS認証に必要なサーバー情報はipアドレスです。

項目設定値設定する内容
コンテナ名freeradius1任意
ホスト名fr1任意
ipアドレス172.17.1.11任意

FreeRADIUSのインストール

コンテナに入ります。

docker exec -it freeradius1 bash

基本的な環境を整えます。

apt -y install vim-tiny locales

ロケールとタイムゾーンを設定します。

dpkg-reconfigure locales
dpkg-reconfigure tzdata

FreeRADIUSをインストールします。

apt -y install freeradius

設定ファイルは /etc/freeradius/3.0/ にあります。

証明書の作成

以下が設定手順です。

設定フロー

  1. CA構築(証明書作成)
  2. サーバー証明書の作成
  3. クライアント証明書の作成
  4. FreeRADIUSの設定
  5. FreeRADIUS設定ファイルのアクセス権変更
  6. FreeRADIUSの起動

設定の中心は証明書の作成になりますが、1~3はmakeで一気に実行できます。

手順は /etc/freeradius/3.0/certs/README.md に詳しく説明されています。

mdファイルの表示方法は以前の記事を参照してください。

設定ファイルのバックアップ

変更するファイルをバックアップしておきます。

変更するファイルは5個です。

3個は証明書関係、2個はFreeRADIUSの設定ファイルです。

cp /etc/freeradius/3.0/certs/ca.cnf /etc/freeradius/3.0/certs/ca.cnf.orgn
cp /etc/freeradius/3.0/certs/client.cnf /etc/freeradius/3.0/certs/client.cnf.orgn
cp /etc/freeradius/3.0/certs/server.cnf /etc/freeradius/3.0/certs/server.cnf.orgn

cp /etc/freeradius/3.0/mods-available/eap /etc/freeradius/3.0/mods-available/eap.orgn
cp /etc/freeradius/3.0/clients.conf /etc/freeradius/3.0/clients.conf.orgn

CA用のテンプレートファイル編集

CAを作成するためのテンプレートを編集します。

vi /etc/freeradius/3.0/certs/ca.cnf

変更する項目は以下の通りです。

環境に合わせて設定してください。

ここでは有効期間は10年に設定しています。

default_days		= 3650
input_password		= naisyo-ca-in
output_password		= naisyo-ca-out
countryName		= JP
stateOrProvinceName	= Tokyo
localityName		= Infosys
organizationName	= YELLOWHOUSE.JP
emailAddress		= fumi@yellowhouse.jp
commonName		= fr1-ca.yellowhouse.jp

サーバー証明書用のテンプレートファイル編集

vi /etc/freeradius/3.0/certs/server.cnf

RADIUSサーバー用の証明書です。

変更項目は以下の通りです。

有効期間が長いと受け付けないデバイスがあるので、許容される398日に設定しています。

READMEには最長825日と記述されていますが、これを受け付けないシステムもあるようです。

default_days		= 398
input_password		= naisyo-sv-in
output_password		= naisyo-sv-out
countryName		= JP
stateOrProvinceName	= Tokyo
localityName		= Infosys
organizationName	= YELLOWHOUSE.JP
emailAddress		= fumi@yellowhouse.jp
commonName		= fr1.yellowhouse.jp

クライアント証明書作成用のテンプレート編集

vi /etc/freeradius/3.0/certs/client.cnf

有効期間を10年に設定しています。

default_days		= 3650
input_password		= naisyo-cli-in
output_password		= naisyo-cli-out
countryName		= JP
stateOrProvinceName	= Tokyo
localityName		= Infosys
organizationName	= YELLOWHOUSE.JP
emailAddress		= fumi@yellowhouse.jp
commonName		= fumi@yellowhouse.jp

CAの作成/server証明書の作成/clientの証明書の作成

証明書ディレクトリに移動します。

cd /etc/freeradius/3.0/certs/

以下のコマンドで証明書関係は一発で完成します。

make all

クライアントが使う証明書の取り出し

クライアントパソコンにインストールするために次の2個のファイルをUSBメモリにコピーしておきます。

1個目はCAの証明書、2個目はクライアント証明書でclient.cnfの「commonName」に設定した名前の拡張子「.p12」のファイルです。

/etc/freeradius/3.0/certs/ca.der
/etc/freeradius/3.0/certs/fumi@yellowhouse.jp.p12

FreeRADIUSの設定

FreeRADIUSを設定します。

モジュール設定

CA証明書/サーバー鍵と証明書のパスを設定します。

vi /etc/freeradius/3.0/mods-enabled/eap

変更するのは下記の項目です。

private_key_password = naisyo-sv-out
private_key_file = /etc/freeradius/3.0/certs/server.key
certificate_file = /etc/freeradius/3.0/certs/server.pem
ca_file = /etc/freeradius/3.0/certs/ca.pem

アクセスコントロール設定

WifiAPのネットワーク範囲、APがRADIUSサーバーに接続するためのパスワードを設定します。

vi /etc/freeradius/3.0/clients.conf

設定項目は以下の通り。

ネットワークを環境に合わせて設定します。

client private-network-1 {
	ipaddr		= 172.17.0.0/16
	secret		= naisyo-clients
}

ipv6を使わないのであれば、設定を無効にしておく方がいいでしょう。

## IPv6 Client
#client localhost_ipv6 {
#	ipv6addr	= ::1
#	secret		= testing123
#}

これらはAPに対するアクセスコントロールです。

Wifiクライアントは制限を受けません。

FreeRADIUS設定ファイルのパーミション変更

DebianではFreeRADIUSを「freerad」ユーザーで実行します。

makeが作成したファイルのパーミションを確認して、FreeRADIUSが使う「サーバー鍵」と「サーバー証明書」はfreeradが読めるようにしておきます。

chown freerad /etc/freeradius/3.0/certs/server.pem 
chown freerad /etc/freeradius/3.0/certs/server.key

「/etc/freeradius/3.0/certs/ca.pem」はすでにfreeradが読めるようになっています。

FreeRADIUSの起動

以上で準備が完了しました。

FreeRADIUSサーバーを起動します。

/etc/init.d/freeradius start

PMならsystemdを使うかもしれません。

systemctl restart freeradius.service

無線APの設定

APは172.17.0.0/16ネットワークにipアドレスを持っている必要があります。

「RADIUS設定」の項目で、「サーバー」欄で「外部RADIUSサーバー」を選択して、「RADIUSサーバー」のipアドレスと「Share Secret」を設定します。

そのほかは規定値で大丈夫です。

使用状況に応じて(11g)(11a)を設定します。

次に電波周波数に応じて(802.11g)(802.11a)の「無線セキュリティー」を設定します。

対象の「SSID」に対して「認証方式」を「WPA-EAP」に設定します。

接続確認を行ったところ「IEEE802.1x/EAP」でも接続は可能でした。

「WPA-EAP」と「IEEE802.1x/EAP」の違いは無線と有線を中継するAPにおいて、前者が無線段階での認証であるのに対して後者は有線段階での認証だと考えられます。

APの設定は以上です。

Windowsパソコンの接続手順

Windows10/11はEAP-TLSに対応していてRADIUS認証を使って簡単にWifi接続できます。

手順は以下の通りです。

  1. CAの証明書をインストールする
  2. クライアントの証明書をインストールする
  3. 証明書を使ってRADIUS認証でAPに接続する

USBメモリにコピーしておいた2個の証明書をパソコンの適当なところに置きます。

証明書ファイル名
CA証明書ca.der
クライアント証明書fumi@yellowhouse.jp.p12

CA証明書のインストール

CA証明書を「信頼されたルート証明機関」にインストールします。

ファイル「ca.der」をダブルクリックします。

「証明書のインストール(I)…」をクリック。

「証明書のインポートウィザードの開始」で「保存場所」を用途に応じて選択して「次へ(N)」をクリック。

「証明書ストア」で「証明書をすべて次のストアに配置する(P)」を選択して「証明書ストア:」の「参照(R)…」から「信頼されたルート証明機関」を選択します。

「次へ(N)」をクリック。

「証明書のインポート ウィザードの完了」で「ユーザーが選択した証明書ストア」が「信頼されたルート証明機関」になっていることを再確認して「完了(F)」をクリック。

セキュリティ警告「この証明書をインストールしますか?」で「はい(Y)」をクリック。

「正しくインポートされました。」を「OK」で閉じてください。

クライアント証明書のインストール

次にクライアント証明書をインストールします。

クライアント証明書ファイルをダブルクリックします。

「証明書のインポートウィザードの開始」で「保存場所」を用途に応じて選択して「次へ(N)」をクリック。

「インポートする証明書ファイル」の「ファイル名(F)」にはすでにファイルのパスが入っていますのでそのまま「次へ(N)」をクリック。

「秘密キーの保護」の「秘密キーのパスワードを入力してください。」の「パスワード(P)」でクライアント証明書作成用のテンプレートに設定した「output_password」の設定文字列を入力します。

「次へ(N)」をクリック。

クライアント認証用の証明書なので、「証明書ストアの場所」は「個人」ですが、「証明書の種類に基づいて、自動的に証明書ストアを選択する(U)」を選択すればOKです。

「次へ(N)」をクリック。

「証明書のインポート ウィザードの完了」で「完了(F)」をクリック。

「正しくインポートされました。」を確認して「OK」でウィザードを閉じてください。

以上で証明書のインストールが完了し、Wifi接続の準備ができました。

Wifi接続の設定

Windows11を例にWifi接続を行います。

画面右下の「ネットワーク」アイコンをクリックします。

すでにWifiに接続している場合はアイコンが「四つ切り同心円」になっています。

「>」をクリックしてWifiのSSIDを検索します。

接続したいSSIDを選択して「接続」をクリックします。

「ユーザー名とパスワードを入力してください」といわれますが今回はEAP-PEAPではなく、それよりもセキュリティーの高いEAP-TLS(証明書認証)なのでスルーします。

「証明書を使って接続する」をクリック。

TLS-EAPはサーバー認証もしているはずなのでここに表示される警告の意味はよく分かりません。

ただしサーバー認証はRADIUSサーバーの認証であってAPの認証ではないので警告されるのかもしれません。

ここまででわかることは、RADIUSサーバーによるAPの認証はipアドレスとパスワードだけです。

自分で作ったものなので信用して「接続」をクリックしてAPにつなぎます。

接続完了です。

接続情報を表示する

ここまでの過程はとても簡単でした。本当にTEAP-TLSを使っているのか怪しいので「接続の詳細」を確認してみます。

右上の「i」で接続のプロパティーに飛ぶことができます。

「サインイン情報の種類」欄を見るとEAP-TLSで認証されていることがわかります。

FreeRADIUSの証明書作成ツールで出来ること

今回は「certs」ディレクトリで「make all」コマンドによってすべての関連証明書を作成しました。

「make all」は以下を生成します。

  1. index.txtserial:証明書のインデックスとシリアル番号ファイル
  2. Diffie-Hellmanパラメータ
  3. CA証明書関連のファイル(ca.derca.crl
  4. サーバー証明書関連のファイル(server.pemserver.vrfy
  5. クライアント証明書関連のファイル(client.pem

「make ca」「make server」「make client」など個別に証明書を生成することもできます。

初期化する「make destroycerts」もあります。

用途コマンド
全部盛り(inner-server証明書を除く)make all
初期化make destroycerts
CA関連ファイルの生成make ca
サーバー証明書の生成make server
クライアント証明書の生成make client
トンネル用証明書の生成(EAP-TLSでは不使用)make inner-server

詳しくはMakefileを確認してください。

アカウンティング

FreeRADIUSはアカウンティングもできます。

RADIUSサーバーの認証を受け付ける「ipポート」は「1812」です。

アカウンティングのポートは「1813」です。

APはRADIUSサーバーの「1813」ポート宛てにクライアントの状況を報告します。

ユーザーがネットワークにアクセスした時間、セッションの長さ、送受信したデータ量、使用したサービスの種類などの情報が収集されます。

Debianでは下記にAPごとのアカウンティングが記録されます。

/var/log/freeradius/radacct/[APアドレス]/[日時]

マルチSSIDとVLANでの注意!

エンタープライズAPはVLAN対応しています。

「WAPM-1166D」でもVLANを使うことができます。

このように複数のVLANを設定している場合、1個のクライアント証明書ですべてのSSID(VLAN)にアクセスできます。

「WAPM-1166D」が「DynamicVLAN」に対応していないためだと考えられますが、セキュリティーの観点からは好ましくありません。

「DynamicVLAN」(動的VLAN、VLANアサインメント)機能があるAPでは、RADIUSサーバーからの情報でクライアントに許可されたVLANに接続させることができます。

まとめ

RADIUSによるEAP-TLS認証について検証してみました。

TLS認証は最高レベルの認証とされています。

多くのものが無線で繋がるようになってきた昨今では、無線のセキュリティーは重要です。

エンタープライズ以外ではパスワード認証だけのWifi接続が一般的ですが、小規模ネットワークにおいてもEAP-TLSを使うメリットがありそうです。

一方で証明書で認証されるのはユーザーとサーバーのみで、APの認証はパスワードということに不安は残ります。

またAPによってはセキュリティーに配慮して設計する必要があることがわかりました。

RADIUS(EAP-TLS)を導入しても別途ファイアウォールなどのアクセスコントロールが必要です。

タイトルとURLをコピーしました