pslaboが試したことの記録

はてなダイヤリーからはてなブログに引っ越してきました

この日記は現在実行中の減量記録を含む個人的なメモとして始めましたが、最近はコンピュータやガジェット、ハック、セキュリティネタのほうがメインになっております。

はてなダイヤリー時代はカテゴリ分けが適当だったのですが、これはそのうち直します。


OpenWrt Chaos Calmer 15.05 で WPA-EAP / WPA2-EAP を使う

以前に OpenWRT 12.09 / 14.07 でWPA-EAP を使う設定手順を書いたのですが、Chaos Calmer 15.05 が出たのでやりなおしてみます。
 

ま、実際のところ、手順はほとんど同じなのですけどね。

Mission

  • OpenWRT 単体で WPA-EAP / WPA2-EAP を完結させるために、OpenWRT 上に RADIUS サーバをセットアップします。

ToDo

デフォルトのブリッジである br-lan を使用せず、新規に作成したブリッジにイーサネット無線LANを収容する。

この作業は、radius127.0.0.1 で起動させるための小細工です。この必然性を感じない方は、ここは読み飛ばして頂いてよいかと思います。

freeradius はインストール後の初期状態だと br-lan のIPアドレスで listen します。しかし、この radius を他の用途で使わないならば、radiusループバックアドレスだけを listen していればよいはず。

このための設定を普通にやろうとすると /etc/init.d/radiusd を書き換えることになりますが、起動スクリプトを書き換えるのはできれば避けたい。よって起動スクリプトを書き換えずに済ませるには br-lan にループバックアドレスを割り振らねばならない。


そのためには、br-lan とは別のブリッジを作成の上で、イーサネット無線LANを収容する必要があります。openwrt を使うような方ならこの程度の説明で意味はご理解いただけると思うので、説明は省略。


WPA-EAPに必要なパッケージをインストールする。

  • インストールするパッケージの一覧をテキストファイル化しておく。
  • wpa-miniを削除して、代わりにwpaパッケージをインストールする。
  • FreeRADIUS関連パッケージをインストールする。
インストールするパッケージの一覧をテキストファイル化しておく。

以下の一覧を pkglist.txt というファイル名で作成します。12.09 / 14.07 では WebUI の日本語翻訳パッケージが luci-i18n-japanese で提供されていましたが、15.05 では luci-i18n-base-ja に変わっています。

luci-i18n-base-ja
freeradius2
freeradius2-democerts
freeradius2-mod-always
freeradius2-mod-attr-filter
freeradius2-mod-attr-rewrite
freeradius2-mod-chap
freeradius2-mod-detail
freeradius2-mod-eap
freeradius2-mod-eap-gtc
freeradius2-mod-eap-md5
freeradius2-mod-eap-mschapv2
freeradius2-mod-eap-peap
freeradius2-mod-eap-tls
freeradius2-mod-eap-ttls
freeradius2-mod-exec
freeradius2-mod-expiration
freeradius2-mod-expr
freeradius2-mod-files
freeradius2-mod-ldap
freeradius2-mod-logintime
freeradius2-mod-mschap
freeradius2-mod-pap
freeradius2-mod-passwd
freeradius2-mod-preprocess
freeradius2-mod-radutmp
freeradius2-mod-realm
freeradius2-mod-sql
freeradius2-mod-sql-mysql
freeradius2-mod-sql-pgsql
freeradius2-mod-sql-sqlite
freeradius2-mod-sqlcounter
freeradius2-mod-sqllog
freeradius2-utils
openssl-util
diffutils
vim-full
wget
ssmtp
avahi-dbus-daemon
avahi-utils

なお、diffutils 以降のパッケージは今回の目的に必須のパッケージではありませんが、自分の環境構築の手間を減らすために記載しています。wget, ssmtp は本来は必須ではなく、個人的なニーズのために入れています。wget はいくつかの設定情報を Google Form 経由で Google Spreadsheet に投げ込むために用いています。また ssmtp はメール通知のために入れてます。。。が、これらのネタはココでは触れません。

wpa-miniを削除して、代わりにwpaパッケージをインストールする。

opkg remove wpad-mini してから、opkg install wpad する。

FreeRADIUS関連パッケージをインストールする。

opkg install $( cat pkglist.txt ) でOK。

 

※以下は過去の内容をそのまま貼り付けてます。未検証。

RADIUS秘密鍵秘密鍵CSR秘密鍵の証明書を作る。

作業場所はココ
/etc/freeradius2/certs/

CAの秘密鍵を作る

root@OpenWrt:~# openssl genrsa -des3 -out [CA鍵].key 2048
Generating RSA private key, 2048 bit long modulus
....................................................................+++
...........................................+++
e is 65537 (0x10001)
Enter pass phrase for ca.key:[CA秘密鍵パスフレーズ]
Verifying - Enter pass phrase for ca.key:[CA秘密鍵パスフレーズを再入力]
root@OpenWrt:~#

CA秘密鍵CSRを作る

