(FreeRADIUS)|【技業LOG】技術者が紹介するNTTPCのテクノロジー|【公式】NTTPCご利用中のWebブラウザではJavaScriptが無効化されております。本Webサイトのすべての機能をご利用いただくために、JavaScriptを有効化した上でご覧ください。ダブルスターTweet認証の分野で頻繁に利用されるRADIUSを、黎明期から支えてきたオープンソースソフトウェアのFreeRADIUSを紹介します。NTTPCでは、2008年からFreeRADIUSの本格的な調査とサービスへの導入を進めており、今なおその適用範囲は広がろうとしています。ダイヤルアップ、PPPoE、Wi-Fi、XGP、WiMAX、LTEといように昔も今もこれからも幅広く利用されていくことでしょう。認証の成功や失敗を判定する、あるサービスを利用した事実を通知する、という手順を確立したRADIUSという決まりごと(通信プロトコル)があります。FreeRADIUSは、RADIUSを実現させるオープンソースソフトウェアです。認証と言っても方法は様々です。特殊な手法のIDとパスワードの照合、サーバー(またはクライアント)証明書の一致、認証の通信を暗号化する、というようにRADIUSが誕生して十数年が経過し、当初の思想に大幅な追加がなされています。FreeRADIUSは、RADIUSの思想だけでなく、それら新しい手法にも次々と対応を進めています。RADIUSの利用例RADIUS認証サーバーとは(RADIUS)ホームサーバーと呼ばれることもあります。IDやパスワードなどの、認証に利用するデータを持つサーバーで、認証成功や失敗を判定します。後述のプロキシサーバーを兼ねることも可能で、RADIUSサーバーにどのような役割を持たせるのかは、設定(設計)しだいと言えるでしょう。RADIUS転送サーバーとは(RADIUS)プロキシサーバーと呼ばれることもあります。RADIUSパケットをある条件をもとに、任意のRADIUSサーバーに転送します。転送先は、ホームサーバーでも、プロキシサーバーでもかまいません。自宅でインターネットの契約をプロバイダと行うと、PPPoEのIDとパスワードが発行された経験がありませんか?このIDとパスワードは、利用者の認証のために使われますが、この認証を行うのがFreeRADIUSのようなRADIUSサーバーです。RADIUSサーバーが認証成功と判定すると、インターネットプロバイダはADSLやFTTHのサービスを利用者に提供開始します。他の例として、携帯キャリアのデータ通信や、ご家庭の無線LANルータにWPA-Enterpriseのような認証方式があれば、RADIUSを利用して認証することもあります。このように、サービスの利用者はRADIUSをまったく意識しませんが、その裏では認証を取り仕切っている存在です。縁の下の力持ちのような役割であることがお分かり頂けるのではないでしょうか。インストールして使ってみよう!第1回では、FreeRADIUSのインストールから認証動作を手順を交えてご紹介します。MySQLを利用するため、以下のパッケージを導入します。mysql-develを導入しないと、FreeRADIUSのインストールが成功してもMySQLは利用できませんので注意してください。mysql-develダウンロードFreeRADIUSのソースコードアーカイブを公式サイトからダウンロードします。2011/11/30時点での最新バージョンは、2.1.12です。ダウンロード後は、コンパイルとインストールを行います。クライアントクライアントとはRADIUSサーバーが、RADIUSパケットの受け付けを許可する送信元を指します。送信元は、送信元IPアドレスと、状況によりシークレットと呼ばれる共有鍵の一致で判定します。クライアントと表現されますが、送信元がRADIUSサーバーであっても、"RADIUSパケットを送信したクライアント"として扱います。初期設定では、ループバックアダプタ(localhost)のみが登録されています。ここでは、自身のeth0のIPアドレスをクライアントに登録します。これは、のちに行う動作確認で、自分自身にRADIUSパケットを送信するためです。※ループバックアダプタでも動作確認は可能です。/usr/local/radius/etc/raddb/clients.confファイル最下行に追加してください。認証と承認とはRADIUSはAAAモデルのプロトコルだと言われることがあります。AAAとは、認証、承認、アカウンティングの頭文字です。詳細は書籍などをご参照ください。RADIUSでは認証と承認が同時に行われていることにもご注意願います。認証と言った場合には、承認も含まれていると考えて差し支えありません。RADIUSでは認証要求が認証拒否になった理由として、パスワードが間違えたのか、権限がたりないのか、その他なのか非常にあやふやです。※Reply-Messageや独自アトリビュートを利用して明確に返答することは可能ですが...FreeRADIUSでは、認証ID、パスワード、クライアント証明書などを利用して認証を行うことができます。今回は、認証IDとパスワードを利用するPAPとCHAPの認証方法について見ていきましょう。認証IDとパスワードの組み合わせを、ここではユーザーデータと呼びます。ユーザーデータはどこかに保存しなければなりません。FreeRADIUSでは、ユーザーデータの保存先として、様々な選択肢が用意されています。今回は、ユーザーファイルとMySQLを選択してみましょう。ユーザーファイルユーザーファイルを利用する場合には、特に難解な設定は必要ありません。初期設定で、ユーザーファイルを読み込むようになっており、必要なユーザーデータを追加するのみです。/usr/local/radius/etc/raddb/usersファイル最下行に追加してください。MySQLMySQLを利用するには、初期設定を変更しなければなりません。変更内容の詳細な説明はこの場では省略させて頂き、手順を紹介します。/usr/local/radius/etc/raddb/radiusd.conf該当行のコメントアウトを解除してください。/usr/local/radius/etc/raddb/sql.conf該当行を下記のように変更してください。/usr/local/radius/etc/raddb/sites-enabled/default177行目のコメントアウトを解除してください。------------------------------sql------------------------------MySQLの準備MySQLを起動し、FreeRADIUSが利用するデータベースとテーブルを作成します。FreeRADIUSは、MySQLの利用が想定されておりテーブルスキーマが用意されています。作成したら、テーブル一覧で確認しましょう。sec)認証IDの作成ユーザーデータは、radcheckテーブルに作成します。radcheckテーブルの構造を確認して、insertを行いましょう。insert後は、selectで確認します。sec)FreeRADIUSの起動FreeRADIUSを、動作の流れがわかるようにデバックモードで起動します。デバックモードは、起動オプションに-Xとすれば良いのですが、-XXとすると時刻も表示されるようになります。デバックモードで起動するときに、初期設定でEAP向けの証明書を作成するようになっており、起動に失敗することがあります。その場合でも、再度デバックモードで起動すれば問題ありません。radclientradclientとはFreeRADIUSに付属している、RADIUSパケットを送信するクライアントソフトウェアです。FreeRADIUSで扱うことができる多くのアトリビュートに対応しています。以下の点に注意して利用する必要があります。・アトリビュートファイルでは、空行が使用できない。(後述)アトリビュートとはRADIUSパケットのヘッダ以降の、ユーザーデータを含むさまざまな情報のことです。RADIUSでは、どのアトリビュートに何を示す値を入力するか決められています。PAP認証で利用するパスワード情報ならば、User-Passwordアトリビュート(2)に値が格納されます。Pair)と呼びます。wiresharkなどでRADIUSパケットをみると理解の助けになると思います。FreeRADIUSを起動したコンソールと別のコンソールを用意してください。詳細な説明は、radclientのヘルプを参照くださるとして、ここでは具体的な使い方を見ていきましょう。radclientは、送信したいアトリビュートをテキストファイルで入力可能です。※アトリビュートファイルと呼ぶことにします。アトリビュートファイルは、"#"をコメントアウトとして利用できます。空行は使用できないので、行頭に"#"のみを記載することで代替えとします。それでは、アトリビュートファイルを作成しましょう!ユーザーファイルとMySQLに登録した、認証IDはUser-Nameアトリビュートに入力します。PAP認証を行う場合は、User-Passwordアトリビュートにパスワードを入力します。CHAP認証を行う場合は、CHAP-Passwordアトリビュートにパスワードを入力します。User-PasswordとCHAP−Passwordは暗号化が必要ですが、radclientが暗号化してくれるので平文で入力しましょう。wrong-pwは、パスワード間違いによる認証失敗のために入力しておきます。/root/radius.auth.attr下記の例では、file@nttpc.co.jpのPAP認証が行われる状態になっています。------------------------------User-Name=file@nttpc.co.jp#User-Name=mysql@nttpc.co.jp#User-Password=file-pw#User-Password=mysql-pw#User-Password=wrong-pw##CHAP-Password=file-pw#CHAP-Password=mysql-pw#CHAP-Password=wrong-pw------------------------------radclientにアトリビュートファイルをファイルを読み込ませて起動します。送信するアトリビュートを変更して、いろいろ試してみましょう!Access-Acceptが返答されれば認証許可(成功)、Access-Rejectが返答されれば認証拒否(失敗)です。Access-Rejectは、FreeRADIUSの初期設定で1秒応答を待つようになっているので、少しコンソールが止まります。FreeRADIUSから応答がない?radclientでRADIUSパケットを送信したのにサーバーから応答がない場合のチェックシートです。FreeRADIUSは起動しているか?送信先やシークレットが間違っていないか?クライアント登録をしているか?特に、クライアント登録は忘れがちです。不明なクライアントからRADIUSパケットを受け取ると、FreeRADIUSのデバック表示はこのようになります。承認FreeRADIUSでは、認証IDとパスワードの一致していても、Access-Rejectを返答する様々な機能があります。これが承認を表現しており、認証には成功したけど、承認で失敗したのでAccess-Rejectにするということになります。承認の一例として、認証要求に設定されたアトリビュート値による制限をご紹介します。rlm_checkvalモジュールとはRADIUSパケットを処理する部分などのサーバーとして必須機能以外の、便利機能に該当する部分をモジュールと呼びます。さきほどのユーザーファイルを読み込む機能も、rlm_filesというモジュールが担当しています。MySQLを利用する機能も、rlm_sqlというモジュールが担当しているのです。rlm_filesは初期設定で利用する状態になっているため簡単に利用できました。rlm_sqlは初期設定では利用しない状態になっているためさまざまな変更を加えました。必要なときに、欲しい機能(モジュール)を呼び出すというのが、FreeRADIUSの設定スタイルです。どのようなモジュールがあるかは、ドキュメントやソースコードを参照するとわかります。ためしにソースコードを見ると...。/usr/local/src/freeradius-server-2.1.12/src/modulesrlm_checkvalを利用するためには、やはり初期設定を変更しなければなりません。ここでも深く考えずに、手順を見ていきましょう。/usr/local/radius/etc/raddb/sites-enabled/default196行目のコメントアウトを解除してください。/usr/local/radius/etc/raddb/usersユーザーファイルに下記を追記してください。発信者番号は、Calling-Station-Idアトリビュートに設定されている。sec)FreeRADIUSのプロセス再起動デバックモードで起動したままでしたら、Ctrl-cなどで終了させてプロセスを起動し直してください。認証要求に、アトリビュートファイルを編集してCalling-Station-Idを追加します。/root/radius.auth.attr------------------------------User-Name=file@nttpc.co.jp#User-Name=mysql@nttpc.co.jp#User-Password=file-pw#User-Password=mysql-pw#User-Password=wrong-pw##CHAP-Password=file-pw#CHAP-Password=mysql-pw#CHAP-Password=wrong-pw#Calling-Station-Id=0300000000#Calling-Station-Id=0600000000#Calling-Station-Id=0900000000------------------------------Calling-Station-Idを変えて、Access-AcceptとAccess-Rejectが返答されることを確かめます。そのとき、デバックログを見ると、rlm_checkvalが利用されていることがわかります。Calling-Station-Idが認証要求にない場合はどうなるでしょうか?なんと、Access-Rejectにはなりません。rlm_checkvalモジュールの初期設定では、判定対象がリクエストにない場合にはRejectにしないようになっています。これを変えるためには、rlm_checkvalモジュールの設定を変更します。変更したあとは、FreeRADIUSのプロセスを再起動してください。/usr/local/radius/etc/raddb/modules/checkval該当行のコメントアウトを解除して、変更してください。reject--------------------------認証応答にアトリビュートを設定する認証応答のアトリビュート認証要求にアトリビュートが設定されているように、認証応答にもアトリビュートを設定できます。※ここでは、認証要求のアトリビュートをチェックアトリビュートと呼びます。※ここでは、認証応答のアトリビュートをリプライアトリビュートと呼びます。実際の例として、認証許可である認証IDに割り当てたいIPアドレスをネットワーク機器に指示する目的で利用されています。リプライアトリビュートは、チェックアトリビュートと異なりFreeRADIUSが任意に設定するアトリビュートです。必要に応じて、様々なアトリビュートを設定することができます。ここでは、実際の例に沿って、IPアドレスをネットワーク機器に指示することを想定して設定を行います。IPアドレスを指示するには、IPアドレスとIPアドレスのマスクが必要です。それぞれ、Framed-IP-AddressとFramed-IP-Netmaskがそのアトリビュートとして決められています。ここでも、あまり深く考えずに手順を見ていきましょう。/usr/local/radius/etc/raddb/usersユーザーファイルに下記を追記してください。Framed-IP-Addressの先頭に半角スペース(またはタブ)が必須です。"255.255.255.255"------------------------------MySQLこれまでと異なり、radreplyテーブルに追加します。構造は、radcheckテーブルと同様です。sec)FreeRADIUSのプロセス再起動デバックモードで起動したままでしたら、Ctrl-cなどで終了させてプロセスを起動し直してください。radclientそれでは、radclientで動作確認してみましょう!認証要求には、何も追加する必要はありません。radclientに、Framed-IP-AddressとFramed-IP-Netmaskが追加されるようになりましたね。FreeRADIUSの初期設定では、Access-Rejectにはほとんどアトリビュートを設定できません。Framed-IP-AddressとFramed-IP-Netmaskも設定できないようになっています。これは、認証応答で設定してもよいアトリビュートを制限するモジュールが働いているためです。length=20おわりにいかがでしたでしょうか?今回は、細かい説明は省略して手順に絞ってご紹介しました。次回は、さらに深く使ってみたい方向けの内容にしたいと思います。(プライバシーポリシー)情報セキュリティ基本方針サイトポリシーサイトマップ本ホームページに記載する会社名、商品名、ブランド名などは、各社の商号、登録商標、または商標です。Reserved.PageTop。