その他

UnixやらNetworkやら、日々の雑感を含め書き連ねる

freeradiusを使ったWPA3-Enterprise 192 bit modeの構築

  • 投稿日:
  • by
  • Category:

はじめに

いまやどのご家庭にもあるWi-Fiアクセスポイントだが,さすがにWPA3-Enterprise 192bit modeに対応しているケースは少ないであろう.完全に自己満足の世界であるが,ふと思い立って構築に挑戦してみた.おそらく,アクセスポイントベンダーが提供している設定プログラムを使えば困難なく導入されると思うが,オープンソースだけで構築できるのであれば挑戦してみたかった.このため,「動けばよい」の精神の記事である.業務で使う場合は,クライアント証明書の配布・再配布,無効化などの仕組みまで考える(ここがEAP-TLSの難点だろう)必要があるだろうが,そういったことはスコープ範囲外としている.とはいえ,問題はfreeradiusではなく・・・.

IEEE802.1X

IEEE802.1Xは様々な認証方式に対応している.が,Wi-FIで用いられるものはさほど多くはなく,代表的なものは以下の2種類であろう.

  1. EAP-TLS
  2. EAP-PEAP

WPA3-Enterprise 192bit modeはEAP-TLSのみ対応となっている.そのため,freeradiusとしてはEAP-TLSに対応した設定をすればよい(ここは割愛する,他サイト等を参照のこと).

対応EAP暗号化スイート

やっかいなのはこれ.以下のいずれかのみ受け付けられる.すなわち,要件を満たした証明書が求められる.

  • TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
  • TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
  • TLS_DHE_RSA_WITH_AES_256_GCM_SHA384

ここまでは,某google先生に聞けば出てくる.が,上記を満たした証明書をopensslで作る方法が出てこない.ここを以下,説明していく.なお,書いている本人も良く理解しておらず「こうやったら通った」だけのため,(参考にする向きも無いと思うが)参考にする場合はあくまで自己責任で.ちなみに本講の手法を使うと,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384として通用するはず.

証明書作成

設定ファイル

設定ファイルの設定方法はここを参考にした.おそらく,サーバ証明書,クライアント証明書ともに,以下の記述がポイントと思われる.

[CA_default]
default_md = sha384
  • CA 証明書

おそらく,CA証明書は特に上記要件に関わらない模様(だが,特に検証していない).

openssl ecparam -genkey -noout -name prime256v1 -out "./private/ca_key.pem"
openssl req -x509 -new -nodes -key private/ca_key.pem -sha384 -days 3650 -out RootCA_cert.pem -config openssl.cnf

証明書をwindowsへインストールするためのファイル形式に変換.

openssl x509 -in RootCA_cert.pem -outform DER -out RootCA_cert.der
  • サーバ証明書
openssl ecparam -name secp384r1 -genkey -out server-key.pem
openssl req -new -out server-csr.csr -key server-key.pem -subj="/C=JP/ST=Hoge/L=Tete/O=HogeTete/CN=server.hogetete.net/OU=Hote/emailAddress=administrator@server.hogetete.net" -config freeradius-server-wpa3.cnf
openssl ca -in server-csr.csr -keyfile private/ca_key.pem -cert RootCA_cert.pem -out server-cert.pem \ -config ./freeradius-server-wpa3.cnf -extensions xpserver_ext -extfile xpextensions
  • クライアント証明書
openssl ecparam -name secp384r1 -genkey -out client-key.pem
openssl req -new -out client-csr.csr -key client-key.pem \-subj="/C=JP/ST=Hoge/L=Tete/O=HogeTete/CN=client@hogetete.net/OU=Hote/emailAddress=client@hogetete.net" \-config freeradius-client-wpa3.cnf
openssl ca -in client-csr.csr -keyfile private/ca_key.pem -cert RootCA_cert.pem -out client-cert.pem \-config ./freeradius-client-wpa3.cnf -extensions xpclient_ext -extfile xpextensions
  • クライアント証明書をandroidやwindowsに導入するためにファイル形式を変更
openssl pkcs12 -export -in client-cert.pem -inkey client-key.pem -out client.p12 -certfile RootCA_cert.pem \-name "client@hogetete.net WPA3-Enterprise Certificate" -legacy -keypbe PBE-SHA1-3DES -certpbe PBE-SHA1-3DES

