GNU/Linux >> Linux の 問題 >  >> Panels >> OpenVPN

OktaシングルサインオンWeb認証と粘度を使用したOpenVPNサーバーのセットアップ

独自のOpenVPNサーバーをセットアップした後、そのセキュリティを強化することをお勧めします。これを行い、認証プロセスを合理化する1つの方法は、シングルサインインまたはシングルサインオン(SSO)を使用することです。これは、SAML(これはSSOプロトコル)とも呼ばれます。これにより、不要なユーザーがサーバーに接続するのを防ぐと同時に、既存のユーザー、ID、クライアント管理システム、または認証プロセスと統合するための別のセキュリティ対策が追加されます。

このガイドは、これが人気のあるクラウドベースのIDプラットフォームであるOktaでどのように機能するかの例を提供します。この例の基本は、選択したIDMSとの通信方法を変更するだけで、ほとんどのID管理システム(IDMS)に変換されます。

この例は、IDMまたはSSOシステムがサーバー側でOpenVPNと統合する方法の基本を示すように設計されており、そのまま使用するようには設計されていないことに注意してください。

準備

このガイドでは、次のことを前提としています。

  • Oktaアカウントをお持ちです(このガイドはOktaの無料トライアルで機能します)
  • すでに最新バージョンのUbuntuをインストールしています (執筆時点で20.04)
  • ルートがあります このインストールへのアクセス
  • HTTPおよびHTTPSアクセス用のポート80および443でこのシステムにパブリックアクセスでき、それを指すDNS A-NAME(たとえば、openvpnsso.server.com)
  • クライアントデバイスにViscosityのコピーがすでにインストールされており、このサーバー用にセットアップ済みです

Oktaのドキュメントは、https://help.okta.com/en/prod/Content/index.htm

にあります。

Oktaのその他の例は、GitHubページ(https://github.com/okta

)にあります。

このガイドは、サーバーでSSOを設定するための例としてのみ使用してください。提供されているPythonFlaskWebサイトは単なる例として設計されており、本番環境での使用を目的としたものではありません。

Ubuntu 20.04の新規インストールを最初から開始する場合、ここから終了までのこのプロセスには約20分しかかかりません。

Oktaセットアップ

まず、OpenVPNとOkta間の通信を処理する新しいWebサイト用にOktaを構成する必要があります。

  • 管理者アカウントでOktaにログインします
  • 左側でメニューを展開し、アプリケーション>アプリケーションに移動します
  • [アプリ統合の作成]をクリックします
  • ODIC-OpenID Connectを選択します 、次にWebアプリケーション 次へをクリックします
  • アプリ統合名を付けます 「MyOpenVPNServer」のように認識できる名前
  • 認証コードを確認します 「付与タイプ」の「ユーザーに代わって動作するクライアント」でチェックされる唯一のオプションです
  • 以下の「」を置き換えて、サインインリダイレクトURIを設定します http://<yourserver.com>/authorization-code/callback
  • 必要に応じて、次の「」を再度置き換えて、サインアウトリダイレクトURIを設定します。 http://<yourserver.com>/logout
  • 制御されたアクセスを設定します これが試用アカウントである場合は、テスト目的で、組織内の全員にアクセスを許可するを選択するだけです。
  • [保存]をクリックします

保存後、ページがリロードされます。このページを開いたままにするか、クライアントIDを今すぐメモしてください 、クライアントシークレット 、およびOktaドメイン 、後で必要になります。




サーバーのセットアップ

次に、サーバーをセットアップする必要があります。要約すると、Python Flaskアプリケーションのプロキシとしてnginxをインストールし、ファイアウォールに小さな変更を加え、SSL証明書をインストールし、フラスコアプリケーションを構成し、OpenVPNに小さな変更を加えるには、OpenVPNサーバーの準備ができている必要があります。

> サーバーの準備

まず、SSH経由でサーバーにログインするか、ターミナルを開き、次のコマンドを実行して、すべてが最新であることを確認します

sudo apt-get update
sudo apt-get -y upgrade


OpenVPNサーバーのセットアップ

まず、OpenVPNサーバーの準備ができている必要があります。このサーバーにまだサーバーがない場合は、UbuntuとViscosityを使用したOpenVPNサーバーのセットアップに従ってください。

セットアップしたら、接続できることを確認してください。

