セキュリティ · 1 min read · Dec 28, 2025

SSHをFreeradiusとWiKIDで二要素認証に設定する

SSHをFreeradiusとWiKIDで二要素認証に設定する

Radiusは素晴らしい標準です。多くのことを達成するのに十分強力であり、扱いやすいほどシンプルです。Freeradiusは、多くのLinuxバリアントに付属する優れたオープンソースのRadiusサーバーです。文書化が充実しており、サポートも良好です。WiKID Strong Authenticationサーバーは、PINとワンタイムパスコードをBlackberries、携帯電話、Palms、PocketPC、またはJ2SEクライアントを使用してLinux、Mac、Windows PC上で動作するソフトウェアトークンに安全に送信するために公開鍵暗号化を使用する商用/オープンソースの二要素認証システムです。WiKIDは、ホワイトリスト/ブラックリストの煩わしさなしに証明書のようなものと考えることができます。PINはサーバーで検証され、オフラインのブルートフォース攻撃を防ぎます。

PCI-DSSやHIPAAなどの要件を満たす必要がある企業は、二要素認証と厳格に制御されたアクセスでネットワークを保護する必要があります。FreeradiusとWiKIDを組み合わせることは、それを達成するための非常にコスト効果の高い方法です。

この例では、Fedora Core 7にFreeradiusをインストールし、Centos5でWiKIDの3.0RC2 rpmを実行します(ただし、WiKIDの2.0バージョンにも同じ手順が適用されます)。SSHでテストしますが、同じ設定はApache、WebDAV、OpenVPN、およびPAMをサポートする他のアプリケーションでも機能するはずです。

Freeradiusのインストールと設定

どのLinuxバリアントを実行していても、Freeradius用のパッケージがあるはずです。Fedoraでは、Yumを使用してインストールするのは簡単です:

yum install freeradius

Freeradiusの設定は非常に簡単です。ただし、多くのオプションがあります。重要なのは、理解できる最小限の項目だけを変更することです。デフォルト設定は機能するので、小さな変更を加えてテストしてください。3つのファイルを変更します。/etc/raddb/clients.confファイルは、Freeradiusがどのクライアントを受け入れるかを指定します。proxy.confファイルは、Freeradiusに認証パケットをWiKIDサーバーに送信するよう指示し、radiusd.confファイルはメインのFreeradiusサーバーを設定します。

まず、/etc/raddb/clients.confファイルを編集します:

vi /etc/raddb/clients.conf

client 127.0.0.1 {
        secret          = shared_secret
        shortname       = localhost
        nastype     = other
}

今のところ変更する必要があるのはshared secretだけです。テストのためにSSH経由でFreeradiusサーバーにログインします。

次に、radiusd.confファイルでリクエストがプロキシできることを確認します。Fedoraではこのようになっていました:

vi /etc/raddb/radiusd.conf

proxy_requests  = yes
$INCLUDE  ${confdir}/proxy.conf

最後に、proxy.confでWiKID Strong Authenticationサーバーを有効なプロキシとして追加します:

vi /etc/raddb/proxy.conf

#  このレルムは、明示的なレルムのプレフィックスまたはサフィックスを持たないリクエスト用です。
#  ユーザー名が「bob」のようなものはこれに一致します。
#
realm NULL {
        type            = radius
        authhost        = WIKIDSERVER_IP:1812
#       accthost        = WIKIDSERVER_IP:1813
        secret          = shared_secret
}

言うまでもなく、WIKIDSERVER_IPとshared_secretをあなたのWiKIDサーバーのIPとshared secretに変更してください。クライアント用に使用されるshared secretとは異なるべきです。

追加のセキュリティのために、これらのファイルの所有権を制限する必要があります:

chmod a-rwx,u+r /etc/raddb/proxy.conf

chmod a-rwx,u+r /etc/raddb/clients.conf

これでFreeradiusを起動します:

service radiusd start

PAM SSHの設定

まず、PAM Radiusをインストールする必要があります。これに関する優れた文書はPAM Radiusのホームページにあります。ディストリビューションによっては、適切なバイナリを見つけることもできるかもしれません。Fedora 7でコンパイルするのに問題はありませんでした:

/etc/pam.d/sshdを編集してRadius認証を許可します:

vi /etc/pam.d/sshd

ファイルの2行目に移動し、Insertキーまたはiキーを押して次の行を挿入します:

auth     sufficient   /lib/security/pam_radius_auth.so 

この行のすぐ上に:

auth     required     pam_stack.so service=system-auth

「sufficient」タグは、Radius認証が成功した場合、追加の認証は必要ないことを示します。ただし、Radius認証が失敗した場合は、システムからのユーザー名とパスワードが機能します。強力な認証を要求するには「Required」を使用します。sshdファイルのみを編集しているため、ターミナルログインには影響しません。PAMは異なるLinuxバリアントで非常に異なる場合があります。OSの特定の文書を参照してください。

