
pfSense のキャプティブ ポータルで認証するために RADIUS サーバーを設定する必要があります。残念ながら、RADIUS データベース内のすべてのパスワードは特定のアルゴリズムでハッシュ化されています。私は MySQL データベースを使用しています。
ユーザーはパスワードをプレーンテキストで RADIUS サーバーに送信しているので、送信されたパスワードを RADIUS サーバーでハッシュし、その後ユーザー名とハッシュされたパスワードの存在を確認できるかどうか疑問に思っています。
回避できるのであれば、クライアント側でパスワードをハッシュしたくありません。pfSense のキャプティブ ポータルは現在、RADIUS サーバーを使用している唯一のアプリケーションです。ただし、インフラストラクチャを拡張する場合は、すべてのクライアントにハッシュ アルゴリズムを実装する必要があります。
一般的に、RADIUS サーバーをこのように変更する可能性はありますか? コアを変更するのでしょうか? 残念ながら、送信されたデータがデータベース内のどのファイルで検索されるかはわかりません。
どこを見ればよいか、ヒントをくれる人はいませんか?
(私はUbuntu Server 12.04 x86、freeradius、freeradius-mysqlを使用しています)
答え1
あるいは、外部 PHP スクリプトを使用する場合は、authorize に次のコードを配置できます。
authorize {
update {
Tmp-String-0 := `/usr/bin/php5 -f /path/to/cpauth.php '%{User-Name}' '%{User-Password}'`
}
if (Tmp-String-0 == 'Accept') {
update control {
Auth-type := Accept
}
}
else {
reject
}
}
次に、「Accept」または「Reject」をエコーします。
答え2
rlm_sql モジュールのインスタンスを構成します。
authorize {}
ハッシュされたパスワードを取得するためのクエリを追加します。
update control {
<password-attribute> := "%{sql:SELECT password FROM foo_table WHERE user=%{User-Name}}"
}
パスワード属性は、Cleartext-Password、MD5-Password、SMD5-Password、Crypt-Password、SHA2-Password、SHA-Password、SSHA-Password、LM-Password、NT-Password のいずれかになります。
次に、pap
モジュールを呼び出します。pap モジュールは Auth-Type を に設定しpap
、User-Password 値をパスワード属性値に使用されるスキームと一致するようにハッシュして比較します。