次に、OpenVPNサーバー構成に数行追加する必要があります:

  • 構成を編集しますsudo nano /etc/openvpn/server.conf
  • ファイルの最後に、以下を追加します。
management 127.0.0.1 50123
auth-user-pass-optional
management-client-auth
  • Ctrl + Xを押して終了し、Yを押して保存してから、Enterキーを押してパスを確認します
  • sudo systemctl restart [email protected]を使用してサーバーを再起動します

今すぐ接続しようとすると、接続は最終的に失敗し、認証に失敗しましたというメッセージが表示されます。

注:

認証スクリプトまたはプラグインを備えた既存のサーバーがある場合は、SSOがそれらを置き換えるため、これらを削除する必要があります。 Oktaは2FAオプションで構成できますが、このガイドでは取り上げません。Oktaのドキュメントを参照してください。

Webサーバーのセットアップ

ファイアウォール

UbuntuとViscosityを使用したOpenVPNサーバーのセットアップガイドに従った場合は、最初にファイアウォールを開いてHTTPおよびHTTPSトラフィックを許可する必要があります。次に、以下を実行します。

  • sudo ufw allow http
  • sudo ufw allow https
  • sudo ufw reload

ningxをインストールします

次に、nginxをインストールする必要があります。 nginxはHTTPおよびリバースプロキシサーバーであり、Webアプリケーションのコンポーネントを提供し、TLS/SSLなどの機能の使用を可能にします。 Ubuntuサーバーで次の手順を実行します。

  • sudo apt-get -y install nginxを実行します
  • sudo nano /etc/nginx/sites-enabled/defaultを編集します
  • server_name _;の行まで下にスクロールします 、アンダースコア(_)をサーバーのDNS名(myserver.comなど)に置き換えると、次のようになります-server_name myserver.com;
  • Ctrl + Xを押して終了し、Yを押して保存してから、Enterキーを押してパスを確認します
  • sudo nginx -s reloadを使用してnginxをリロードします


セットアップLet'sEncrypt

このセクションのSSL証明書を既にお持ちの場合は、次のセクションにスキップできます。それ以外の場合は、Let'sEncryptとCertbotを使用してSSL証明書を簡単に取得できます。

  • sudo apt-get install -y certbot python3-certbot-nginxを実行します
  • 以下を実行し、myserver.comをFQDNに置き換えて、プロンプトsudo certbot --nginx -d myserver.comに従います。 。必要に応じて、追加のドメインを指定できます。たとえば、sudo certbot --nginx -d myserver.com -d www.myserver.com -d sso.myserver.com
  • プロンプトに応答した後、certbotが応答するまでに数分かかる場合があります
  • 完了すると、certbotは証明書を自動的に更新できます。cronジョブを追加して/usr/bin/certbot renew --quietを実行するだけです。 1日1回。
セットアップnginx

これでSSL証明書ができたので、nginxのセットアップを完了できます。

  • sudo nano /etc/nginx/sites-enabled/defaultを編集します
  • 次のセクションを削除します。
location / {
  # First attempt to serve request as file, then
  # as directory, then fall back to displaying a 404.
  try_files $uri $uri/ =404;
}
  • # managed by Certbotの行の後に下にスクロールします 、ただし}の前 、次のように貼り付けます。
  real_ip_header X-Real-IP;
  real_ip_recursive on;
  proxy_connect_timeout       600;
  proxy_send_timeout          600;
  proxy_read_timeout          600;
  send_timeout                600;

  location / {
    try_files $uri @proxy;
  }

  location @proxy {
    proxy_pass http://127.0.0.1:8080;
    proxy_pass_header Server;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_pass_header Server;
    proxy_connect_timeout 3s;
    proxy_read_timeout 10s;
  }
  • Ctrl + Xを押して終了し、Yを押して保存してから、Enterキーを押してパスを確認します
  • sudo nginx -s reloadを使用してnginxをリロードします


Webアプリのインストール

