概要
無線LANにLDAP接続出来ないかと試した備忘録です。
結果FreeRADIUS+OpenLDAPの組み合わせで実現出来ました。
無線LANパスワードの問題点と課題
無線LANのパスワード運用は以下の問題や課題があるなーと思っています。
- パスワードは変更しないまま放置
- パスワード定期変更後パスワードが分からなくてネットワークに繋がらなくてイライラ
- アクセスポイント機器が増えるとパスワード変更を行う度に台数分行わなければいけない
などなど
解決策
そこで上記図のように
- FreeRadius
- OpenLDAP
- YAMAHA WLX302(無線LAN AP)
これらを組み合わせて無線LANアクセスを共有パスワードではなく
個別のLDAPユーザとパスワードで無線LANに接続出来るように認証基盤を整えました。
環境
RADIUSサーバー
OS | CentOS 7.0.1406 |
---|---|
RADIUSバージョン | freeradius-3.0.1-6.el7.x86_64, freeradius-ldap-3.0.1-6.el7.x86_64 |
IPアドレス | 10.0.0.1 |
LDAPサーバー
OS | CentOS 6.2 |
---|---|
LDAPバージョン | openldap-servers-2.4.23-20.el6.x86_64 |
IPアドレス | 10.0.0.3 |
無線LAN AP
製品名 | YAMAHA WLX302 |
---|---|
認証方式 | WPA-EAP/WPA2-EAP |
SSID | radius |
IPアドレス | 192.168.0.1 |
前提
本エントリは以下が前提となっています。
- LDAPサーバーが構築済であること
- RADIUS認証が可能なWifiAPを購入済みであること(今回の例ではYAMAHA WLX302)
RADIUSインストール
yum install freeradius.x86_64 yum install freeradius-ldap.x86_64 yum install freeradius-utils.x86_64
freeradius-utils.x86_64
はこれを入れておかないとradtest
コマンド等が使えない為インストールしておきます。
FreeRADIUS設定
事前準備(SSL証明書作成)
暗号化通信を行うにあたってSSL証明書が必要になるため作成しておきます。
SSL証明書作成手順は以下エントリを参考にしてください。
SSL自己署名証明書作成メモ - tsunokawaのはてなダイアリー
SSL証明書作成はRADIUSサーバー上で行ってください。
作成した秘密鍵と証明書は/etc/raddb/certs/
に保存します。
証明書ファイル(/etc/pki/tls/cert.pem
)を/etc/raddb/certs/
にコピーします。
cp -p /etc/pki/tls/cert.pem /etc/raddb/certs/
次に設定ファイルを変更していきます。
変更箇所のみ記載していきます。
/etc/raddb/clients.conf
client 192.168.0.1 { secret = radiuspassword shortname = radius }
上図にも記載してありますが192.168.0.1
は無線LAN APのIPです。
secretは無線LAN APがRADIUSサーバーに接続する際のパスワードです。
/etc/raddb/dictionary
以下を追記します。
VALUE Auth-Type LDAP 5
/etc/raddb/users
以下を追記します。
適宜環境に合わせて読み変えてください。
DEFAULT Auth-Type = LDAP Fall-Through = 1
上記部分以外は全てコメントアウトします。
FreeRADIUSのLDAPライブラリを有効にするためシンボリックリンクを張ります。
cd /etc/raddb/mods-enabled/ ln -s ../mods-available/ldap ldap
/etc/raddb/mods-enabled/ldap
ldap { server = "ldap.example.org"
↓
ldap { server = "ldap.example.com"
# identity = "cn=admin,dc=example,dc=org" # password = mypass
↓
identity = "cn=Manager,dc=example,dc=com" password = testing123
# base_dn = "dc=example,dc=org"
↓
base_dn = "ou=Users,dc=example,dc=com"
update { control:Password-With-Header += 'userPassword' # control:NT-Password := 'ntPassword'
↓
update { control:Password-With-Header += 'userPassword' control:NT-Password := 'sambaNTPassword'
/etc/raddb/mods-enabled/eap
eap { default_eap_type = md5
↓
eap { default_eap_type = peap
作成したSSL証明書の秘密鍵を指定します。
private_key_password = whatever private_key_file = ${certdir}/server.pem
↓
private_key_file = ${certdir}/radiustest.key
作成したSSL証明書を指定します。
certificate_file = ${certdir}/server.pem
↓
certificate_file = ${certdir}/radiustest.crt
認証局証明書を指定します。
ca_file = ${cadir}/ca.pem
↓
ca_file = ${cadir}/cert.pem
このcert.pem
は/etc/pki/tls/cert.pem
をそのままコピーしました。
認証を行ったサーバーの/etc/pki/tls/cert.pem
を設置すればOKです。
# tmpdir = /var/run/radiusd/tmp
↓
tmpdir = /var/run/radiusd/tmp
# client = "/usr/bin/openssl verify -CApath ${..ca_path} %{TLS-Client-Cert-Filename}"
↓
client = "/usr/bin/openssl verify -CApath ${..ca_path} %{TLS-Client-Cert-Filename}"
/etc/raddb/sites-enabled/default
authorize { -ldap
↓
authorize { ldap
authenticate { # Auth-Type LDAP { # ldap # }
↓
Auth-Type LDAP { ldap }
post-auth { # ldap
↓
post-auth { ldap
/etc/raddb/sites-enabled/inner-tunnel
listen { ipaddr = 127.0.0.1
↓
ipaddr = *
authorize { -ldap
↓
ldap
authenticate { # Auth-Type LDAP { # ldap # } |
↓
Auth-Type LDAP { ldap }
post-auth { # ldap
↓
ldap
pidディレクトリ作成
FreeRADIUSのインストール時点でpidファイルが保存されるディレクトリが作成されないので作成しておきます。
mkdir /var/run/radiusd/tmp chown radiusd:radiusd /var/run/radiusd/tmp/
ディレクトリを作成しておかないとデーモン起動時にエラーが出てしまいます。
Tue Jan 27 10:40:51 2015 : Error: Failed changing permissions on /var/run/radiusd/tmp: No such file or directory
以上でFreeRADIUSの設定は完了です。
RADIUSデーモン再起動
設定ファイルの変更が完了したのでRADIUSデーモンを再起動しておきます。
systemctl restart radiusd
無線LAN AP(YAMAHA WLX302)設定
次にWIfi APのYAMAHA WLX302にRADIUS設定を行います。
SSIDの設定でバックエンドのRADIUSに接続するように設定します。
認証方式 | WPA-EAP/WPA2-EAP |
---|---|
プライマリRADIUSサーバー | 外部のRADIUSサーバーを使用するにチェック, IPアドレスはRADIUSプライマリサーバーのものを入力 |
プライマリ認証ポート | 1812 |
プライマリRADIUSアカウンティング | 使用しない |
プライマリアカウントポート | 1813 |
プライマリRADIUSシークレット | /etc/raddb/clients.conf で設定したパスワード |
セカンダリRADIUSサーバー | 外部のRADIUSサーバーを使用するにチェック, IPアドレスはRADIUSセカンダリサーバーのものを入力 |
セカンダリ認証ポート | 1812 |
セカンダリRADIUSアカウンティング | 使用しない |
セカンダリアカウントポート | 1813 |
セカンダリRADIUSシークレット | /etc/raddb/clients.conf で設定したパスワード |
上記は設定例です。
環境に合わせて読み変えてください。
SSIDごとにLDAP(RADIUS)認証するかどうか設定出来るのでゲスト用はこれまで通りパスワード認証ということも可能です。
各クライアントからアクセス
上記で一通り設定が完了しましたのでこれからいよいよ無線LANクライアントからLDAPパスワードで接続を行います。
MacOS(設定例)
MacOSで接続する手順例です。
ネットワーク名 | radius(RADIUS設定したSSID) |
---|---|
セキュリティ | WPA/WPA2エンタープライズ |
モード | 自動 |
ユーザ名 | LDAPアカウント |
パスワード | LDAPパスワード |
初回接続時、証明書に関するメッセージが出ますが続けるを押してください。
これはオレオレ証明書を使っているためです。
以上でLDAPユーザで無線接続が出来るようになったと思います。
謝辞
構成図アイコンお借りしました。
アイコン・外観写真ダウンロード - ダウンロード - ヤマハ株式会社