FireWall-1 と RADIUS サーバ

FireWall-1のクライアント認証 (Client Authentication) に RADIUS サーバを使うための設定を行いました。製品付属のマニュアルだけではわかりづらいところがあり、Web 上に情報を探しても日本語情報はあまりないようなので顛末を書いておきます。…趣味というより仕事の話だけど、まあいいかな。


FireWall-1 のバージョンは NG with AI (R55) です。RADIUS サーバは GNU RADIUS 1.3を利用しました。


最初に、GNU RADIUS を Solaris 9 上でコンパイルし、テスト用ユーザアカウントを作った以外はほぼデフォルト状態で動かしました。続いてFireWall-1 側の設定をします。以下メニュー項目は SmartDashboard のものです。


まず、RADIUS サーバを登録します。”Servers and OPSEC Application” – “Servers” – “New” – “RADIUS” で作成します。


次に、”Users and Administrators” – “External User Profiles” – “New External User Profile” – “Match all users” を選び “Authentication Scheme” に “RADIUS” を選択します。


ここまでの設定で、ユーザが FireWall-1 の内部データベースや LDAP サーバ上に見つからなかった時は RADIUS を用いて認証されるようになります。つまり、ユーザの登録・削除・変更時に FireWall-1 のポリシーをインストールし直したりする必要はなくなります。


動作確認をするために FireWall-1 が動いているマシンの 900 番ポートに HTTP アクセスし、テスト用 ID で認証してみます。ところが、”RADIUS servers not responding” のメッセージが出てエラーとなってしまいます。ここまでの手順で不足はないと思うのですがうまくいきません。RADIUS サーバ側のログを見てもそれらしいログは記録されていません。radiusd プロセスは動いていてポートも開いているので問題はないように見えます。


しばらく悩んで FireWall-1 の通信ログを見てみることにしました。”Global Properties” – “FireWall-1” で “Log Implied Rules” にチェックを入れると Firewall-1 マシン – RADIUS サーバ間のマシンもログとして記録されます。するときちんと認証用の通信はログに記録されました。でも良く見ると、Service が「RADIUS (1645)」となっています。あれ?、さっき Solaris 上で確認したポート番号と違うような…


そうなのです。GNU RADIUS の方は 1812 で待ち受け、FireWall-1 の方は 1645 で認証のリクエストしていたのです。どっちが正しいのだろうと思い、調べると RFC 2138に以下の記述がありました。


The early deployment of RADIUS was done using the erroneously chosen port
number 1645, which conflicts with the “datametrics” service. The
officially assigned port number for RADIUS is 1812.

ということは GNU RADIUS の 1812 の方が正しいのですね。FireWall-1 の登録済みサービスを調べると “NEW-RADIUS” というのがあったので、これを先に登録した RADIUS サーバオブジェクトの “Service” の項目に設定します。そして、ファイアーウォールポリシーをインストールし直すと…


無事にテスト用 ID で認証できました!


ちなみに昔のバージョンの FireWall-1 では “External User Profile” – “Match all users” というメニューはなくて “generic*” というユーザを作って対処していたようです。

関連記事
FireWall-1 で RADIUS の Class attribute を使ってユーザをグループ化する