root@OpenWrt:~/certs# openssl req -new -x509 -days 3650 -key [CA鍵].key -out [CA鍵].pem
Enter pass phrase for ca.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.

        • -

Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Tokyo
Locality Name (eg, city) :Chiyoda
Organization Name (eg, company) [Internet Widgits Pty Ltd]:example.com
Organizational Unit Name (eg, section)
:
Common Name (e.g. server FQDN or YOUR name) :
Email Address
:admin@example.com
root@OpenWrt:~/certs#

RADIUS秘密鍵を作る

root@OpenWrt:~/certs# openssl genrsa -des3 -out [RADIUS鍵].key 2048
Generating RSA private key, 2048 bit long modulus
..........+++
.......+++
e is 65537 (0x10001)
Enter pass phrase for ca.key:[RADIUS秘密鍵パスフレーズ]
Verifying - Enter pass phrase for ca.key:[RADIUS秘密鍵パスフレーズを再入力]
root@OpenWrt:~/certs#

RADIUS秘密鍵CSRを作る

root@OpenWrt:~/certs# openssl req -new -key [RADIUS鍵].key -out [RADIUS鍵].csr
Enter pass phrase for server.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.

        • -

Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Tokyo
Locality Name (eg, city) :Chiyoda
Organization Name (eg, company) [Internet Widgits Pty Ltd]:example.com
Organizational Unit Name (eg, section)
:OpenWRT
Common Name (e.g. server FQDN or YOUR name) :openwrt.example.com
Email Address
:admin@example.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password :
An optional company name
:
root@OpenWrt:~/certs#

RADIUS秘密鍵にCAの証明書を発行する

root@OpenWrt:~/certs# openssl x509 -req -days 3650 -in [RADIUS鍵].csr -CA [CA鍵].pem -CAkey [CA鍵].key -set_serial 01 -out [RADIUS鍵].pem
Signature ok
subject=/C=JP/ST=Tokyo/L=Chiyoda/O=example.com/OU=OpenWRT/CN=openwrt.example.com/emailAddress=admin@example.com
Getting CA Private Key
Enter pass phrase for ca.key:[CA秘密鍵パスフレーズ]

FreeRADIUSを設定する。

以下の箇所を設定変更します。

--- /etc/freeradius2/clients.conf-opkg	2015-09-09 15:08:12.000000000 +0900
+++ /etc/freeradius2/clients.conf	2015-10-05 18:23:31.000000000 +0900
@@ -98,7 +98,7 @@
 	#  The default secret below is only for testing, and should
 	#  not be used in any real environment.
 	#
-	secret		= testing123
+	secret		= [radius clientのパスワード]
 
 	#
 	#  Old-style clients do not send a Message-Authenticator
--- /etc/freeradius2/eap.conf-opkg	2015-09-09 15:08:12.000000000 +0900
+++ /etc/freeradius2/eap.conf	2015-10-05 18:16:53.000000000 +0900
@@ -155,8 +155,8 @@
 			certdir = ${confdir}/certs
 			cadir = ${confdir}/certs
 
-			private_key_password = whatever
-			private_key_file = ${certdir}/server.pem
+			private_key_password = [RADIUS秘密鍵のパスフレーズ]
+			private_key_file = ${certdir}/[RADIUS鍵].key
 
 			#  If Private key & Certificate are located in
 			#  the same file, then private_key_file &
@@ -168,7 +168,7 @@
 			#  only the server certificate, but ALSO all
 			#  of the CA certificates used to sign the
 			#  server certificate.
-			certificate_file = ${certdir}/server.pem
+			certificate_file = ${certdir}/[RADIUS鍵].pem

 			#  Trusted Root CA list
 			#
@@ -185,7 +185,7 @@
 			#  not use client certificates, and you do not want
 			#  to permit EAP-TLS authentication, then delete
 			#  this configuration item.
-			CA_file = ${cadir}/ca.pem
+			CA_file = ${cadir}/[CA鍵].pem
 
 			#
 			#  For DH cipher suites to work, you have to
--- /etc/freeradius2/radiusd.conf-opkg	2015-09-09 15:08:13.000000000 +0900
+++ /etc/freeradius2/radiusd.conf	2015-10-05 17:10:20.000000000 +0900
@@ -473,7 +473,7 @@
 	#
 	#  allowed values: {no, yes}
 	#
-	auth = no
+	auth = yes
 
 	#  Log passwords with the authentication requests.
 	#  auth_badpass  - logs password if it's rejected
--- /etc/freeradius2/users-opkg	2015-09-09 15:08:13.000000000 +0900
+++ /etc/freeradius2/users	2015-10-05 17:12:29.000000000 +0900
@@ -201,3 +201,5 @@
 # 	Service-Type = Administrative-User
 
 # On no match, the user is denied access.
+
+[適当なradiusユーザ]  Cleartext-Password:= "radiusユーザのパスワード"

管理UIからWPA-EAPを有効化する

  1. システム -> startup から radiusd を有効化し、開始します。
  2. 無線LANの設定で、暗号化モードで WPA2-EAP を選択します。
  3. RADIUS認証サーバのIPアドレス127.0.0.1 を指定します。
  4. RADIUS認証秘密鍵は clients.conf の secret= で指定したものを。

ここまでいけば、たぶん openwrt で WPA2-EAP が使えます。