/etc/raddb/serverファイルを編集または作成します:

vi /etc/raddb/server

次の行の下に:

127.0.0.1   secret        1

この行を追加します:

localhost   shared_secret     1

最後に、/etc/sshd/sshd_configでPublicKey認証がオフになっていることを確認しました:

PubkeyAuthentication no

WiKIDサーバーの設定

次に、Freeradiusからのワンタイムパスワードを処理するためにWiKIDサーバーを設定します。新しいWiKIDドメインを設定する必要があると仮定します。すでにある場合は、この部分をスキップできます。追加のWiKIDインストール文書はここにあります。

WiKIDサーバーにログインし、Domainsタブをクリックします。

新しいドメインを作成をクリックします。

要求された情報を入力します。ドメインサーバーコードはWiKIDサーバーのゼロパディングされたIPアドレスです。したがって、外部IPアドレスが216.239.51.99の場合、WiKIDサーバーコードは216239051099になります。「作成」をクリックします。(明らかに、すでにドメインが設定されている場合は、このステップをスキップできます。)

Network Clientsタブをクリックし、「新しいネットワーククライアントを作成」をクリックします。

要求された情報を入力します。IPアドレスにはFreeradiusサーバーのIPアドレスを使用します。Radiusと、先ほど作成したドメインを選択します。完了したら「追加」をクリックします。

次のページで、Freeradiusサーバーの/etc/raddb/proxy.confファイルに入力したshared secretを入力します。「Return Attributes」の下に情報を入力する必要はありません。

重要: WiKIDターミナルまたはSSH経由で「wikidctl stop」を実行し、その後「wikidcl start」を実行して新しい設定をWiKID Radiusサーバーにロードする必要があります。(WiKID 2.0ユーザーは「stop」と「start」を実行するだけです。)

ワンタイムパスワードを使用したFreeradiusのテスト

WiKIDトークンクライアントをダウンロードしてインストールします。WiKIDAdminウェブインターフェースからユーザーとして手動で検証できます。検証が完了したら、Freeradiusリソースに関連付けられたドメインを選択します:

token1.jpg

PINを入力します:

token2.jpg

そして、ワンタイムパスコードが返されます。OTPは時間制限がありますが、WiKIDサーバーで任意の時間に設定できます:

token3.jpg

今、Freeradiusボックスにsshします:

ssh user@freeradius_server

プロンプトが表示されたら、WiKIDのワンタイムパスワードを入力します - 自動的にクリップボードに貼り付けられているはずなので、ctrl-cまたはshift-insが機能するはずです。アクセスが許可されるはずです。そうでない場合は、確認するべきログがいくつかあります。まず、Freeradiusサーバーの/var/log/secureを確認して、ユーザーが拒否された理由を確認してください。「すべてのRADIUSサーバーが応答しませんでした。」と表示された場合は、radiusdがポート1812で実行されていることを確認してください。Freeradiusのログは/var/log/radius/radius.logにあり、WiKIDサーバーのWiKID radiusログは/opt/WiKID/log/radius.logにあります。

代替設定:バックアップとしてのFreeradius

PAM Radiusを使用する利点の1つは、サーバーを/etc/raddb/serverファイルでチェーンできることです。最初のサーバーが応答しない場合、次のサーバーがユーザーの認証を試みます。明確にするために:最初のサーバーが認証失敗で応答した場合、ユーザーは拒否されます。応答がない場合のみ、2番目のRADIUSサーバーがチェックされます。このバックアップ機能は、WiKIDサーバーがリモートデータセンターにある場合に特に便利です。PAMをWiKIDに直接接続し、Freeradiusにフォールバックするように設定することで、ハードウェア障害が発生した場合のフェイルオーバーソリューションを作成します。

まず、/etc/raddb/serverファイルを変更して、最初にWiKIDサーバー、次にlocalhostで実行されているFreeradiusサーバーを指すようにします:

# server[:port] shared_secret      timeout (s)
127.0.0.1:1812        shared_secret        1
WIKIDSERVER_IP:1812   shared_secret      3
localhost:1812        shared_secret          2

Freeradiusを/etc/passwdで動作させるためにいくつかの小さな変更を行う必要がありました。まず、radiusdのグループを/etc/raddb/radiusd.confでshadowに変更する必要がありました:

user = radiusd
group = shadow

次に、/etc/passwdのshadow権限を与える必要がありました:

chgrp shadow /etc/shadow

chmod g+r /etc/shadow

これで、WiKIDサーバーが何らかの理由で失敗した場合、/etc/passwdファイルへの自動フォールバックがあります。

結論

Radiusはリモートユーザーの認証に優れた標準です。FreeradiusとWiKID Strong Authenticationを組み合わせることで、強力で柔軟かつ安全なソリューションが生まれます。

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。