あとは,クライアント証明書を各端末に適切にインストールし,相応の設定をすればWPA3-Enterprise 192bit modeで接続されるはず.

参考サイト

備忘録 - Windowsでのディレクトリリンク

  • 投稿日:
  • by
  • Category:

誰得な備忘録.故合って,変更できないディレクトリ名の中にあるファイルにアクセスする必要があるが,その変更できないディレクトリ名に不都合があって(例えば,スペースがはいっているとか),別の名前でアクセスしたいという場合.Unix的発想ならば「シンボリックリンクを張る」一択なのだが,Windowsでシンボリックリンクを造るのは割と面倒.

こちらのページにやり方が書いてある.だが,単純にSymbolicLinkを作ってしまうと,確かに別名でアクセスはできるが,そこからさらにそのフルパスファイル名で作業をさせようとすると,元のディレクトリ名がはいったフルパス名となってしまい,意味がない.

少々試行錯誤をして,ディレクトリジャンクションなるものを作ると,要求を満たせることがわかった.

jfs->ext4

  • 投稿日:
  • by
  • Category:

この記事の記事の続編.jfsにすると,1)システムがハングアップする.2)回復時にfsckが過負荷(おそらくメモリ不足)のため実行できず,他マシンに接続して実行する必要あり.の二重苦となった.

このため,最終的にはext4にして安定稼働している.定番とされている物はそれなりの理由がある,ということか.

KURO/BOX PRO近況

  • 投稿日:
  • by
  • Category:

この記事の続報.データストレージを外付けUSB-HDDに担わせることにし,Logitech LHR-2BRHEU3に3.5inch HDDを2台搭載することとした.また,システム用ストレージもソフトウエアRAID1にしたかったため,いくつか試した結果,StarTech.com デュアルM.2 SSD - SATAアダプタをJBODモードで動作させ,M.2 SSDを2枚差しすることで起動ドライブとすることができた.また,ファイルシステムもxfsでは負荷が重いようなので,jfsに変更した.

とりあえず,家庭用NASとして働いてもらっている.

pLaTeX関連の話題

  • 投稿日:
  • by
  • Category:

pLaTeX が本格的にやばいかもという話

うーん,とりあえず某学会のクラスファイルはメンテが必要そう.((u)platexでないと動かなかった,はず)

新規に作るものについては,LuaLaTeXあたりを使った方が幸せになれそう.

筆者も,最近は努めてLuaLaTeXを使用している.zw/zhがそのままでは使えないので(スラッシュをつけて命令化する),プリアンブル含め少々手を入れる必要がある.

ただ,(乱暴に言ってしまえば)単なる組版システムの都合に振り回されるのもなんだかなあ.同一バージョンでもPCによって出力結果が変わってしまう某M$のソフトよりはマシだが.

freeradius + samba AD で WPA2-Enterprise の EAP-PEAP-MSCHAPv2

  • 投稿日:
  • by
  • Category:

誰得な備忘録.

samba ADのドメインコントローラ(DC)上でfreeradiusを用いたRADIUSサーバを動作させ,無線LAN APからのWPA2-EnterpriseでのEAP-PEAP-MSCHAPv2を受け付ける.

前提条件: Gentoo Linux上でsamba AD DCが動作している.SSLライブラリはLibreSSLである(これはあまり影響しない・・・はず),当該サーバに有効なサーバ証明書が作成されている.

1. freeradiusをインストール

/etc/portage/package.use/freeradiusに以下記述.

net-dialup/freeradius ldap samba

インストール

sudo -E emerge -v freeradius

2. freeradiusの設定

2.1 設定ファイル所有者所有グループ変更

chown -R radius:radius /etc/raddb

2.2 /etc/raddb/client.confの設定

無線LANアクセスポイントとの接続情報を設定

上記ファイルの適当な場所に以下の設定を記述

client WCT_LAB_AP {
ipaddr = <WLAN_AP_IPADDR>
secret = <WLAN_AP_password>
shortname = <WLAN_AP_ShorName> # 必ずしも必要ではない?
}