これで、Webアプリをインストールして起動できます。セキュリティが少し強化されるため、Webアプリケーションを実行するユーザーを作成します。次を実行します:

  • sudo apt-get install -y python3-pip python pipをインストールして、Flaskの依存関係をインストールできるようにします
  • sudo adduser --system --no-create-home --group ssoappuser Webアプリを実行するユーザーを作成します
  • cd /home
  • sudo mkdir ssoapp
  • sudo chown ssoappuser:ssoappuser ssoapp
  • cd ssoapp
  • sudo git clone https://github.com/thesparklabs/openvpn-okta-sso-example.git GitHubからWebアプリケーションをダウンロードします
  • cd openvpn-okta-sso-example
  • sudo python3 -m pip install -r requirements.txt Webアプリケーションの依存関係をインストールする
  • sudo cp ssoapp.service /lib/systemd/system/ssoapp.service サービスファイルをインストールします
  • sudo chown root:root /lib/systemd/system/ssoapp.service
  • sudo systemctl daemon-reload

Webアプリのセットアップ

最後に、Webアプリケーションが機能してOktaと通信するには、いくつかの簡単なセットアップ作業が必要です。ここでクライアントIDが必要になります 、クライアントシークレット 、およびOktaドメイン 以前にOktaのセットアップを集めました。

  • sudo cp client_secrets.json.dist client_secrets.jsonを使用してシークレットテンプレートのコピーを作成します
  • 以下を使用してランダムなシークレットを作成し、それをコピーしますopenssl rand -hex 20
  • sudo nano client_secrets.jsonを使用して構成を編集します
  • {{THIS_IS_A_SECRET}}を置き換えます 2ステップ前に生成したランダムな文字列を使用
  • {{OKTA_DOMAIN}}を置き換えます auth_uri、issuer、token_uri、userinfo_uriでOktaドメインを使用
  • {{CLIENT_ID}}を置き換えます クライアントID
  • {{CLIENT_SECRET]]を置き換えます クライアントシークレット
  • {{YOUR_DOMAIN}}を置き換えます サーバーアドレスを使用します。例: myserver.com
  • Ctrl + Xを押して終了し、Yを押して保存してから、Enterキーを押してパスを確認します
  • sudo nginx -s reloadを使用してnginxをリロードします

これで、アプリケーションサービスを有効にして開始できます

  • システムがsudo systemctl enable ssoappを実行したときにサービスを開始できるようにします
  • サービスを開始しますsudo systemctl start ssoapp
クライアントの設定

このガイドに従って、UbuntuとViscosityを使用したOpenVPNサーバーのセットアップガイドを使用した場合は、何もする必要はありません。Viscosityに接続するだけです。

既存のサーバーを変更した場合、必要な変更は、ユーザー/パスワード認証がオンになっている場合はオフにすることだけです。これを行うには、接続を編集し、[認証]に移動して、[ユーザーユーザー名/パスワード認証]のチェックを外し、接続を保存して接続します。

認証トークン

OpenVPN auth-gen-token

サンプルアプリケーションには、auth-gen-tokenのサポートが含まれています。 OpenVPN経由でユーザー名/パスワードを使用していないため、これは管理インターフェース経由で処理する必要があります。有効にするには、auth-gen-token 0 external-authを追加するだけです。 サーバー構成に。

Oktaトークンの更新

上記の例は、再認証にOpenVPNの認証トークンの代わりにOktaトークンを使用するように拡張できます。 OpenVPNの組み込みサポートがセットアップの大部分をカバーするため、この例は提供しません。

ただし、代わりにOktaを使用したい場合は、次の点に注意してください。

  • 認証トークンをプッシュするには、clientAllow関数の応答を変更する必要があります。
  • clientReauth関数を変更して、管理インターフェイスを介して渡されるクライアント環境からパスワードを取得し、Oktasのドキュメントに従ってこのトークンを更新してから、更新されたトークンを含むclientAllowと同様のclient-auth応答を送信する必要があります。
  • reneg-secがOktaトークンの有効期限よりも短くなるように、サーバーとクライアントの構成を変更する必要があります

OpenVPN
  1. Ubuntu22.04でOpenVPNサーバーをセットアップおよび構成する方法

  2. Dockerを使用してOpenVPNサーバーをインストールしてホストする方法

  3. OpenVPNサーバーFreeBSD12のインストールと設定

  1. ObfsproxyとViscosityを使用した難読化サーバーのセットアップ

  2. CentOSとViscosityを使用したOpenVPNサーバーのセットアップ

  3. DD-WRTとViscosityを使用したOpenVPNサーバーのセットアップ

  1. NetgearとViscosityを使用したOpenVPNサーバーのセットアップ

  2. OPNsenseとViscosityを使用したOpenVPNサーバーのセットアップ

  3. pfSenseとViscosityを使用したOpenVPNサーバーのセットアップ