ユーザーがOpenVPNで証明書を共有できないようにする方法は?


8

証明書とLDAP認証を使用するOpenVPNサーバーがあります。

問題は、1人のユーザーが自分の証明書を共有し、他の有効なLDAPユーザーがこの証明書を使用できることです。

質問

Bobの証明書がLDAPユーザー「bob」でのみ使用できることを確認するにはどうすればよいですか?

回答:


9

この投稿によるとcommon_name、ユーザーが偽ることはできません。

これをopenvpn server.confに追加します

script-security 2

# untrusted state
auth-user-pass-verify /etc/openvpn/scripts/check_cn_on_connect.sh via-env

/etc/openvpn/scripts/check_cn_on_connect.sh 含む

#!/bin/bash

# username and common_name must be the same to allow access.
# users are not allowed to share their cert
if [ $username != $common_name ]; then
   echo "$(date +%Y%m%d-%H%M%S) DENIED  username=$username cert=$common_name" >> /var/log/openvpn-access.log
   exit 1
fi

echo "$(date +%Y%m%d-%H%M%S) GRANTED username=$username cert=$common_name" >> /var/log/openvpn-access.log

exit 0

更新

これはOpenVPN 2.1.4用です。2.2.0 env >> /tmp/envでは、で確認できる多くの新しい変数が追加されました。これらの新しい変数の1つは、証明書のフィンガープリント/シリアル番号です。


4

OpenVPNはオープンソースプロジェクトであり、独自の認証フックを作成する機能があるため、さまざまなオプションがあり、さまざまなレベルの認証を提供するためにさまざまなことを行ってきた人がたくさんいます。

docs / blogs / maillistsで言及されているのを見ただけで、これらのほとんどを試したことはありません。これらの一部には、パッチまたは非フリーバージョンが必要な場合があります。

主な方法の1つは、キーペアのプライベート部分を抽出/コピーするのが非常に困難になることです。

それらのキーを保護することがコスト的に禁止されている、クライアントプラットフォームでサポートされていない、またはその他の理由で不可能である場合、いくつかのオプションが残されます。

  • 証明書を頻繁に更新する必要があるため、コピーした証明書を長期間使用することはできません。
  • 異常を監視するために、サーバーに多くのログを設定します。通常、ボブが自分の家からのみログインしていて、ある日、彼がAcme Inc.からログインを開始した場合、調査が必要になることがあります。

  • 多要素認証を設定します。証明書は「持っているもの」としてカウントされます。したがって、「あなたは何か」または「あなたが知っているもの」の代替案を検討する必要があります。これには、バイオメトリック、またはパスワード/パスフレーズが含まれます。

  • OpenVPNは非常に柔軟な認証を提供します。これはauth-user-pass-verifyオプションを使用します。このオプションは、提供されたユーザー名とパスワードを外部スクリプト/プログラムに渡し、必要なものに基づいて認証を決定します。

を使用しauth-user-pass-verify /etc/openvpn/scripts/connect.sh via-envて、ユーザーのユーザー名を取得できます。ユーザーが使用している証明書からもIDを取得できるかどうか知っていますか?もしそうなら、既知の証明書IDでyamlファイルをチェックするPerlスクリプトを書くことができます。
サンドラ

1
残念ながら、使用されている証明書からid / subject / detailsを取得する方法はわかりませんが、それが不可能であるという意味ではありません。
Zoredache

解決策を見つけて投稿しました。
サンドラ

1

私はセキュリティの専門家ではありません。セキュリティについて厳格です。あなたの質問はITセキュリティの核心である信頼に正確に及んでいます。私が見ているように、ボブが信頼できると思い込んではいけません。確かに、ボブは本当に素晴らしくて信頼できる人かもしれません。彼はあなたの会社で20年以上働いています。ただし、「ボブ」という人物は、ITインフラストラクチャとはまったく無関係です。

ボブは、アクセスを許可する任意の「リレー」を使用します。リレーは何でもかまいません:パスワード、証明書、ハードウェアトークン、アイリススキャン、DNA。これらは、システムへのアクセスを許可するキーです。キーを使用している人の身元を確認することに関する質問の場合、正直な答えはおそらく、同じ部屋にいる必要があるということです。他のすべての場合では、ボブが本当にボブであり、彼のアクセス権を取得している間、現在銃口で拘束されていないことを確信してはいけないと思います。したがって、ITインフラストラクチャの設計計画では、論理的には「ボブ」を指すのではなく、エンティティがサイトへのアクセス権を取得しました。

あなたが本当に知ることができるのは、「エンティティ」が過去に渡したキーでアクセス権を得たことだけです。適切な観点は、キーが開くことができるドアの数を制限することです。渡すキーが多いほど、開くドアが少なくなります。

OpenVPNには、キーごとに1つの同時接続のみを許可するオプションもあります。次に、ボブがすでにいる間にアリスがボブのキーでログインした場合、アリスはアクセスを拒否されます。残念ながら、これは、アリスがボブのキーでログインしているときにボブがログインできないことも意味します。したがって、複数のソースIPからの同時ログイン試行を通知するようにシステムを構成する必要があります。また、違反が発生したときに両方を開始するため、ボブは助けを求めてダイヤルする必要があります。

重要なのは、確信が持てないことを自分で保証するのではなく、セキュリティ計画を立てるときはこのことを覚えておいてください。あなたよりずっと先に、あなたの間違いを証明するのを待ちきれない賢い人が常にいると仮定してください...ちょうど「ルルツのために」。:-)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.