2.3 /etc/raddb/mods-enabled/eapの設定

EAPの設定

eap {

default_eap_type = PEAP

tls-config tls-common {
private_key_password = <サーバ証明書の秘密鍵のパスワード>
private_key_file = ${certdir}/<サーバ証明書の秘密鍵ファイル名>

certificate_file = ${certdir}/<サーバ証明書ファイル名>

ca_file = <ルート証明書のファイル名・フルパス>

dh_file = ${certdir}/dh4096.pem

random_file = /dev/urandom

}

peap {

copy_request_to_tunnel = yes

use_tunneled_reply = yes

2.4 DHファイルの作成

openssl dhparam -out dh4096.pem 4096

ここまでビット長が長くなくても良いかも.

2.5 /etc/raddb/mods-enabled/mschap

MSCHAPv2の認証アプリケーション設定

mschap {

use_mppe = yes

require_encryption = yes

require_stron = yes

ntlm_auth = "/usr/bin/ntlm_auth --allow-mschapv2 --request-nt-key --username=%{%{Stripped-User-Name}:-%{%{mschap:User-Name}:-None}} --domain=%{%{mschap:NT-Domain}:-<ドメイン名>} --challenge=%{%{mschap:Challenge}:-00} --nt-response=%{%{mschap:NT-Response}:-00}"

(後略)

2.6 /etc/raddb/sites-enabled/default

待ち受けアドレス・ポート番号の設定

server default {

listen {

type = auth

ipaddr = <サーバIPアドレス>

}

listen {

type acct

ipaddr = <サーバIPアドレス>

}

}

2.7 /var/lib/samba/private/winbindd_privilegedのグループ変更

radius:radiusよりntlm_authを行えるように.

chgrp radius /var/lib/samba/private/winbindd_privileged

3. テスト用プリケーションのインストールとテスト

wpa_supplicantをインストールする.USEフラグを設定./etc/portage/package.use/wpa_supplicantに以下を設定.

net-wireless/wpa_supplicant gnutls eapol_test

インストール.

sudo -E emerge -v wpa_supplicant

次の内容を適当なファイル名で保存.

network={
ssid="<無線 SSID>"
key_mgmt=WPA-EAP
eap=PEAP
identity="<ユーザ名>"
password="<パスワード>"
phase2="autheap=MSCHAPV2"
ca_cert="<ルート証明書ファイル名・フルパス>"
}

以下のコマンドでテスト.

sudo eapol_test -c <上記ファイルをフルパスで> -s <WLAN_AP_password> -a <サーバIPアドレス>

上記コマンドを実行すると,大量の表示がされるが,最後にSUCCESSという表示が出れば,設定は成功.

4. 無線LAN APにradiusサーバに関する必要事項を設定.

接続先を<サーバIPアドレス>,パスワードを<WLAN_AP_password>で設定すると,動作するはず.

samba共有ディレクトリをzfs上に作るときに注意すること

  • 投稿日:
  • by
  • Category:

こちらの内容を備忘録がてら転載.(最新のzfs,sambaでは設定内容が一部変更となっているため,これを修正.)

zfs上にsamba共有ディレクトリを作る場合は,注意しないとアクセス速度が遅くなる.

原因はwindowsはファイル名の大文字小文字を区別しない,Unixは大文字小文字を区別するということ,らしい.

対応は簡単.

1. zfsファイルシステム作成時に以下の設定で行う.

zfs create -o casesensitivity=insensitive -o relatime=on -o compression=lz4 -o acltype=posixacl -o mountpoint=/hogetete ztank/path/to/cifs

2. sambaの設定を変える.smb.confの該当セクション([share]など)に,以下の項目を追加.

case sensitive = yes
preserve case = no
short preserve case = no

samba + bind9 + isc-dhcpでDDNS

  • 投稿日:
  • by
  • Category:

誰得な備忘録.

下記の記事の通りなのだが,そのままでは動かず.

https://wiki.samba.org/index.php/Configure_DHCP_to_update_DNS_records_with_BIND9

/var/log/named/named.logに以下のようなエラーを吐いて動作しない.

18-Dec-2019 18:39:59.111 database: error: samba_dlz: spnego update failed

様々試してみた結果,以下の方法で動作する様になった.

https://lists.samba.org/archive/samba/2017-December/212948.html

systemdを使用しているので,systemdで起動する際に環境変数を設定する.

ここ(https://docs.docker.jp/engine/articles/systemd.html)を参考にする.

sudo mkdir /etc/systemd/system/named.service.d
sudo vi /etc/systemd/system/named.service.d/local.conf
--------------
[Service]
Environment="KRB5RCACHETYPE=none"
--------------
sudo systemctl daemon-reload

設定ファイルが読み込まれたのを確認する.

$ sudo systemctl show named --property Environment
Environment="KRB5RCACHETYPE=none"

再起動する.

$ sudo systemctl restart named

オレオレ証明書の作り方-2019年版 (3) : EAP-TLS/PEAP用証明書

  • 投稿日:
  • by
  • Category:

y2blog - LeopardサーバのRADIUS #7 : WindowsXP標準サプリカントへの対応から。

FreeRadiusにてEAP-TLS or EAP-PEAP認証サーバを構築し、WindowsXP以降の標準サプリカントにて利用する場合には、証明書にあるextensionが含まれている必要がある。

通常のサーバ証明書の作成手順で署名要求書まで作成する。

CAの署名時に(gentoo Linuxの場合、/etc/raddb/certs/以下にある)xpextensionsファイルを利用する。
以下、引用。


 サーバの署名要求 (CSR) とクライアントの署名要求を作成する所までは今までと同じです.異なるのはCAによる署名手続きです.サーバの場合とクライアントの場合で組み込む extension が異なります.extensionの定義ファイル "xpextension" の内容は次のようになっています.

#
#  For use with the 'CA.all' script.
#
[ xpclient_ext]
extendedKeyUsage = 1.3.6.1.5.5.7.3.2
[ xpserver_ext]
extendedKeyUsage = 1.3.6.1.5.5.7.3.1
サーバ用のコマンド例
#openssl ca  -policy policy_anything -out newcert.pem -extensions xpserver_ext -extfile xpextensions \
-infiles newreq.pem -config openssl.cnf
クライアント用のコマンド例
#openssl ca  -policy policy_anything -out newcert.pem -extensions xpclient_ext -extfile xpextensions \
-infiles newreq.pem -condig openssl.cnf

以上.

オレオレ証明書の作り方-2019年版 (2)

  • 投稿日:
  • by
  • Category:

サーバ証明書作成編。

まず、サーバ用の秘密鍵を作成

openssl genrsa -camellia256 -out dwctsv01-key.pem 4096

このままだと、何かのサービスを立ち上げるたびにパスフレーズを要求されるため、
パスフレーズを解除する。当然セキュリティレベルは低下するので、利便性との
トレードオフ。

openssl rsa -in dwctsv01-key.pem -out dwctsv01-nopasskey.pem

それを利用して、CAに対しての署名要求書を作成する。

openssl req -new -days 3650 -key dwctsv01-key.pem -out dwctsv01-csr.pem -config openssl.cnf

CAとして、書名要求書に署名する。

openssl ca -in dwctsv01-csr.pem -keyfile private/ca_key.pem -cert RootCA_cert.pem -out dwctsv01-cert.pem -config openssl.cnf

あとは、サービスごとに必要な設定をする。

なお,サーバ証明書の場合には,例えば,openssl-server.cnfという名前で以下のファイルを作成する.

basicConstraints = CA:FALSE
keyUsage = digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth

そしてCAの署名時に以下のコマンドを実行する。

openssl ca -in dwctsv01-csr.pem -keyfile private/ca_key.pem -cert RootCA_cert.pem -out dwctsv01-cert.pem -config openssl.cnf -extfile openssl-server.cnf

クライアント証明書の場合は,例えば,openssl-client.cnfという名前で以下のファイルを作成する.

basicConstraints = CA:FALSE
keyUsage = digitalSignature
extendedKeyUsage = clientAuth

openssl ca -in dwctsv01-csr.pem -keyfile private/ca_key.pem -cert RootCA_cert.pem -out dwctsv01-cert.pem -config openssl.cnf -extfile openssl-client.cnf