- PR -

FreeRadius属性削除・変更・追加についての質問

1
投稿者投稿内容
へっぽこ管理者
会議室デビュー日: 2008/12/29
投稿数: 3
投稿日時: 2008-12-29 09:40
はじめまして、Toyと申します。皆様今後ともよろしくお願いいたします。

さて、組織上の都合があり有線LAN無線LANを802.1x認証+認証VLAN(ダイナミックVLAN)で構築しようとしています。組織内での構築は大体目処はついたのですが、外部連携組織との認証で躓いています。

以下がやりたいことです。
1.認証は802.1xでEAP-TLS、PEAP(MSCHAPv2)
2.組織内はTopレベルに設置したradiusが部署毎のRadius(tunnel情報含有)を参照する
3.同じように外部連携組織についてもTopレベルに設置したradiusがインターネットを通してProxy動作で聞きに行く
4.認証成功後はTunnel-Private-Group-IDで指定されたVLANに移行する(外部連携組織のユーザのVLANはVPNなど限定されたプロトコルのみを利用可とし、内部組織VLANとは隔離する。)

ここで問題なのがtunnel情報が外部連携組織がそれらを持たない場合やこちらの目論見と違ったものを持つ場合です(外部とのProxy動作は検証済み。)今回の質問事項ですが、proxy先からの返された情報の内、Tunnel*の属性があれば削除し、新たにこちらが目論むVLAN情報を付け加える方法のあるや無しやと、そのHintです。

post_authにperlモジュールを突っ込んでこねくり回すということを考えておりますが、、、属性の検出、削除、追加の書式がわかりません。
実験で内部AD連携認証(Tunnel情報なし)に、testで付いてきたperlモジュールをpost_authブロックにいれてやると

+- entering group post-auth {...}
GOT CLONE -1208030512 0x82387d0
rlm_perl: Added pair User-Name = test@xx.xx.xx.jp
rlm_perl: Added pair User-Password = xxxxxx
rlm_perl: Added pair Realm = ~(.+\\.|)xx\\.xx\\.xx\\.jp$
rlm_perl: Added pair Stripped-User-Name = test
rlm_perl: Added pair NAS-Port = 1812
rlm_perl: Added pair NAS-IP-Address = 192.168.yy.yyy
rlm_perl: Added pair Auth-Type = ntlm_auth
++[perl] returns ok

perlが属性を認識しているように見えるのですが。
さてどうしたものやら、manでもこのあたりの情報があまりなく

外部連携組織が1箇所で小さい場合は、こちらで管理ということも可能でしょうが、それがRadiusを階層管理し相手のユーザも不明な場合はこちらで何らかのギミックを用意しなければなりません。
イメージとしては
http://www.ulan.jp/sigcms/index.php?plugin=attach&pcmd=open&file=IPSJ_CMS8-ITRC_MEET23-Goto.pdf&refer=%C2%E88%B2%F3%B8%A6%B5%E6%B2%F1
みたいな感じです。

組織内TopレベルRadiusはFreeRadius2.1.3、認証switchはアライドCentreCom9424T-SP-E他、アクセスポイントは同じくアライドのTenQ2403で構成しています。

では、皆様よろしくご教授お願いいたします。

ヘッポコ管理者
Toy
へっぽこ管理者
会議室デビュー日: 2008/12/29
投稿数: 3
投稿日時: 2008-12-29 10:40
すみません。自己解決しました。
manばかり探していたのですが、灯台下暗しでした。
下のサイトのAdding a Radius Response Itemあたりが参考になりそうです。
お騒がせいたしました。

http://wiki.freeradius.org/Modules

Toy@へっぽこ
へっぽこ管理者
会議室デビュー日: 2008/12/29
投稿数: 3
投稿日時: 2008-12-30 08:17
一応。ご報告というか備忘録と、なにか間違いがあれば突込みをお願いします。

(1)
raddb/modules/perlのなかでコールする関数名をコメントアウト。
私は実験的に
 func_post_auth = post_auth
とした。

(2)
raddb/example.plのなかのpost_auth関数を以下のように変更
# Function to handle post_auth
sub post_auth {
# For debugging purposes only
# &log_request_attributes;

$RAD_REPLY{'Tunnel-Type'} = 13;
$RAD_REPLY{'Tunnel-Medium-Type'} = 6;
$RAD_REPLY{'Tunnel-Private-Group-ID'} = 19;
return RLM_MODULE_UPDATE;
}

(3)
raddb/sites-enabled/defaultのpost_authブロックに
   perl
と一言追加。

でradtestするとフルデバッグ画面上では
+- entering group post-auth {...}
GOT CLONE -1208288560 0xa178d50
rlm_perl: Added pair User-Name = test@xx.xx.xx.jp
rlm_perl: Added pair User-Password = xxxxxxx
rlm_perl: Added pair Realm = ~(.+\\.|)xx\\.xx\\.x\\.jp$
rlm_perl: Added pair Stripped-User-Name = test
rlm_perl: Added pair NAS-Port = 1812
rlm_perl: Added pair NAS-IP-Address = 192.168.15.5
rlm_perl: Added pair Tunnel-Private-Group-ID = 19
rlm_perl: Added pair Tunnel-Medium-Type = 6
rlm_perl: Added pair Tunnel-Type = 13
rlm_perl: Added pair Auth-Type = ntlm_auth
++[perl] returns updated
Sending Access-Accept of id 200 to 192.168.15.5 port 42500
Tunnel-Private-Group-Id:0 = "19"
Tunnel-Medium-Type:0 = IEEE-802
Tunnel-Type:0 = VLAN

となり、radtest側では
radtest test@xx.xx.xx.jp passxxx 192.168.15.10 1812 secretxxx
Sending Access-Request of id 200 to 192.168.15.10 port 1812
User-Name = "test@xx.xx.xx.jp"
User-Password = "passxxx"
NAS-IP-Address = 192.168.15.5
NAS-Port = 1812
rad_recv: Access-Accept packet from host 192.168.15.10 port 1812, id=200, length=36
Tunnel-Private-Group-Id:0 = "19"
Tunnel-Medium-Type:0 = IEEE-802
Tunnel-Type:0 = VLAN

プロキシの場合はpost_proxyでこれを行えばいいのかな?
ということで簡単に属性追加ができました。

皆様、お騒がせいたしました。質問を投げて、じっくり自分の投稿をみると客観的にその問題を見ることができました。なんてアホな質問をしてしまったかと

では皆さん、いいお年をお迎えください。


1

スキルアップ/キャリアアップ(JOB@IT)